HC2VPP-316 - Fix docs generation for augments without qname 65/12165/6
authorMichal Cmarada <[email protected]>
Fri, 4 May 2018 09:49:52 +0000 (11:49 +0200)
committerMichal Cmarada <[email protected]>
Wed, 9 May 2018 12:35:57 +0000 (14:35 +0200)
this fixes bug when model augments case
and augment generated class does not contain qname.

Change-Id: I6b088d9dce46015e2c7c374b0197bedb5e868e79
Signed-off-by: Michal Cmarada <[email protected]>
vpp-integration/api-docs/core/src/main/java/io/fd/hc2vpp/docs/core/CoverageGenerator.java
vpp-integration/api-docs/core/src/main/java/io/fd/hc2vpp/docs/core/YangTypeLinkIndex.java

index bc94a74..fb9e3a6 100644 (file)
@@ -97,6 +97,7 @@ public class CoverageGenerator implements VppApiUtils {
                             // binds Yang types with links from pre-build index
                             // TODO - use deserialized yii e.g. /module:parent-node/child-node
                             builder.setYangTypes(handler.getHandledNodes().stream()
+                                .filter(YangTypeLinkIndex::hasQname)
                                 .map(type -> new YangType(type, yangTypeIndex.getLinkForType(type)))
                                 .collect(Collectors.toList()));
 
index b4002b6..4b0a3c1 100644 (file)
@@ -20,10 +20,16 @@ import static java.lang.String.format;
 
 import java.io.IOException;
 import java.lang.reflect.Field;
+import java.util.Arrays;
+
 import org.opendaylight.yangtools.yang.common.QName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class YangTypeLinkIndex {
 
+    private static final Logger LOG = LoggerFactory.getLogger(YangTypeLinkIndex.class);
+
     private final ModelLinkIndex modelLinkIndex;
     private final ModelTypeIndex modelTypeIndex;
 
@@ -36,6 +42,24 @@ public class YangTypeLinkIndex {
         }
     }
 
+    // to be able to skip augments without QNAME field
+    static boolean hasQname(final String classname) {
+        final Class<?> loadedClass;
+        try {
+            loadedClass = YangTypeLinkIndex.class.getClassLoader().loadClass(classname);
+            boolean
+                hasQname = Arrays.stream(loadedClass.getFields())
+                    .anyMatch(field -> field.getName().equalsIgnoreCase("QNAME"));
+            if (!hasQname) {
+                LOG.warn("Class {} does not have a QNAME field", classname);
+            }
+
+            return hasQname;
+        } catch (ClassNotFoundException e) {
+            throw new IllegalStateException(format("Unable to load classname: %s", classname), e);
+        }
+    }
+
     public String getLinkForType(final String classname) {
         final Class<?> loadedClass;
         final QName qname;
@@ -47,7 +71,6 @@ public class YangTypeLinkIndex {
             throw new IllegalStateException(format("Unable to extract QNAME from %s", classname), e);
         }
 
-
         final String namespace = qname.getNamespace().toString();
         final String formattedRevision = qname.getRevision().get().toString();
         final String model = modelTypeIndex.namespaceToModule(namespace, formattedRevision);