1 16 17 package info.jtrac.domain; 18 19 import info.jtrac.util.XmlUtils; 20 21 import java.util.HashSet ; 22 23 import static info.jtrac.Constants.*; 24 25 import java.io.Serializable ; 26 import java.util.Collection ; 27 import java.util.HashMap ; 28 import java.util.Map ; 29 import java.util.Set ; 30 import org.dom4j.Element; 31 32 44 public class State implements Serializable { 45 46 private int status; 47 private Set <Integer > transitions = new HashSet <Integer >(); 48 private Map <Field.Name, Integer > fields = new HashMap <Field.Name, Integer >(); 49 50 public static final int NEW = 0; 51 public static final int OPEN = 1; 52 public static final int CLOSED = 99; 53 54 public static final int MASK_HIDE = 0; 55 public static final int MASK_VIEW = 1; 56 public static final int MASK_EDIT = 2; 57 58 public State() { 59 } 61 62 public State(int s) { 63 this.status = s; 64 } 65 66 public State(Element e) { 67 this.status = Integer.parseInt(e.attributeValue(STATUS)); 68 for (Object o : e.elements(TRANSITION)) { 69 Element t = (Element) o; 70 transitions.add(new Integer (t.attributeValue(STATUS))); 71 } 72 for (Object o : e.elements(FIELD)) { 73 Element f = (Element) o; 74 String fieldName = f.attributeValue(NAME); 75 fields.put(Field.convertToName(fieldName), new Integer (f.attributeValue(MASK))); 76 } 77 } 78 79 80 public void addAsChildOf(Element parent) { 81 Element e = parent.addElement(STATE); 82 copyTo(e); 83 } 84 85 86 public Element getAsElement() { 87 Element e = XmlUtils.getNewElement(STATE); 88 copyTo(e); 89 return e; 90 } 91 92 93 private void copyTo(Element e) { 94 e.addAttribute(STATUS, status + ""); 96 for (Integer toStatus : transitions) { 97 Element t = e.addElement(TRANSITION); 98 t.addAttribute(STATUS, toStatus + ""); 99 } 100 for (Map.Entry <Field.Name, Integer > entry : fields.entrySet()) { 101 Element f = e.addElement(FIELD); 102 f.addAttribute(NAME, entry.getKey() + ""); 103 f.addAttribute(MASK, entry.getValue() + ""); 104 } 105 } 106 107 109 public void add(Collection <Field.Name> fieldNames) { 110 for (Field.Name fieldName : fieldNames) { 111 add(fieldName); 112 } 113 } 114 115 public void add(Field.Name fieldName) { 116 int mask = MASK_VIEW; 117 if (status == NEW) { 119 mask = MASK_EDIT; 120 } 121 fields.put(fieldName, mask); 122 } 123 124 public void remove(Field.Name fieldName) { 125 fields.remove(fieldName); 126 } 127 128 public void addTransition(int toStatus) { 129 transitions.add(toStatus); 130 } 131 132 public void removeTransition(int toStatus) { 133 transitions.remove(toStatus); 134 } 135 136 140 public Map <Integer , Boolean > getTransitionMap() { 141 Map <Integer , Boolean > map = new HashMap <Integer , Boolean >(); 142 for (Integer i : transitions) { 143 map.put(i, true); 144 } 145 return map; 146 } 147 148 150 public Map <Field.Name, Integer > getFields() { 151 return fields; 152 } 153 154 public void setFields(Map <Field.Name, Integer > fields) { 155 this.fields = fields; 156 } 157 158 public int getStatus() { 159 return status; 160 } 161 162 public void setStatus(int status) { 163 this.status = status; 164 } 165 166 public Set <Integer > getTransitions() { 167 return transitions; 168 } 169 170 public void setTransitions(Set <Integer > transitions) { 171 this.transitions = transitions; 172 } 173 174 @Override 175 public String toString() { 176 StringBuffer sb = new StringBuffer (); 177 sb.append("status [").append(status); 178 sb.append("]; transitions [").append(transitions); 179 sb.append("]; fields [").append(fields); 180 sb.append("]"); 181 return sb.toString(); 182 } 183 184 } 185 | Popular Tags |