package net.enilink.komma.edit.ui.rcp.internal.editor; import net.enilink.komma.common.ui.ViewerPane; import net.enilink.komma.common.util.IResourceLocator; import net.enilink.komma.core.KommaModule; import net.enilink.komma.core.URIs; import net.enilink.komma.edit.ui.celleditor.AdapterFactoryTreeEditor; import net.enilink.komma.edit.ui.editor.IPropertySheetPageSupport; import net.enilink.komma.edit.ui.editor.KommaMultiPageEditor; import net.enilink.komma.edit.ui.editor.KommaMultiPageEditorSupport; import net.enilink.komma.edit.ui.provider.AdapterFactoryContentProvider; import net.enilink.komma.edit.ui.provider.AdapterFactoryLabelProvider; import net.enilink.komma.edit.ui.rcp.KommaEditUIRCP; import net.enilink.komma.edit.ui.rcp.editor.TabbedPropertySheetPageSupport; import net.enilink.komma.edit.ui.views.IViewerMenuSupport; import net.enilink.komma.model.IModel; import net.enilink.komma.model.IModelSet; import net.enilink.komma.model.IModelSetFactory; import net.enilink.komma.model.MODELS; import net.enilink.komma.model.ModelPlugin; import net.enilink.komma.model.ModelSetModule; import net.enilink.komma.workbench.IProjectModelSet; import net.enilink.komma.workbench.ProjectModelSetSupport; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ControlAdapter; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.IFileEditorInput; import com.google.inject.Guice; /** * This is an example of a basic model editor. * */ public class BasicEditor extends KommaMultiPageEditor implements IViewerMenuSupport { /** * This is the viewer that shadows the selection in the content outline. The * parent relation must be correctly defined for this to work. * */ protected TreeViewer selectionViewer; /** * This creates a model editor. */ public BasicEditor() { super(); } @Override protected KommaMultiPageEditorSupport<? extends KommaMultiPageEditor> createEditorSupport() { return new KommaMultiPageEditorSupport<BasicEditor>(this) { @Override protected IResourceLocator getResourceLocator() { return KommaEditUIRCP.INSTANCE; } protected IModelSet createModelSet() { KommaModule module = ModelPlugin .createModelSetModule(getClass().getClassLoader()); module.addConcept(IProjectModelSet.class); module.addBehaviour(ProjectModelSetSupport.class); IModelSetFactory factory = Guice.createInjector( new ModelSetModule(module)).getInstance( IModelSetFactory.class); IModelSet modelSet = factory .createModelSet( URIs.createURI(MODELS.NAMESPACE + // "MemoryModelSet" // "OwlimModelSet" // ), URIs.createURI(MODELS.NAMESPACE + "ProjectModelSet")); if (modelSet instanceof IProjectModelSet && getEditorInput() instanceof IFileEditorInput) { ((IProjectModelSet) modelSet) .setProject(((IFileEditorInput) getEditorInput()) .getFile().getProject()); } return modelSet; } @Override protected IPropertySheetPageSupport createPropertySheetPageSupport() { return new TabbedPropertySheetPageSupport(); } }; } /** * This is the method used by the framework to install your own controls. // */ @Override public void createPages() { // Creates the model from the editor input getEditorSupport().createModel(); // Only creates the other pages if there is something that can be edited if (!getEditingDomain().getModelSet().getModels().isEmpty()) { // Create a page for the selection tree view. { ViewerPane viewerPane = new ViewerPane(getSite().getPage(), BasicEditor.this) { @Override public Viewer createViewer(Composite composite) { Tree tree = new Tree(composite, SWT.MULTI); TreeViewer newTreeViewer = new TreeViewer(tree); return newTreeViewer; } @Override public void requestActivation() { super.requestActivation(); getEditorSupport().setSelectionProvider(getViewer()); } }; viewerPane.createControl(getContainer()); selectionViewer = (TreeViewer) viewerPane.getViewer(); selectionViewer .setContentProvider(new AdapterFactoryContentProvider( getEditorSupport().getAdapterFactory())); selectionViewer .setLabelProvider(new AdapterFactoryLabelProvider( getEditorSupport().getAdapterFactory())); selectionViewer.setInput(getEditorSupport().getEditingDomain() .getModelSet()); selectionViewer.setSelection(new StructuredSelection( getEditorSupport().getEditingDomain().getModelSet() .getModels().iterator().next()), true); viewerPane.setTitle(getEditorSupport().getEditingDomain() .getModelSet()); new AdapterFactoryTreeEditor(selectionViewer.getTree(), getEditorSupport().getAdapterFactory()); getEditorSupport().createContextMenuFor(selectionViewer); int pageIndex = addPage(viewerPane.getControl()); setPageText(pageIndex, getEditorSupport().getString("_UI_SelectionPage_label")); } getSite().getShell().getDisplay().asyncExec(new Runnable() { public void run() { setActivePage(0); } }); } // Ensures that this editor will only display the page's tab // area if there are more than one page getContainer().addControlListener(new ControlAdapter() { boolean guard = false; @Override public void controlResized(ControlEvent event) { if (!guard) { guard = true; getEditorSupport().hideTabs(); guard = false; } } }); getSite().getShell().getDisplay().asyncExec(new Runnable() { public void run() { getEditorSupport().updateProblemIndication(); } }); } @Override public void createContextMenuFor(StructuredViewer viewer) { getEditorSupport().createContextMenuFor(viewer); } @Override public Object getAdapter(Class key) { if (key == IModel.class) { return getEditorSupport().getModel(); } return super.getAdapter(key); } }