1 19 20 package org.netbeans.modules.xml.wsdl.ui.view.treeeditor.newtype; 21 22 import java.util.ArrayList ; 23 import java.util.HashMap ; 24 import java.util.List ; 25 26 import javax.xml.namespace.QName ; 27 28 import org.netbeans.modules.xml.schema.model.Element; 29 import org.netbeans.modules.xml.wsdl.model.ExtensibilityElement; 30 import org.netbeans.modules.xml.wsdl.model.WSDLComponent; 31 import org.netbeans.modules.xml.wsdl.ui.schema.visitor.CreateAddSchemaElementActionVisitor; 32 import org.netbeans.modules.xml.wsdl.ui.schema.visitor.SchemaElementMinMaxOccursFinderVisitor; 33 import org.netbeans.modules.xml.xam.Nameable; 34 import org.openide.util.datatransfer.NewType; 35 36 40 public class ExtensibilityElementChildNewTypesFactory implements NewTypesFactory { 41 42 private Element mElement; 43 44 45 public ExtensibilityElementChildNewTypesFactory(Element element) { 46 mElement = element; 47 } 48 49 @SuppressWarnings ("boxing") 50 public NewType[] getNewTypes(WSDLComponent component) { 51 ArrayList <ExtensibilityElementChildNewType> eeNewTypeList = new ArrayList <ExtensibilityElementChildNewType>(); 52 if(mElement != null) { 53 CreateAddSchemaElementActionVisitor casActionVisitor = new CreateAddSchemaElementActionVisitor(); 54 mElement.accept(casActionVisitor); 55 List <Element> elements = casActionVisitor.getElements(); 56 if (elements != null) { 57 List <ExtensibilityElement> children = component.getChildren(ExtensibilityElement.class); 58 HashMap <QName , Integer > qnameMap= new HashMap <QName , Integer >(); 59 if (children != null) { 60 for (ExtensibilityElement child : children) { 61 QName qname = child.getQName(); 62 if (qnameMap.containsKey(qname)) { 63 qnameMap.put(qname, qnameMap.get(qname).intValue() + 1); 64 } else { 65 qnameMap.put(qname, 1); 66 } 67 } 68 } 69 70 for (Element element : elements) { 71 SchemaElementMinMaxOccursFinderVisitor semmFinder = new SchemaElementMinMaxOccursFinderVisitor(); 72 element.accept(semmFinder); 73 int maxOccurs = semmFinder.getMaxOccurs(); 74 75 if (element instanceof Nameable) { 76 Nameable nameable = (Nameable) element; 77 QName elementQName = new QName (element.getModel().getSchema().getTargetNamespace(), nameable.getName()); 78 if (!qnameMap.containsKey(elementQName) || maxOccurs > qnameMap.get(elementQName).intValue()) { 79 eeNewTypeList.add(new ExtensibilityElementChildNewType(component, element)); 80 } 81 } 82 83 } 84 } 85 } 86 return eeNewTypeList.toArray(new NewType[eeNewTypeList.size()]); 87 } 88 89 } 90 | Popular Tags |