package esl.cuenet.query.pattern.graph; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class PatternGraphNode { private PatternGraph subEventPatternGraph = null; private List<PatternGraph> interleavePatternGraphs = new ArrayList<PatternGraph>(); private List<PatternGraph> unionPatternGraphs = new ArrayList<PatternGraph>(); private Quantifier quantifier = Quantifier.NONE; private String label = null; private MatchBuffer buffer = null; private PatternGraphNodeType nodeType; private Set<String> classIndex = new HashSet<String>(); public void collectAllClasses(List<String> classes) { if (nodeType != PatternGraphNodeType.REGULAR) return; if (label != null) classes.add(label); if (subEventPatternGraph != null) for (PatternGraphNode node: subEventPatternGraph) { node.collectAllClasses(classes); } for (PatternGraph interleaved: interleavePatternGraphs) for (PatternGraphNode node: interleaved) { node.collectAllClasses(classes); } for (PatternGraph union: unionPatternGraphs) for (PatternGraphNode node: union) { node.collectAllClasses(classes); } for (int i=0; i<classes.size(); i++) classIndex.addAll(classes); } public static enum PatternGraphNodeType { REGULAR(""), INTERLEAVE_START("I(S)"), INTERLEAVE_END("I(E)"), UNION_START("U(S)"), UNION_END("U(E)"); private String desc; PatternGraphNodeType(String desc) { this.desc = desc; } @Override public String toString() { return desc; } } public PatternGraphNode(String label) { this.label = label; this.nodeType = PatternGraphNodeType.REGULAR; } public PatternGraphNode(PatternGraphNodeType type) { this.nodeType = type; this.label = null; } public PatternGraphNode(String label, Quantifier quantifier) { this.label = label; this.nodeType = PatternGraphNodeType.REGULAR; this.quantifier = quantifier; } public void addToBuffer(EventStreamToken token) { buffer.add(token); } public String label() { return label; } public PatternGraph createInterleavedGraph() { PatternGraph iGraph = new PatternGraph(); this.interleavePatternGraphs.add(iGraph); return iGraph; } public PatternGraph createUnionGraph() { PatternGraph uGraph = new PatternGraph(); this.unionPatternGraphs.add(uGraph); return uGraph; } public Quantifier quantifier() { return quantifier; } public PatternGraphNodeType type() { return nodeType; } public String toString() { String s; if (label != null) s = label; else if (nodeType != PatternGraphNodeType.REGULAR) s = nodeType.toString(); else s = ""; return s; } public PatternGraph createSubEventPatternGraph() { this.subEventPatternGraph = new PatternGraph(); this.subEventPatternGraph.setSuperEvent(this); return this.subEventPatternGraph; } public boolean contains(String ontClass) { return classIndex.contains(ontClass); } public PatternGraph getSubEventPatternGraph() { return subEventPatternGraph; } public List<PatternGraph> getInterleavePatternGraphs() { return interleavePatternGraphs; } public List<PatternGraph> getUnionPatternGraphs() { return unionPatternGraphs; } }