1 19 20 package org.netbeans.modules.xml.wsdl.ui.property.model; 21 22 import java.util.ArrayList ; 23 import java.util.Collection ; 24 import java.util.HashMap ; 25 import java.util.Iterator ; 26 import java.util.List ; 27 import java.util.Map ; 28 29 import org.netbeans.modules.xml.schema.model.All; 30 import org.netbeans.modules.xml.schema.model.AnyAttribute; 31 import org.netbeans.modules.xml.schema.model.AnyElement; 32 import org.netbeans.modules.xml.schema.model.AttributeGroupReference; 33 import org.netbeans.modules.xml.schema.model.AttributeReference; 34 import org.netbeans.modules.xml.schema.model.Choice; 35 import org.netbeans.modules.xml.schema.model.ComplexContent; 36 import org.netbeans.modules.xml.schema.model.ComplexContentDefinition; 37 import org.netbeans.modules.xml.schema.model.ComplexContentRestriction; 38 import org.netbeans.modules.xml.schema.model.ComplexExtension; 39 import org.netbeans.modules.xml.schema.model.ComplexExtensionDefinition; 40 import org.netbeans.modules.xml.schema.model.ComplexType; 41 import org.netbeans.modules.xml.schema.model.ComplexTypeDefinition; 42 import org.netbeans.modules.xml.schema.model.ElementReference; 43 import org.netbeans.modules.xml.schema.model.GlobalAttribute; 44 import org.netbeans.modules.xml.schema.model.GlobalAttributeGroup; 45 import org.netbeans.modules.xml.schema.model.GlobalComplexType; 46 import org.netbeans.modules.xml.schema.model.GlobalElement; 47 import org.netbeans.modules.xml.schema.model.GlobalGroup; 48 import org.netbeans.modules.xml.schema.model.GlobalSimpleType; 49 import org.netbeans.modules.xml.schema.model.GlobalType; 50 import org.netbeans.modules.xml.schema.model.GroupReference; 51 import org.netbeans.modules.xml.schema.model.LocalAttribute; 52 import org.netbeans.modules.xml.schema.model.LocalComplexType; 53 import org.netbeans.modules.xml.schema.model.LocalElement; 54 import org.netbeans.modules.xml.schema.model.LocalGroupDefinition; 55 import org.netbeans.modules.xml.schema.model.LocalSimpleType; 56 import org.netbeans.modules.xml.schema.model.LocalType; 57 import org.netbeans.modules.xml.schema.model.NameableSchemaComponent; 58 import org.netbeans.modules.xml.schema.model.Schema; 59 import org.netbeans.modules.xml.schema.model.SchemaComponent; 60 import org.netbeans.modules.xml.schema.model.Sequence; 61 import org.netbeans.modules.xml.schema.model.SequenceDefinition; 62 import org.netbeans.modules.xml.schema.model.SimpleContent; 63 import org.netbeans.modules.xml.schema.model.SimpleContentRestriction; 64 import org.netbeans.modules.xml.schema.model.SimpleExtension; 65 import org.netbeans.modules.xml.schema.model.SimpleType; 66 import org.netbeans.modules.xml.schema.model.SimpleTypeRestriction; 67 import org.netbeans.modules.xml.schema.model.TypeContainer; 68 import org.netbeans.modules.xml.xam.dom.NamedComponentReference; 69 70 74 public class SchemaComponentBundleKeyGenerator extends AbstractXSDVisitor { 75 76 private List mChildren = new ArrayList (); 77 78 private StringBuffer mBuffer = new StringBuffer (200); 79 80 private NameableSchemaComponent mCurrentElement; 81 82 private Map <NameableSchemaComponent, ElementToKeyName> elementToKeyNameMap = new HashMap <NameableSchemaComponent, ElementToKeyName>(); 83 84 private Schema mSchema; 85 86 87 public SchemaComponentBundleKeyGenerator() { 88 } 89 90 91 92 public String getKey() { 93 return mBuffer.toString(); 94 } 95 96 @Override 97 public void visit(LocalAttribute la) { 98 visitAttribute(la); 99 } 100 101 @Override 102 public void visit(AttributeReference reference) { 103 NamedComponentReference<GlobalAttribute> ga = reference.getRef(); 104 if(ga != null) { 105 visit(ga.get()); 106 } 107 } 108 109 @Override 110 public void visit(GlobalAttribute ga) { 111 visitAttribute(ga); 112 } 113 114 @Override 115 public void visit(AttributeGroupReference agr) { 116 NamedComponentReference<GlobalAttributeGroup> aGroup = agr.getGroup(); 117 if(aGroup != null) { 118 visit(aGroup.get()); 119 } 120 } 121 122 123 @Override 124 public void visit(GlobalAttributeGroup gag) { 125 List <SchemaComponent> children = gag.getChildren(); 126 Iterator <SchemaComponent> it = children.iterator(); 127 128 while(it.hasNext()) { 129 SchemaComponent sc = it.next(); 130 if(sc instanceof LocalAttribute) { 131 visit((LocalAttribute) sc); 132 } else if(sc instanceof AttributeReference) { 133 visit((AttributeReference) sc ); 134 } else if(sc instanceof AttributeGroupReference) { 135 visit((AttributeGroupReference) sc); 136 } 137 } 138 139 } 140 141 @Override 142 public void visit(ElementReference er) { 143 NamedComponentReference<GlobalElement> ge = er.getRef(); 144 if(ge != null && ge.get() != null) { 145 visit(ge.get()); 146 } 147 } 148 149 @Override 150 public void visit(GlobalElement ge) { 151 visitElement(ge); 152 153 } 154 155 @Override 156 public void visit(All all) { 157 Collection <LocalElement> allElements = all.getElements(); 158 Iterator <LocalElement> it = allElements.iterator(); 159 while(it.hasNext()) { 160 LocalElement element = it.next(); 161 visit(element); 162 } 163 } 164 165 @Override 166 public void visit(AnyAttribute anyAttr) { 167 168 } 169 170 @Override 171 public void visit(AnyElement any) { 172 173 } 174 175 176 @Override 177 public void visit(Choice choice) { 178 List <SchemaComponent> children = choice.getChildren(); 179 Iterator <SchemaComponent> it = children.iterator(); 180 181 while(it.hasNext()) { 182 SchemaComponent comp = it.next(); 183 if(comp instanceof AnyElement) { 184 visit((AnyElement) comp); 185 } else if(comp instanceof Choice) { 186 visit((Choice) comp); 187 } else if(comp instanceof ElementReference) { 188 visit((ElementReference) comp); 189 } else if(comp instanceof GroupReference) { 190 visit((GroupReference) comp); 191 } else if(comp instanceof LocalElement) { 192 visit((LocalElement) comp); 193 } else if(comp instanceof Sequence) { 194 visit((Sequence) comp); 195 } 196 } 197 } 198 199 @Override 200 public void visit(ComplexContent cc) { 201 202 ComplexContentDefinition ccd = cc.getLocalDefinition(); 203 if(ccd != null) { 204 visit(ccd); 205 } 206 } 207 208 209 210 211 @Override 212 public void visit(GlobalComplexType gct) { 213 visit((GlobalType) gct); 214 } 215 216 @Override 217 public void visit(GlobalGroup gd) { 218 LocalGroupDefinition lgd = gd.getDefinition(); 219 if(lgd != null) { 220 if(lgd instanceof Choice) { 221 visit((Choice) lgd); 222 } else if(lgd instanceof All) { 223 visit((All) lgd ); 224 } else if(lgd instanceof Sequence) { 225 visit((Sequence)lgd); 226 } 227 } 228 } 229 230 @Override 231 public void visit(GlobalSimpleType gst) { 232 visit((GlobalType) gst); 233 } 234 235 @Override 236 public void visit(GroupReference gr) { 237 NamedComponentReference<GlobalGroup> gg = gr.getRef(); 238 if(gg != null) { 239 visit(gg.get()); 240 } 241 } 242 243 @Override 244 public void visit(LocalComplexType type) { 245 visit((LocalType) type); 246 } 247 248 @Override 249 public void visit(LocalElement le) { 250 visitElement(le); 251 } 252 253 @Override 254 public void visit(LocalSimpleType type) { 255 visit((LocalType) type); 256 } 257 258 @Override 259 public void visit(Sequence s) { 260 visit(s.getContent()); 261 } 262 263 @Override 264 public void visit(SimpleContent sc) { 265 266 } 267 268 @Override 269 public void visit(SimpleContentRestriction scr) { 270 271 } 272 273 @Override 274 public void visit(SimpleExtension se) { 275 276 } 277 278 @Override 279 public void visit(SimpleTypeRestriction str) { 280 281 } 282 283 public void visit(GlobalType gt) { 284 if(gt instanceof ComplexType) { 285 visit((ComplexType) gt); 286 } else if(gt instanceof SimpleType) { 287 visit((SimpleType) gt); 288 } 289 } 290 291 public void visit(LocalType lt) { 292 if(lt instanceof ComplexType) { 293 visit((ComplexType) lt); 294 } else if(lt instanceof SimpleType) { 295 visit((SimpleType) lt); 296 } 297 } 298 299 300 private void visit(SimpleType st) { 301 } 302 303 private void visit(ComplexType ct) { 304 List <SchemaComponent> children = ct.getChildren(); 305 Iterator <SchemaComponent> it = children.iterator(); 306 while(it.hasNext()) { 307 SchemaComponent sc = it.next(); 308 if(sc instanceof AnyAttribute) { 309 visit((AnyAttribute) sc ); 310 } else if(sc instanceof AttributeGroupReference) { 311 visit((AttributeGroupReference) sc); 312 }else if(sc instanceof AttributeReference) { 313 visit((AttributeReference) sc); 314 }else if(sc instanceof LocalAttribute) { 315 visit((LocalAttribute) sc); 316 }else if(sc instanceof ComplexTypeDefinition) { 317 visit((ComplexTypeDefinition) sc); 318 } 319 } 320 321 324 } 325 326 private void visit(ComplexTypeDefinition ctd) { 327 if (ctd instanceof All) { 328 visit((All) ctd); 329 } else if (ctd instanceof Choice) { 330 visit((Choice) ctd); 331 } else if (ctd instanceof Sequence) { 332 visit((Sequence) ctd); 333 } else if(ctd instanceof ComplexContent) { 334 visit((ComplexContent) ctd); 335 } else if(ctd instanceof GroupReference) { 336 visit((GroupReference) ctd); 337 } else if (ctd instanceof SimpleContent) { 338 visit((SimpleContent) ctd); 339 } 340 } 341 342 private void visit(ComplexContentDefinition ccd) { 343 344 if(ccd instanceof ComplexContentRestriction) { 345 visit((ComplexContentRestriction) ccd); 346 } else if(ccd instanceof ComplexExtension) { 347 visit((ComplexExtension) ccd); 348 } 349 350 } 351 352 @Override 353 public void visit(ComplexContentRestriction ccr) { 354 NamedComponentReference<GlobalComplexType> baseRef = ccr.getBase(); 355 if(baseRef != null) { 356 GlobalComplexType gType = baseRef.get(); 357 if(gType != null) { 358 visit(gType); 359 } 360 } 361 362 List children = ccr.getChildren(); 363 Iterator it = children.iterator(); 364 while(it.hasNext()) { 365 Object child = it.next(); 366 367 if(child instanceof AnyAttribute) { 368 visit((AnyAttribute) child); 369 } else if(child instanceof AttributeGroupReference) { 370 visit((AttributeGroupReference) child); 371 } else if(child instanceof AttributeReference) { 372 visit((AttributeReference) child); 373 } else if (child instanceof ComplexTypeDefinition) { 374 visit((ComplexTypeDefinition) child); 375 } 376 } 377 } 378 379 @Override 380 public void visit(ComplexExtension ce) { 381 NamedComponentReference<GlobalType> baseRef = ce.getBase(); 382 if(baseRef != null) { 383 GlobalType gType = baseRef.get(); 384 if(gType != null) { 385 visit(gType); 386 } 387 } 388 389 List children = ce.getChildren(); 390 Iterator it = children.iterator(); 391 while(it.hasNext()) { 392 Object child = it.next(); 393 394 if(child instanceof LocalAttribute) { 395 visit((LocalAttribute) child); 396 }else if(child instanceof AnyAttribute) { 397 visit((AnyAttribute) child); 398 } else if(child instanceof AttributeGroupReference) { 399 visit((AttributeGroupReference) child); 400 } else if(child instanceof AttributeReference) { 401 visit((AttributeReference) child); 402 } else if (child instanceof ComplexExtensionDefinition) { 403 visit((ComplexExtensionDefinition) child); 404 } 405 } 406 } 407 408 409 private void visit(ComplexExtensionDefinition ced) { 410 if (ced instanceof All) { 411 visit((All) ced); 412 } else if (ced instanceof Choice) { 413 visit((Choice) ced); 414 } else if (ced instanceof Sequence) { 415 visit((Sequence) ced); 416 } else if(ced instanceof GroupReference) { 417 visit((GroupReference) ced); 418 } 419 } 420 421 private void visit(List <SequenceDefinition> sdList) { 422 Iterator <SequenceDefinition> it = sdList.iterator(); 423 while(it.hasNext()) { 424 SequenceDefinition sd = it.next(); 425 if(sd instanceof Sequence) { 426 visit((Sequence) sd); 427 } else if(sd instanceof AnyElement) { 428 visit((AnyElement) sd); 429 } else if(sd instanceof Choice) { 430 visit((Choice) sd); 431 } else if(sd instanceof ElementReference) { 432 visit((ElementReference) sd); 433 } else if(sd instanceof GroupReference) { 434 visit((GroupReference) sd); 435 } else if(sd instanceof LocalElement) { 436 visit((LocalElement) sd); 437 } 438 439 } 440 } 441 442 void visitAttribute(NameableSchemaComponent la) { 443 StringBuffer key = new StringBuffer (20); 444 String elementPrefix = getElementPrefix(); 445 if(elementPrefix != null) { 446 key.append(elementPrefix); 447 key.append("_"); 448 } 449 450 key.append(la.getName()); 451 storeKeyValue(key.toString(), la.getName()); 452 } 453 454 private void visitElement(NameableSchemaComponent ge) { 455 StringBuffer key = new StringBuffer (20); 456 457 ElementToKeyName ekn = elementToKeyNameMap.get(mCurrentElement); 458 if(ekn != null) { 459 String prefix = ekn.getKeyPrefix(); 460 key.append(prefix); 461 key.append("_"); 462 } 463 key.append(ge.getName()); 464 storeKeyValue(key.toString(), ge.getName()); 465 466 ElementToKeyName newEkn = new ElementToKeyName(ge, key.toString()); 467 elementToKeyNameMap.put(ge, newEkn); 468 469 if(ge instanceof TypeContainer) { 470 TypeContainer tc = (TypeContainer) ge; 471 LocalType lt = tc.getInlineType(); 472 NamedComponentReference gtRef = tc.getType(); 473 if(lt != null) { 474 visit(lt); 475 } else if(gtRef != null && gtRef.getType() != null) { 476 visit((GlobalType) gtRef.get()); 477 } 478 } 479 } 480 481 private String getElementPrefix() { 482 String elementPrefix = null; 483 if(mCurrentElement != null) { 484 ElementToKeyName ekn = elementToKeyNameMap.get(mCurrentElement); 485 if(ekn != null) { 486 elementPrefix = ekn.getKeyPrefix(); 487 } 488 489 } 490 491 return elementPrefix; 492 } 493 private void storeKeyValue(String key, String value) { 494 mBuffer.append(key); 495 mBuffer.append("="); 496 mBuffer.append(value); 497 mBuffer.append("\n"); 498 } 499 500 501 class ElementToKeyName { 502 503 private NameableSchemaComponent mElement; 504 505 private String mKeyPrefix; 506 507 508 ElementToKeyName(NameableSchemaComponent element, String keyPrefix) { 509 this.mElement = element; 510 this.mKeyPrefix = keyPrefix; 511 512 } 513 514 515 public NameableSchemaComponent getElement() { 516 return this.mElement; 517 } 518 519 public String getKeyPrefix() { 520 return this.mKeyPrefix; 521 } 522 523 } 524 525 } 526 | Popular Tags |