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.io.read;
018    
019    import org.apache.commons.betwixt.ElementDescriptor;
020    import org.xml.sax.Attributes;
021    
022    /**  
023      * Describes a mapping between an xml element and a betwixt element.
024      *
025      * @author Robert Burrell Donkin
026      * @since 0.5
027      */
028    public class ElementMapping {
029        
030        /** Namespace of the xml element */
031        private String namespace;
032        /** Name of the element */
033        private String name;
034        /** Attributes associated with this element */
035        private Attributes attributes;
036        /** The base type of the mapped bean */
037        private Class type;
038        /** The mapped descriptor */
039        private ElementDescriptor descriptor;
040       
041        /** Base constructor */ 
042        public ElementMapping() {}
043        
044        /**
045          * Gets the namespace URI or an empty string if the parser is not namespace aware 
046          * or the element has no namespace.
047          * @return namespace possibly null
048          */
049        public String getNamespace() {
050            return namespace;
051        }
052        
053        /** 
054          * Sets the namespace URI for this element
055          * @param namespace the namespace uri, possibly null
056          */
057        public void setNamespace(String namespace) {
058            this.namespace = namespace;
059        }
060        
061        /** 
062          * Gets the local name if the parser is namespace aware, otherwise the name.
063          * @return the element name, possibly null
064          */
065        public String getName() {
066            return name;
067        }
068        
069        /**
070          * Sets the local name for this element.
071          * @param name the element name, possibly null
072          */
073        public void setName(String name) {
074            this.name = name;
075        }
076        
077        /**
078          * Gets the element's attributes.
079          * @return the Attributes for this element, possibly null.
080          */
081        public Attributes getAttributes() {
082            return attributes;
083        }
084        
085        /** 
086          * Sets the element's attributes 
087          * @param attributes the element's attributes, possibly null
088          */ 
089        public void setAttributes(Attributes attributes) {
090            this.attributes = attributes;
091        }
092        
093        /**
094          * Gets the base type for this element.
095          * The base type may - or may not - correspond to the created type.
096          * @return the Class of the base type for this element
097          */
098        public Class getType() {
099            return type;
100        }
101        
102        /**
103          * Sets the base type for this element.
104          * The base type may - or may not - correspond to the created type.
105          * @param type the Class of the base type for this element
106          */
107        public void setType(Class type) {
108            this.type = type;
109        }
110        
111        /**
112          * Gets the mapped element descriptor.
113          * @return the mapped ElementDescriptor
114          */
115        public ElementDescriptor getDescriptor() {
116            return descriptor;
117        }
118        
119        /** 
120          * Sets the mapped element descriptor.
121          * @param descriptor set this descriptor
122          */
123        public void setDescriptor(ElementDescriptor descriptor) {
124            this.descriptor = descriptor;
125        }
126        
127        /**
128         * Returns something useful for logging.
129         * @since 0.8
130         */
131        public String toString() {
132            StringBuffer buffer = new StringBuffer();
133            buffer.append("ElementMapping[");
134            buffer.append(name);
135            buffer.append(" -> ");
136            buffer.append(type);
137            buffer.append("]");
138            return buffer.toString();
139        }
140    }