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

first try of project delete implementation

refs 152
parent 8cfd0d02
No related branches found
No related tags found
No related merge requests found
...@@ -21,6 +21,7 @@ import org.eclipse.emf.ecore.EObject; ...@@ -21,6 +21,7 @@ import org.eclipse.emf.ecore.EObject;
import org.eclipse.ui.ISharedImages; import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI; import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionFactory; 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.ICommandStackService;
import org.fortiss.tooling.kernel.service.IConnectionCompositorService; import org.fortiss.tooling.kernel.service.IConnectionCompositorService;
import org.fortiss.tooling.kernel.service.IElementCompositorService; import org.fortiss.tooling.kernel.service.IElementCompositorService;
...@@ -39,7 +40,7 @@ import org.fortiss.tooling.kernel.ui.extension.base.EObjectActionBase; ...@@ -39,7 +40,7 @@ import org.fortiss.tooling.kernel.ui.extension.base.EObjectActionBase;
*/ */
public class DeleteAction extends EObjectActionBase { public class DeleteAction extends EObjectActionBase {
/** Flag for using element or connection compositor. */ /** Flag for using element or connection composition service. */
private boolean useElementCompositor; private boolean useElementCompositor;
/** Constructor. */ /** Constructor. */
...@@ -56,40 +57,54 @@ public class DeleteAction extends EObjectActionBase { ...@@ -56,40 +57,54 @@ public class DeleteAction extends EObjectActionBase {
setEnabled(false); setEnabled(false);
return; 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)) { if (!IPersistencyService.INSTANCE.isTopLevelElement(element)) {
// use composition services for deletion
if (IElementCompositorService.INSTANCE.canDecompose(element)) { if (IElementCompositorService.INSTANCE.canDecompose(element)) {
enabled = true;
useElementCompositor = true; useElementCompositor = true;
return true;
} else if (IConnectionCompositorService.INSTANCE } else if (IConnectionCompositorService.INSTANCE
.canDisconnect(element)) { .canDisconnect(element)) {
enabled = true;
useElementCompositor = false; useElementCompositor = false;
return true;
} }
return false;
} }
setEnabled(enabled); // use top-level element deletion mechanism
ITopLevelElement topElement = IPersistencyService.INSTANCE
.getTopLevelElementFor(element);
return topElement.canDelete();
} }
/** {@inheritDoc} */ /** Executes the delete using the correct service. */
@Override private void doDelete() {
public void run() { EObject target = getTarget();
final EObject selectedObject = getTarget(); if (IPersistencyService.INSTANCE.isTopLevelElement(target)) {
if (selectedObject == null) { IPersistencyService.INSTANCE.getTopLevelElementFor(target).delete();
return; } 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
...@@ -83,4 +83,13 @@ public interface ITopLevelElement { ...@@ -83,4 +83,13 @@ public interface ITopLevelElement {
*/ */
void prepareIDs(EObject modelElement); 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();
} }
...@@ -22,13 +22,17 @@ import org.eclipse.core.runtime.IProgressMonitor; ...@@ -22,13 +22,17 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.common.command.CommandStackListener; import org.eclipse.emf.common.command.CommandStackListener;
import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EObject;
import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; 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 hoelzl
* @author $Author$ * @author $Author$
* @version $Rev$ * @version $Rev$
* @ConQAT.Rating RED Hash: * @ConQAT.Rating YELLOW Hash: 5F332ABA912DD7731BDFD020F2AB2CA4
*/ */
final class DummyTopLevelElement implements ITopLevelElement { final class DummyTopLevelElement implements ITopLevelElement {
...@@ -113,4 +117,16 @@ final class DummyTopLevelElement implements ITopLevelElement { ...@@ -113,4 +117,16 @@ final class DummyTopLevelElement implements ITopLevelElement {
public void prepareIDs(EObject modelElement) { public void prepareIDs(EObject modelElement) {
// ignore // ignore
} }
/** {@inheritDoc} */
@Override
public boolean canDelete() {
return false;
}
/** {@inheritDoc} */
@Override
public boolean delete() {
return false;
}
} }
...@@ -345,4 +345,24 @@ class ModelContext implements ITopLevelElement, CommandStackListener { ...@@ -345,4 +345,24 @@ class ModelContext implements ITopLevelElement, CommandStackListener {
l.commandStackChanged(relayEvent); 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;
}
} }
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