package com.mobilesorcery.sdk.ui.internal.handlers;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.text.MessageFormat;
import java.util.ArrayList;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.HandlerUtil;
import com.mobilesorcery.sdk.core.IBuildConfiguration;
import com.mobilesorcery.sdk.core.IBuildSession;
import com.mobilesorcery.sdk.core.IBuildVariant;
import com.mobilesorcery.sdk.core.MoSyncBuildJob;
import com.mobilesorcery.sdk.core.MoSyncBuilder;
import com.mobilesorcery.sdk.core.MoSyncProject;
import com.mobilesorcery.sdk.profiles.IProfile;
import com.mobilesorcery.sdk.ui.MoSyncCommandHandler;
import com.mobilesorcery.sdk.ui.MosyncUIPlugin;
public class FinalizeProjectHandler extends MoSyncCommandHandler implements PropertyChangeListener {
private final static String TARGET_PROFILE_SCOPE = "current";
private final static String ALL_PROFILES_SCOPE = "all";
private final static String SELECTED_PROFILES_SCOPE = "selected";
public FinalizeProjectHandler() {
MosyncUIPlugin.getDefault().addListener(this);
}
@Override
public void dispose() {
MosyncUIPlugin.getDefault().removeListener(this);
}
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
String scope = event.getParameter("com.mobilesorcery.sdk.ui.finalize.scope");
MoSyncProject project = MosyncUIPlugin.getDefault().getCurrentlySelectedProject(HandlerUtil.getActiveWorkbenchWindow(event));
if (project == null) {
showNoProjectMessage(HandlerUtil.getActiveShell(event));
return null;
}
IProfile[] profilesToBuild = getProfilesToBuild(project, scope);
IBuildConfiguration cfg = project.getActiveBuildConfiguration();
ArrayList<IBuildVariant> variants = new ArrayList<IBuildVariant>();
for (IProfile profile : profilesToBuild) {
IBuildVariant variant = MoSyncBuilder.getVariant(project, profile, cfg);
variants.add(variant);
}
IBuildSession session = MoSyncBuilder.createFinalizerBuildSession(variants);
MoSyncBuildJob job = new MoSyncBuildJob(project, session);
job.schedule();
return null;
}
private void showNoProjectMessage(Shell activeShell) {
MessageDialog.openError(activeShell, "No project selected", "No project selected. To build, please select a project to build for.");
}
private IProfile[] getProfilesToBuild(MoSyncProject project, String scope) {
if (ALL_PROFILES_SCOPE.equals(scope)) {
return project.getFilteredProfiles();
}
// Default:
return new IProfile[] { project.getTargetProfile() };
}
@Override
public void propertyChange(PropertyChangeEvent event) {
if (event.getPropertyName() == MosyncUIPlugin.CURRENT_PROJECT_CHANGED) {
MoSyncProject project = MosyncUIPlugin.getDefault().getCurrentlySelectedProject(PlatformUI.getWorkbench().getActiveWorkbenchWindow());
setBaseEnabled(project != null);
}
}
}