X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fbuilder%2Fimpl%2FGroupingUtils.java;h=63058a6f319811c4ca6d8574a25abd1776898c12;hb=42abb28b99a02f9580f4676ce5c315628e5bcd24;hp=2442d47b75eda5da1757538bffd88238690dd6f6;hpb=a8240131f5b1216d0345a6264a5bde51a21b2b59;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/GroupingUtils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/GroupingUtils.java index 2442d47b75..63058a6f31 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/GroupingUtils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/builder/impl/GroupingUtils.java @@ -7,14 +7,15 @@ */ package org.opendaylight.yangtools.yang.parser.builder.impl; +import com.google.common.base.Splitter; +import java.net.URI; import java.util.Comparator; import java.util.Date; import java.util.Map; +import java.util.NavigableMap; import java.util.Set; -import java.util.TreeMap; -import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; -import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.parser.builder.api.Builder; import org.opendaylight.yangtools.yang.parser.builder.api.DataNodeContainerBuilder; import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder; @@ -22,8 +23,17 @@ 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; +/** + * @deprecated Pre-Beryllium implementation, scheduled for removal. + */ +@Deprecated public final class GroupingUtils { + private static final Logger LOG = LoggerFactory.getLogger(GroupingUtils.class); + + private static final Splitter SLASH_SPLITTER = Splitter.on('/'); private GroupingUtils() { } @@ -37,58 +47,32 @@ public final class GroupingUtils { * all loaded modules * @param module * current module - * @return grouping with given name if found, null otherwise + * @return grouping with given name, never null + * @throws YangParseException + * if no grouping found */ public static GroupingBuilder getTargetGroupingFromModules(final UsesNodeBuilder usesBuilder, - final Map> modules, final ModuleBuilder module) { + final Map> modules, final ModuleBuilder module) { final int line = usesBuilder.getLine(); - final String groupingString = usesBuilder.getGroupingPathAsString(); - String groupingPrefix; - String groupingName; - - if (groupingString.contains(":")) { - String[] splitted = groupingString.split(":"); - if (splitted.length != 2 || groupingString.contains("/")) { - throw new YangParseException(module.getName(), line, "Invalid name of target grouping"); - } - groupingPrefix = splitted[0]; - groupingName = splitted[1]; - } else { - groupingPrefix = module.getPrefix(); - groupingName = groupingString; - } - - ModuleBuilder dependentModule; - - if(groupingPrefix == null) { - dependentModule = module; - } else if (groupingPrefix.equals(module.getPrefix())) { - dependentModule = module; - } else { - dependentModule = BuilderUtils.findModuleFromBuilders(modules, module, groupingPrefix, line); - } - - if (dependentModule == null) { - return null; - } + SchemaPath groupingPath = usesBuilder.getTargetGroupingPath(); + QName groupingName = groupingPath.getPathFromRoot().iterator().next(); + ModuleBuilder dependentModule = BuilderUtils.findModule(groupingName, modules); - GroupingBuilder result; Set groupings = dependentModule.getGroupingBuilders(); - result = findGroupingBuilder(groupings, groupingName); + GroupingBuilder result = findGroupingBuilder(groupings, groupingName.getLocalName()); if (result != null) { return result; } Builder parent = usesBuilder.getParent(); - while (parent != null) { if (parent instanceof DataNodeContainerBuilder) { groupings = ((DataNodeContainerBuilder) parent).getGroupingBuilders(); } else if (parent instanceof RpcDefinitionBuilder) { groupings = ((RpcDefinitionBuilder) parent).getGroupings(); } - result = findGroupingBuilder(groupings, groupingName); + result = findGroupingBuilder(groupings, groupingName.getLocalName()); if (result == null) { parent = parent.getParent(); } else { @@ -97,46 +81,11 @@ public final class GroupingUtils { } if (result == null) { - throw new YangParseException(module.getName(), line, "Referenced grouping '" + groupingName - + "' not found."); + throw new YangParseException(module.getName(), line, "Grouping '" + groupingName + "' not found."); } return result; } - /** - * Search context for grouping by name defined in uses node. - * - * @param usesBuilder - * builder of uses statement - * @param module - * current module - * @param context - * SchemaContext containing already resolved modules - * @return grouping with given name if found, null otherwise - */ - public static GroupingDefinition getTargetGroupingFromContext(final UsesNodeBuilder usesBuilder, - final ModuleBuilder module, final SchemaContext context) { - final int line = usesBuilder.getLine(); - String groupingString = usesBuilder.getGroupingPathAsString(); - String groupingPrefix; - String groupingName; - - if (groupingString.contains(":")) { - String[] splitted = groupingString.split(":"); - if (splitted.length != 2 || groupingString.contains("/")) { - throw new YangParseException(module.getName(), line, "Invalid name of target grouping"); - } - groupingPrefix = splitted[0]; - groupingName = splitted[1]; - } else { - groupingPrefix = module.getPrefix(); - groupingName = groupingString; - } - - Module dependentModule = BuilderUtils.findModuleFromContext(context, module, groupingPrefix, line); - return findGroupingDefinition(dependentModule.getGroupings(), groupingName); - } - /** * Find grouping by name. * @@ -155,24 +104,6 @@ public final class GroupingUtils { return null; } - /** - * Find grouping by name. - * - * @param groupings - * collection of grouping definitions to search - * @param name - * name of grouping - * @return grouping with given name if present in collection, null otherwise - */ - private static GroupingDefinition findGroupingDefinition(final Set groupings, final String name) { - for (GroupingDefinition grouping : groupings) { - if (grouping.getQName().getLocalName().equals(name)) { - return grouping; - } - } - return null; - } - /** * Perform refinement of uses target grouping nodes. Uses process has to be * already performed. @@ -184,9 +115,8 @@ public final class GroupingUtils { for (RefineBuilder refine : usesNode.getRefines()) { String refineTargetPath = refine.getTargetPathString(); - String[] splitted = refineTargetPath.split("/"); Builder currentNode = usesNode.getParent(); - for (String pathElement : splitted) { + for (String pathElement : SLASH_SPLITTER.split(refineTargetPath)) { if (currentNode instanceof DataNodeContainerBuilder) { currentNode = ((DataNodeContainerBuilder) currentNode).getDataChildByName(pathElement); } else if (currentNode instanceof ChoiceBuilder) { @@ -196,8 +126,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);