1 19 20 package org.netbeans.modules.xml.axi.impl; 21 22 import java.util.ArrayList ; 23 import java.util.Collection ; 24 import org.netbeans.modules.xml.axi.datatype.*; 25 import org.netbeans.modules.xml.axi.datatype.UnionType; 26 import org.netbeans.modules.xml.xam.dom.NamedComponentReference; 27 import org.netbeans.modules.xml.axi.*; 28 import org.netbeans.modules.xml.schema.model.*; 29 import org.netbeans.modules.xml.schema.model.visitor.DeepSchemaVisitor; 30 31 35 public class DatatypeBuilder extends DeepSchemaVisitor { 36 37 40 DatatypeBuilder() { 41 } 42 43 46 public DatatypeBuilder(AXIModel model) { 47 this.model = (AXIModelImpl)model; 48 } 49 50 public void visit(Enumeration enumeration) { 51 assert (facetParent instanceof SimpleRestriction); 52 if(datatype instanceof NumberBase) 53 ((NumberBase)datatype).addEnumeration( 54 NumberBase.toNumber(enumeration.getValue())); 55 else if(datatype instanceof BinaryBase) 56 ((BinaryBase)datatype).addEnumeration(enumeration.getValue()); 57 else if(datatype instanceof NotationType) 58 ((NotationType)datatype).addEnumeration(enumeration.getValue()); 59 else if(datatype instanceof QNameType) 60 ((QNameType)datatype).addEnumeration(enumeration.getValue()); 61 else if(datatype instanceof StringBase) 62 ((StringBase)datatype).addEnumeration(enumeration.getValue()); 63 else if(datatype instanceof TimeBase) 64 ((TimeBase)datatype).addEnumeration(enumeration.getValue()); 65 } 66 67 public void visit(FractionDigits fractionDigits) { 68 assert (facetParent instanceof SimpleRestriction); 69 java.util.List <Number > removeList = 70 new ArrayList <Number >(); 71 java.util.List <? extends Number > currentList = datatype.getFractionDigits(); 72 if(currentList != null && currentList.size() > 0) { 73 for(int i=0;i<currentList.size();i++) 74 removeList.add(currentList.get(i)); 75 for(int i=0;i<removeList.size();i++) 76 datatype.removeFractionDigits(removeList.get(i)); 77 } 78 datatype.addFractionDigits(fractionDigits.getValue()); 79 } 80 81 public void visit(Length length) { 82 assert (facetParent instanceof SimpleRestriction); 83 java.util.List <Number > removeList = 84 new ArrayList <Number >(); 85 java.util.List <? extends Number > currentList = datatype.getLengths(); 86 if(currentList != null && currentList.size() > 0) { 87 for(int i=0;i<currentList.size();i++) 88 removeList.add(currentList.get(i)); 89 for(int i=0;i<removeList.size();i++) 90 datatype.removeLength(removeList.get(i)); 91 } 92 datatype.addLength(length.getValue()); 93 } 94 95 public void visit(MaxExclusive maxExclusive) { 96 assert (facetParent instanceof SimpleRestriction); 97 if(datatype instanceof NumberBase) { 98 java.util.List <Number > removeList = 99 new ArrayList <Number >(); 100 java.util.List <? extends Number > currentList = 101 ((NumberBase)datatype).getMaxExclusives(); 102 if(currentList != null && currentList.size() > 0) { 103 for(int i=0;i<currentList.size();i++) 104 removeList.add(currentList.get(i)); 105 for(int i=0;i<removeList.size();i++) 106 ((NumberBase)datatype).removeMaxExclusive(removeList.get(i)); 107 } 108 ((NumberBase)datatype).addMaxExclusive( 109 NumberBase.toNumber(maxExclusive.getValue())); 110 } else if(datatype instanceof TimeBase) { 111 java.util.List <String > removeList = 112 new ArrayList <String >(); 113 java.util.List <String > currentList = 114 ((TimeBase)datatype).getMaxExclusives(); 115 if(currentList != null && currentList.size() > 0) { 116 for(int i=0;i<currentList.size();i++) 117 removeList.add(currentList.get(i)); 118 for(int i=0;i<removeList.size();i++) 119 ((TimeBase)datatype).removeMaxExclusive(removeList.get(i)); 120 } 121 ((TimeBase)datatype).addMaxExclusive(maxExclusive.getValue()); 122 } 123 } 124 125 public void visit(MaxInclusive maxInclusive) { 126 assert (facetParent instanceof SimpleRestriction); 127 if(datatype instanceof NumberBase) { 128 java.util.List <Number > removeList = 129 new ArrayList <Number >(); 130 java.util.List <? extends Number > currentList = 131 ((NumberBase)datatype).getMaxInclusives(); 132 if(currentList != null && currentList.size() > 0) { 133 for(int i=0;i<currentList.size();i++) 134 removeList.add(currentList.get(i)); 135 for(int i=0;i<removeList.size();i++) 136 ((NumberBase)datatype).removeMaxInclusive(removeList.get(i)); 137 } 138 ((NumberBase)datatype).addMaxInclusive( 139 NumberBase.toNumber(maxInclusive.getValue())); 140 } else if(datatype instanceof TimeBase) { 141 java.util.List <String > removeList = 142 new ArrayList <String >(); 143 java.util.List <String > currentList = 144 ((TimeBase)datatype).getMaxInclusives(); 145 if(currentList != null && currentList.size() > 0) { 146 for(int i=0;i<currentList.size();i++) 147 removeList.add(currentList.get(i)); 148 for(int i=0;i<removeList.size();i++) 149 ((TimeBase)datatype).removeMaxInclusive(removeList.get(i)); 150 } 151 ((TimeBase)datatype).addMaxInclusive(maxInclusive.getValue()); 152 } 153 } 154 155 public void visit(MinExclusive minExclusive) { 156 assert (facetParent instanceof SimpleRestriction); 157 if(datatype instanceof NumberBase) { 158 java.util.List <Number > removeList = 159 new ArrayList <Number >(); 160 java.util.List <? extends Number > currentList = 161 ((NumberBase)datatype).getMinExclusives(); 162 if(currentList != null && currentList.size() > 0) { 163 for(int i=0;i<currentList.size();i++) 164 removeList.add(currentList.get(i)); 165 for(int i=0;i<removeList.size();i++) 166 ((NumberBase)datatype).removeMinExclusive(removeList.get(i)); 167 } 168 ((NumberBase)datatype).addMinExclusive( 169 NumberBase.toNumber(minExclusive.getValue())); 170 } else if(datatype instanceof TimeBase) { 171 java.util.List <String > removeList = 172 new ArrayList <String >(); 173 java.util.List <String > currentList = 174 ((TimeBase)datatype).getMinExclusives(); 175 if(currentList != null && currentList.size() > 0) { 176 for(int i=0;i<currentList.size();i++) 177 removeList.add(currentList.get(i)); 178 for(int i=0;i<removeList.size();i++) 179 ((TimeBase)datatype).removeMinExclusive(removeList.get(i)); 180 } 181 ((TimeBase)datatype).addMinExclusive(minExclusive.getValue()); 182 } 183 } 184 185 public void visit(MinInclusive minInclusive) { 186 assert (facetParent instanceof SimpleRestriction); 187 if(datatype instanceof NumberBase) { 188 java.util.List <Number > removeList = 189 new ArrayList <Number >(); 190 java.util.List <? extends Number > currentList = 191 ((NumberBase)datatype).getMinInclusives(); 192 if(currentList != null && currentList.size() > 0) { 193 for(int i=0;i<currentList.size();i++) 194 removeList.add(currentList.get(i)); 195 for(int i=0;i<removeList.size();i++) 196 ((NumberBase)datatype).removeMinInclusive(removeList.get(i)); 197 } 198 ((NumberBase)datatype).addMinInclusive( 199 NumberBase.toNumber(minInclusive.getValue())); 200 } else if(datatype instanceof TimeBase) { 201 java.util.List <String > removeList = 202 new ArrayList <String >(); 203 java.util.List <String > currentList = 204 ((TimeBase)datatype).getMinInclusives(); 205 if(currentList != null && currentList.size() > 0) { 206 for(int i=0;i<currentList.size();i++) 207 removeList.add(currentList.get(i)); 208 for(int i=0;i<removeList.size();i++) 209 ((TimeBase)datatype).removeMinInclusive(removeList.get(i)); 210 } 211 ((TimeBase)datatype).addMinInclusive(minInclusive.getValue()); 212 } 213 } 214 215 public void visit(MaxLength maxLength) { 216 assert (facetParent instanceof SimpleRestriction); 217 java.util.List <Number > removeList = 218 new ArrayList <Number >(); 219 java.util.List <? extends Number > currentList = datatype.getMaxLengths(); 220 if(currentList != null && currentList.size() > 0) { 221 for(int i=0;i<currentList.size();i++) 222 removeList.add(currentList.get(i)); 223 for(int i=0;i<removeList.size();i++) 224 datatype.removeMaxLength(removeList.get(i)); 225 } 226 datatype.addMaxLength(maxLength.getValue()); 227 } 228 229 public void visit(MinLength minLength) { 230 assert (facetParent instanceof SimpleRestriction); 231 java.util.List <Number > removeList = new ArrayList <Number >(); 232 java.util.List <? extends Number > currentList = datatype.getMinLengths(); 233 if(currentList != null && currentList.size() > 0) { 234 for(int i=0;i<currentList.size();i++) 235 removeList.add(currentList.get(i)); 236 for(int i=0;i<removeList.size();i++) 237 datatype.removeMinLength(removeList.get(i)); 238 } 239 datatype.addMinLength(minLength.getValue()); 240 } 241 242 public void visit(Pattern pattern) { 243 assert (facetParent instanceof SimpleRestriction); 244 datatype.addPattern(pattern.getValue()); 245 } 246 247 public void visit(TotalDigits totalDigits) { 248 assert (facetParent instanceof SimpleRestriction); 249 java.util.List <Number > removeList = 250 new ArrayList <Number >(); 251 java.util.List <? extends Number > currentList = datatype.getTotalDigits(); 252 if(currentList != null && currentList.size() > 0) { 253 for(int i=0;i<currentList.size();i++) 254 removeList.add(currentList.get(i)); 255 for(int i=0;i<removeList.size();i++) 256 datatype.removeTotalDigits(removeList.get(i)); 257 } 258 datatype.addTotalDigits(totalDigits.getValue()); 259 } 260 261 public void visit(Whitespace facet) { 262 assert (facetParent instanceof SimpleRestriction); 263 java.util.List <Whitespace.Treatment> removeList = 264 new ArrayList <Whitespace.Treatment>(); 265 java.util.List <Whitespace.Treatment> currentList = datatype.getWhiteSpaces(); 266 if(currentList != null && currentList.size() > 0) { 267 for(int i=0;i<currentList.size();i++) 268 removeList.add(currentList.get(i)); 269 for(int i=0;i<removeList.size();i++) 270 datatype.removeWhitespace(removeList.get(i)); 271 } 272 datatype.addWhitespace(facet.getValue()); 273 } 274 275 278 Datatype getDatatype(SchemaComponent component) { 279 if(component instanceof LocalAttribute) 280 return createDatatype((LocalAttribute)component); 281 if(component instanceof GlobalAttribute) 282 return createDatatype((GlobalAttribute)component); 283 if(component instanceof AttributeReference) 284 return createDatatype(((AttributeReference)component).getRef().get()); 285 if(component instanceof LocalElement) 286 return createDatatype((LocalElement)component); 287 if(component instanceof GlobalElement) 288 return createDatatype((GlobalElement)component); 289 if(component instanceof ElementReference) 290 return createDatatype(((ElementReference)component).getRef().get()); 291 if(component instanceof GlobalSimpleType) 292 return new CustomDatatype( 293 ((GlobalSimpleType)component).getName(), 294 createDatatype((SimpleType) component)); 295 296 return null; 297 } 298 299 302 Datatype getDatatype(SimpleType st) { 303 return createDatatype(st); 304 } 305 306 309 Datatype createDatatype(LocalAttribute attribute) { 310 if(attribute.getType() != null) { 311 datatype = createDatatype(attribute.getType().get()); 312 } else { 313 datatype = createDatatype(attribute.getInlineType()); 314 } 315 return datatype; 316 } 317 318 321 Datatype createDatatype(GlobalAttribute attribute) { 322 if(attribute.getType() != null) { 323 datatype = createDatatype(attribute.getType().get()); 324 } else { 325 datatype = createDatatype(attribute.getInlineType()); 326 } 327 return datatype; 328 } 329 330 333 Datatype createDatatype(LocalElement le) { 334 if(le.getType() != null) { 335 if(le.getType().get() instanceof SimpleType) 336 datatype = createDatatype((SimpleType) le.getType().get()); 337 } else { 338 if(le.getInlineType() instanceof SimpleType) 339 datatype = createDatatype((SimpleType) le.getInlineType()); 340 } 341 return datatype; 342 } 343 344 347 Datatype createDatatype(GlobalElement ge) { 348 if(ge.getType() != null) { 349 if(ge.getType().get() instanceof SimpleType) 350 datatype = createDatatype((SimpleType) ge.getType().get()); 351 } else { 352 if(ge.getInlineType() instanceof SimpleType) 353 datatype = createDatatype((SimpleType) ge.getInlineType()); 354 } 355 return datatype; 356 } 357 358 Datatype createDatatype(final SimpleType simpleType) { 359 datatype = null; 360 try { 361 datatype = doCreateDatatype(simpleType); 362 if(simpleType instanceof GlobalSimpleType && 363 this.model != null) { 364 String name = ((GlobalSimpleType)simpleType).getName(); 365 for(GlobalSimpleType gst:this.model.getSchemaModel().getSchema().getSimpleTypes()) 366 if(gst.getName().equals(name)) 367 return new CustomDatatype(name, datatype); 368 } 369 }catch(Throwable th) { 370 th.printStackTrace(); 371 } 372 return datatype; 373 } 374 375 Datatype doCreateDatatype(final SimpleType simpleType) { 376 if(simpleType == null) return null; 377 if(simpleType instanceof GlobalSimpleType) { 378 datatype = DatatypeFactory.getDefault(). 379 createPrimitive(((GlobalSimpleType)simpleType).getName()); 380 } 381 if(datatype == null) { SimpleTypeDefinition def = simpleType.getDefinition(); 383 if(def instanceof SimpleTypeRestriction) { 384 GlobalSimpleType baseType = null; 385 if(((SimpleTypeRestriction)def).getBase() != null) { 386 baseType = (GlobalSimpleType)((SimpleTypeRestriction)def).getBase().get(); 387 datatype = doCreateDatatype(baseType); 388 SimpleRestriction r = (SimpleRestriction)def; 389 facetParent = r; 390 findFacets(r); 391 } else 392 datatype = doCreateDatatype(((SimpleTypeRestriction)def).getInlineType()); 393 } else if(def instanceof org.netbeans.modules.xml.schema.model.List) { 394 org.netbeans.modules.xml.schema.model.List l = 395 (org.netbeans.modules.xml.schema.model.List)def; 396 if(l.getType() != null) 397 datatype = doCreateDatatype(l.getType().get()); 398 else 399 datatype = doCreateDatatype(l.getInlineType()); 400 } else if(def instanceof Union) { 401 Union u = (Union)def; 402 Datatype unionType = new UnionType(); 403 404 if(u.getMemberTypes() != null) { 405 for(NamedComponentReference<GlobalSimpleType> gst:u.getMemberTypes()) { 406 Datatype memberType = doCreateDatatype(gst.get()); 407 if(memberType != null) 408 ((UnionType)unionType).addMemberType(memberType); 409 } 410 } 411 if(u.getInlineTypes() != null) { 412 for(LocalSimpleType lst:u.getInlineTypes()) { 413 datatype = null; 414 Datatype memberType = doCreateDatatype(lst); 415 if(memberType != null) 416 ((UnionType)unionType).addMemberType(memberType); 417 } 418 if(u.getInlineTypes().size() > 0) 419 ((UnionType)unionType).setHasFacets(true); 420 } 421 return unionType; 422 } 423 } 424 return datatype; 425 } 426 427 void findFacets(final SimpleRestriction r) { 428 findFacets(r.getEnumerations()); 429 findFacets(r.getFractionDigits()); 430 findFacets(r.getLengths()); 431 findFacets(r.getMaxExclusives()); 432 findFacets(r.getMaxInclusives()); 433 findFacets(r.getMaxLengths()); 434 findFacets(r.getMinExclusives()); 435 findFacets(r.getMinInclusives()); 436 findFacets(r.getMinLengths()); 437 findFacets(r.getPatterns()); 438 findFacets(r.getTotalDigits()); 439 findFacets(r.getWhitespaces()); 440 } 441 442 Datatype findPrimitive(Schema schema, String typeName) { 443 Collection <GlobalSimpleType> gsts = schema.getSimpleTypes(); 444 for(GlobalSimpleType gst:gsts) { 445 if(gst.getName().equals(typeName)) { 446 return createDatatype(gst); 447 } 448 } 449 return null; 450 } 451 452 void findFacets(Collection <? extends SchemaComponent> facets) { 453 for(SchemaComponent facet:facets) { 454 facet.accept(this); 455 } 456 } 457 458 Datatype getDatatype() { 459 return datatype; 460 } 461 462 private Datatype datatype; 463 private SimpleRestriction facetParent; 464 AXIModelImpl model; 465 } 466 | Popular Tags |