diff --git a/org.fortiss.tooling.kernel/trunk/META-INF/MANIFEST.MF b/org.fortiss.tooling.kernel/trunk/META-INF/MANIFEST.MF index add63a01ae79574b79cd5098f112d00ee0fe11cd..0aa3a2b2b2d253bcc66a52f521833dbe3a441664 100644 --- a/org.fortiss.tooling.kernel/trunk/META-INF/MANIFEST.MF +++ b/org.fortiss.tooling.kernel/trunk/META-INF/MANIFEST.MF @@ -13,7 +13,8 @@ Require-Bundle: org.eclipse.ui;visibility:=reexport, org.conqat.ide.commons.ui;bundle-version="2.7.0";visibility:=reexport, org.unicase.workspace;bundle-version="1.0.0", org.unicase.ecp.model;bundle-version="1.0.0", - org.unicase.ecpemfstorebridge;bundle-version="1.0.0" + org.unicase.ecpemfstorebridge;bundle-version="1.0.0", + org.unicase.ui.common;bundle-version="1.0.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-ActivationPolicy: lazy Export-Package: org.fortiss.tooling.kernel, diff --git a/org.fortiss.tooling.kernel/trunk/plugin.xml b/org.fortiss.tooling.kernel/trunk/plugin.xml index 3581f753cfb4afe38c821c48e0d2fa3051bd10f8..1e7a37459d194d4cd1a700cdb99a2cc3aed760d8 100644 --- a/org.fortiss.tooling.kernel/trunk/plugin.xml +++ b/org.fortiss.tooling.kernel/trunk/plugin.xml @@ -24,16 +24,48 @@ <extension point="org.fortiss.tooling.kernel.modelElementHandler"> <modelElementHandler - handler="org.fortiss.tooling.kernel.internal.handler.EMFStoreECPProjectModelElementHandler" - modelElementClass="org.unicase.ecpemfstorebridge.EMFStoreECPProject"> + handler="org.fortiss.tooling.kernel.internal.handler.ProjectSpaceModelElementHandler" + modelElementClass="org.unicase.workspace.ProjectSpace"> </modelElementHandler> </extension> <extension point="org.fortiss.tooling.kernel.modelElementCompositor"> <modelElementCompositor - compositor="org.fortiss.tooling.kernel.internal.compose.EMFStoreECPProjectCompositor" - modelElementClass="org.unicase.ecpemfstorebridge.EMFStoreECPProject"> + compositor="org.fortiss.tooling.kernel.internal.compose.ProjectSpaceCompositor" + modelElementClass="org.unicase.workspace.ProjectSpace"> </modelElementCompositor> </extension> + <extension + point="org.eclipse.ui.menus"> + + <menuContribution + allPopups="false" + locationURI="popup:org.fortiss.tooling.kernel.model.navigator?before=repository"> + <menu + icon="icons/add.png" + id="org.fortiss.tooling.kernel.model.navigator.newmenu" + label="New..."> + <visibleWhen + checkEnabled="false"> + <with + variable="activeMenuSelection"> + <iterate> + <adapt + type="org.eclipse.emf.ecore.EObject"> + </adapt> + </iterate> + </with> + </visibleWhen> + </menu> + </menuContribution> + <menuContribution + allPopups="false" + locationURI="popup:org.fortiss.tooling.kernel.model.navigator.newmenu"> + <dynamic + class="org.fortiss.tooling.kernel.internal.navigator.NewMenu" + id="org.fortiss.tooling.kernel.model.navigator.newmenu.content"> + </dynamic> + </menuContribution> + </extension> </plugin> diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/CommandStackService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/CommandStackService.java index 2b2d2b88147b9ec27cef5cab33502fbe229b1695..01b057fcc769b40cb9186f3fdad9f95726222a1b 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/CommandStackService.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/CommandStackService.java @@ -17,7 +17,12 @@ $Id$ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.internal; +import org.eclipse.emf.ecore.EObject; import org.fortiss.tooling.kernel.services.ICommandStackService; +import org.unicase.ecp.model.ECPWorkspaceManager; +import org.unicase.ecp.model.NoWorkspaceException; +import org.unicase.ecp.model.workSpaceModel.ECPProject; +import org.unicase.ui.common.commands.ECPCommand; /** * This class implements the {@link ICommandStackService} interface. @@ -29,4 +34,22 @@ import org.fortiss.tooling.kernel.services.ICommandStackService; */ public class CommandStackService implements ICommandStackService { + /** {@inheritDoc} */ + @Override + public void runAsCommand(final EObject target, final Runnable runner) { + ECPProject project; + try { + project = ECPWorkspaceManager.getInstance().getWorkSpace() + .getProject(target); + } catch (NoWorkspaceException e) { + return; + } + new ECPCommand(project.getRootObject()) { + + @Override + protected void doRun() { + runner.run(); + } + }.run(false); + } } diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/compose/EMFStoreECPProjectCompositor.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/compose/ProjectSpaceCompositor.java similarity index 84% rename from org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/compose/EMFStoreECPProjectCompositor.java rename to org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/compose/ProjectSpaceCompositor.java index 77591a0888c9822c8e553ab7a8d027493d35fcb1..f65943700143afdee2589042d0966ec02f1d8222 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/compose/EMFStoreECPProjectCompositor.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/compose/ProjectSpaceCompositor.java @@ -21,7 +21,7 @@ import org.eclipse.emf.ecore.EObject; import org.fortiss.tooling.kernel.interfaces.ICompositionContext; import org.fortiss.tooling.kernel.interfaces.ICompositor; import org.fortiss.tooling.kernel.model.IProjectRootElement; -import org.unicase.ecpemfstorebridge.EMFStoreECPProject; +import org.unicase.workspace.ProjectSpace; /** * {@link ICompositor} implementation for the {@link IProjectRootElement}s. @@ -31,21 +31,20 @@ import org.unicase.ecpemfstorebridge.EMFStoreECPProject; * @version $Rev$ * @levd.rating RED Rev: */ -public final class EMFStoreECPProjectCompositor implements - ICompositor<EMFStoreECPProject> { +public final class ProjectSpaceCompositor implements ICompositor<ProjectSpace> { /** {@inheritDoc} */ @Override - public boolean canCompose(EMFStoreECPProject container, EObject contained, + public boolean canCompose(ProjectSpace container, EObject contained, ICompositionContext context) { return contained instanceof IProjectRootElement; } /** {@inheritDoc} */ @Override - public boolean compose(EMFStoreECPProject container, EObject contained, + public boolean compose(ProjectSpace container, EObject contained, ICompositionContext context) { - container.addModelElementToRoot(contained); + container.getProject().addModelElement(contained); return true; } } diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/handler/EMFStoreECPProjectModelElementHandler.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/handler/ProjectSpaceModelElementHandler.java similarity index 69% rename from org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/handler/EMFStoreECPProjectModelElementHandler.java rename to org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/handler/ProjectSpaceModelElementHandler.java index ad3c2307afd0b7f7a9d0ac77519351acbab15b6a..446b25f8463e89a3958047a9f9d98fc48252c900 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/handler/EMFStoreECPProjectModelElementHandler.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/handler/ProjectSpaceModelElementHandler.java @@ -26,37 +26,29 @@ import org.fortiss.tooling.kernel.ToolingKernelActivator; import org.fortiss.tooling.kernel.base.ModelElementHandlerBase; import org.fortiss.tooling.kernel.interfaces.IModelElementHandler; import org.fortiss.tooling.kernel.model.IProjectRootElement; -import org.unicase.ecp.model.workSpaceModel.ECPProject; -import org.unicase.ecpemfstorebridge.EMFStoreECPProject; import org.unicase.workspace.ProjectSpace; /** - * {@link IModelElementHandler} for {@link ECPProject}s. + * {@link IModelElementHandler} for {@link ProjectSpace}s. * * @author hoelzlf * @author $Author$ * @version $Rev$ * @levd.rating RED Rev: */ -public final class EMFStoreECPProjectModelElementHandler extends - ModelElementHandlerBase<EMFStoreECPProject> { +public final class ProjectSpaceModelElementHandler extends + ModelElementHandlerBase<ProjectSpace> { /** {@inheritDoc} */ @Override - public String getName(EMFStoreECPProject element) { - ProjectSpace projectSpace = (ProjectSpace) element.getRootObject(); - String projectName = projectSpace.getProjectName(); - String baseRevision = " @" - + projectSpace.getBaseVersion().getIdentifier(); - String username = projectSpace.getUsersession().getUsername(); - return projectName + baseRevision + " (" + username + ")"; + public String getName(ProjectSpace element) { + return element.getProjectName(); } /** {@inheritDoc} */ @Override - public String getDescription(EMFStoreECPProject element) { - ProjectSpace projectSpace = (ProjectSpace) element.getRootObject(); - return projectSpace.getProjectDescription(); + public String getDescription(ProjectSpace element) { + return element.getProjectDescription(); } /** {@inheritDoc} */ @@ -67,9 +59,9 @@ public final class EMFStoreECPProjectModelElementHandler extends /** {@inheritDoc} */ @Override - public List<EObject> getSubnodes(EMFStoreECPProject element) { + public List<EObject> getSubnodes(ProjectSpace element) { List<EObject> list = new ArrayList<EObject>(); - for (EObject node : element.getAllModelElements()) { + for (EObject node : element.getProject().getModelElements()) { if (node instanceof IProjectRootElement) { list.add(node); } diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorTreeContentProvider.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorTreeContentProvider.java index fbe50590fafeb0b377906cf62e9ac5ed959d2dd6..cd166b31719704f21137c08b98b176ede0cad7b5 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorTreeContentProvider.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorTreeContentProvider.java @@ -17,11 +17,15 @@ $Id$ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.internal.navigator; +import java.util.ArrayList; + +import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; import org.fortiss.tooling.kernel.interfaces.IModelElementHandler; import org.fortiss.tooling.kernel.services.IModelElementService; +import org.unicase.ecp.model.workSpaceModel.ECPProject; import org.unicase.ecp.model.workSpaceModel.ECPWorkspace; /** @@ -38,7 +42,13 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider { @Override public Object[] getElements(Object inputElement) { if (inputElement instanceof ECPWorkspace) { - return ((ECPWorkspace) inputElement).getProjects().toArray(); + ArrayList<EObject> ret = new ArrayList<EObject>(); + EList<ECPProject> projects = ((ECPWorkspace) inputElement) + .getProjects(); + for (ECPProject ecpProject : projects) { + ret.add(ecpProject.getRootObject()); + } + return ret.toArray(); } return null; } diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorViewPart.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorViewPart.java index 362ba00a372adcfafba61a20ea90b6bde0bbf926..01aaabf289cdbd9f4337687278d749a5c8c9d68d 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorViewPart.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NavigatorViewPart.java @@ -77,6 +77,9 @@ public final class NavigatorViewPart extends ViewPart implements /** Stores the menu manager. */ private MenuManager menuManager; + /** Stores the new model element menu. */ + private NewMenu newMenu; + /** Constructor. */ public NavigatorViewPart() { try { @@ -186,13 +189,32 @@ public final class NavigatorViewPart extends ViewPart implements /** Creates the context menu. */ private void createContextMenu() { - menuManager = new MenuManager(); - - MenuManager newMenuManager = new MenuManager("New ...", - ToolingKernelActivator.getImageDescriptor("icons/add.png"), - NewMenu.MENU_ID); - newMenuManager.add(new NewMenu()); - menuManager.add(newMenuManager); + menuManager = new MenuManager("#PopupMenu"); + // menuManager.setRemoveAllWhenShown(true); + // IMenuListener listener = new IMenuListener() { + // @Override + // public void menuAboutToShow(IMenuManager m) { + // ISelection selection = PlatformUI.getWorkbench() + // .getActiveWorkbenchWindow().getSelectionService() + // .getSelection(); + // EObject selectedObject = EObjectSelectionUtils + // .getFirstElement(selection); + // + // IContextMenuService.INSTANCE.fillNavigatorContextMenu(m, + // selectedObject); + // } + // }; + // + // final MenuManager newMenuManager = new MenuManager("New ...", + // ToolingKernelActivator.getImageDescriptor("icons/add.png"), + // NewMenu.MENU_ID); + // // newMenuManager.setRemoveAllWhenShown(true); + // newMenu = new NewMenu(); + // newMenuManager.add(newMenu); + // + // menuManager.addMenuListener(listener); + + // menuManager.add(newMenuManager); Separator repositorySection = new Separator("repository"); repositorySection.setVisible(true); diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NewMenu.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NewMenu.java index 22f92967904b17931e9d3b60922dbb809532c2e2..d1cd7b88b2d007dddbd48848959700ad89ed5491 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NewMenu.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/navigator/NewMenu.java @@ -26,6 +26,7 @@ import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.CompoundContributionItem; import org.fortiss.tooling.kernel.interfaces.IPrototypeProvider; import org.fortiss.tooling.kernel.internal.util.EObjectSelectionUtils; +import org.fortiss.tooling.kernel.services.ICommandStackService; import org.fortiss.tooling.kernel.services.ICompositorService; import org.fortiss.tooling.kernel.services.IModelElementService; import org.fortiss.tooling.kernel.services.IPrototypeService; @@ -42,7 +43,7 @@ import org.fortiss.tooling.kernel.services.IPrototypeService.Prototype; public class NewMenu extends CompoundContributionItem { /** The menu id. */ - public static final String MENU_ID = "org.fortiss.tooling.kernel.newmenu"; + public static final String MENU_ID = "org.fortiss.tooling.kernel.navigator.newmenu"; /** List of available actions. */ private final List<AddPrototypeAction> actions = new ArrayList<AddPrototypeAction>(); @@ -98,10 +99,18 @@ public class NewMenu extends CompoundContributionItem { /** {@inheritDoc} */ @Override public void run() { - EObject newObject = prototype.getPrototypeCopy(); - if (ICompositorService.INSTANCE.compose(container, newObject, null)) { - // TODO (FH): open editor - } + ICommandStackService.INSTANCE.runAsCommand(container, + new Runnable() { + + @Override + public void run() { + EObject newObject = prototype.getPrototypeCopy(); + if (ICompositorService.INSTANCE.compose(container, + newObject, null)) { + // TODO (FH): open editor + } + } + }); } /** diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/services/ICommandStackService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/services/ICommandStackService.java index 6f1451f61349a02e4e841e62d0b84d4bd9174e4d..4301b8191702112fa2e3e72e419764e98c24eab9 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/services/ICommandStackService.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/services/ICommandStackService.java @@ -17,6 +17,7 @@ $Id$ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.services; +import org.eclipse.emf.ecore.EObject; import org.fortiss.tooling.kernel.internal.CommandStackService; /** @@ -33,5 +34,6 @@ public interface ICommandStackService { /** Returns the singleton instance of the service. */ public static final ICommandStackService INSTANCE = new CommandStackService(); - // TODO (FH): define + /** Runs the given Runnable within a emfStore transaction. */ + void runAsCommand(EObject target, Runnable runner); }