1 19 package org.openharmonise.rm.resources.metadata.properties.ranges; 20 21 import java.util.*; 22 23 import org.openharmonise.rm.*; 24 import org.openharmonise.rm.metadata.ChildObjectPropertyInstance; 25 import org.openharmonise.rm.publishing.State; 26 import org.openharmonise.rm.resources.*; 27 import org.w3c.dom.Element ; 28 29 30 39 public class RelativeChildObjectRange extends AbstractRange implements ChildObjectRange { 40 41 42 45 public final static String TAG_RELATIVECHILDOBJECT_RANGE = "RelativeChildObjectRange"; 46 47 50 public RelativeChildObjectRange() { 51 super(RelativeChildObjectRange.class.getName()); 52 } 53 54 61 public RelativeChildObjectRange(String sDetails) { 62 super(RelativeChildObjectRange.class.getName(),sDetails); 63 } 64 65 73 protected RelativeChildObjectRange(String objName, String sDetails) { 74 super(objName,sDetails); 75 } 76 77 80 public boolean isValid(Object obj) { 81 boolean bIsValid = false; 82 83 return bIsValid; 84 } 85 86 95 public List getAvailableValues(AbstractChildObject child) throws DataAccessException { 96 List avails = new ArrayList(); 97 98 AbstractParentObject parent = child.getRealParent(); 99 100 StringTokenizer tokeniser = new StringTokenizer(m_sDetails,"/"); 101 102 while(tokeniser.hasMoreTokens() && parent != null) { 103 String sToken = tokeniser.nextToken(); 104 105 if(sToken != null && sToken.length() > 0) { 106 parent = getParentFromPath(parent, sToken); 107 } 108 } 109 110 if(parent != null) { 111 addAllChildObjectsToList(avails, parent); 112 } 113 114 return avails; 115 } 116 117 122 public String getPathRestriction() { 123 return m_sDetails; 124 } 125 126 131 public void setPathRestriction(String sPath) { 132 setDetails(sPath); 133 134 } 135 136 149 private AbstractParentObject getParentFromPath(AbstractParentObject parent, String sPathSegment) throws DataAccessException { 150 AbstractParentObject result = null; 151 152 if(sPathSegment != null && sPathSegment.length() > 0) { 153 154 if(sPathSegment.equals(".")) { 155 result = parent; 156 } else if(sPathSegment.equals("..")) { 157 result = parent.getRealParent(); 158 } else { 159 AbstractChildObject child = parent.getChildByName(sPathSegment); 160 161 if(child instanceof AbstractParentObject) { 162 result = (AbstractParentObject) child; 163 } 164 } 165 } 166 167 return result; 168 } 169 170 181 private void addAllChildObjectsToList( 182 List result, 183 AbstractParentObject parent) 184 throws DataAccessException { 185 Iterator iter = parent.getChildren().iterator(); 186 187 while (iter.hasNext()) { 188 AbstractChildObject child = (AbstractChildObject) iter.next(); 189 190 if((child instanceof AbstractParentObject) == false) { 191 result.add(child); 192 } 193 194 if (child instanceof AbstractParentObject) { 195 addAllChildObjectsToList(result, (AbstractParentObject) child); 196 } 197 } 198 } 199 200 203 public String getChildObjectValueClassName(AbstractChildObject child) { 204 return child.getClass().getName(); 205 } 206 207 210 public Class getPropertyInstanceClass() throws ClassNotFoundException { 211 return ChildObjectPropertyInstance.class; 212 } 213 214 217 public String getTagName() { 218 return TAG_RELATIVECHILDOBJECT_RANGE; 219 } 220 221 224 public void populate(Element xmlElement, State state) 225 throws PopulateException { 226 String sTagname = xmlElement.getTagName(); 227 228 if(sTagname.equals(TAG_PATH_RESTRICTION)) { 229 String sPath = xmlElement.getFirstChild().getNodeValue(); 230 setPathRestriction(sPath); 231 } else { 232 super.populate(xmlElement, state); 233 } 234 235 } 236 237 240 public String getChildObjectValueClassName(Class clss) { 241 return clss.getName(); 242 } 243 244 } 245 | Popular Tags |