/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jbpm.gd.jpdl.wizard;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.internal.ui.*;
import org.eclipse.jdt.internal.ui.actions.*;
import org.eclipse.jdt.internal.ui.wizards.*;
import org.eclipse.jface.wizard.Wizard;
import org.jbpm.gd.jpdl.Logger;
/**
* @author au
*/
public class NewClassWizard extends Wizard {
protected NewTypeWizardAdapter adapter = null;
protected NewClassWizardPageEx mainPage;
public NewClassWizard() {
setDialogSettings(JavaPlugin.getDefault().getDialogSettings());
setWindowTitle(NewWizardMessages.NewClassCreationWizard_title);
setDefaultPageImageDescriptor(JavaPluginImages.DESC_WIZBAN_NEWCLASS);
}
public void setAdapter(NewTypeWizardAdapter adapter) {
this.adapter = adapter;
}
public NewClassWizard(NewTypeWizardAdapter adapter) {
this();
setAdapter(adapter);
}
public void addPages() {
mainPage = new NewClassWizardPageEx();
addPage(mainPage);
if (adapter!=null) mainPage.init(adapter);
}
/**
* @return
*/
public String getClassName() {
return this.mainPage.getTypeName();
}
public String getQualifiedClassName() {
String c = mainPage.getTypeName();
String p = mainPage.getPackageText();
if(p != null && p.length() > 0) c = p + "." + c; //$NON-NLS-1$
return c;
}
protected void finishPage(IProgressMonitor monitor) throws InterruptedException, CoreException {
mainPage.createType(monitor); // use the full progress monitor
}
protected boolean canRunForked() {
return true;
}
protected ISchedulingRule getSchedulingRule() {
return ResourcesPlugin.getWorkspace().getRoot(); // look all by default
}
public boolean performFinish() {
IWorkspaceRunnable op= new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException, OperationCanceledException {
try {
finishPage(monitor);
} catch (InterruptedException e) {
throw new OperationCanceledException(e.getMessage());
}
}
};
try {
getContainer().run(canRunForked(), true, new WorkbenchRunnableAdapter(op, getSchedulingRule()));
} catch (InvocationTargetException e) {
Logger.logError(e);
return false;
} catch (InterruptedException e) {
return false;
}
return true;
}
}