diff options
Diffstat (limited to 'subprojects/viatra-runtime-rete/src/main/java/tools/refinery/viatra/runtime/rete/network/BaseNode.java')
-rw-r--r-- | subprojects/viatra-runtime-rete/src/main/java/tools/refinery/viatra/runtime/rete/network/BaseNode.java | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/subprojects/viatra-runtime-rete/src/main/java/tools/refinery/viatra/runtime/rete/network/BaseNode.java b/subprojects/viatra-runtime-rete/src/main/java/tools/refinery/viatra/runtime/rete/network/BaseNode.java new file mode 100644 index 00000000..2469d6bd --- /dev/null +++ b/subprojects/viatra-runtime-rete/src/main/java/tools/refinery/viatra/runtime/rete/network/BaseNode.java | |||
@@ -0,0 +1,108 @@ | |||
1 | /******************************************************************************* | ||
2 | * Copyright (c) 2010-2012, Bergmann Gabor, Istvan Rath and Daniel Varro | ||
3 | * This program and the accompanying materials are made available under the | ||
4 | * terms of the Eclipse Public License v. 2.0 which is available at | ||
5 | * http://www.eclipse.org/legal/epl-v20.html. | ||
6 | * | ||
7 | * SPDX-License-Identifier: EPL-2.0 | ||
8 | *******************************************************************************/ | ||
9 | package tools.refinery.viatra.runtime.rete.network; | ||
10 | |||
11 | import java.util.Collections; | ||
12 | import java.util.HashSet; | ||
13 | import java.util.Set; | ||
14 | import java.util.TreeSet; | ||
15 | |||
16 | import tools.refinery.viatra.runtime.rete.traceability.PatternTraceInfo; | ||
17 | import tools.refinery.viatra.runtime.rete.traceability.TraceInfo; | ||
18 | |||
19 | /** | ||
20 | * Base implementation for a Rete node. | ||
21 | * | ||
22 | * @author Bergmann Gabor | ||
23 | * | ||
24 | */ | ||
25 | public abstract class BaseNode implements Node { | ||
26 | |||
27 | protected ReteContainer reteContainer; | ||
28 | protected long nodeId; | ||
29 | protected Object tag; | ||
30 | protected Set<TraceInfo> traceInfos; | ||
31 | |||
32 | /** | ||
33 | * @param reteContainer | ||
34 | * the container to create this node in | ||
35 | */ | ||
36 | public BaseNode(ReteContainer reteContainer) { | ||
37 | super(); | ||
38 | this.reteContainer = reteContainer; | ||
39 | this.nodeId = reteContainer.registerNode(this); | ||
40 | this.traceInfos = new HashSet<TraceInfo>(); | ||
41 | } | ||
42 | |||
43 | @Override | ||
44 | public String toString() { | ||
45 | if (tag != null) | ||
46 | return toStringCore() + "->" + getTraceInfoPatternsEnumerated() + "{" + tag.toString() + "}"; | ||
47 | else | ||
48 | return toStringCore() + "->" + getTraceInfoPatternsEnumerated(); | ||
49 | } | ||
50 | |||
51 | /** | ||
52 | * clients should override this to append before the tag / trace indicators | ||
53 | */ | ||
54 | protected String toStringCore() { | ||
55 | return "[" + nodeId + "]" + getClass().getSimpleName(); | ||
56 | } | ||
57 | |||
58 | @Override | ||
59 | public ReteContainer getContainer() { | ||
60 | return reteContainer; | ||
61 | } | ||
62 | |||
63 | @Override | ||
64 | public long getNodeId() { | ||
65 | return nodeId; | ||
66 | } | ||
67 | |||
68 | @Override | ||
69 | public Object getTag() { | ||
70 | return tag; | ||
71 | } | ||
72 | |||
73 | @Override | ||
74 | public void setTag(Object tag) { | ||
75 | this.tag = tag; | ||
76 | } | ||
77 | |||
78 | @Override | ||
79 | public Set<TraceInfo> getTraceInfos() { | ||
80 | return Collections.unmodifiableSet(traceInfos); | ||
81 | } | ||
82 | |||
83 | @Override | ||
84 | public void assignTraceInfo(TraceInfo traceInfo) { | ||
85 | traceInfos.add(traceInfo); | ||
86 | traceInfo.assignNode(this); | ||
87 | } | ||
88 | |||
89 | @Override | ||
90 | public void acceptPropagatedTraceInfo(TraceInfo traceInfo) { | ||
91 | assignTraceInfo(traceInfo); | ||
92 | } | ||
93 | |||
94 | /** | ||
95 | * Descendants should use this in e.g. logging | ||
96 | */ | ||
97 | protected String getTraceInfoPatternsEnumerated() { | ||
98 | TreeSet<String> patternNames = new TreeSet<String>(); | ||
99 | for (TraceInfo trInfo : traceInfos) { | ||
100 | if (trInfo instanceof PatternTraceInfo) { | ||
101 | final String pName = ((PatternTraceInfo) trInfo).getPatternName(); | ||
102 | patternNames.add(pName); | ||
103 | } | ||
104 | } | ||
105 | return patternNames.toString(); | ||
106 | } | ||
107 | |||
108 | } \ No newline at end of file | ||