1 27 package ch.ethz.prose; 28 import java.io.Serializable ; 29 import java.util.List ; 30 31 import ch.ethz.prose.crosscut.Crosscut; 32 33 34 37 public 38 abstract class Aspect implements Insertable,Serializable { 39 40 46 public void insertionAction(boolean isBefore) {} 47 48 49 51 public void withdrawalAction(boolean isBefore){} 52 53 54 57 public static Object generateUniqueAssociation() 58 { 59 return "" + System.currentTimeMillis() + birthDayCount++; 60 } 61 62 protected static long birthDayCount = 0; 63 private List ownedCrosscutList= null; 64 protected Object aspectID = null; 65 private boolean aspectIDisSet = false; 66 protected int priority = 0; 67 68 80 public synchronized void associateTo(Object id) 81 { 82 if (aspectIDisSet) 83 throw new IllegalStateException ("reset of IDs not allowed in aspects"); 84 85 if (id == null) 86 throw new IllegalArgumentException ("null ids not accepted as arguments"); 87 88 this.aspectIDisSet = true; 89 this.aspectID = id; 90 } 91 92 96 public Aspect() 97 { 98 aspectID = generateUniqueAssociation(); 99 } 100 101 107 public List getCrosscuts() 108 { 109 if (ownedCrosscutList != null) 110 return ownedCrosscutList; 111 112 113 Crosscut[] ownedCrosscuts = crosscuts(); 114 ownedCrosscutList = new java.util.Vector (); 115 116 for (int i = 0; i < ownedCrosscuts.length; i++) 117 { 118 ownedCrosscuts[i].setOwner(this); 119 ownedCrosscutList.add(ownedCrosscuts[i]); 120 } 121 122 return ownedCrosscutList; 123 } 124 125 126 127 132 public int getPriority() 133 { 134 return priority; 135 } 136 137 138 142 public void setPriority(int prio) 143 { 144 this.priority = prio; 145 } 146 147 148 149 150 public Object getAssociatedObject() 151 { 152 return aspectID; 153 } 154 155 159 protected abstract Crosscut[] crosscuts(); 160 161 171 public boolean equals(Object obj) 172 { 173 return 174 obj instanceof Aspect && 175 aspectID.equals( ((Aspect) obj).aspectID); 176 } 177 178 182 public int hashCode() 183 { 184 return (int)aspectID.hashCode(); 185 } 186 187 188 public String toString() 189 { 190 return "Aspect [" + aspectID + "]"; 191 } 192 193 } 194 195 196 | Popular Tags |