package com.mobilesorcery.sdk.html5.ui; import java.io.IOException; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.ui.handlers.HandlerUtil; import com.mobilesorcery.sdk.core.MoSyncProject; import com.mobilesorcery.sdk.core.PropertyUtil; import com.mobilesorcery.sdk.core.build.BuildSequence; import com.mobilesorcery.sdk.core.build.BundleBuildStep; import com.mobilesorcery.sdk.core.build.IBuildStepFactory; import com.mobilesorcery.sdk.html5.HTML5DebugSupportBuildStep; import com.mobilesorcery.sdk.html5.HTML5DebugSupportBuildStepExtension; import com.mobilesorcery.sdk.html5.Html5Plugin; import com.mobilesorcery.sdk.ui.MoSyncCommandHandler; public class DebuggingEnableHandler extends MoSyncCommandHandler { public final static String ENABLE_ID = "com.mobilesorcery.sdk.html5.enable.debugger"; public final static String DISABLE_ID = "com.mobilesorcery.sdk.html5.disable.debugger"; @Override public Object execute(ExecutionEvent event) throws ExecutionException { boolean enable = ENABLE_ID.equals(event.getCommand().getId()); IProject project = (IProject) extractFirstResource( HandlerUtil.getCurrentSelection(event), IResource.PROJECT); MoSyncProject mosyncProject = MoSyncProject.create(project); try { if (enable) { BuildSequence seq = BuildSequence.getCached(mosyncProject); List<IBuildStepFactory> steps = seq.getBuildStepFactories(); List<IBuildStepFactory> newSteps = new ArrayList<IBuildStepFactory>(); newSteps.add(new HTML5DebugSupportBuildStep.Factory()); for (IBuildStepFactory step : steps) { if (!isLegacyHTML5BundleStep(step) && !step.getId().equals( HTML5DebugSupportBuildStepExtension.ID)) { newSteps.add(step); } } PropertyUtil.setBoolean(mosyncProject, Html5Plugin.JS_PROJECT_SUPPORT_PROP, true); seq.apply(newSteps); } Html5Plugin.getDefault().setJSODDEnabled(mosyncProject, enable); } catch (IOException e) { throw new ExecutionException(MessageFormat.format( "Could not enable debugging for project {0}. Reason: {1}", project.getName(), e.getMessage())); } return null; } private boolean isLegacyHTML5BundleStep(IBuildStepFactory step) { if (BundleBuildStep.ID.equals(step.getId())) { // Apply some heuristics. BundleBuildStep.Factory bundleStep = (BundleBuildStep.Factory) step; return "%current-project%/LocalFiles" .equals(bundleStep.getInFile()); } return false; } }