package eu.geclipse.ui.internal.wizards; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.wizard.Wizard; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.internal.net.Activator; import eu.geclipse.core.config.ConfiguratorFactory; import eu.geclipse.core.config.IConfigurator; import eu.geclipse.core.reporting.ProblemException; import eu.geclipse.ui.dialogs.ProblemDialog; public class ConfigurationWizard extends Wizard { private ConfiguratorSelectionPage selectionPage; @Override public void addPages() { this.selectionPage = new ConfiguratorSelectionPage(); addPage( this.selectionPage ); } @Override public boolean canFinish() { return super.canFinish(); } @Override public String getWindowTitle() { return "g-Eclipse Easy Configuration"; } @Override public boolean performFinish() { boolean result = false; final IConfigurationElement[] selection = this.selectionPage.getSelection(); final Shell shell = getShell(); Job configurationJob = new Job( "g-Eclipse configuration" ) { @Override protected IStatus run( final IProgressMonitor monitor ) { MultiStatus status = new MultiStatus( Activator.PLUGIN_ID, 0, "Problems while configuring g-Eclipse", null ); SubMonitor sMonitor = SubMonitor.convert( monitor, "Configuring g-Eclipse", selection.length ); try { for ( IConfigurationElement element : selection ) { IConfigurator configurator = ConfiguratorFactory.createConfigurator( element ); sMonitor.setTaskName( "Configuring " + element.getAttribute( "name" ) ); IStatus stat = configurator.configure( sMonitor.newChild( 1 ) ); if ( ! stat.isOK() ) { status.merge( stat ); } if ( sMonitor.isCanceled() ) { throw new OperationCanceledException(); } } } catch( ProblemException pExc ) { ProblemDialog.openProblem( shell, "g-Eclipse configuration problem", "The configuration process could not be finished. It is possible that some parts are configured properly whereas others are not configured at all.", pExc ); } return ( status.getChildren() == null ) || ( status.getChildren().length == 0 ) ? Status.OK_STATUS : status; } }; configurationJob.setUser( true ); configurationJob.schedule(); return true; } }