1
2 package org.state4j.sm;
3
4 import org.state4j.exceptions.PreconditionViolatedException;
5
6
7 public class SmGuardConditionImpl implements SmGuardCondition {
8 private String triggerClassName;
9 private Class triggerClass;
10 private SmEvaluator evaluator;
11 private String name;
12
13 public void setTriggerClassName(String trigger) {
14 this.triggerClassName = trigger;
15 if (this.triggerClassName == null) {
16 this.setTriggerClass(null);
17 } else {
18 try {
19 Class event = Class.forName(trigger);
20 if (!SmEvent.class.isAssignableFrom(event)) {
21 throw new PreconditionViolatedException("Sorry!! cannot setTriggerClassName class " + trigger
22 + " isn't IPEvent instance");
23 }
24 this.setTriggerClass(event);
25 } catch (ClassNotFoundException e) {
26 throw new PreconditionViolatedException("Sorry!! cannot setTriggerClassName class not found: "
27 + trigger);
28 }
29 }
30 }
31
32 public String getName() {
33 return name;
34 }
35
36 public void setName(String name) {
37 this.name = name;
38 }
39
40 public boolean hasName() {
41 return this.name != null;
42 }
43
44 public boolean evaluate(SmContext cntx) {
45 return this.evaluateTrigger(cntx) && this.evaluateCondition(cntx);
46 }
47
48 protected boolean evaluateCondition(SmContext cntx) {
49 if (!hasEvaluator()) {
50 return true;
51 } else {
52 return getEvaluator().evaluate(cntx);
53 }
54 }
55
56 protected boolean evaluateTrigger(SmContext cntx) {
57 if (this.hasTriggerClassName()) {
58 if (!cntx.hasCurrentEvent()) {
59 return false;
60 }
61 if (!this.getTriggerClass().isInstance(cntx.getCurrentEvent())) {
62 return false;
63 }
64 }
65 return true;
66 }
67
68 public String getTriggerClassName() {
69 return this.triggerClassName;
70 }
71
72 public boolean hasTriggerClassName() {
73 return this.triggerClassName != null;
74 }
75
76 private void setTriggerClass(Class triggerClass) {
77 this.triggerClass = triggerClass;
78 }
79
80 public Class getTriggerClass() {
81 if (!this.hasTriggerClass()) {
82 throw new PreconditionViolatedException("Sorry!! cannot get TriggerClass");
83 }
84 return triggerClass;
85 }
86
87 public boolean hasTriggerClass() {
88 return this.triggerClass != null;
89 }
90
91 public boolean hasEvaluator() {
92 return evaluator != null;
93 }
94
95 public SmEvaluator getEvaluator() {
96 if (!hasEvaluator()) {
97 throw new RuntimeException("this.evaluator is null and can't be returned");
98 }
99 return this.evaluator;
100 }
101
102 public void setEvaluator(SmEvaluator evaluator) {
103 this.evaluator = evaluator;
104 }
105 }