Adjust to yangtools-2.0.0/odlparent-3.0.0 changes
[netconf.git] / restconf / restconf-nb-rfc8040 / src / main / java / org / opendaylight / restconf / nb / rfc8040 / utils / parser / ParserIdentifier.java
index 0df51eacd3b65b7e0371c56a6208f3e769d5bebe..b5438ff866be2e878739c6a12aebb74b82bbe083 100644 (file)
@@ -10,10 +10,12 @@ package org.opendaylight.restconf.nb.rfc8040.utils.parser;
 import com.google.common.base.Optional;
 import com.google.common.base.Splitter;
 import com.google.common.collect.Iterables;
-import java.text.ParseException;
+import java.time.format.DateTimeParseException;
+import java.util.AbstractMap.SimpleImmutableEntry;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map.Entry;
 import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
 import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
 import org.opendaylight.mdsal.dom.api.DOMYangTextSourceProvider;
@@ -25,7 +27,7 @@ import org.opendaylight.restconf.common.schema.SchemaExportContext;
 import org.opendaylight.restconf.nb.rfc8040.utils.RestconfConstants;
 import org.opendaylight.restconf.nb.rfc8040.utils.validations.RestconfValidation;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
+import org.opendaylight.yangtools.yang.common.Revision;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode;
 import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
@@ -104,7 +106,7 @@ public final class ParserIdentifier {
             final QName rpcQName = pathYangInstanceIdentifier.getLastPathArgument().getNodeType();
             RpcDefinition def = null;
             for (final RpcDefinition rpcDefinition : mountSchemaContext
-                    .findModuleByNamespaceAndRevision(rpcQName.getNamespace(), rpcQName.getRevision()).getRpcs()) {
+                    .findModule(rpcQName.getModule()).get().getRpcs()) {
                 if (rpcDefinition.getQName().getLocalName().equals(rpcQName.getLocalName())) {
                     def = rpcDefinition;
                     break;
@@ -121,9 +123,7 @@ public final class ParserIdentifier {
             }
             final QName rpcQName = deserialize.getLastPathArgument().getNodeType();
             RpcDefinition def = null;
-            for (final RpcDefinition rpcDefinition
-                    : schemaContext.findModuleByNamespaceAndRevision(rpcQName.getNamespace(),
-                        rpcQName.getRevision()).getRpcs()) {
+            for (final RpcDefinition rpcDefinition : schemaContext.findModule(rpcQName.getModule()).get().getRpcs()) {
                 if (rpcDefinition.getQName().getLocalName().equals(rpcQName.getLocalName())) {
                     def = rpcDefinition;
                     break;
@@ -146,13 +146,13 @@ public final class ParserIdentifier {
     }
 
     /**
-     * Make a {@link QName} from identifier.
+     * Make a moduleName/Revision pair from identifier.
      *
      * @param identifier
      *             path parameter
      * @return {@link QName}
      */
-    public static QName makeQNameFromIdentifier(final String identifier) {
+    public static Entry<String, Revision> makeQNameFromIdentifier(final String identifier) {
         // check if more than one slash is not used as path separator
         if (identifier.contains(
                 String.valueOf(RestconfConstants.SLASH).concat(String.valueOf(RestconfConstants.SLASH)))) {
@@ -179,16 +179,16 @@ public final class ParserIdentifier {
                     ErrorTag.INVALID_VALUE);
         }
 
-        final Date moduleRevision;
+        final Revision moduleRevision;
         try {
-            moduleRevision = SimpleDateFormatUtil.getRevisionFormat().parse(pathArgs.get(1));
-        } catch (final ParseException e) {
+            moduleRevision = Revision.of(pathArgs.get(1));
+        } catch (final DateTimeParseException e) {
             LOG.debug("URI has bad format: '{}'. It should be 'moduleName/yyyy-MM-dd'", identifier);
             throw new RestconfDocumentedException("URI has bad format. It should be \'moduleName/yyyy-MM-dd\'",
-                    ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE);
+                    ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE, e);
         }
 
-        return QName.create(null, moduleRevision, pathArgs.get(0));
+        return new SimpleImmutableEntry<>(pathArgs.get(0), moduleRevision);
     }
 
     /**
@@ -211,9 +211,8 @@ public final class ParserIdentifier {
         final Iterator<String> componentIter = pathComponents.iterator();
         if (!Iterables.contains(pathComponents, RestconfConstants.MOUNT)) {
             final String moduleName = RestconfValidation.validateAndGetModulName(componentIter);
-            final Date revision = RestconfValidation.validateAndGetRevision(componentIter);
-            final Module module = schemaContext.findModuleByName(moduleName, revision);
-
+            final Revision revision = RestconfValidation.validateAndGetRevision(componentIter);
+            final Module module = schemaContext.findModule(moduleName, revision).orElse(null);
             return new SchemaExportContext(schemaContext, module, sourceProvider);
         } else {
             final StringBuilder pathBuilder = new StringBuilder();
@@ -235,8 +234,9 @@ public final class ParserIdentifier {
             final InstanceIdentifierContext<?> point = ParserIdentifier
                     .toInstanceIdentifier(pathBuilder.toString(), schemaContext, Optional.of(domMountPointService));
             final String moduleName = RestconfValidation.validateAndGetModulName(componentIter);
-            final Date revision = RestconfValidation.validateAndGetRevision(componentIter);
-            final Module module = point.getMountPoint().getSchemaContext().findModuleByName(moduleName, revision);
+            final Revision revision = RestconfValidation.validateAndGetRevision(componentIter);
+            final Module module = point.getMountPoint().getSchemaContext().findModule(moduleName, revision)
+                    .orElse(null);
             return new SchemaExportContext(point.getMountPoint().getSchemaContext(), module, sourceProvider);
         }
     }