package de.uniAugsburg.MAF.dfa.jwt.analysis.cfg.rules;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import de.uniAugsburg.MAF.core.exceptions.EvaluatorException;
import de.uniAugsburg.MAF.core.exceptions.InstantiatorException;
import de.uniAugsburg.MAF.core.exceptions.InvokerException;
import de.uniAugsburg.MAF.core.exceptions.VisualizerException;
import de.uniAugsburg.MAF.core.instantiation.IAttributeAccessor;
import de.uniAugsburg.MAF.core.invoker.java.IJavaRules;
import de.uniAugsburg.MAF.dfa.jwt.metamodel.JWTConstants;
import de.uniAugsburg.MAF.models.attrmm.attributes.AttrDefinition;
public class cfg_reachability implements IJavaRules
{
public Object activitynode_isreachable(IAttributeAccessor accessor,
AttrDefinition attrDefinition, EObject localObject) throws InstantiatorException,
VisualizerException, InvokerException, EvaluatorException
{
// SAN -> trigger calculation of contained nodes
if (localObject.eClass().getName().equals(JWTConstants.EC_SAN))
activity_isreachable(accessor, attrDefinition, localObject);
EList<EObject> incoming_edges = accessor.getEReferenceValues(localObject, "in");
for (EObject incoming_edge : incoming_edges)
{
EObject predecessor_node = accessor.getEReferenceValue(incoming_edge, "source");
boolean predReachable = (Boolean) accessor.getAttributeValueForObject(predecessor_node,
"isReachable");
if (predReachable)
return true;
}
return false;
}
public Object activity_isreachable(IAttributeAccessor accessor, AttrDefinition attrDefinition,
EObject localObject) throws InstantiatorException, VisualizerException,
InvokerException, EvaluatorException
{
EList<EObject> nodes = accessor.getEReferenceValues(localObject, "nodes");
accessor.getAttributeValuesForObjects(nodes, "isReachable");
return true;
}
public Object activitynode_islive(IAttributeAccessor accessor, AttrDefinition attrDefinition,
EObject localObject) throws InstantiatorException, VisualizerException,
InvokerException, EvaluatorException
{
EList<EObject> outgoing_edges = accessor.getEReferenceValues(localObject, "out");
for (EObject outgoing_edge : outgoing_edges)
{
EObject successor_node = accessor.getEReferenceValue(outgoing_edge, "target");
boolean succLive = (Boolean) accessor.getAttributeValueForObject(successor_node,
"isLive");
if (succLive)
return true;
}
return false;
}
public Object activity_islive(IAttributeAccessor accessor, AttrDefinition attrDefinition,
EObject localObject) throws InstantiatorException, VisualizerException,
InvokerException, EvaluatorException
{
EList<EObject> nodes = accessor.getEReferenceValues(localObject, "nodes");
accessor.getAttributeValuesForObjects(nodes, "isLive");
return true;
}
}
|