package org.activiti.designer.features;
import org.activiti.bpmn.model.Pool;
import org.activiti.bpmn.model.Process;
import org.activiti.designer.util.editor.Bpmn2MemoryModel;
import org.activiti.designer.util.editor.ModelHandler;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.IRemoveFeature;
import org.eclipse.graphiti.features.context.ICustomContext;
import org.eclipse.graphiti.features.context.IRemoveContext;
import org.eclipse.graphiti.features.context.impl.RemoveContext;
import org.eclipse.graphiti.features.custom.AbstractCustomFeature;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
public class DeletePoolFeature extends AbstractCustomFeature {
public DeletePoolFeature(IFeatureProvider fp) {
super(fp);
}
@Override
public String getName() {
return "Delete pool"; //$NON-NLS-1$
}
@Override
public String getDescription() {
return "Delete pool"; //$NON-NLS-1$
}
@Override
public boolean canExecute(ICustomContext context) {
if(context.getPictogramElements() == null) return false;
for (PictogramElement pictogramElement : context.getPictogramElements()) {
if(getBusinessObjectForPictogramElement(pictogramElement) == null) continue;
Object boObject = getBusinessObjectForPictogramElement(pictogramElement);
if(boObject instanceof Pool == false) {
return false;
}
}
return true;
}
public void execute(ICustomContext context) {
if(context.getPictogramElements() == null) return;
for (final PictogramElement pictogramElement : context.getPictogramElements()) {
if(getBusinessObjectForPictogramElement(pictogramElement) == null) continue;
final Object boObject = getBusinessObjectForPictogramElement(pictogramElement);
if(boObject instanceof Pool == true) {
final Pool pool = (Pool) boObject;
Bpmn2MemoryModel model = ModelHandler.getModel(EcoreUtil.getURI(getDiagram()));
Process process = model.getBpmnModel().getProcess(pool.getId());
model.getBpmnModel().getProcesses().remove(process);
model.getBpmnModel().getPools().remove(pool);
IRemoveContext rc = new RemoveContext(pictogramElement);
IFeatureProvider featureProvider = getFeatureProvider();
IRemoveFeature removeFeature = featureProvider.getRemoveFeature(rc);
if (removeFeature != null) {
removeFeature.remove(rc);
}
}
}
}
}