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 */
017package org.apache.xbean.spring.generator;
018
019import java.util.Collections;
020import java.util.HashMap;
021import java.util.HashSet;
022import java.util.Iterator;
023import java.util.List;
024import java.util.Map;
025import java.util.Set;
026import java.util.TreeSet;
027
028/**
029 * @author Dain Sundstrom
030 * @version $Id$
031 * @since 1.0
032 */
033public class ElementMapping implements Comparable {
034    private final String namespace;
035    private final String elementName;
036    private final String className;
037    private final String description;
038    private final boolean rootElement;
039    private final String initMethod;
040    private final String destroyMethod;
041    private final String factoryMethod;
042    private final String contentProperty;
043    private final Set attributes;
044    private final Map attributesByName;
045    private final List constructors;
046    private final List flatProperties;
047    private final Map maps;
048    private final Map flatCollections;
049        private final List superClasses;
050        private final HashSet interfaces;
051    
052    public ElementMapping(String namespace, String elementName, String className, String description, 
053            boolean rootElement, String initMethod, String destroyMethod, String factoryMethod, 
054            String contentProperty, Set attributes, List constructors, List flatProperties, Map maps, 
055            Map flatCollections, List superClasses, HashSet interfaces) {
056        this.superClasses = superClasses;
057                this.interfaces = interfaces;
058                if (namespace == null) throw new NullPointerException("namespace");
059        if (elementName == null) throw new NullPointerException("elementName");
060        if (className == null) throw new NullPointerException("className");
061        if (attributes == null) throw new NullPointerException("attributes");
062        if (constructors == null) throw new NullPointerException("constructors");
063
064        this.namespace = namespace;
065        this.elementName = elementName;
066        this.className = className;
067        this.description = description;
068        this.rootElement = rootElement;
069        this.initMethod = initMethod;
070        this.destroyMethod = destroyMethod;
071        this.factoryMethod = factoryMethod;
072        this.contentProperty = contentProperty;
073        this.constructors = constructors;
074        this.attributes = Collections.unmodifiableSet(new TreeSet(attributes));
075        this.maps = Collections.unmodifiableMap(maps);
076        this.flatProperties = Collections.unmodifiableList(flatProperties);
077        this.flatCollections = Collections.unmodifiableMap(flatCollections);
078        
079        Map attributesByName = new HashMap();
080        for (Iterator iterator = attributes.iterator(); iterator.hasNext();) {
081            AttributeMapping attribute = (AttributeMapping) iterator.next();
082            attributesByName.put(attribute.getAttributeName(), attribute);
083        }
084        this.attributesByName = Collections.unmodifiableMap(attributesByName);
085    }
086
087    public String getNamespace() {
088        return namespace;
089    }
090
091    public String getElementName() {
092        return elementName;
093    }
094
095    public String getClassName() {
096        return className;
097    }
098
099    public String getDescription() {
100        return description;
101    }
102
103    public boolean isRootElement() {
104        return rootElement;
105    }
106
107    public String getInitMethod() {
108        return initMethod;
109    }
110
111    public String getDestroyMethod() {
112        return destroyMethod;
113    }
114
115    public String getFactoryMethod() {
116        return factoryMethod;
117    }
118
119    public String getContentProperty() {
120        return contentProperty;
121    }
122
123    public Set getAttributes() {
124        return attributes;
125    }
126
127    public AttributeMapping getAttribute(String attributeName) {
128        return (AttributeMapping) attributesByName.get(attributeName);
129    }
130
131    public Map getMapMappings() {
132        return maps;
133    }
134
135    public MapMapping getMapMapping(String name) {
136        return (MapMapping) maps.get(name);
137    }
138    
139    public Map getFlatCollections() {
140        return flatCollections;
141    }
142
143    public List getFlatProperties() {
144        return flatProperties;
145    }
146
147    public List getConstructors() {
148        return constructors;
149    }
150
151    public int hashCode() {
152        return elementName.hashCode();
153    }
154
155    public boolean equals(Object obj) {
156        if (obj instanceof ElementMapping) {
157            return elementName.equals(((ElementMapping) obj).elementName);
158        }
159        return false;
160    }
161
162    public int compareTo(Object obj) {
163        return elementName.compareTo(((ElementMapping) obj).elementName);
164    }
165
166        public HashSet getInterfaces() {
167                return interfaces;
168        }
169
170        public List getSuperClasses() {
171                return superClasses;
172        }
173}