Skip to content
Snippets Groups Projects
Commit f868baef authored by Florian Hölzl's avatar Florian Hölzl
Browse files

moved from org.unicase to org.eclipse.emf.emfstore, org.eclipse.emf.ecp

parent 614bf90b
No related branches found
No related tags found
No related merge requests found
...@@ -17,24 +17,15 @@ $Id$ ...@@ -17,24 +17,15 @@ $Id$
+--------------------------------------------------------------------------*/ +--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.internal; 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.command.BasicCommandStack;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.command.ChangeCommand; import org.eclipse.emf.emfstore.client.model.Configuration;
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.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; import org.fortiss.tooling.kernel.services.ICommandStackService;
/** /**
* This class implements the {@link ICommandStackService} interface. We have to * This class implements the {@link ICommandStackService} interface.
* mimic the command stack behavior, because EMFStore does not support redo of
* commands. Once this capability is available, this service class could be
* simplified.
* *
* @author hoelzl * @author hoelzl
* @author $Author$ * @author $Author$
...@@ -43,100 +34,52 @@ import org.fortiss.tooling.kernel.services.ICommandStackService; ...@@ -43,100 +34,52 @@ import org.fortiss.tooling.kernel.services.ICommandStackService;
*/ */
public class CommandStackService implements ICommandStackService { public class CommandStackService implements ICommandStackService {
/** Stores the workspace listener. */ /** Stores the EMFStore command stack. */
private AdapterImpl workspaceListener; private BasicCommandStack globalCommandStack;
/** Stores the EmfStore workspace. */
private Workspace workspace;
/** Stores the project command stacks. */
private Map<Project, BasicCommandStack> commandStackMap = new HashMap<Project, BasicCommandStack>();
/** Constructor. */ /** Constructor. */
public CommandStackService() { public CommandStackService() {
workspace = WorkspaceManager.getInstance().getCurrentWorkspace(); // make sure workspace is initialized
// before fetching command stack
WorkspaceManager.getInstance().getCurrentWorkspace();
globalCommandStack = (BasicCommandStack) Configuration
.getEditingDomain().getCommandStack();
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public void runAsCommand(EObject target, final Runnable runner) { public void runAsCommand(EObject target, final Runnable runner) {
ChangeCommand chgCommand = new ChangeCommand(target) { EMFStoreCommand command = new EMFStoreCommand() {
@Override @Override
protected void doExecute() { protected void doRun() {
runner.run(); runner.run();
} }
}; };
// commandStackMap.get(ProjectRootElementUtils.getECPProject(target)) globalCommandStack.execute(command);
// .execute(chgCommand);
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public boolean canUndo(EObject target) { public boolean canUndo(EObject target) {
return false; return globalCommandStack.canUndo();
// return commandStackMap.get(
// ProjectRootElementUtils.getECPProject(target)).canUndo();
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public boolean canRedo(EObject target) { public boolean canRedo(EObject target) {
return false; return globalCommandStack.canRedo();
// return commandStackMap.get(
// ProjectRootElementUtils.getECPProject(target)).canRedo();
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public void undo(EObject target) { public void undo(EObject target) {
// commandStackMap.get(ProjectRootElementUtils.getECPProject(target)) globalCommandStack.undo();
// .undo();
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public void redo(EObject target) { public void redo(EObject target) {
// commandStackMap.get(ProjectRootElementUtils.getECPProject(target)) globalCommandStack.redo();
// .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);
} }
} }
...@@ -59,7 +59,7 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider { ...@@ -59,7 +59,7 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public Object getParent(Object element) { public Object getParent(Object element) {
if (element instanceof EObject) { if (element instanceof EObject && !(element instanceof Workspace)) {
return ((EObject) element).eContainer(); return ((EObject) element).eContainer();
} }
return null; return null;
......
...@@ -30,6 +30,8 @@ import org.eclipse.emf.emfstore.client.model.ModelPackage; ...@@ -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.ProjectSpace;
import org.eclipse.emf.emfstore.client.model.Workspace; import org.eclipse.emf.emfstore.client.model.Workspace;
import org.eclipse.emf.emfstore.client.model.WorkspaceManager; 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.IContributionItem;
import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.DecoratingLabelProvider;
...@@ -80,6 +82,9 @@ public final class NavigatorViewPart extends ViewPart implements ...@@ -80,6 +82,9 @@ public final class NavigatorViewPart extends ViewPart implements
/** Stores the workspace listener. */ /** Stores the workspace listener. */
private AdapterImpl workspaceListener; private AdapterImpl workspaceListener;
/** Stores the project listener. */
private ProjectChangeObserver projectListener;
/** Stores the menu manager. */ /** Stores the menu manager. */
private MenuManager menuManager; private MenuManager menuManager;
...@@ -97,11 +102,44 @@ public final class NavigatorViewPart extends ViewPart implements ...@@ -97,11 +102,44 @@ public final class NavigatorViewPart extends ViewPart implements
workspace = WorkspaceManager.getInstance().getCurrentWorkspace(); workspace = WorkspaceManager.getInstance().getCurrentWorkspace();
createWorkspaceListener(); createWorkspaceListener();
createProjectListener();
((NavigatorService) INavigatorService.INSTANCE) ((NavigatorService) INavigatorService.INSTANCE)
.setNavigatorViewPart(this); .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. */ /** Creates the workspace listener. */
private void createWorkspaceListener() { private void createWorkspaceListener() {
workspaceListener = new AdapterImpl() { workspaceListener = new AdapterImpl() {
...@@ -113,13 +151,15 @@ public final class NavigatorViewPart extends ViewPart implements ...@@ -113,13 +151,15 @@ public final class NavigatorViewPart extends ViewPart implements
.isInstance(msg.getNewValue())) { .isInstance(msg.getNewValue())) {
ProjectSpace projectSpace = (ProjectSpace) msg ProjectSpace projectSpace = (ProjectSpace) msg
.getNewValue(); .getNewValue();
// projectSpace.addECPProjectListener(projectListener); projectSpace.getProject().addProjectChangeObserver(
projectListener);
} else if (msg.getEventType() == Notification.REMOVE } else if (msg.getEventType() == Notification.REMOVE
&& ModelPackage.eINSTANCE.getProjectSpace() && ModelPackage.eINSTANCE.getProjectSpace()
.isInstance(msg.getOldValue())) { .isInstance(msg.getOldValue())) {
ProjectSpace projectSpace = (ProjectSpace) msg ProjectSpace projectSpace = (ProjectSpace) msg
.getOldValue(); .getOldValue();
// projectSpace.removeECPProjectListener(projectListener); projectSpace.getProject().removeProjectChangeObserver(
projectListener);
} }
updateUI.schedule(); updateUI.schedule();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment