001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     * 
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     * 
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */ 
017    package org.apache.commons.betwixt;
018    
019    /** <p> Common superclass for <code>ElementDescriptor</code> 
020      * and <code>AttributeDescriptor</code>.</p>
021      *
022      * <p> Nodes can have just a local name
023      * or they can have a local name, qualified name and a namespace uri.</p>
024      *
025      * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
026      * @version $Revision: 438373 $
027      */
028    public class NodeDescriptor extends Descriptor {
029    
030        /** The local name of this node without any namespace prefix */
031        private String localName;
032        /** The qualified name of the xml node associated with this descriptor. */
033        private String qualifiedName;
034        /** The namespace URI of this node */
035        private String uri = "";
036        
037        /** Base constructor */
038        public NodeDescriptor() {
039        }
040    
041        /** 
042         * Creates a NodeDescriptor with no namespace URI or prefix.
043         *
044         * @param localName the (xml) local name of this node. 
045         * This will be used to set both qualified and local name for this name.
046         */
047        public NodeDescriptor(String localName) {
048            this.localName = localName;
049            this.qualifiedName = localName;
050        }
051    
052    
053        /**  
054         * Creates a NodeDescriptor with namespace URI and qualified name 
055         * @param localName the (xml) local name of this  node
056         * @param qualifiedName the (xml) qualified name of this node
057         * @param uri the (xml) namespace prefix of this node
058         */
059        public NodeDescriptor(String localName, String qualifiedName, String uri) {
060            this.localName = localName;
061            this.qualifiedName = qualifiedName;
062            this.uri = uri;
063        }
064    
065        /** 
066         * Gets the local name, excluding any namespace prefix 
067         * @return the (xml) local name of this node
068         */
069        public String getLocalName() {
070            return localName;
071        }
072    
073        /** 
074         * Sets the local name 
075         * @param localName the (xml) local name of this node
076         */
077        public void setLocalName(String localName) {
078            this.localName = localName;
079        }    
080        
081        /** 
082         * Gets the qualified name, including any namespace prefix 
083         * @return the (xml) qualified name of this node. This may be null.
084         */
085        public String getQualifiedName() {
086            if ( qualifiedName == null ) {
087                qualifiedName = localName;
088            }
089            return qualifiedName;
090        }
091        
092        /** 
093         * Sets the qualified name
094         * @param qualifiedName the new (xml) qualified name for this node
095         */
096        public void setQualifiedName(String qualifiedName) {
097            this.qualifiedName = qualifiedName;
098        }    
099        
100        /**  
101         * Gets the (xml) namespace URI prefix for this node.
102         * @return the namespace URI that this node belongs to 
103         * or "" if there is no namespace defined 
104         */
105        public String getURI() {
106            return uri;
107        }
108        
109    
110        /** 
111         * Sets the namespace URI that this node belongs to.
112         * @param uri the new namespace uri for this node
113         */
114        public void setURI(String uri) {
115            if ( uri == null ) {
116                throw new IllegalArgumentException( 
117                    "The namespace URI cannot be null. " 
118                    + "No namespace URI is specified with the empty string" 
119                );
120            }
121            this.uri = uri;
122        }
123    }