BUG-576: modified parser to handle refinement of extension instances. 74/9574/3
authorMartin Vitez <mvitez@cisco.com>
Fri, 1 Aug 2014 10:38:44 +0000 (12:38 +0200)
committerMartin Vitez <mvitez@cisco.com>
Wed, 6 Aug 2014 09:05:45 +0000 (09:05 +0000)
If user tries to refine an instance of extension parser log this event and continue with parsing
instead of throwing an exception.

Change-Id: I6d535b124527bc5a47ef90ba72b57eccbd6c73ef
Signed-off-by: Martin Vitez <mvitez@cisco.com>
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/GroupingUtils.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/RefineUtils.java

index 8b41ac4f53ad3477b6b796640655d12f7b39d37c..6eb400c483ce7b622b1504ee87ace10c1912db93 100644 (file)
@@ -23,8 +23,13 @@ import org.opendaylight.yangtools.yang.parser.builder.api.GroupingBuilder;
 import org.opendaylight.yangtools.yang.parser.builder.api.RefineBuilder;
 import org.opendaylight.yangtools.yang.parser.builder.api.UsesNodeBuilder;
 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public final class GroupingUtils {
+    private static final Logger LOG = LoggerFactory.getLogger(GroupingUtils.class);
+
+    private static final Splitter COLON_SPLITTER = Splitter.on(':');
     private static final Splitter SLASH_SPLITTER = Splitter.on('/');
 
     private GroupingUtils() {
@@ -116,8 +121,15 @@ public final class GroupingUtils {
 
             DataSchemaNodeBuilder nodeToRefine = (DataSchemaNodeBuilder) currentNode;
             if (nodeToRefine == null) {
-                throw new YangParseException(refine.getModuleName(), refine.getLine(), "Refine target node '"
-                        + refine.getTargetPathString() + "' not found");
+                // FIXME: exception replaced with log to avoid breakage when
+                // user tries to refine instance of extension (unknown node)
+
+                // throw new YangParseException(refine.getModuleName(),
+                // refine.getLine(), "Refine target node '" +
+                // refine.getTargetPathString() + "' not found");
+                LOG.warn("Error in module {} at line {}: Refine target node {} not found.", refine.getModuleName(),
+                        refine.getLine(), refine.getTargetPathString());
+                continue;
             }
             RefineUtils.performRefine(nodeToRefine, refine);
             usesNode.addRefineNode(nodeToRefine);
index b9fbf520da9fa9c3bc356e6dad37d96d0b6ed590..e3f02b8dc265471afb28c70c27ce356366d1b119 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.yangtools.yang.parser.builder.impl;
 
 import java.util.List;
-
 import org.opendaylight.yangtools.yang.model.api.MustDefinition;
 import org.opendaylight.yangtools.yang.parser.builder.api.Builder;
 import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;
@@ -187,7 +186,6 @@ public final class RefineUtils {
         } else if (node instanceof ContainerSchemaNodeBuilder) {
             checkRefineDefault(node, defaultStr, moduleName, line);
             checkRefineMandatory(node, mandatory, moduleName, line);
-            checkRefineMust(node, must, moduleName, line);
             checkRefineMinMax(name, min, max, moduleName, line);
         } else if (node instanceof LeafSchemaNodeBuilder) {
             checkRefinePresence(node, presence, moduleName, line);