Fixed generation of Transfer Objects;
[controller.git] / opendaylight / sal / yang-prototype / code-generator / binding-java-api-generator / src / main / java / org / opendaylight / controller / sal / java / api / generator / GeneratorUtil.java
index e2f23dcd0544df16538ffe59542e5caa34115e74..431835f6c09b3edbd401aba10f04037e8030f10f 100644 (file)
@@ -24,7 +24,10 @@ import static org.opendaylight.controller.sal.java.api.generator.Constants.RCB;
 import static org.opendaylight.controller.sal.java.api.generator.Constants.SC;
 import static org.opendaylight.controller.sal.java.api.generator.Constants.STATIC;
 import static org.opendaylight.controller.sal.java.api.generator.Constants.TAB;
+import static org.opendaylight.controller.sal.java.api.generator.Constants.EXTENDS;
+import static org.opendaylight.controller.sal.java.api.generator.Constants.IMPLEMENTS;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.opendaylight.controller.sal.binding.model.api.AnnotationType;
@@ -62,18 +65,44 @@ public class GeneratorUtil {
         builder.append(NL);
         builder.append(NL);
         createComment(builder, genType.getComment(), indent);
-        
+
         if (!genType.getAnnotations().isEmpty()) {
             final List<AnnotationType> annotations = genType.getAnnotations();
             appendAnnotations(builder, annotations);
             builder.append(NL);
         }
-        builder.append(PUBLIC + GAP + type + GAP + genType.getName() + GAP
-                + LCB);
+        builder.append(PUBLIC + GAP + type + GAP + genType.getName() + GAP);
+
+        final List<GeneratedType> genImplements = genType.getImplements();
+        if (genType instanceof GeneratedTransferObject) {
+            GeneratedTransferObject genTO = (GeneratedTransferObject) genType;
+
+            if (genTO.getExtends() != null) {
+                builder.append(EXTENDS + GAP);
+                builder.append(genTO.getExtends() + GAP);
+            }
+        }
+        if (!genImplements.isEmpty()) {
+            if (genType instanceof GeneratedTransferObject) {
+                builder.append(IMPLEMENTS + GAP);
+            } else {
+                builder.append(EXTENDS + GAP);
+            }
+            builder.append(genImplements.get(0).getPackageName()
+                    + "." + genImplements.get(0).getName());
+            for (int i = 1; i < genImplements.size(); ++i) {
+                builder.append(", ");
+                builder.append(genImplements.get(i).getPackageName()
+                        + "." + genImplements.get(i).getName());
+            }
+        }
+
+        builder.append(GAP + LCB);
         return builder.toString();
     }
 
-    private static StringBuilder appendAnnotations(final StringBuilder builder, final List<AnnotationType> annotations) {
+    private static StringBuilder appendAnnotations(final StringBuilder builder,
+            final List<AnnotationType> annotations) {
         if ((builder != null) && (annotations != null)) {
             for (final AnnotationType annotation : annotations) {
                 builder.append("@");
@@ -172,13 +201,13 @@ public class GeneratorUtil {
         createComment(builder, comment, indent);
         builder.append(NL);
         builder.append(indent);
-        
+
         if (!method.getAnnotations().isEmpty()) {
             final List<AnnotationType> annotations = method.getAnnotations();
             appendAnnotations(builder, annotations);
             builder.append(NL);
         }
-        
+
         builder.append(indent + getExplicitType(type) + GAP + name);
         builder.append(LB);
         for (int i = 0; i < parameters.size(); i++) {
@@ -202,40 +231,34 @@ public class GeneratorUtil {
 
         final List<GeneratedProperty> properties = genTransferObject
                 .getProperties();
+        final List<GeneratedProperty> ctorParams = new ArrayList<GeneratedProperty>();
+        for (final GeneratedProperty property : properties) {
+            if (property.isReadOnly()) {
+                ctorParams.add(property);
+            }
+        }
+        
         builder.append(indent);
         builder.append(PUBLIC);
         builder.append(GAP);
         builder.append(genTransferObject.getName());
         builder.append(LB);
-
-        boolean first = true;
-        if (properties != null) {
-            for (final GeneratedProperty property : properties) {
-                if (first) {
-                    builder.append(getExplicitType(property.getReturnType()));
-                    builder.append(" ");
-                    builder.append(property.getName());
-                    first = false;
-                } else {
-                    builder.append(", ");
-                    builder.append(getExplicitType(property.getReturnType()));
-                    builder.append(builder.append(" "));
-                    builder.append(property.getName());
-                }
+        
+        if (!ctorParams.isEmpty()) {
+            builder.append(getExplicitType(ctorParams.get(0).getReturnType()));
+            builder.append(" ");
+            builder.append(ctorParams.get(0).getName());
+            for (int i = 1; i < ctorParams.size(); ++i) {
+                final GeneratedProperty param = ctorParams.get(i);
+                builder.append(", ");
+                builder.append(getExplicitType(param.getReturnType()));
+                builder.append(GAP);
+                builder.append(param.getName());
             }
         }
-
-        builder.append(RB);
-        builder.append(GAP);
-        builder.append(LCB);
-        builder.append(NL);
-        builder.append(indent);
-        builder.append(TAB);
-        builder.append("super();");
-        builder.append(NL);
-
-        if (properties != null) {
-            for (final GeneratedProperty property : properties) {
+        builder.append(RB + GAP + LCB + NL + indent + TAB + "super();" + NL);
+        if (!ctorParams.isEmpty()) {
+            for (final GeneratedProperty property : ctorParams) {
                 builder.append(indent);
                 builder.append(TAB);
                 builder.append("this.");
@@ -246,10 +269,8 @@ public class GeneratorUtil {
                 builder.append(NL);
             }
         }
-
         builder.append(indent);
         builder.append(RCB);
-
         return builder.toString();
     }
 
@@ -273,6 +294,24 @@ public class GeneratorUtil {
         builder.append(indent + RCB);
         return builder.toString();
     }
+    
+    public static String createSetter(final GeneratedProperty property,
+            final String indent) {
+        final StringBuilder builder = new StringBuilder();
+
+        final Type type = property.getReturnType();
+        final String varName = property.getName();
+        final char first = Character.toUpperCase(varName.charAt(0));
+        final String methodName = "set" + first + varName.substring(1);
+
+        builder.append(indent + PUBLIC + GAP + "void" + GAP
+                + methodName);
+        builder.append(LB + getExplicitType(type) + GAP + varName + RB + LCB + NL);
+        String currentIndent = indent + TAB;
+        builder.append(currentIndent + "this." + varName + " = " + varName + SC + NL);
+        builder.append(indent + RCB);
+        return builder.toString();
+    }
 
     public static String createHashCode(
             final List<GeneratedProperty> properties, final String indent) {
@@ -280,7 +319,7 @@ public class GeneratorUtil {
         builder.append(indent + "public int hashCode() {" + NL);
         builder.append(indent + TAB + "final int prime = 31;" + NL);
         builder.append(indent + TAB + "int result = 1;" + NL);
-
+        
         for (GeneratedProperty property : properties) {
             String fieldName = property.getName();
             builder.append(indent + TAB + "result = prime * result + (("