1 19 package org.openharmonise.rm.resources.metadata.properties.ranges; 20 21 import java.net.*; 22 import java.util.*; 23 24 import org.openharmonise.commons.xml.*; 25 import org.openharmonise.rm.metadata.*; 26 import org.openharmonise.rm.resources.*; 27 import org.w3c.dom.*; 28 29 30 38 public class RangeFactory { 39 40 43 private static RangeFactory m_instance = null; 44 45 48 private Map m_rangeMappings = new Hashtable(); 49 50 private static Map m_RangeTagMap = new Hashtable(); 51 52 static { 53 m_RangeTagMap.put(AbsoluteChildObjectRange.TAG_ABSOLUTECHILDOBJECT_RANGE,AbsoluteChildObjectRange.class); 54 m_RangeTagMap.put(BooleanRange.TAG_BOOLEAN_RANGE,BooleanRange.class); 55 m_RangeTagMap.put(DateRange.TAG_DATE_RANGE,DateRange.class); 56 m_RangeTagMap.put(FloatRange.TAG_FLOAT_RANGE,FloatRange.class); 57 m_RangeTagMap.put(IntegerRange.TAG_INTEGER_RANGE,IntegerRange.class); 58 m_RangeTagMap.put(ProfileRange.TAG_PROFILE_RANGE,ProfileRange.class); 59 m_RangeTagMap.put(RelativeChildObjectRange.TAG_RELATIVECHILDOBJECT_RANGE,RelativeChildObjectRange.class); 60 m_RangeTagMap.put(StringRange.TAG_STRING_RANGE,StringRange.class); 61 m_RangeTagMap.put(URIRange.TAG_URI_RANGE,URIRange.class); 62 } 63 64 67 private RangeFactory() { 68 69 } 70 71 76 public static RangeFactory getInstance() { 77 if (m_instance == null) { 78 m_instance = new RangeFactory(); 79 } 80 81 return m_instance; 82 } 83 84 97 public Range getRange(String sRangeDesc) throws ClassNotFoundException , InvalidRangeObjectException { 98 Range result = null; 99 100 if (sRangeDesc != null) { 101 102 Class clss; 103 104 clss = Class.forName(sRangeDesc); 105 106 if (String .class.isAssignableFrom(clss) == true) { 107 result = new StringRange(); 108 } else if (Date.class.isAssignableFrom(clss) == true) { 109 result = new DateRange(); 110 } else if (Integer .class.isAssignableFrom(clss) == true) { 111 result = new IntegerRange(); 112 } else if (Float .class.isAssignableFrom(clss) == true) { 113 result = new FloatRange(); 114 } else if (AbstractChildObject.class.isAssignableFrom(clss)) { 115 result = new AbsoluteChildObjectRange(sRangeDesc); 116 } else if (Profile.class.isAssignableFrom(clss)) { 117 result = new ProfileRange(); 118 } else if (Boolean .class.isAssignableFrom(clss)) { 119 result = new BooleanRange(); 120 } else if (URL.class.isAssignableFrom(clss)) { 121 result = new URIRange(); 122 } else if (Range.class.isAssignableFrom(clss)) { 123 try { 124 result = (Range) clss.newInstance(); 125 } catch (InstantiationException e) { 126 throw new InvalidRangeObjectException("Range object invalid - " + sRangeDesc); 127 } catch (IllegalAccessException e) { 128 throw new InvalidRangeObjectException("Range object invalid - " + sRangeDesc); 129 } 130 131 } else { 132 if(m_rangeMappings.containsKey(sRangeDesc) == true) { 133 String sRangeClassName = (String ) m_rangeMappings.get(sRangeDesc); 134 try { 135 result = (Range) Class.forName(sRangeClassName).newInstance(); 136 } catch (InstantiationException e) { 137 throw new InvalidRangeObjectException("Range object invalid - " + sRangeDesc); 138 } catch (IllegalAccessException e) { 139 throw new InvalidRangeObjectException("Range object invalid - " + sRangeDesc); 140 } 141 } else { 142 throw new InvalidRangeObjectException("Range object invalid - " + sRangeDesc); 143 } 144 } 145 } 146 147 return result; 148 } 149 150 158 public void addNewRange(String sClassname, String sRangeClassName) { 159 160 m_rangeMappings.put(sClassname, sRangeClassName); 161 } 162 163 172 public void addNewRange(String sClassname, String sRangeClassName, String sTagname) throws ClassNotFoundException { 173 174 m_rangeMappings.put(sClassname, sRangeClassName); 175 m_RangeTagMap.put(sTagname,Class.forName(sRangeClassName)); 176 } 177 178 186 static public boolean isRangeTagName(String sTagname) { 187 return m_RangeTagMap.containsKey(sTagname); 188 } 189 190 200 public Range getRange(Element xmlElement) throws InvalidRangeObjectException { 201 Range range = null; 202 String sTagname = xmlElement.getTagName(); 203 204 if(sTagname.equals(AbstractRange.TAG_RANGE)) { 205 Element objEl = XMLUtils.getFirstNamedChild(xmlElement, AbstractRange.TAG_RANGE_OBJECT); 206 207 if(objEl != null) { 208 String sObjName = objEl.getFirstChild().getNodeValue(); 209 try { 210 range = getRange(sObjName); 211 } catch (ClassNotFoundException e) { 212 throw new InvalidRangeObjectException("Unable to instantiate range class for " + sObjName); 213 } 214 } else { 215 throw new InvalidRangeObjectException("No range object defined"); 216 } 217 } else if(isRangeTagName(sTagname)) { 218 Class rangeClass = (Class ) m_RangeTagMap.get(sTagname); 219 220 try { 221 range = (Range) rangeClass.newInstance(); 222 } catch (InstantiationException e) { 223 throw new InvalidRangeObjectException("Unable to instantiate range class " + rangeClass.getName()); 224 } catch (IllegalAccessException e) { 225 throw new InvalidRangeObjectException("Unable to instantiate range class " + rangeClass.getName()); 226 } 227 } 228 229 return range; 230 } 231 } 232 | Popular Tags |