package net.enilink.komma.edit.ui.editor; import java.util.Arrays; import java.util.List; import net.enilink.komma.common.adapter.IAdapterFactory; import net.enilink.komma.core.IReference; import net.enilink.komma.core.URI; import net.enilink.komma.core.URIs; import net.enilink.komma.edit.command.IInputCallback; import net.enilink.komma.edit.ui.provider.AdapterFactoryContentProvider; import net.enilink.komma.edit.ui.provider.AdapterFactoryLabelProvider; import net.enilink.komma.edit.ui.wizards.NewObjectWizard; import net.enilink.komma.em.concepts.IClass; import net.enilink.komma.model.IModel; import net.enilink.vocab.owl.OWL; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.window.Window; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.widgets.Display; import com.google.inject.Inject; public class InputCallbackDialog implements IInputCallback { final static URI NAME_INPUT = URIs.createURI("input:name"); final static URI TYPE_INPUT = URIs.createURI("input:type"); protected IAdapterFactory adapterFactory; protected URI parentType; protected boolean nameRequired; protected URI name; protected List<Object> types; @Inject public InputCallbackDialog(IAdapterFactory adapterFactory) { this.adapterFactory = adapterFactory; } @Override public boolean ask(IModel model) { Object treeInput = null; ILabelProvider labelProvider = null; ITreeContentProvider treeContentProvider = null; if (parentType != null) { treeInput = model.getManager().find(parentType, IClass.class); treeContentProvider = new AdapterFactoryContentProvider( adapterFactory); labelProvider = new AdapterFactoryLabelProvider(adapterFactory); } NewObjectWizard newWizard = new NewObjectWizard(model, treeInput, labelProvider, treeContentProvider) { @Override public boolean performFinish() { if (showTypePage()) { types = Arrays.asList(getObjectTypes()); } if (showNamePage()) { name = getObjectName(); } return true; } @Override protected boolean showNamePage() { return nameRequired; } }; WizardDialog wizardDialog = new WizardDialog(Display.getCurrent() .getActiveShell(), newWizard); return wizardDialog.open() == Window.OK; } @Override public Object get(URI inputType) { if (NAME_INPUT.equals(inputType)) { return name; } else if (TYPE_INPUT.equals(inputType)) { return types; } return null; } @Override public IInputCallback require(URI inputType, Object... parameters) { if (NAME_INPUT.equals(inputType)) { nameRequired = true; } else if (TYPE_INPUT.equals(inputType)) { if (parameters.length > 0 && parameters[0] instanceof IReference) { parentType = ((IReference) parameters[0]).getURI(); } if (parentType == null) { parentType = OWL.TYPE_THING; } } return this; } }