From f868baefcc488ece91a9295a362cf114e52fc73c Mon Sep 17 00:00:00 2001 From: Florian Hoelzl <hoelzl@fortiss.org> Date: Wed, 6 Apr 2011 11:59:50 +0000 Subject: [PATCH] moved from org.unicase to org.eclipse.emf.emfstore, org.eclipse.emf.ecp --- .../kernel/internal/CommandStackService.java | 91 ++++--------------- .../NavigatorTreeContentProvider.java | 2 +- .../internal/navigator/NavigatorViewPart.java | 44 ++++++++- 3 files changed, 60 insertions(+), 77 deletions(-) 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 08ba85fbc..48a431e0a 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,24 +17,15 @@ $Id$ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.internal; -import java.util.HashMap; -import java.util.Map; - import org.eclipse.emf.common.command.BasicCommandStack; -import org.eclipse.emf.common.notify.impl.AdapterImpl; import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.edit.command.ChangeCommand; -import org.eclipse.emf.emfstore.client.model.ProjectSpace; -import org.eclipse.emf.emfstore.client.model.Workspace; +import org.eclipse.emf.emfstore.client.model.Configuration; import org.eclipse.emf.emfstore.client.model.WorkspaceManager; -import org.eclipse.emf.emfstore.common.model.Project; +import org.eclipse.emf.emfstore.client.model.util.EMFStoreCommand; import org.fortiss.tooling.kernel.services.ICommandStackService; /** - * This class implements the {@link ICommandStackService} interface. We have to - * mimic the command stack behavior, because EMFStore does not support redo of - * commands. Once this capability is available, this service class could be - * simplified. + * This class implements the {@link ICommandStackService} interface. * * @author hoelzl * @author $Author$ @@ -43,100 +34,52 @@ import org.fortiss.tooling.kernel.services.ICommandStackService; */ public class CommandStackService implements ICommandStackService { - /** Stores the workspace listener. */ - private AdapterImpl workspaceListener; - - /** Stores the EmfStore workspace. */ - private Workspace workspace; - - /** Stores the project command stacks. */ - private Map<Project, BasicCommandStack> commandStackMap = new HashMap<Project, BasicCommandStack>(); + /** Stores the EMFStore command stack. */ + private BasicCommandStack globalCommandStack; /** Constructor. */ public CommandStackService() { - workspace = WorkspaceManager.getInstance().getCurrentWorkspace(); + // make sure workspace is initialized + // before fetching command stack + WorkspaceManager.getInstance().getCurrentWorkspace(); + globalCommandStack = (BasicCommandStack) Configuration + .getEditingDomain().getCommandStack(); } /** {@inheritDoc} */ @Override public void runAsCommand(EObject target, final Runnable runner) { - ChangeCommand chgCommand = new ChangeCommand(target) { + EMFStoreCommand command = new EMFStoreCommand() { @Override - protected void doExecute() { + protected void doRun() { runner.run(); } }; - // commandStackMap.get(ProjectRootElementUtils.getECPProject(target)) - // .execute(chgCommand); + globalCommandStack.execute(command); } /** {@inheritDoc} */ @Override public boolean canUndo(EObject target) { - return false; - // return commandStackMap.get( - // ProjectRootElementUtils.getECPProject(target)).canUndo(); + return globalCommandStack.canUndo(); } /** {@inheritDoc} */ @Override public boolean canRedo(EObject target) { - return false; - // return commandStackMap.get( - // ProjectRootElementUtils.getECPProject(target)).canRedo(); + return globalCommandStack.canRedo(); } /** {@inheritDoc} */ @Override public void undo(EObject target) { - // commandStackMap.get(ProjectRootElementUtils.getECPProject(target)) - // .undo(); + globalCommandStack.undo(); } /** {@inheritDoc} */ @Override public void redo(EObject target) { - // commandStackMap.get(ProjectRootElementUtils.getECPProject(target)) - // .redo(); - } - - /** - * Creates the workspace listener, which adds the command stacks for the - * added projects. It also unregisters command stacks from removed projects. - */ - private void createWorkspaceListener() { - // workspaceListener = new AdapterImpl() { - // - // @Override - // public void notifyChanged(Notification msg) { - // if ((msg.getFeatureID(Workspace.class)) == - // WorkSpaceModelPackage.ECP_WORKSPACE__PROJECTS) { - // if (msg.getEventType() == Notification.ADD - // && WorkSpaceModelPackage.eINSTANCE.getECPProject() - // .isInstance(msg.getNewValue())) { - // addCommandStack((ECPProject) msg.getNewValue()); - // } else if (msg.getEventType() == Notification.REMOVE - // && WorkSpaceModelPackage.eINSTANCE.getECPProject() - // .isInstance(msg.getOldValue())) { - // removeCommandStack((ECPProject) msg.getOldValue()); - // } - // } - // super.notifyChanged(msg); - // } - // }; - } - - /** Adds the command stack for the given project space. */ - private void addCommandStack(ProjectSpace projectSpace) { - // BasicCommandStack cmdStack = (BasicCommandStack) - // projectSpace.getProject() - // .getEditingDomain().getCommandStack(); - // commandStackMap.put(project, cmdStack); - } - - /** Removes the command stack for the given project. */ - private void removeCommandStack(ProjectSpace project) { - // commandStackMap.remove(project); + globalCommandStack.redo(); } } 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 885ec05e5..b7ab04a74 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 @@ -59,7 +59,7 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider { /** {@inheritDoc} */ @Override public Object getParent(Object element) { - if (element instanceof EObject) { + if (element instanceof EObject && !(element instanceof Workspace)) { return ((EObject) element).eContainer(); } 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 bd4ecebf0..d51f4f11a 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 @@ -30,6 +30,8 @@ import org.eclipse.emf.emfstore.client.model.ModelPackage; import org.eclipse.emf.emfstore.client.model.ProjectSpace; import org.eclipse.emf.emfstore.client.model.Workspace; import org.eclipse.emf.emfstore.client.model.WorkspaceManager; +import org.eclipse.emf.emfstore.common.model.Project; +import org.eclipse.emf.emfstore.common.model.util.ProjectChangeObserver; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.viewers.DecoratingLabelProvider; @@ -80,6 +82,9 @@ public final class NavigatorViewPart extends ViewPart implements /** Stores the workspace listener. */ private AdapterImpl workspaceListener; + /** Stores the project listener. */ + private ProjectChangeObserver projectListener; + /** Stores the menu manager. */ private MenuManager menuManager; @@ -97,11 +102,44 @@ public final class NavigatorViewPart extends ViewPart implements workspace = WorkspaceManager.getInstance().getCurrentWorkspace(); createWorkspaceListener(); + createProjectListener(); ((NavigatorService) INavigatorService.INSTANCE) .setNavigatorViewPart(this); } + /** Creates the project listener. */ + private void createProjectListener() { + projectListener = new ProjectChangeObserver() { + + @Override + public void projectDeleted(Project project) { + updateUI.schedule(); + } + + @Override + public void notify(Notification notification, Project project, + EObject modelElement) { + updateUI.schedule(); + } + + @Override + public void modelElementRemoved(Project project, + EObject modelElement) { + updateUI.schedule(); + } + + @Override + public void modelElementAdded(Project project, EObject modelElement) { + updateUI.schedule(); + } + }; + + for (ProjectSpace projectSpace : workspace.getProjectSpaces()) { + projectSpace.getProject().addProjectChangeObserver(projectListener); + } + } + /** Creates the workspace listener. */ private void createWorkspaceListener() { workspaceListener = new AdapterImpl() { @@ -113,13 +151,15 @@ public final class NavigatorViewPart extends ViewPart implements .isInstance(msg.getNewValue())) { ProjectSpace projectSpace = (ProjectSpace) msg .getNewValue(); - // projectSpace.addECPProjectListener(projectListener); + projectSpace.getProject().addProjectChangeObserver( + projectListener); } else if (msg.getEventType() == Notification.REMOVE && ModelPackage.eINSTANCE.getProjectSpace() .isInstance(msg.getOldValue())) { ProjectSpace projectSpace = (ProjectSpace) msg .getOldValue(); - // projectSpace.removeECPProjectListener(projectListener); + projectSpace.getProject().removeProjectChangeObserver( + projectListener); } updateUI.schedule(); } -- GitLab