package kr.ac.snu.selab.soot.analyzer.sta; import java.io.IOException; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import kr.ac.snu.selab.soot.analyzer.AnalysisResult; import kr.ac.snu.selab.soot.graph.MyNode; import kr.ac.snu.selab.soot.graph.Path; import kr.ac.snu.selab.soot.util.XMLWriter; public class StatePatternAnalysisResult extends AnalysisResult { private Map<String, Set<Path<MyNode>>> triggeringPathMap; private Set<MyNode> reusableLayer; private Set<MyNode> extensionLayer; public StatePatternAnalysisResult() { super(); triggeringPathMap = new HashMap<String, Set<Path<MyNode>>>(); reusableLayer = new HashSet<MyNode>(); extensionLayer = new HashSet<MyNode>(); } void putTriggeringPath(String key, Set<Path<MyNode>> pathSet) { triggeringPathMap.put(key, pathSet); } boolean isTriggeringPathMapEmpty() { return triggeringPathMap.isEmpty(); } public void putReusableNode(MyNode aNode) { reusableLayer.add(aNode); } public void putReusableNodeSet(Set<MyNode> aSet) { reusableLayer.addAll(aSet); } public void putExtensionNode(MyNode aNode) { extensionLayer.add(aNode); } public void putExntensionNodeSet(Set<MyNode> aSet) { extensionLayer.addAll(aSet); } @Override public void writeXML(XMLWriter writer) { try { writer.startElement("StatePatternAnalysisResult"); writer.simpleElement("AbstractType", getAbstractTypeName()); // writer.startElement("CallerList"); // for (MyNode aNode : callerList) { // aNode.writeXML(writer); // } // writer.endElement(); writer.startElement("ReusableLayer"); for (MyNode aNode : reusableLayer) { writer.simpleElement("Node", aNode.getElement().toString()); } writer.endElement(); writer.startElement("ExtensionLayer"); for (MyNode aNode : extensionLayer) { writer.simpleElement("Node", aNode.getElement().toString()); } writer.endElement(); writer.startElement("PatternAnalysisList"); for (MyNode aNode : callerList) { String key = aNode.toString(); if (triggeringPathMap.containsKey(key)) { writer.startElement("AnalysisPerCaller"); writer.startElement("Caller"); aNode.writeXML(writer); writer.endElement(); writer.startElement("DesignPattern"); if (triggeringPathMap.size() < 1) { writer.pcData("Strategy"); } else { writer.pcData("State"); } writer.endElement(); if (triggeringPathMap.containsKey(key)) { writer.startElement("TriggerPathList"); for (Path<MyNode> aPath : triggeringPathMap.get(key)) { aPath.writeXML(writer); } writer.endElement(); } writer.startElement("ObjectFlowPathList"); for (Path<MyNode> aPath : referenceFlowPathMap.get(key)) { aPath.writeXML(writer); } writer.endElement(); writer.endElement(); } } writer.endElement(); writer.endElement(); } catch (IOException e) { e.printStackTrace(); } } }