001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.modules.xml.wsdl.ui.api.property;
043:
044: import javax.xml.namespace.QName;
045:
046: import org.netbeans.modules.xml.schema.model.GlobalElement;
047: import org.netbeans.modules.xml.schema.model.GlobalType;
048: import org.netbeans.modules.xml.wsdl.model.WSDLModel;
049: import org.netbeans.modules.xml.wsdl.ui.actions.NameGenerator;
050: import org.netbeans.modules.xml.wsdl.ui.netbeans.module.Utility;
051: import org.netbeans.modules.xml.xam.dom.AbstractDocumentComponent;
052:
053: public class ElementOrType {
054: GlobalElement mElement;
055: GlobalType mType;
056: QName mQName;
057: boolean isElement;
058: WSDLModel mModel;
059:
060: public ElementOrType(GlobalElement ele, WSDLModel model) {
061: mElement = ele;
062: mModel = model;
063: }
064:
065: public ElementOrType(GlobalType type, WSDLModel model) {
066: mType = type;
067: mModel = model;
068: }
069:
070: public ElementOrType(QName qname, WSDLModel model, boolean isElement) {
071: this .isElement = isElement;
072: mQName = qname;
073: mModel = model;
074:
075: if (isElement) {
076: mElement = Utility.findGlobalElement(model, mQName);
077: } else {
078: mType = Utility.findGlobalType(model, mQName);
079: }
080: }
081:
082: public boolean isElement() {
083: return isElement || mElement != null;
084: }
085:
086: public GlobalElement getElement() {
087: return mElement;
088: }
089:
090: public GlobalType getType() {
091: return mType;
092: }
093:
094: @Override
095: public String toString() {
096: if (mQName != null) {
097: return Utility.fromQNameToString(mQName);
098: }
099:
100: String namespace = null;
101: String localPart = null;
102: if (mElement != null) {
103: namespace = mElement.getModel().getSchema()
104: .getTargetNamespace();
105: localPart = mElement.getName();
106: }
107: if (mType != null) {
108: namespace = mType.getModel().getSchema()
109: .getTargetNamespace();
110: localPart = mType.getName();
111: }
112:
113: if (namespace == null) {
114: return localPart;
115: }
116: if (mModel == null) {
117: return new QName(namespace, localPart).toString();
118: }
119: String namespacePrefix = Utility.getNamespacePrefix(namespace,
120: mModel);
121: if (namespacePrefix == null) {
122: namespacePrefix = NameGenerator.getInstance()
123: .generateNamespacePrefix(null, mModel);
124: boolean isInTransaction = Utility.startTransaction(mModel);
125: ((AbstractDocumentComponent) mModel.getDefinitions())
126: .addPrefix(namespacePrefix, namespace);
127:
128: Utility.endTransaction(mModel, isInTransaction);
129: }
130:
131: return namespacePrefix + ":" + localPart;
132: }
133: }
|