1 19 package org.netbeans.modules.xml.wsdl.ui.api.property; 20 21 import javax.xml.namespace.QName ; 22 23 import org.netbeans.modules.xml.wsdl.model.ExtensibilityElement; 24 import org.netbeans.modules.xml.wsdl.model.Message; 25 import org.netbeans.modules.xml.wsdl.model.Part; 26 import org.netbeans.modules.xml.wsdl.model.WSDLModel; 27 import org.netbeans.modules.xml.wsdl.ui.netbeans.module.Utility; 28 29 public class ElementOrTypeOrMessagePartProvider { 30 31 private final ExtensibilityElement extensibilityElement; 32 private final String typeAttributeName; 33 private final String elementAttributeName; 34 private final String messageAttributeName; 35 private final String partAttributeName; 36 37 public ElementOrTypeOrMessagePartProvider(ExtensibilityElement extensibilityElement, 38 String elementAttributeName, 39 String typeAttributeName, 40 String messageAttributeName, 41 String partAttributeName) { 42 this.extensibilityElement = extensibilityElement; 43 this.elementAttributeName = elementAttributeName; 44 this.typeAttributeName = typeAttributeName; 45 this.messageAttributeName = messageAttributeName; 46 this.partAttributeName = partAttributeName; 47 } 48 49 public void setValue(ElementOrTypeOrMessagePart o) { 50 if (o == null) { 51 return; 52 } 53 54 55 if (getModel().startTransaction()) { 56 try { 57 ParameterType pType = o.getParameterType(); 58 59 switch (pType) { 60 case ELEMENT: 61 Utility.addNamespacePrefix(o.getElement().getModel().getSchema(), extensibilityElement.getModel(), null); 62 extensibilityElement.setAttribute(elementAttributeName, o.toString()); 63 extensibilityElement.setAttribute(typeAttributeName, null); 64 extensibilityElement.setAttribute(messageAttributeName, null); 65 extensibilityElement.setAttribute(partAttributeName, null); 66 break; 67 case TYPE: 68 Utility.addNamespacePrefix(o.getType().getModel().getSchema(), extensibilityElement.getModel(), null); 69 extensibilityElement.setAttribute(elementAttributeName, null); 70 extensibilityElement.setAttribute(typeAttributeName, o.toString()); 71 extensibilityElement.setAttribute(messageAttributeName, null); 72 extensibilityElement.setAttribute(partAttributeName, null); 73 break; 74 case MESSAGEPART: 75 Part part = o.getMessagePart(); 76 Message message = (Message)part.getParent(); 77 String tns = message.getModel().getDefinitions().getTargetNamespace(); 78 QName qname = new QName (message.getName()); 79 if (tns != null) { 80 String prefix = Utility.getNamespacePrefix(tns, extensibilityElement.getModel()); 81 qname = prefix != null ? new QName (tns, message.getName(), prefix) : 82 new QName (tns, message.getName()); 83 } 84 85 extensibilityElement.setAttribute(messageAttributeName, Utility.fromQNameToString(qname)); 86 extensibilityElement.setAttribute(partAttributeName, part.getName()); 87 extensibilityElement.setAttribute(elementAttributeName, null); 88 extensibilityElement.setAttribute(typeAttributeName, null); 89 break; 90 case NONE: 91 extensibilityElement.setAttribute(elementAttributeName, null); 92 extensibilityElement.setAttribute(typeAttributeName, null); 93 extensibilityElement.setAttribute(typeAttributeName, null); 94 extensibilityElement.setAttribute(elementAttributeName, null); 95 } 96 } finally { 97 getModel().endTransaction(); 98 } 99 } 100 } 101 102 public ElementOrTypeOrMessagePart getValue() { 103 ParameterType parameterType = ParameterType.NONE; 104 105 String message = extensibilityElement.getAttribute(messageAttributeName); 106 String part = extensibilityElement.getAttribute(partAttributeName); 107 String type = extensibilityElement.getAttribute(typeAttributeName); 108 String element = extensibilityElement.getAttribute(elementAttributeName); 109 110 String value = null; 111 112 if (element != null) { 113 parameterType = ParameterType.ELEMENT; 114 value = element; 115 } else if (type != null) { 116 value = type; 117 parameterType = ParameterType.TYPE; 118 } else if (message != null) { 119 parameterType = ParameterType.MESSAGEPART; 120 value = message; 121 } 122 123 124 125 if (extensibilityElement.getModel() == null) { return null; 127 } 128 129 QName qname = getQName(value); 130 if (parameterType == ParameterType.MESSAGEPART) { 131 return new ElementOrTypeOrMessagePart(qname, extensibilityElement.getModel(), part); 132 } 133 return new ElementOrTypeOrMessagePart(qname, extensibilityElement.getModel(), parameterType); 134 } 135 136 private QName getQName(String value) { 137 if (value != null && value.trim().length() > 0) { 138 String [] parts = value.split(":"); 139 if (parts != null && parts.length == 2) { 140 String prefix = parts[0]; 141 String localPart = parts[1]; 142 String namespace = Utility.getNamespaceURI(prefix, extensibilityElement); 143 return new QName (namespace, localPart, prefix); 144 } 145 return new QName (getModel().getDefinitions().getTargetNamespace(), value); 146 } 147 return new QName (""); 148 } 149 150 public WSDLModel getModel() { 151 return extensibilityElement.getModel(); 152 } 153 154 public static enum ParameterType { 155 156 ELEMENT, TYPE, MESSAGEPART, NONE 157 } 158 } 159 | Popular Tags |