Added QName.create(), fixed Path generic in YANG binding. 89/2589/1
authorTony Tkacik <ttkacik@cisco.com>
Sun, 10 Nov 2013 19:11:13 +0000 (20:11 +0100)
committerTony Tkacik <ttkacik@cisco.com>
Sun, 10 Nov 2013 19:11:13 +0000 (20:11 +0100)
Change-Id: I3f67cd3fae95efb9725d0b16a252446049d13159
Signed-off-by: Tony Tkacik <ttkacik@cisco.com>
code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.xtend
code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/ModuleContext.java
code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/AbstractBaseType.java
yang/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/InstanceIdentifier.java
yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java

index aeba4b82d8d5d7c6e3d04ea5945ddb1f7c0660f8..0952b83178b99f826037d3e02e0e60c90f3cf122 100644 (file)
@@ -73,7 +73,8 @@ import org.opendaylight.yangtools.yang.model.api.YangNode
 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition
 import org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil
 import org.opendaylight.yangtools.sal.binding.model.api.Restrictions
-
+import org.opendaylight.yangtools.yang.common.QName\r
+\r
 public class BindingGeneratorImpl implements BindingGenerator {
 
     private final Map<Module, ModuleContext> genCtx = new HashMap()
@@ -184,7 +185,7 @@ public class BindingGeneratorImpl implements BindingGenerator {
             filteredGenTypes.addAll(genCtx.get(m).generatedTypes);
 
         }
-        genCtx.clear;
+        //genCtx.clear;
 
         return filteredGenTypes;
     }
@@ -1510,21 +1511,25 @@ public class BindingGeneratorImpl implements BindingGenerator {
      */
     private def GeneratedTypeBuilder addDefaultInterfaceDefinition(String packageName, SchemaNode schemaNode,
         Type parent) {
-        val builder = addRawInterfaceDefinition(packageName, schemaNode, "");
+        val it = addRawInterfaceDefinition(packageName, schemaNode, "");\r
+        val qname = schemaNode.QName;
+        //addConstant(QName.typeForClass,"QNAME",'''\r
+        //    org.opendaylight.yangtools.yang.common.QName.create("«qname.namespace»","«qname.formattedRevision»","«qname.localName»");\r
+        //''')\r
         if (parent === null) {
-            builder.addImplementsType(DATA_OBJECT);
+            addImplementsType(DATA_OBJECT);
         } else {
-            builder.addImplementsType(BindingTypes.childOf(parent));
+            addImplementsType(BindingTypes.childOf(parent));
         }
         if (!(schemaNode instanceof GroupingDefinition)) {
-            builder.addImplementsType(augmentable(builder));
+            addImplementsType(augmentable(it));
         }
 
         if (schemaNode instanceof DataNodeContainer) {
-            addImplementedInterfaceFromUses(schemaNode as DataNodeContainer, builder);
+            addImplementedInterfaceFromUses(schemaNode as DataNodeContainer, it);
         }
 
-        return builder;
+        return it;
     }
 
     /**\r
@@ -1604,14 +1609,14 @@ public class BindingGeneratorImpl implements BindingGenerator {
      * @return string with the name of the getter method for\r
      *         <code>methodName</code> in JAVA method format\r
      */
-    private def String getterMethodName(String methodName, Type returnType) {
+    public static def String getterMethodName(String localName, Type returnType) {
         val method = new StringBuilder();
         if (BOOLEAN.equals(returnType)) {
             method.append("is");
         } else {
             method.append("get");
         }
-        method.append(parseToClassName(methodName));
+        method.append(parseToClassName(localName));
         return method.toString();
     }
 
@@ -1856,5 +1861,9 @@ public class BindingGeneratorImpl implements BindingGenerator {
         }
         return null
     }
-
+\r
+\r
+    public def getModuleContexts() {\r
+        genCtx;\r
+    }
 }
index 592b98e9083592a4e602a42042a9c523a1efef25..beb310511827c81e43c6c44a5ecd9e560edafa2b 100644 (file)
@@ -19,7 +19,7 @@ import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTO
 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTypeBuilder;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
-final class ModuleContext {
+public final class ModuleContext {
     private GeneratedTypeBuilder moduleNode;
     private final List<GeneratedTOBuilder> genTOs = new ArrayList<GeneratedTOBuilder>();
     private final Map<SchemaPath, Type> typedefs = new HashMap<SchemaPath, Type>();
@@ -119,4 +119,32 @@ final class ModuleContext {
         augmentations.add(b);
     }
 
+    public Map<SchemaPath, Type> getTypedefs() {
+        return typedefs;
+    }
+
+    public Map<SchemaPath, GeneratedTypeBuilder> getChildNodes() {
+        return childNodes;
+    }
+
+    public Map<SchemaPath, GeneratedTypeBuilder> getGroupings() {
+        return groupings;
+    }
+
+    public Map<SchemaPath, GeneratedTypeBuilder> getCases() {
+        return cases;
+    }
+
+    public Set<GeneratedTOBuilder> getIdentities() {
+        return identities;
+    }
+
+    public Set<GeneratedTypeBuilder> getTopLevelNodes() {
+        return topLevelNodes;
+    }
+
+    public List<GeneratedTypeBuilder> getAugmentations() {
+        return augmentations;
+    }
+
 }
index e0c65afebb77ca456284074f2c49ddb31e4176ce..735c888a0eb172f314f841ddaa93d4a42859b192 100644 (file)
@@ -82,7 +82,7 @@ public class AbstractBaseType implements Type {
         if (obj == null) {
             return false;
         }
-        if (getClass() != obj.getClass()) {
+        if (false ==(obj instanceof Type)) {
             return false;
         }
         Type other = (Type) obj;
index 62cbb45b93f6bcaecf5b23e6029f75d1cbf937e5..b49ff9ded56081ee30296166c016a6159748dd85 100644 (file)
@@ -21,7 +21,7 @@ import org.opendaylight.yangtools.concepts.Path;
  * 
  * 
  */
-public final class InstanceIdentifier<T extends DataObject> implements Path<InstanceIdentifier<?>>,Immutable {
+public final class InstanceIdentifier<T extends DataObject> implements Path<InstanceIdentifier<? extends DataObject>>,Immutable {
 
     private final List<PathArgument> path;
     private final Class<T> targetType;
index 083454b9e9d57ddff1c2f35b45e159aabbbd4bed..196b1748d0d99c6fbfba44a841fbc75d1157b69b 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.common;
 import java.io.Serializable;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
@@ -43,11 +44,12 @@ public final class QName implements Immutable,Serializable {
 
     protected static final Logger LOGGER = LoggerFactory.getLogger(QName.class);
 
-    private SimpleDateFormat revisionFormat = new SimpleDateFormat("yyyy-MM-dd");
+    private static final SimpleDateFormat REVISION_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
 
     private final URI namespace;
     private final String localName;
     private final String prefix;
+    private final String formattedRevision;
     private final Date revision;
 
     /**
@@ -67,6 +69,11 @@ public final class QName implements Immutable,Serializable {
         this.localName = localName;
         this.revision = revision;
         this.prefix = prefix;
+        if(revision != null) {
+            this.formattedRevision = REVISION_FORMAT.format(revision);
+        } else {
+            this.formattedRevision = null;
+        }
     }
 
     /**
@@ -145,7 +152,7 @@ public final class QName implements Immutable,Serializable {
         int result = 1;
         result = prime * result + ((localName == null) ? 0 : localName.hashCode());
         result = prime * result + ((namespace == null) ? 0 : namespace.hashCode());
-        result = prime * result + ((revision == null) ? 0 : revision.hashCode());
+        result = prime * result + ((formattedRevision == null) ? 0 : formattedRevision.hashCode());
         return result;
     }
 
@@ -175,8 +182,8 @@ public final class QName implements Immutable,Serializable {
         } else if (!namespace.equals(other.namespace)) {
             return false;
         }
-        if (revision == null) {
-            if (other.revision != null) {
+        if (formattedRevision == null) {
+            if (other.formattedRevision != null) {
                 return false;
             }
         } else if (!revision.equals(other.revision)) {
@@ -184,6 +191,28 @@ public final class QName implements Immutable,Serializable {
         }
         return true;
     }
+    
+    
+    public static QName create(QName base, String localName){
+        return new QName(base, localName);
+    }
+    
+    public static QName create(URI namespace, Date revision, String localName){
+        return new QName(namespace, revision, localName);
+    }
+    
+    
+    public static QName create(String namespace, String revision, String localName) throws IllegalArgumentException{
+        try {
+            URI namespaceUri = new URI(namespace);
+            Date revisionDate = REVISION_FORMAT.parse(revision);
+            return create(namespaceUri, revisionDate, localName);
+        } catch (ParseException pe) {
+            throw new IllegalArgumentException("Revision is not in supported format", pe);
+        } catch (URISyntaxException ue) {
+            throw new IllegalArgumentException("Namespace is is not valid URI", ue);
+        }
+    }
 
     @Override
     public String toString() {
@@ -192,7 +221,7 @@ public final class QName implements Immutable,Serializable {
             sb.append("(" + namespace);
 
             if (revision != null) {
-                sb.append("?revision=" + revisionFormat.format(revision));
+                sb.append("?revision=" + REVISION_FORMAT.format(revision));
             }
             sb.append(")");
         }
@@ -219,7 +248,7 @@ public final class QName implements Immutable,Serializable {
 
         String query = "";
         if (revision != null) {
-            query = "revision=" + revisionFormat.format(revision);
+            query = "revision=" + formattedRevision;
         }
 
         URI compositeURI = null;
@@ -231,4 +260,8 @@ public final class QName implements Immutable,Serializable {
         }
         return compositeURI;
     }
+    
+    public String getFormattedRevision() {
+        return formattedRevision;
+    }
 }