blob: 0b959a04d8079abeff814af84da693af20077eef [file] [log] [blame]
/**
* Copyright (c) 2011, 2012 Mia-Software.
*
* All rights reserved. This program and the accompanying materials
* are 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:
* Nicolas Guyomar (Mia-Software) - Bug 349546 - EMF Facet facetSet editor
* Alban Ménager (Soft-Maint) - Bug 387470 - [EFacet][Custom] Editors
* Grégoire Dupé (Mia-Software) - Bug 387470 - [EFacet][Custom] Editors
*/
package org.eclipse.emf.facet.util.emf.ui.internal.exported.util.wizard;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.ETypedElement;
import org.eclipse.emf.facet.util.core.DebugUtils;
import org.eclipse.emf.facet.util.emf.ui.internal.Activator;
import org.eclipse.emf.facet.util.emf.ui.internal.Messages;
import org.eclipse.emf.facet.util.emf.ui.internal.exported.util.wizard.page.SelectEClassifierWizardPage;
import org.eclipse.emf.facet.util.emf.ui.internal.exported.util.wizard.page.SelectEPackageWizardPage;
import org.eclipse.emf.facet.util.emf.ui.internal.exported.util.wizard.page.SynchronizedSelectEClassifierWizardPage;
import org.eclipse.emf.facet.util.emf.ui.internal.exported.util.wizard.page.SynchronizedSelectEPackageWizardPage;
import org.eclipse.emf.facet.util.emf.ui.internal.exported.wizard.ISelectETypeWizard;
import org.eclipse.emf.facet.util.emf.ui.internal.exported.wizard.page.ISelectEClassifierWizardPage;
import org.eclipse.emf.facet.util.emf.ui.internal.exported.wizard.page.ISelectEPackageWizardPage;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
/**
* @since 0.3
*/
public class SelectETypeWizardImpl<T extends EClassifier> extends Wizard
implements ISelectETypeWizard<T> {
private static final boolean DEBUG = DebugUtils.getDebugStatus(Activator
.getDefault());
private final WizardDialog dialog;
private final ISelectEPackageWizardPage ePackageWP;
private final ISelectEClassifierWizardPage<T> eClassifierWP;
private T eClassifier;
public SelectETypeWizardImpl(final Class<? extends T> eTypeOption,
final EPackage ePackage) {
super();
this.dialog = new WizardDialog(new Shell(Display.getDefault()),
this);
this.ePackageWP = new SelectEPackageWizardPage();
this.eClassifierWP = new SelectEClassifierWizardPage<T>(eTypeOption,
ePackage);
if (eTypeOption == EClass.class) {
setWindowTitle(Messages.Select_EClass);
} else if (eTypeOption == EDataType.class) {
setWindowTitle(Messages.Select_EDataType);
} else if (eTypeOption == EClassifier.class) {
setWindowTitle(Messages.Select_EClassifier);
} else if (eTypeOption == ETypedElement.class) {
setWindowTitle(Messages.Select_ETypedElement);
}
}
@Override
public void addPages() {
addPage(this.ePackageWP);
addPage(this.eClassifierWP);
}
public int open() {
int result = Window.CANCEL;
if (this.dialog != null) {
result = this.dialog.open();
}
return result;
}
@Override
public boolean performFinish() {
this.eClassifier = this.eClassifierWP.getSelectedEClassifier();
return true;
}
public T getSelectedEClassifier() {
return this.eClassifier;
}
public ISelectEClassifierWizardPage<T> getSelectEClassifierWizardPage() {
return this.eClassifierWP;
}
public ISelectEPackageWizardPage getSelectEPackageWizardPage() {
return this.ePackageWP;
}
public boolean finish() {
final boolean result = performFinish();
dispose();
setContainer(null);
this.dialog.close();
return result;
}
public IWizardPage getCurrentPage() {
return getSynchronizedPage(getContainer().getCurrentPage());
}
public IWizardPage next() {
DebugUtils.debug(SelectETypeWizardImpl.DEBUG);
final IWizardPage nextPage = getNextPage(getContainer()
.getCurrentPage());
this.dialog.showPage(nextPage);
return getSynchronizedPage(nextPage);
}
public IWizardPage previous() {
final IWizardPage previousPage = getPreviousPage(getContainer()
.getCurrentPage());
this.dialog.showPage(previousPage);
return getSynchronizedPage(previousPage);
}
private static IWizardPage getSynchronizedPage(final IWizardPage page) {
IWizardPage result = null;
if (page instanceof ISelectEClassifierWizardPage) {
result = new SynchronizedSelectEClassifierWizardPage(
(ISelectEClassifierWizardPage<?>) page,
Display.getDefault());
} else if (page instanceof ISelectEPackageWizardPage) {
result = new SynchronizedSelectEPackageWizardPage(
(ISelectEPackageWizardPage) page, Display.getDefault());
}
return result;
}
public void selectPackage(final String packageName) {
getSelectEPackageWizardPage().selectPackage(packageName);
}
public void selectEClassifier(final String eClassifierName) {
getSelectEClassifierWizardPage().selectEClassifier(eClassifierName);
}
}