1 22 package org.jboss.aop.metadata; 23 import javassist.CtConstructor; 24 import org.jboss.aop.joinpoint.ConstructorInvocation; 25 import org.jboss.aop.joinpoint.Invocation; 26 import org.jboss.aop.util.PayloadKey; 27 28 import java.lang.reflect.Constructor ; 29 import java.util.HashMap ; 30 import java.util.Iterator ; 31 37 public class ConstructorMetaData implements MetaDataResolver 38 { 39 HashMap constructorMetaData = new HashMap (); 40 41 public boolean hasTag(String tag) 42 { 43 Iterator values = constructorMetaData.values().iterator(); 44 while (values.hasNext()) 45 { 46 SimpleMetaData map = (SimpleMetaData)values.next(); 47 if (map.hasTag(tag)) return true; 48 } 49 return false; 50 } 51 public synchronized boolean hasTag(Constructor constructor, String tag) 52 { 53 SimpleMetaData meta = getConstructorMetaData(constructor); 54 if (meta == null) return false; 55 return meta.hasTag(tag); 56 } 57 58 public void tagConstructor(Constructor con, Object tag) 59 { 60 addConstructorMetaData(con, tag, EMPTY_TAG, new Object (), PayloadKey.TRANSIENT); 61 } 62 63 public void addConstructorMetaData(Constructor constructor, Object tag, Object attr, Object value) 64 { 65 addConstructorMetaData(constructor.toString(), tag, attr, value, PayloadKey.MARSHALLED); 66 } 67 public void addConstructorMetaData(Constructor constructor, Object tag, Object attr, Object value, PayloadKey type) 68 { 69 addConstructorMetaData(constructor.toString(), tag, attr, value, type); 70 } 71 public synchronized void addConstructorMetaData(String key, Object tag, Object attr, Object value, PayloadKey type) 72 { 73 SimpleMetaData constructorData = (SimpleMetaData)constructorMetaData.get(key); 74 if (constructorData == null) 75 { 76 constructorData = new SimpleMetaData(); 77 constructorMetaData.put(key, constructorData); 78 } 79 constructorData.addMetaData(tag, attr, value, type); 80 } 81 82 public synchronized Iterator getConstructors() 83 { 84 return constructorMetaData.keySet().iterator(); 85 } 86 87 public synchronized SimpleMetaData getConstructorMetaData(Constructor constructor) 88 { 89 return (SimpleMetaData)constructorMetaData.get(constructor.toString()); 90 } 91 92 public synchronized SimpleMetaData getConstructorMetaData(String constructor) 93 { 94 return (SimpleMetaData)constructorMetaData.get(constructor); 95 } 96 97 public synchronized Object getConstructorMetaData(Constructor constructor, Object tag, Object attr) 98 { 99 SimpleMetaData constructorData = (SimpleMetaData)constructorMetaData.get(constructor.toString()); 100 if (constructorData == null) return null; 101 return constructorData.getMetaData(tag, attr); 102 } 103 104 public synchronized Object getConstructorMetaData(String constructor, Object tag, Object attr) 105 { 106 SimpleMetaData constructorData = (SimpleMetaData)constructorMetaData.get(constructor); 107 if (constructorData == null) return null; 108 return constructorData.getMetaData(tag, attr); 109 } 110 111 public synchronized void clear() 112 { 113 constructorMetaData.clear(); 114 } 115 116 public Object resolve(Invocation invocation, Object tag, Object attr) 117 { 118 Constructor constructor = ((ConstructorInvocation)invocation).getConstructor(); 119 return getConstructorMetaData(constructor, tag, attr); 120 } 121 122 public synchronized SimpleMetaData getAllMetaData(Invocation invocation) 123 { 124 Constructor constructor = ((ConstructorInvocation)invocation).getConstructor(); 125 return (SimpleMetaData)constructorMetaData.get(constructor); 126 } 127 128 130 public void tagConstructor(CtConstructor con, Object tag) 131 { 132 addConstructorMetaData(con, tag, EMPTY_TAG, new Object ()); 133 } 134 135 public void addConstructorMetaData(CtConstructor constructor, Object tag, Object attr, Object value) 136 { 137 addConstructorMetaData(constructor.getSignature(), tag, attr, value, PayloadKey.TRANSIENT); 138 } 139 140 public synchronized boolean hasGroup(CtConstructor constructor, String tag) 141 { 142 SimpleMetaData meta = (SimpleMetaData)constructorMetaData.get(constructor.getSignature()); 143 if (meta == null) return false; 144 return meta.hasTag(tag); 145 } 146 147 148 } 149 | Popular Tags |