/** * */ package org.feature.multi.perspective.generator; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.feature.model.utilities.WorkbenchUtil; import org.feature.multi.perspective.generator.viewmodel.FeatureMappingGenerator; import org.feature.multi.perspective.generator.viewmodel.ViewModelGenerator; /** * default command handler for generating the cluste rmodel. * * @author <a href=mailto:info@juliaschroeter.de>Julia Schroeter</a> * */ public class GeneratorCommandHandler extends AbstractHandler { private GenerateProperties properties; private Job job; @Override public Object execute(ExecutionEvent event) throws ExecutionException { int result = showPropertiesDialog(); switch (result) { case 0: // ok pressed createJob(); break; case 1: // cancel pressed break; default: break; } return null; } private void createJob() { job = new Job("Generating Multi-Perspective Models") { protected IStatus run(IProgressMonitor monitor) { try { generateMultiPerspectiveModel(); if (monitor.isCanceled()) return Status.CANCEL_STATUS; return Status.OK_STATUS; } finally {} } }; job.addJobChangeListener(new JobChangeAdapter() { public void done(IJobChangeEvent event) { if (event.getResult().isOK()) postMessage("Generating Multi-Perspective Models completed successfully"); else postError("Generating Multi-Perspective Models did not complete successfully"); } private void postError(String msg) { Shell shell = WorkbenchUtil.getShell(); if (shell != null) { MessageBox msgBox = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR); msgBox.setMessage(msg); msgBox.open(); } } private void postMessage(String msg) { Shell shell = WorkbenchUtil.getShell(); if (shell != null) { MessageBox msgBox = new MessageBox(shell, SWT.OK | SWT.ICON_INFORMATION); msgBox.setMessage(msg); msgBox.open(); } } }); job.setSystem(true); job.schedule(); // start as soon as possible } private void generateMultiPerspectiveModel() { if (properties.isGenerateViewmodel()) { ViewModelGenerator generator = new ViewModelGenerator(); generator.generateViewModel(); } FeatureMappingGenerator fmGenerator = new FeatureMappingGenerator(); fmGenerator.generateMapping(properties); } private int showPropertiesDialog() { properties = new GenerateProperties(); GeneratePropertiesDialog dialog = new GeneratePropertiesDialog(properties, null, "Generate Multi-Perspective Model", null, "Please Specify Generate Properties", MessageDialog.CONFIRM, new String[] { "Ok", "Cancel" }, 0); int result = dialog.open(); return result; } @Override public void dispose() { if (job != null) { job.cancel(); } super.dispose(); } }