package com.mobilesorcery.sdk.extensionsupport;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
import com.mobilesorcery.sdk.core.MoSyncBuilder;
import com.mobilesorcery.sdk.core.MoSyncProject;
import com.mobilesorcery.sdk.core.build.BuildSequence;
import com.mobilesorcery.sdk.core.build.IBuildStepFactory;
import com.mobilesorcery.sdk.core.build.PackBuildStep;
import com.mobilesorcery.sdk.core.build.ResourceBuildStep;
import com.mobilesorcery.sdk.extensionsupport.ExtensionSupportBuildStep.Factory;
/**
* The activator class controls the plug-in life cycle
*/
public class ExtensionSupportPlugin extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "com.mobilesorcery.sdk.extensionsupport"; //$NON-NLS-1$
private static final String EXT_PROP_PREFIX = MoSyncBuilder.BUILD_PREFS_PREFIX + "extensions.";
public static final String PREFIX_PROP = EXT_PROP_PREFIX + "prefix";
public static final String USE_CUSTOM_PREFIX_PROP = PREFIX_PROP + ".default";
public static final String GENERATE_JS_PROP = EXT_PROP_PREFIX + "js";
public static final String SUPPORTED_PLATFORMS_PROP = EXT_PROP_PREFIX + "platforms";
public static final String EXTENSIONS_CAPABILITY = "Extensions";
// The shared instance
private static ExtensionSupportPlugin plugin;
/**
* The constructor
*/
public ExtensionSupportPlugin() {
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static ExtensionSupportPlugin getDefault() {
return plugin;
}
public void addExtensionBuildsteps(MoSyncProject project) throws CoreException {
try {
BuildSequence sequence = new BuildSequence(project);
List<IBuildStepFactory> factories = sequence
.getBuildStepFactories();
ArrayList<IBuildStepFactory> newFactories = new ArrayList<IBuildStepFactory>();
Factory idlStep = new ExtensionSupportBuildStep.Factory();
idlStep.setPhase(ExtensionSupportBuildStep.IDL_PHASE);
Factory packStep = new ExtensionSupportBuildStep.Factory();
packStep.setPhase(ExtensionSupportBuildStep.PACK_PHASE);
newFactories.add(idlStep);
for (IBuildStepFactory factory : factories) {
newFactories.add(factory);
if (PackBuildStep.ID.equals(factory.getId())) {
newFactories.add(packStep);
}
}
sequence.apply(newFactories);
} catch (Exception e) {
throw new CoreException(new Status(IStatus.ERROR, PLUGIN_ID,
"Could not create Extension project", e));
}
}
}