1 package org.sapia.soto.state.config; 2 3 import org.sapia.soto.state.State; 4 5 import java.util.ArrayList ; 6 import java.util.List ; 7 8 9 20 public class Globals { 21 private List _preExecs = new ArrayList (); 22 private List _postExecs = new ArrayList (); 23 private List _privates = new ArrayList (); 24 private Globals _parent; 25 26 public Globals() { 27 } 28 29 public void setParent(Globals parent) { 30 _parent = parent; 31 } 32 33 public StateSet createPreExec() { 34 StateSet preExec = new StateSet(); 35 _preExecs.add(preExec); 36 37 return preExec; 38 } 39 40 public StateSet createPrivate() { 41 StateSet priv = new StateSet(); 42 _privates.add(priv); 43 44 return priv; 45 } 46 47 public StateSet createPostExec() { 48 StateSet postExec = new StateSet(); 49 _postExecs.add(postExec); 50 51 return postExec; 52 } 53 54 60 public void merge(Globals gb) { 61 _preExecs.addAll(gb._preExecs); 62 _postExecs.addAll(gb._postExecs); 63 _privates.addAll(gb._privates); 64 } 65 66 72 public boolean applyRestriction(State state) { 73 StateSet current; 74 boolean pub = true; 75 76 for (int i = 0; i < _privates.size(); i++) { 77 current = (StateSet) _privates.get(i); 78 79 if (current.matches(state)) { 80 pub = false; 81 } 82 } 83 84 if (pub && (_parent != null)) { 85 pub = _parent.applyRestriction(state); 86 87 return pub; 88 } else { 89 return pub; 90 } 91 } 92 93 101 public State applySteps(State state) { 102 GlobalWrapper wrapper = null; 103 StateSet current; 104 105 for (int i = 0; i < _preExecs.size(); i++) { 106 current = (StateSet) _preExecs.get(i); 107 108 if (current.matches(state)) { 109 wrapper = wrapper(wrapper, state); 110 wrapper.addPre(current.getSteps()); 111 } 112 } 113 114 for (int i = 0; i < _postExecs.size(); i++) { 115 current = (StateSet) _postExecs.get(i); 116 117 if (current.matches(state)) { 118 wrapper = wrapper(wrapper, state); 119 wrapper.addPost(current.getSteps()); 120 } 121 } 122 123 if (_parent != null) { 124 if (wrapper != null) { 125 return _parent.applySteps(wrapper); 126 } else { 127 return _parent.applySteps(state); 128 } 129 } 130 131 if (wrapper == null) { 132 return state; 133 } else { 134 return wrapper; 135 } 136 } 137 138 private GlobalWrapper wrapper(GlobalWrapper w, State state) { 139 if (w == null) { 140 return new GlobalWrapper(state); 141 } 142 143 return w; 144 } 145 } 146 | Popular Tags |