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;
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
......@@ -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();
}
......@@ -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;
}
}
......@@ -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;
}
}
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