1 package cz.cuni.amis.pogamut.sposh.elements;
2
3 import java.awt.datatransfer.DataFlavor;
4 import java.util.ArrayList;
5 import java.util.Collections;
6 import java.util.List;
7
8
9
10
11
12
13
14
15
16 public class Triggers extends PoshDummyElement {
17
18 private ElementList<Sense> _sense_list;
19
20
21
22
23
24
25 public Triggers(Sense defaultTrigger) {
26 _sense_list = new ElementList<Sense>();
27 this.addTrigger(defaultTrigger);
28 }
29
30
31
32
33 public Triggers() {
34 _sense_list = new ElementList<Sense>();
35 }
36
37 public Triggers(ElementList<Sense> sense_list) {
38 _sense_list = new ElementList<Sense>();
39
40 for (Sense sense : sense_list) {
41 addTrigger(sense);
42 }
43 }
44
45
46
47
48
49 public void addTrigger(Sense sense) {
50 sense.setParent(this);
51 _sense_list.add(sense);
52
53 emitChildNode(sense);
54 }
55
56
57
58
59
60
61
62
63 public void addUserTrigger(Sense sense) {
64 if (_sense_list.size() == 1 && ("succeed".equals(_sense_list.get(0).getSenseName()) || "fail".equals(_sense_list.get(0).getSenseName()))) {
65 _sense_list.get(0).changeTo(sense);
66 } else {
67 addTrigger(sense);
68 }
69 }
70
71 @Override
72 public String toString() {
73 return _sense_list.toString();
74 }
75
76 @Override
77 public List<PoshElement> getChildDataNodes() {
78 return new ArrayList<PoshElement>(_sense_list);
79 }
80
81 @Override
82 public boolean moveChild(PoshElement child, int relativePosition) {
83 return moveNodeInList(this._sense_list, child, relativePosition);
84 }
85 public static final DataFlavor dataFlavor = new DataFlavor(Triggers.class, "triggers");
86
87 @Override
88 public DataFlavor getDataFlavor() {
89 return dataFlavor;
90 }
91
92 @Override
93 public void addChildDataNode(PoshElement newChild) {
94 if (newChild instanceof Sense) {
95 this.addTrigger((Sense) newChild);
96 } else {
97 throw new RuntimeException("Class " + newChild.getClass().getSimpleName() + " not accepted.");
98 }
99 }
100
101 @Override
102 public void neutralizeChild(PoshElement childNode) {
103 if (this._sense_list.contains(childNode)) {
104 if (this._sense_list.size() <= 1) {
105 this.addTrigger(new Sense("fail"));
106 }
107 this._sense_list.remove(childNode);
108 childNode.remove();
109 }
110 }
111
112
113
114
115 public List<Sense> getSenses() {
116 return Collections.unmodifiableList(_sense_list);
117 }
118 }