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.xbean.blueprint.generator; 018 019 import java.util.Collections; 020 import java.util.HashMap; 021 import java.util.HashSet; 022 import java.util.Iterator; 023 import java.util.List; 024 import java.util.Map; 025 import java.util.Set; 026 import java.util.TreeSet; 027 028 /** 029 * @author Dain Sundstrom 030 * @version $Id$ 031 * @since 1.0 032 */ 033 public 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 }