Minor code cleanups
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / leafref / LeafRefPathParserListenerImpl.java
index b94c79499e34d236a2a3ee542bde54f470dc23cd..078abd2067fba0bbf901f0514f6112bc59604842 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -7,16 +7,16 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.leafref;
 
-import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkArgument;
+
 import com.google.common.collect.Lists;
-import java.net.URI;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 import java.util.Optional;
 import org.antlr.v4.runtime.tree.TerminalNode;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefPathParser.IdentifierContext;
 import org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefPathParser.Node_identifierContext;
 import org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefPathParser.Path_argContext;
@@ -30,12 +30,13 @@ import org.opendaylight.yangtools.yang.model.api.ModuleImport;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 
-final class LeafRefPathParserListenerImpl extends LeafRefPathParserBaseListener{
+final class LeafRefPathParserListenerImpl extends LeafRefPathParserBaseListener {
 
     private final List<QNameWithPredicateBuilder> leafRefPathQnameList = new ArrayList<>();
     private final SchemaContext schemaContext;
     private final Module module;
-  //FIXME use for identifier path completion
+    private final Module leafrefModule;
+    // FIXME: use for identifier path completion
     private final SchemaNode node;
 
     private ParsingState currentParsingState = ParsingState.LEAF_REF_PATH;
@@ -51,15 +52,17 @@ final class LeafRefPathParserListenerImpl extends LeafRefPathParserBaseListener{
         LEAF_REF_PATH, PATH_PREDICATE, PREDICATE_PATH_EQUALITY_EXPR, PATH_KEY_EXPR
     }
 
-    public LeafRefPathParserListenerImpl(final SchemaContext schemaContext, final Module currentModule, final SchemaNode currentNode) {
-       this.schemaContext = schemaContext;
-       this.module = currentModule;
-       this.node = currentNode;
+    LeafRefPathParserListenerImpl(final SchemaContext schemaContext, final Module leafrefModule,
+            final SchemaNode currentNode) {
+        this.schemaContext = schemaContext;
+        this.module = schemaContext.findModule(currentNode.getQName().getModule()).get();
+        this.leafrefModule = leafrefModule;
+        this.node = currentNode;
     }
 
     @Override
     public void enterPath_predicate(final Path_predicateContext ctx) {
-        currentParsingState=ParsingState.PATH_PREDICATE;
+        currentParsingState = ParsingState.PATH_PREDICATE;
         currentPredicate = new QNamePredicateBuilder();
     }
 
@@ -67,13 +70,13 @@ final class LeafRefPathParserListenerImpl extends LeafRefPathParserBaseListener{
     public void exitPath_predicate(final Path_predicateContext ctx) {
         currentLeafRefPathQName.addQNamePredicate(currentPredicate.build());
         currentPredicate = null;
-        currentParsingState=ParsingState.LEAF_REF_PATH;
+        currentParsingState = ParsingState.LEAF_REF_PATH;
     }
 
 
     @Override
     public void enterRel_path_keyexpr(final Rel_path_keyexprContext ctx) {
-        currentParsingState=ParsingState.PATH_KEY_EXPR;
+        currentParsingState = ParsingState.PATH_KEY_EXPR;
 
         final List<TerminalNode> dots = ctx.DOTS();
         predicatePathKeyQnameList = new ArrayList<>(dots.size());
@@ -88,7 +91,7 @@ final class LeafRefPathParserListenerImpl extends LeafRefPathParserBaseListener{
             QNameWithPredicateBuilder::build), false);
         currentPredicate.setPathKeyExpression(pathKeyExpression);
 
-        currentParsingState=ParsingState.PREDICATE_PATH_EQUALITY_EXPR;
+        currentParsingState = ParsingState.PREDICATE_PATH_EQUALITY_EXPR;
     }
 
     @Override
@@ -113,13 +116,13 @@ final class LeafRefPathParserListenerImpl extends LeafRefPathParserBaseListener{
     @Override
     public void enterPrefix(final PrefixContext ctx) {
         final String prefix = ctx.getText();
-        if (!module.getPrefix().equals(prefix)) {
-            final Optional<QNameModule> qnameModuleOpt = getQNameModuleForImportPrefix(prefix);
-            Preconditions.checkArgument(qnameModuleOpt.isPresent(), "No module import for prefix: %s in module: %s",
-                prefix, module.getName());
+        if (!leafrefModule.getPrefix().equals(prefix)) {
+            final Optional<QNameModule> qnameModuleOpt = getQNameModuleForImportPrefix(leafrefModule, prefix);
+            checkArgument(qnameModuleOpt.isPresent(), "No module import for prefix: %s in module: %s", prefix,
+                leafrefModule.getName());
             currentQnameModule = qnameModuleOpt.get();
         } else {
-            currentQnameModule = module.getQNameModule();
+            currentQnameModule = leafrefModule.getQNameModule();
         }
     }
 
@@ -137,7 +140,11 @@ final class LeafRefPathParserListenerImpl extends LeafRefPathParserBaseListener{
     @Override
     public void exitNode_identifier(final Node_identifierContext ctx) {
         if (currentQnameModule == null) {
-            currentQnameModule = module.getQNameModule();
+            if (relativePath) {
+                currentQnameModule = module.getQNameModule();
+            } else {
+                currentQnameModule = leafrefModule.getQNameModule();
+            }
         }
 
         if (currentParsingState == ParsingState.PREDICATE_PATH_EQUALITY_EXPR) {
@@ -161,27 +168,19 @@ final class LeafRefPathParserListenerImpl extends LeafRefPathParserBaseListener{
         return leafRefPath;
     }
 
-    private URI getNamespaceForImportPrefix(final String prefix) {
-        final ModuleImport moduleImport = getModuleImport(prefix);
-        final Module findedModule = schemaContext.findModuleByName(moduleImport.getModuleName(), moduleImport.getRevision());
-
-        return findedModule.getNamespace();
-    }
-
-    private Optional<QNameModule> getQNameModuleForImportPrefix(final String prefix) {
-        final ModuleImport moduleImport = getModuleImport(prefix);
+    private Optional<QNameModule> getQNameModuleForImportPrefix(final Module targetModule, final String prefix) {
+        final ModuleImport moduleImport = getModuleImport(targetModule, prefix);
         if (moduleImport == null) {
             return Optional.empty();
         }
 
         final String moduleName = moduleImport.getModuleName();
-        final Date revision = moduleImport.getRevision();
-        final Module foundModule = schemaContext.findModuleByName(moduleName, revision);
-
-        return Optional.of(foundModule.getQNameModule());
+        final Optional<Revision> revision = moduleImport.getRevision();
+        return schemaContext.findModule(moduleName, revision).map(Module::getQNameModule);
     }
 
-    private ModuleImport getModuleImport(final String prefix) {
-        return module.getImports().stream().filter(imp -> prefix.equals(imp.getPrefix())).findFirst().orElse(null);
+    private static ModuleImport getModuleImport(final Module targetModule, final String prefix) {
+        return targetModule.getImports().stream()
+            .filter(imp -> prefix.equals(imp.getPrefix())).findFirst().orElse(null);
     }
 }