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$
+--------------------------------------------------------------------------*/
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();
}
}
......@@ -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;
......
......@@ -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();
}
......
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