From 401126fd703d7bf6216b39e87af86872389e9623 Mon Sep 17 00:00:00 2001 From: Florian Hoelzl <hoelzl@fortiss.org> Date: Tue, 15 Nov 2011 11:50:17 +0000 Subject: [PATCH] first try of project delete implementation refs 152 --- .../ui/internal/actions/DeleteAction.java | 63 ++++++++++++------- .../extension/data/ITopLevelElement.java | 9 +++ .../kernel/internal/DummyTopLevelElement.java | 18 +++++- .../storage/eclipse/ModelContext.java | 20 ++++++ 4 files changed, 85 insertions(+), 25 deletions(-) diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/actions/DeleteAction.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/actions/DeleteAction.java index e973a5b5f..cd84262c0 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/actions/DeleteAction.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/actions/DeleteAction.java @@ -21,6 +21,7 @@ import org.eclipse.emf.ecore.EObject; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.ActionFactory; +import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; import org.fortiss.tooling.kernel.service.ICommandStackService; import org.fortiss.tooling.kernel.service.IConnectionCompositorService; import org.fortiss.tooling.kernel.service.IElementCompositorService; @@ -39,7 +40,7 @@ import org.fortiss.tooling.kernel.ui.extension.base.EObjectActionBase; */ public class DeleteAction extends EObjectActionBase { - /** Flag for using element or connection compositor. */ + /** Flag for using element or connection composition service. */ private boolean useElementCompositor; /** Constructor. */ @@ -56,40 +57,54 @@ public class DeleteAction extends EObjectActionBase { setEnabled(false); return; } + setEnabled(computeEnabled(element)); + } + + /** {@inheritDoc} */ + @Override + public void run() { + if (getTarget() == null) { + return; + } + ICommandStackService.INSTANCE.runAsCommand(getTarget(), new Runnable() { + @Override + public void run() { + doDelete(); + } + }); + } - boolean enabled = false; + /** Computes enabled state of the delete action. */ + private boolean computeEnabled(EObject element) { if (!IPersistencyService.INSTANCE.isTopLevelElement(element)) { + // use composition services for deletion if (IElementCompositorService.INSTANCE.canDecompose(element)) { - enabled = true; useElementCompositor = true; + return true; } else if (IConnectionCompositorService.INSTANCE .canDisconnect(element)) { - enabled = true; useElementCompositor = false; + return true; } + return false; } - setEnabled(enabled); + // use top-level element deletion mechanism + ITopLevelElement topElement = IPersistencyService.INSTANCE + .getTopLevelElementFor(element); + return topElement.canDelete(); } - /** {@inheritDoc} */ - @Override - public void run() { - final EObject selectedObject = getTarget(); - if (selectedObject == null) { - return; + /** Executes the delete using the correct service. */ + private void doDelete() { + EObject target = getTarget(); + if (IPersistencyService.INSTANCE.isTopLevelElement(target)) { + IPersistencyService.INSTANCE.getTopLevelElementFor(target).delete(); + } else { + if (useElementCompositor) { + IElementCompositorService.INSTANCE.decompose(target); + } else { + IConnectionCompositorService.INSTANCE.disconnect(target); + } } - ICommandStackService.INSTANCE.runAsCommand(selectedObject, - new Runnable() { - @Override - public void run() { - if (useElementCompositor) { - IElementCompositorService.INSTANCE - .decompose(selectedObject); - } else { - IConnectionCompositorService.INSTANCE - .disconnect(selectedObject); - } - } - }); } } \ No newline at end of file diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/ITopLevelElement.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/ITopLevelElement.java index 86e96dbd4..db8b1de6b 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/ITopLevelElement.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/ITopLevelElement.java @@ -83,4 +83,13 @@ public interface ITopLevelElement { */ void prepareIDs(EObject modelElement); + /** Returns whether this top-level element can be deleted. */ + boolean canDelete(); + + /** + * Deletes this top-level element from the underlying persistency solution. + * Returns <code>false</code> if the delete was interrupted by, e.g., the + * user. + */ + boolean delete(); } diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/DummyTopLevelElement.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/DummyTopLevelElement.java index 17c1d2160..556156f84 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/DummyTopLevelElement.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/DummyTopLevelElement.java @@ -22,13 +22,17 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.emf.common.command.CommandStackListener; import org.eclipse.emf.ecore.EObject; import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; +import org.fortiss.tooling.kernel.service.IPersistencyService; /** + * The dummy top-level element is used to load models into the + * {@link IPersistencyService} without an actual underlying storage. This is + * primarily intended to load models for unit testing. * * @author hoelzl * @author $Author$ * @version $Rev$ - * @ConQAT.Rating RED Hash: + * @ConQAT.Rating YELLOW Hash: 5F332ABA912DD7731BDFD020F2AB2CA4 */ final class DummyTopLevelElement implements ITopLevelElement { @@ -113,4 +117,16 @@ final class DummyTopLevelElement implements ITopLevelElement { public void prepareIDs(EObject modelElement) { // ignore } + + /** {@inheritDoc} */ + @Override + public boolean canDelete() { + return false; + } + + /** {@inheritDoc} */ + @Override + public boolean delete() { + return false; + } } diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/storage/eclipse/ModelContext.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/storage/eclipse/ModelContext.java index f154cc25c..ec186f592 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/storage/eclipse/ModelContext.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/storage/eclipse/ModelContext.java @@ -345,4 +345,24 @@ class ModelContext implements ITopLevelElement, CommandStackListener { l.commandStackChanged(relayEvent); } } + + /** {@inheritDoc} */ + @Override + public boolean canDelete() { + return true; + } + + /** {@inheritDoc} */ + @Override + public boolean delete() { + try { + getFile().delete(true, null); + return true; + } catch (CoreException e) { + LoggingUtils.error(ToolingKernelActivator.getDefault(), + "Error during deletion of model file " + + getFile().getName()); + } + return false; + } } -- GitLab