Fixed bug in generating of package names in BindingGeneratorImpl;
[controller.git] / opendaylight / sal / yang-prototype / code-generator / binding-generator-impl / src / main / java / org / opendaylight / controller / sal / binding / generator / impl / GeneratedTOBuilderImpl.java
index e39889b8ef94492e36a6634d308a1ec157929f4d..ff232f7763d41ee07196cbd355aa099a1fdefb74 100644 (file)
-/*\r
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.controller.sal.binding.generator.impl;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Arrays;\r
-import java.util.Collections;\r
-import java.util.HashSet;\r
-import java.util.List;\r
-import java.util.Set;\r
-\r
-import org.opendaylight.controller.sal.binding.model.api.AccessModifier;\r
-import org.opendaylight.controller.sal.binding.model.api.Constant;\r
-import org.opendaylight.controller.sal.binding.model.api.Enumeration;\r
-import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty;\r
-import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject;\r
-import org.opendaylight.controller.sal.binding.model.api.MethodSignature;\r
-import org.opendaylight.controller.sal.binding.model.api.Type;\r
-import org.opendaylight.controller.sal.binding.model.api.type.builder.ConstantBuilder;\r
-import org.opendaylight.controller.sal.binding.model.api.type.builder.EnumBuilder;\r
-import org.opendaylight.controller.sal.binding.model.api.type.builder.GeneratedPropertyBuilder;\r
-import org.opendaylight.controller.sal.binding.model.api.type.builder.GeneratedTOBuilder;\r
-\r
-final class GeneratedTOBuilderImpl implements GeneratedTOBuilder {\r
-    \r
-    private static final String[] SET_VALUES = new String[] { "abstract",\r
-        "assert", "boolean", "break", "byte", "case", "catch", "char",\r
-        "class", "const", "continue", "default", "double", "do", "else",\r
-        "enum", "extends", "false", "final", "finally", "float", "for",\r
-        "goto", "if", "implements", "import", "instanceof", "int",\r
-        "interface", "long", "native", "new", "null", "package", "private",\r
-        "protected", "public", "return", "short", "static", "strictfp",\r
-        "super", "switch", "synchronized", "this", "throw", "throws",\r
-        "transient", "true", "try", "void", "volatile", "while" };\r
-\r
-    public static final Set<String> JAVA_RESERVED_WORDS = new HashSet<String>(\r
-            Arrays.asList(SET_VALUES));\r
-    \r
-    private String packageName;\r
-    private final String name;\r
-\r
-    private final List<EnumBuilder> enumerations = new ArrayList<EnumBuilder>();\r
-    private final List<GeneratedPropertyBuilder> properties = new ArrayList<GeneratedPropertyBuilder>();\r
-    private final List<GeneratedPropertyBuilder> equalsProperties = new ArrayList<GeneratedPropertyBuilder>();\r
-    private final List<GeneratedPropertyBuilder> hashProperties = new ArrayList<GeneratedPropertyBuilder>();\r
-    private final List<GeneratedPropertyBuilder> toStringProperties = new ArrayList<GeneratedPropertyBuilder>();\r
-\r
-    public GeneratedTOBuilderImpl(String packageName, String name) {\r
-        super();\r
-        this.packageName = GeneratedTypeBuilderImpl.validatePackage(packageName);\r
-        this.name = name;\r
-    }\r
-    \r
-    @Override\r
-    public String getPackageName() {\r
-        return packageName;\r
-    }\r
-\r
-    @Override\r
-    public String getName() {\r
-        return name;\r
-    }\r
-    \r
-    @Override\r
-    public EnumBuilder addEnumeration(String name) {\r
-        final EnumBuilder builder = new EnumerationBuilderImpl(packageName,\r
-                name);\r
-        enumerations.add(builder);\r
-        return builder;\r
-    }\r
-\r
-    @Override\r
-    public GeneratedPropertyBuilder addProperty(String name) {\r
-        final GeneratedPropertyBuilder builder = new GeneratedPropertyBuilderImpl(\r
-                name);\r
-        properties.add(builder);\r
-        return builder;\r
-    }\r
-\r
-    @Override\r
-    public boolean addEqualsIdentity(GeneratedPropertyBuilder property) {\r
-        return equalsProperties.add(property);\r
-    }\r
-\r
-    @Override\r
-    public boolean addHashIdentity(GeneratedPropertyBuilder property) {\r
-        return hashProperties.add(property);\r
-    }\r
-\r
-    @Override\r
-    public boolean addToStringProperty(GeneratedPropertyBuilder property) {\r
-        return toStringProperties.add(property);\r
-    }\r
-\r
-    @Override\r
-    public GeneratedTransferObject toInstance() {\r
-       \r
-        return new GeneratedTransferObjectImpl(packageName, name, enumerations,\r
-                properties, equalsProperties, hashProperties,\r
-                toStringProperties);\r
-    }\r
-\r
-    private static final class GeneratedPropertyBuilderImpl implements\r
-            GeneratedPropertyBuilder {\r
-\r
-        private final String name;\r
-        private Type returnType;\r
-        private final List<MethodSignature.Parameter> parameters;\r
-        private String comment = "";\r
-        private AccessModifier accessModifier;\r
-        private boolean isFinal;\r
-        private boolean isReadOnly;\r
-\r
-        public GeneratedPropertyBuilderImpl(final String name) {\r
-            super();\r
-            this.name = name;\r
-            parameters = new ArrayList<MethodSignature.Parameter>();\r
-            isFinal = true;\r
-            this.isReadOnly = true;\r
-            accessModifier = AccessModifier.PUBLIC;\r
-        }\r
-\r
-        public String getName() {\r
-            return name;\r
-        }\r
-\r
-        @Override\r
-        public boolean addReturnType(Type returnType) {\r
-            if (returnType != null) {\r
-                this.returnType = returnType;\r
-                this.parameters.add(new MethodParameterImpl(name, returnType));\r
-                return true;\r
-            }\r
-            return false;\r
-        }\r
-\r
-        @Override\r
-        public void accessorModifier(final AccessModifier modifier) {\r
-            accessModifier = modifier;\r
-        }\r
-\r
-        @Override\r
-        public void addComment(String comment) {\r
-            if (comment != null) {\r
-                this.comment = comment;\r
-            }\r
-        }\r
-\r
-        @Override\r
-        public void setFinal(boolean isFinal) {\r
-            this.isFinal = isFinal;\r
-        }\r
-\r
-        @Override\r
-        public void setReadOnly(boolean isReadOnly) {\r
-            this.isReadOnly = isReadOnly;\r
-        }\r
-\r
-        @Override\r
-        public GeneratedProperty toInstance(final Type definingType) {\r
-            return new GeneratedPropertyImpl(name, comment, definingType,\r
-                    returnType, isFinal, isReadOnly, parameters, accessModifier);\r
-        }\r
-    }\r
-\r
-    private static final class GeneratedPropertyImpl implements\r
-            GeneratedProperty {\r
-\r
-        private final String name;\r
-        private final String comment;\r
-        private final Type parent;\r
-        private final Type returnType;\r
-        private final boolean isFinal;\r
-        private final boolean isReadOnly;\r
-        private final List<MethodSignature.Parameter> parameters;\r
-        private final AccessModifier modifier;\r
-\r
-        public GeneratedPropertyImpl(final String name, final String comment,\r
-                final Type parent, final Type returnType,\r
-                final boolean isFinal, final boolean isReadOnly,\r
-                final List<Parameter> parameters, final AccessModifier modifier) {\r
-            super();\r
-            this.name = name;\r
-            this.comment = comment;\r
-            this.parent = parent;\r
-            this.returnType = returnType;\r
-            this.isFinal = isFinal;\r
-            this.isReadOnly = isReadOnly;\r
-            this.parameters = Collections.unmodifiableList(parameters);\r
-            this.modifier = modifier;\r
-        }\r
-\r
-        @Override\r
-        public String getName() {\r
-            return name;\r
-        }\r
-\r
-        @Override\r
-        public String getComment() {\r
-            return comment;\r
-        }\r
-\r
-        @Override\r
-        public Type getDefiningType() {\r
-            return parent;\r
-        }\r
-\r
-        @Override\r
-        public Type getReturnType() {\r
-            return returnType;\r
-        }\r
-\r
-        @Override\r
-        public List<Parameter> getParameters() {\r
-            return parameters;\r
-        }\r
-\r
-        @Override\r
-        public AccessModifier getAccessModifier() {\r
-            return modifier;\r
-        }\r
-\r
-        @Override\r
-        public boolean isReadOnly() {\r
-            return isReadOnly;\r
-        }\r
-\r
-        @Override\r
-        public boolean isFinal() {\r
-            return isFinal;\r
-        }\r
-\r
-        @Override\r
-        public int hashCode() {\r
-            final int prime = 31;\r
-            int result = 1;\r
-            result = prime * result\r
-                    + ((comment == null) ? 0 : comment.hashCode());\r
-            result = prime * result + (isFinal ? 1231 : 1237);\r
-            result = prime * result + (isReadOnly ? 1231 : 1237);\r
-            result = prime * result\r
-                    + ((modifier == null) ? 0 : modifier.hashCode());\r
-            result = prime * result + ((name == null) ? 0 : name.hashCode());\r
-            result = prime * result\r
-                    + ((parameters == null) ? 0 : parameters.hashCode());\r
-\r
-            if (parent != null) {\r
-                result = prime\r
-                        * result\r
-                        + ((parent.getPackageName() == null) ? 0 : parent\r
-                                .getPackageName().hashCode());\r
-                result = prime\r
-                        * result\r
-                        + ((parent.getName() == null) ? 0 : parent.getName()\r
-                                .hashCode());\r
-            }\r
-\r
-            result = prime * result\r
-                    + ((returnType == null) ? 0 : returnType.hashCode());\r
-            return result;\r
-        }\r
-\r
-        @Override\r
-        public boolean equals(Object obj) {\r
-            if (this == obj) {\r
-                return true;\r
-            }\r
-            if (obj == null) {\r
-                return false;\r
-            }\r
-            if (getClass() != obj.getClass()) {\r
-                return false;\r
-            }\r
-            GeneratedPropertyImpl other = (GeneratedPropertyImpl) obj;\r
-            if (comment == null) {\r
-                if (other.comment != null) {\r
-                    return false;\r
-                }\r
-            } else if (!comment.equals(other.comment)) {\r
-                return false;\r
-            }\r
-            if (isFinal != other.isFinal) {\r
-                return false;\r
-            }\r
-            if (isReadOnly != other.isReadOnly) {\r
-                return false;\r
-            }\r
-            if (modifier != other.modifier) {\r
-                return false;\r
-            }\r
-            if (name == null) {\r
-                if (other.name != null) {\r
-                    return false;\r
-                }\r
-            } else if (!name.equals(other.name)) {\r
-                return false;\r
-            }\r
-            if (parameters == null) {\r
-                if (other.parameters != null) {\r
-                    return false;\r
-                }\r
-            } else if (!parameters.equals(other.parameters)) {\r
-                return false;\r
-            }\r
-            if (parent == null) {\r
-                if (other.parent != null) {\r
-                    return false;\r
-                }\r
-            } else if ((parent != null) && (other.parent != null)) {\r
-                if (!parent.getPackageName().equals(\r
-                        other.parent.getPackageName())\r
-                        && !parent.getName().equals(other.parent.getName())) {\r
-                    return false;\r
-                }\r
-            }\r
-            if (returnType == null) {\r
-                if (other.returnType != null) {\r
-                    return false;\r
-                }\r
-            } else if (!returnType.equals(other.returnType)) {\r
-                return false;\r
-            }\r
-            return true;\r
-        }\r
-\r
-        @Override\r
-        public String toString() {\r
-            StringBuilder builder = new StringBuilder();\r
-            builder.append("GeneratedPropertyImpl [name=");\r
-            builder.append(name);\r
-            builder.append(", comment=");\r
-            builder.append(comment);\r
-            if (parent != null) {\r
-                builder.append(", parent=");\r
-                builder.append(parent.getPackageName());\r
-                builder.append(".");\r
-                builder.append(parent.getName());\r
-            } else {\r
-                builder.append(", parent= null");\r
-            }\r
-            builder.append(", returnType=");\r
-            builder.append(returnType);\r
-            builder.append(", isFinal=");\r
-            builder.append(isFinal);\r
-            builder.append(", isReadOnly=");\r
-            builder.append(isReadOnly);\r
-            builder.append(", parameters=");\r
-            builder.append(parameters);\r
-            builder.append(", modifier=");\r
-            builder.append(modifier);\r
-            builder.append("]");\r
-            return builder.toString();\r
-        }\r
-    }\r
-\r
-    private static final class GeneratedTransferObjectImpl implements\r
-            GeneratedTransferObject {\r
-\r
-        private final String packageName;\r
-        private final String name;\r
-        // private final List<Constant> constants;\r
-        private final List<Enumeration> enumerations;\r
-        private final List<GeneratedProperty> properties;\r
-        private final List<GeneratedProperty> equalsProperties;\r
-        private final List<GeneratedProperty> hashCodeProperties;\r
-        private final List<GeneratedProperty> stringProperties;\r
-\r
-        private List<Enumeration> toUnmodifiableEnumerations(\r
-                final List<EnumBuilder> enumBuilders) {\r
-            final List<Enumeration> enumerations = new ArrayList<Enumeration>();\r
-            for (final EnumBuilder builder : enumBuilders) {\r
-                enumerations.add(builder.toInstance(this));\r
-            }\r
-            return Collections.unmodifiableList(enumerations);\r
-        }\r
-\r
-        private List<Constant> toUnmodifiableConstant(\r
-                final List<ConstantBuilder> constBuilders) {\r
-            final List<Constant> constants = new ArrayList<Constant>();\r
-            for (final ConstantBuilder builder : constBuilders) {\r
-                constants.add(builder.toInstance(this));\r
-            }\r
-            return Collections.unmodifiableList(constants);\r
-        }\r
-\r
-        private List<GeneratedProperty> toUnmodifiableProperties(\r
-                final List<GeneratedPropertyBuilder> propBuilders) {\r
-            final List<GeneratedProperty> constants = new ArrayList<GeneratedProperty>();\r
-            for (final GeneratedPropertyBuilder builder : propBuilders) {\r
-                constants.add(builder.toInstance(this));\r
-            }\r
-            return Collections.unmodifiableList(constants);\r
-        }\r
-\r
-        public GeneratedTransferObjectImpl(String packageName, String name,\r
-                List<EnumBuilder> enumBuilders,\r
-                List<GeneratedPropertyBuilder> propBuilers,\r
-                List<GeneratedPropertyBuilder> equalsBuilers,\r
-                List<GeneratedPropertyBuilder> hashCodeBuilers,\r
-                List<GeneratedPropertyBuilder> stringBuilers) {\r
-            super();\r
-            this.packageName = packageName;\r
-            this.name = name;\r
-            this.enumerations = toUnmodifiableEnumerations(enumBuilders);\r
-            this.properties = toUnmodifiableProperties(propBuilers);\r
-            this.equalsProperties = toUnmodifiableProperties(equalsBuilers);\r
-            this.hashCodeProperties = toUnmodifiableProperties(hashCodeBuilers);\r
-            this.stringProperties = toUnmodifiableProperties(stringBuilers);\r
-        }\r
-\r
-        @Override\r
-        public String getPackageName() {\r
-            return packageName;\r
-        }\r
-\r
-        @Override\r
-        public String getName() {\r
-            return name;\r
-        }\r
-\r
-        @Override\r
-        public List<Enumeration> getEnumDefintions() {\r
-            return enumerations;\r
-        }\r
-\r
-        @Override\r
-        public List<GeneratedProperty> getProperties() {\r
-            return properties;\r
-        }\r
-\r
-        @Override\r
-        public List<GeneratedProperty> getEqualsIdentifiers() {\r
-            return equalsProperties;\r
-        }\r
-\r
-        @Override\r
-        public List<GeneratedProperty> getHashCodeIdentifiers() {\r
-            return hashCodeProperties;\r
-        }\r
-\r
-        @Override\r
-        public List<GeneratedProperty> getToStringIdentifiers() {\r
-            return stringProperties;\r
-        }\r
-\r
-        /*\r
-         * (non-Javadoc)\r
-         * \r
-         * @see java.lang.Object#hashCode()\r
-         */\r
-        @Override\r
-        public int hashCode() {\r
-            final int prime = 31;\r
-            int result = 1;\r
-            result = prime * result\r
-                    + ((enumerations == null) ? 0 : enumerations.hashCode());\r
-            result = prime\r
-                    * result\r
-                    + ((equalsProperties == null) ? 0 : equalsProperties\r
-                            .hashCode());\r
-            result = prime\r
-                    * result\r
-                    + ((hashCodeProperties == null) ? 0 : hashCodeProperties\r
-                            .hashCode());\r
-            result = prime * result + ((name == null) ? 0 : name.hashCode());\r
-            result = prime * result\r
-                    + ((packageName == null) ? 0 : packageName.hashCode());\r
-            result = prime * result\r
-                    + ((properties == null) ? 0 : properties.hashCode());\r
-            result = prime\r
-                    * result\r
-                    + ((stringProperties == null) ? 0 : stringProperties\r
-                            .hashCode());\r
-            return result;\r
-        }\r
-\r
-        /*\r
-         * (non-Javadoc)\r
-         * \r
-         * @see java.lang.Object#equals(java.lang.Object)\r
-         */\r
-        @Override\r
-        public boolean equals(Object obj) {\r
-            if (this == obj) {\r
-                return true;\r
-            }\r
-            if (obj == null) {\r
-                return false;\r
-            }\r
-            if (getClass() != obj.getClass()) {\r
-                return false;\r
-            }\r
-            GeneratedTransferObjectImpl other = (GeneratedTransferObjectImpl) obj;\r
-            if (enumerations == null) {\r
-                if (other.enumerations != null) {\r
-                    return false;\r
-                }\r
-            } else if (!enumerations.equals(other.enumerations)) {\r
-                return false;\r
-            }\r
-            if (equalsProperties == null) {\r
-                if (other.equalsProperties != null) {\r
-                    return false;\r
-                }\r
-            } else if (!equalsProperties.equals(other.equalsProperties)) {\r
-                return false;\r
-            }\r
-            if (hashCodeProperties == null) {\r
-                if (other.hashCodeProperties != null) {\r
-                    return false;\r
-                }\r
-            } else if (!hashCodeProperties.equals(other.hashCodeProperties)) {\r
-                return false;\r
-            }\r
-            if (name == null) {\r
-                if (other.name != null) {\r
-                    return false;\r
-                }\r
-            } else if (!name.equals(other.name)) {\r
-                return false;\r
-            }\r
-            if (packageName == null) {\r
-                if (other.packageName != null) {\r
-                    return false;\r
-                }\r
-            } else if (!packageName.equals(other.packageName)) {\r
-                return false;\r
-            }\r
-            if (properties == null) {\r
-                if (other.properties != null) {\r
-                    return false;\r
-                }\r
-            } else if (!properties.equals(other.properties)) {\r
-                return false;\r
-            }\r
-            if (stringProperties == null) {\r
-                if (other.stringProperties != null) {\r
-                    return false;\r
-                }\r
-            } else if (!stringProperties.equals(other.stringProperties)) {\r
-                return false;\r
-            }\r
-            return true;\r
-        }\r
-\r
-        /*\r
-         * (non-Javadoc)\r
-         * \r
-         * @see java.lang.Object#toString()\r
-         */\r
-        @Override\r
-        public String toString() {\r
-            StringBuilder builder = new StringBuilder();\r
-            builder.append("GeneratedTransferObjectImpl [packageName=");\r
-            builder.append(packageName);\r
-            builder.append(", name=");\r
-            builder.append(name);\r
-            builder.append(", enumerations=");\r
-            builder.append(enumerations);\r
-            builder.append(", properties=");\r
-            builder.append(properties);\r
-            builder.append(", equalsProperties=");\r
-            builder.append(equalsProperties);\r
-            builder.append(", hashCodeProperties=");\r
-            builder.append(hashCodeProperties);\r
-            builder.append(", stringProperties=");\r
-            builder.append(stringProperties);\r
-            builder.append("]");\r
-            return builder.toString();\r
-        }\r
-    }\r
-}\r
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.sal.binding.generator.impl;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.opendaylight.controller.sal.binding.model.api.AccessModifier;
+import org.opendaylight.controller.sal.binding.model.api.Constant;
+import org.opendaylight.controller.sal.binding.model.api.Enumeration;
+import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty;
+import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject;
+import org.opendaylight.controller.sal.binding.model.api.MethodSignature;
+import org.opendaylight.controller.sal.binding.model.api.Type;
+import org.opendaylight.controller.sal.binding.model.api.type.builder.ConstantBuilder;
+import org.opendaylight.controller.sal.binding.model.api.type.builder.EnumBuilder;
+import org.opendaylight.controller.sal.binding.model.api.type.builder.GeneratedPropertyBuilder;
+import org.opendaylight.controller.sal.binding.model.api.type.builder.GeneratedTOBuilder;
+
+final class GeneratedTOBuilderImpl implements GeneratedTOBuilder {
+    private String packageName;
+    private final String name;
+
+    private final List<EnumBuilder> enumerations = new ArrayList<EnumBuilder>();
+    private final List<GeneratedPropertyBuilder> properties = new ArrayList<GeneratedPropertyBuilder>();
+    private final List<GeneratedPropertyBuilder> equalsProperties = new ArrayList<GeneratedPropertyBuilder>();
+    private final List<GeneratedPropertyBuilder> hashProperties = new ArrayList<GeneratedPropertyBuilder>();
+    private final List<GeneratedPropertyBuilder> toStringProperties = new ArrayList<GeneratedPropertyBuilder>();
+
+    public GeneratedTOBuilderImpl(String packageName, String name) {
+        super();
+        this.packageName = packageName;
+        this.name = name;
+    }
+    
+    @Override
+    public String getPackageName() {
+        return packageName;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+    
+    @Override
+    public EnumBuilder addEnumeration(String name) {
+        final EnumBuilder builder = new EnumerationBuilderImpl(packageName,
+                name);
+        enumerations.add(builder);
+        return builder;
+    }
+
+    @Override
+    public GeneratedPropertyBuilder addProperty(String name) {
+        final GeneratedPropertyBuilder builder = new GeneratedPropertyBuilderImpl(
+                name);
+        properties.add(builder);
+        return builder;
+    }
+
+    @Override
+    public boolean addEqualsIdentity(GeneratedPropertyBuilder property) {
+        return equalsProperties.add(property);
+    }
+
+    @Override
+    public boolean addHashIdentity(GeneratedPropertyBuilder property) {
+        return hashProperties.add(property);
+    }
+
+    @Override
+    public boolean addToStringProperty(GeneratedPropertyBuilder property) {
+        return toStringProperties.add(property);
+    }
+
+    @Override
+    public GeneratedTransferObject toInstance() {
+        return new GeneratedTransferObjectImpl(packageName, name, enumerations,
+                properties, equalsProperties, hashProperties,
+                toStringProperties);
+    }
+
+    private static final class GeneratedPropertyBuilderImpl implements
+            GeneratedPropertyBuilder {
+
+        private final String name;
+        private Type returnType;
+        private final List<MethodSignature.Parameter> parameters;
+        private String comment = "";
+        private AccessModifier accessModifier;
+        private boolean isFinal;
+        private boolean isReadOnly;
+
+        public GeneratedPropertyBuilderImpl(final String name) {
+            super();
+            this.name = name;
+            parameters = new ArrayList<MethodSignature.Parameter>();
+            isFinal = true;
+            this.isReadOnly = true;
+            accessModifier = AccessModifier.PUBLIC;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        @Override
+        public boolean addReturnType(Type returnType) {
+            if (returnType != null) {
+                this.returnType = returnType;
+                this.parameters.add(new MethodParameterImpl(name, returnType));
+                return true;
+            }
+            return false;
+        }
+
+        @Override
+        public void accessorModifier(final AccessModifier modifier) {
+            accessModifier = modifier;
+        }
+
+        @Override
+        public void addComment(String comment) {
+            if (comment != null) {
+                this.comment = comment;
+            }
+        }
+
+        @Override
+        public void setFinal(boolean isFinal) {
+            this.isFinal = isFinal;
+        }
+
+        @Override
+        public void setReadOnly(boolean isReadOnly) {
+            this.isReadOnly = isReadOnly;
+        }
+
+        @Override
+        public GeneratedProperty toInstance(final Type definingType) {
+            return new GeneratedPropertyImpl(name, comment, definingType,
+                    returnType, isFinal, isReadOnly, parameters, accessModifier);
+        }
+    }
+
+    private static final class GeneratedPropertyImpl implements
+            GeneratedProperty {
+
+        private final String name;
+        private final String comment;
+        private final Type parent;
+        private final Type returnType;
+        private final boolean isFinal;
+        private final boolean isReadOnly;
+        private final List<MethodSignature.Parameter> parameters;
+        private final AccessModifier modifier;
+
+        public GeneratedPropertyImpl(final String name, final String comment,
+                final Type parent, final Type returnType,
+                final boolean isFinal, final boolean isReadOnly,
+                final List<Parameter> parameters, final AccessModifier modifier) {
+            super();
+            this.name = name;
+            this.comment = comment;
+            this.parent = parent;
+            this.returnType = returnType;
+            this.isFinal = isFinal;
+            this.isReadOnly = isReadOnly;
+            this.parameters = Collections.unmodifiableList(parameters);
+            this.modifier = modifier;
+        }
+
+        @Override
+        public String getName() {
+            return name;
+        }
+
+        @Override
+        public String getComment() {
+            return comment;
+        }
+
+        @Override
+        public Type getDefiningType() {
+            return parent;
+        }
+
+        @Override
+        public Type getReturnType() {
+            return returnType;
+        }
+
+        @Override
+        public List<Parameter> getParameters() {
+            return parameters;
+        }
+
+        @Override
+        public AccessModifier getAccessModifier() {
+            return modifier;
+        }
+
+        @Override
+        public boolean isReadOnly() {
+            return isReadOnly;
+        }
+
+        @Override
+        public boolean isFinal() {
+            return isFinal;
+        }
+
+        @Override
+        public int hashCode() {
+            final int prime = 31;
+            int result = 1;
+            result = prime * result
+                    + ((comment == null) ? 0 : comment.hashCode());
+            result = prime * result + (isFinal ? 1231 : 1237);
+            result = prime * result + (isReadOnly ? 1231 : 1237);
+            result = prime * result
+                    + ((modifier == null) ? 0 : modifier.hashCode());
+            result = prime * result + ((name == null) ? 0 : name.hashCode());
+            result = prime * result
+                    + ((parameters == null) ? 0 : parameters.hashCode());
+
+            if (parent != null) {
+                result = prime
+                        * result
+                        + ((parent.getPackageName() == null) ? 0 : parent
+                                .getPackageName().hashCode());
+                result = prime
+                        * result
+                        + ((parent.getName() == null) ? 0 : parent.getName()
+                                .hashCode());
+            }
+
+            result = prime * result
+                    + ((returnType == null) ? 0 : returnType.hashCode());
+            return result;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            GeneratedPropertyImpl other = (GeneratedPropertyImpl) obj;
+            if (comment == null) {
+                if (other.comment != null) {
+                    return false;
+                }
+            } else if (!comment.equals(other.comment)) {
+                return false;
+            }
+            if (isFinal != other.isFinal) {
+                return false;
+            }
+            if (isReadOnly != other.isReadOnly) {
+                return false;
+            }
+            if (modifier != other.modifier) {
+                return false;
+            }
+            if (name == null) {
+                if (other.name != null) {
+                    return false;
+                }
+            } else if (!name.equals(other.name)) {
+                return false;
+            }
+            if (parameters == null) {
+                if (other.parameters != null) {
+                    return false;
+                }
+            } else if (!parameters.equals(other.parameters)) {
+                return false;
+            }
+            if (parent == null) {
+                if (other.parent != null) {
+                    return false;
+                }
+            } else if ((parent != null) && (other.parent != null)) {
+                if (!parent.getPackageName().equals(
+                        other.parent.getPackageName())
+                        && !parent.getName().equals(other.parent.getName())) {
+                    return false;
+                }
+            }
+            if (returnType == null) {
+                if (other.returnType != null) {
+                    return false;
+                }
+            } else if (!returnType.equals(other.returnType)) {
+                return false;
+            }
+            return true;
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder builder = new StringBuilder();
+            builder.append("GeneratedPropertyImpl [name=");
+            builder.append(name);
+            builder.append(", comment=");
+            builder.append(comment);
+            if (parent != null) {
+                builder.append(", parent=");
+                builder.append(parent.getPackageName());
+                builder.append(".");
+                builder.append(parent.getName());
+            } else {
+                builder.append(", parent= null");
+            }
+            builder.append(", returnType=");
+            builder.append(returnType);
+            builder.append(", isFinal=");
+            builder.append(isFinal);
+            builder.append(", isReadOnly=");
+            builder.append(isReadOnly);
+            builder.append(", parameters=");
+            builder.append(parameters);
+            builder.append(", modifier=");
+            builder.append(modifier);
+            builder.append("]");
+            return builder.toString();
+        }
+    }
+
+    private static final class GeneratedTransferObjectImpl implements
+            GeneratedTransferObject {
+
+        private final String packageName;
+        private final String name;
+        // private final List<Constant> constants;
+        private final List<Enumeration> enumerations;
+        private final List<GeneratedProperty> properties;
+        private final List<GeneratedProperty> equalsProperties;
+        private final List<GeneratedProperty> hashCodeProperties;
+        private final List<GeneratedProperty> stringProperties;
+
+        private List<Enumeration> toUnmodifiableEnumerations(
+                final List<EnumBuilder> enumBuilders) {
+            final List<Enumeration> enumerations = new ArrayList<Enumeration>();
+            for (final EnumBuilder builder : enumBuilders) {
+                enumerations.add(builder.toInstance(this));
+            }
+            return Collections.unmodifiableList(enumerations);
+        }
+
+        private List<Constant> toUnmodifiableConstant(
+                final List<ConstantBuilder> constBuilders) {
+            final List<Constant> constants = new ArrayList<Constant>();
+            for (final ConstantBuilder builder : constBuilders) {
+                constants.add(builder.toInstance(this));
+            }
+            return Collections.unmodifiableList(constants);
+        }
+
+        private List<GeneratedProperty> toUnmodifiableProperties(
+                final List<GeneratedPropertyBuilder> propBuilders) {
+            final List<GeneratedProperty> constants = new ArrayList<GeneratedProperty>();
+            for (final GeneratedPropertyBuilder builder : propBuilders) {
+                constants.add(builder.toInstance(this));
+            }
+            return Collections.unmodifiableList(constants);
+        }
+
+        public GeneratedTransferObjectImpl(String packageName, String name,
+                List<EnumBuilder> enumBuilders,
+                List<GeneratedPropertyBuilder> propBuilers,
+                List<GeneratedPropertyBuilder> equalsBuilers,
+                List<GeneratedPropertyBuilder> hashCodeBuilers,
+                List<GeneratedPropertyBuilder> stringBuilers) {
+            super();
+            this.packageName = packageName;
+            this.name = name;
+            this.enumerations = toUnmodifiableEnumerations(enumBuilders);
+            this.properties = toUnmodifiableProperties(propBuilers);
+            this.equalsProperties = toUnmodifiableProperties(equalsBuilers);
+            this.hashCodeProperties = toUnmodifiableProperties(hashCodeBuilers);
+            this.stringProperties = toUnmodifiableProperties(stringBuilers);
+        }
+
+        @Override
+        public String getPackageName() {
+            return packageName;
+        }
+
+        @Override
+        public String getName() {
+            return name;
+        }
+
+        @Override
+        public List<Enumeration> getEnumDefintions() {
+            return enumerations;
+        }
+
+        @Override
+        public List<GeneratedProperty> getProperties() {
+            return properties;
+        }
+
+        @Override
+        public List<GeneratedProperty> getEqualsIdentifiers() {
+            return equalsProperties;
+        }
+
+        @Override
+        public List<GeneratedProperty> getHashCodeIdentifiers() {
+            return hashCodeProperties;
+        }
+
+        @Override
+        public List<GeneratedProperty> getToStringIdentifiers() {
+            return stringProperties;
+        }
+
+        /*
+         * (non-Javadoc)
+         * 
+         * @see java.lang.Object#hashCode()
+         */
+        @Override
+        public int hashCode() {
+            final int prime = 31;
+            int result = 1;
+            result = prime * result
+                    + ((enumerations == null) ? 0 : enumerations.hashCode());
+            result = prime
+                    * result
+                    + ((equalsProperties == null) ? 0 : equalsProperties
+                            .hashCode());
+            result = prime
+                    * result
+                    + ((hashCodeProperties == null) ? 0 : hashCodeProperties
+                            .hashCode());
+            result = prime * result + ((name == null) ? 0 : name.hashCode());
+            result = prime * result
+                    + ((packageName == null) ? 0 : packageName.hashCode());
+            result = prime * result
+                    + ((properties == null) ? 0 : properties.hashCode());
+            result = prime
+                    * result
+                    + ((stringProperties == null) ? 0 : stringProperties
+                            .hashCode());
+            return result;
+        }
+
+        /*
+         * (non-Javadoc)
+         * 
+         * @see java.lang.Object#equals(java.lang.Object)
+         */
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            GeneratedTransferObjectImpl other = (GeneratedTransferObjectImpl) obj;
+            if (enumerations == null) {
+                if (other.enumerations != null) {
+                    return false;
+                }
+            } else if (!enumerations.equals(other.enumerations)) {
+                return false;
+            }
+            if (equalsProperties == null) {
+                if (other.equalsProperties != null) {
+                    return false;
+                }
+            } else if (!equalsProperties.equals(other.equalsProperties)) {
+                return false;
+            }
+            if (hashCodeProperties == null) {
+                if (other.hashCodeProperties != null) {
+                    return false;
+                }
+            } else if (!hashCodeProperties.equals(other.hashCodeProperties)) {
+                return false;
+            }
+            if (name == null) {
+                if (other.name != null) {
+                    return false;
+                }
+            } else if (!name.equals(other.name)) {
+                return false;
+            }
+            if (packageName == null) {
+                if (other.packageName != null) {
+                    return false;
+                }
+            } else if (!packageName.equals(other.packageName)) {
+                return false;
+            }
+            if (properties == null) {
+                if (other.properties != null) {
+                    return false;
+                }
+            } else if (!properties.equals(other.properties)) {
+                return false;
+            }
+            if (stringProperties == null) {
+                if (other.stringProperties != null) {
+                    return false;
+                }
+            } else if (!stringProperties.equals(other.stringProperties)) {
+                return false;
+            }
+            return true;
+        }
+
+        /*
+         * (non-Javadoc)
+         * 
+         * @see java.lang.Object#toString()
+         */
+        @Override
+        public String toString() {
+            StringBuilder builder = new StringBuilder();
+            builder.append("GeneratedTransferObjectImpl [packageName=");
+            builder.append(packageName);
+            builder.append(", name=");
+            builder.append(name);
+            builder.append(", enumerations=");
+            builder.append(enumerations);
+            builder.append(", properties=");
+            builder.append(properties);
+            builder.append(", equalsProperties=");
+            builder.append(equalsProperties);
+            builder.append(", hashCodeProperties=");
+            builder.append(hashCodeProperties);
+            builder.append(", stringProperties=");
+            builder.append(stringProperties);
+            builder.append("]");
+            return builder.toString();
+        }
+    }
+}