package net.certware.sacm.graphiti.feature;
import java.util.List;
import net.certware.sacm.SACM.AssuranceCase;
import net.certware.sacm.SACM.Evidence.EvidenceContainer;
import net.certware.sacm.SACM.Evidence.EvidenceFactory;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.context.ICreateContext;
import org.eclipse.graphiti.features.impl.AbstractCreateFeature;
import org.eclipse.graphiti.mm.pictograms.Diagram;
public class EvidenceContainerCreateFeature extends AbstractCreateFeature {
/**
* Evidence container create feature constructor.
* @param fp feature provider
*/
public EvidenceContainerCreateFeature(IFeatureProvider fp) {
super(fp, "Evidence Container", "Create an evidence container");
}
public boolean canCreate(ICreateContext context) {
return context.getTargetContainer() instanceof Diagram;
// TODO return context.getTargetContainer() instanceof AssuranceCase;
}
public Object[] create(ICreateContext context) {
List<EObject> containerObjects = context.getTargetContainer().getLink().getBusinessObjects();
if ( containerObjects.isEmpty() || !(containerObjects.get(0) instanceof AssuranceCase)) {
throw new IllegalStateException("The diagram does not contain an assurance case.");
}
// create an evidence container and add it to the assurance cases's set of arguments
AssuranceCase ac = (AssuranceCase)containerObjects.get(0);
EvidenceContainer evidenceContainer = EvidenceFactory.eINSTANCE.createEvidenceContainer();
ac.getEvidence().add(evidenceContainer);
addGraphicalRepresentation(context,evidenceContainer);
return new Object[] { evidenceContainer };
}
}