package org.eclipse.graphiti.examples.filesystem.features;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.graphiti.examples.mm.filesystem.File;
import org.eclipse.graphiti.examples.mm.filesystem.Folder;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.context.IContext;
import org.eclipse.graphiti.features.context.ICustomContext;
import org.eclipse.graphiti.features.custom.AbstractCustomFeature;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.mm.pictograms.Shape;
public class DeleteInnerFileFeature extends AbstractCustomFeature {
public DeleteInnerFileFeature(IFeatureProvider fp) {
super(fp);
}
@Override
public String getName() {
return "Delete File";
}
@Override
public String getDescription() {
return "Deletes the selected file inside this folder";
}
@Override
public boolean isAvailable(IContext context) {
return getFileDomainObject(context) != null;
}
@Override
public boolean canExecute(ICustomContext context) {
return getFileDomainObject(context) != null;
}
public void execute(ICustomContext context) {
File file = getFileDomainObject(context);
EcoreUtil.delete(file);
}
private File getFileDomainObject(IContext context) {
if (context instanceof ICustomContext) {
PictogramElement[] pictogramElements = ((ICustomContext) context).getPictogramElements();
if (pictogramElements.length == 1) {
PictogramElement pictogramElement = pictogramElements[0];
Object domainObject = getBusinessObjectForPictogramElement(pictogramElement);
if (domainObject instanceof File) {
if (pictogramElement instanceof Shape && pictogramElement.eContainer() instanceof ContainerShape
&& pictogramElement.eContainer().eContainer() instanceof ContainerShape) {
if (getBusinessObjectForPictogramElement((ContainerShape) pictogramElement.eContainer()
.eContainer()) instanceof Folder) {
return (File) domainObject;
}
}
}
}
}
return null;
}
}