Shorten java.util.Optional references
[netconf.git] / restconf / restconf-nb-bierman02 / src / main / java / org / opendaylight / netconf / sal / restconf / impl / ControllerContext.java
index c8e6adcc968f730d5f660dd90b94dfd99652e37e..6fbfee531f58cf90c21b566fe611740121ea33a2 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.netconf.sal.restconf.impl;
 
-import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
@@ -29,15 +28,19 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicReference;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import javax.ws.rs.core.Response.Status;
+import org.apache.aries.blueprint.annotation.service.Reference;
 import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationException;
 import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationOperation;
 import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
-import org.opendaylight.controller.sal.core.api.model.SchemaService;
+import org.opendaylight.mdsal.dom.api.DOMMountPoint;
+import org.opendaylight.mdsal.dom.api.DOMMountPointService;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.mdsal.dom.api.DOMYangTextSourceProvider;
 import org.opendaylight.netconf.sal.rest.api.Draft02;
@@ -78,6 +81,7 @@ import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Singleton
 public final class ControllerContext implements SchemaContextListener, Closeable {
     // FIXME: this should be in md-sal somewhere
     public static final String MOUNT = "yang-ext:mount";
@@ -102,21 +106,27 @@ public final class ControllerContext implements SchemaContextListener, Closeable
     private volatile SchemaContext globalSchema;
     private volatile DataNormalizer dataNormalizer;
 
-    private ControllerContext(SchemaService schemaService, DOMMountPointService mountService,
-            DOMYangTextSourceProvider yangTextSourceProvider) {
+    @Inject
+    public ControllerContext(final @Reference DOMSchemaService schemaService,
+            final @Reference DOMMountPointService mountService, final @Reference DOMSchemaService domSchemaService) {
         this.mountService = mountService;
-        this.yangTextSourceProvider = yangTextSourceProvider;
+        this.yangTextSourceProvider = domSchemaService.getExtensions().getInstance(DOMYangTextSourceProvider.class);
 
         onGlobalContextUpdated(schemaService.getGlobalContext());
         listenerRegistration = schemaService.registerSchemaContextListener(this);
     }
 
-    public static ControllerContext newInstance(SchemaService schemaService, DOMMountPointService mountService,
-            DOMSchemaService domSchemaService) {
-        final DOMYangTextSourceProvider yangTextSourceProvider =
-            (DOMYangTextSourceProvider) domSchemaService.getSupportedExtensions().get(DOMYangTextSourceProvider.class);
-
-        return new ControllerContext(schemaService, mountService, yangTextSourceProvider);
+    /**
+     * Factory method.
+     *
+     * @deprecated Just use the
+     *             {@link #ControllerContext(DOMSchemaService, DOMMountPointService, DOMSchemaService)}
+     *             constructor instead.
+     */
+    @Deprecated
+    public static ControllerContext newInstance(final DOMSchemaService schemaService,
+            final DOMMountPointService mountService, final DOMSchemaService domSchemaService) {
+        return new ControllerContext(schemaService, mountService, domSchemaService);
     }
 
     private void setGlobalSchema(final SchemaContext globalSchema) {
@@ -135,6 +145,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
     }
 
     @Override
+    @PreDestroy
     public void close() {
         listenerRegistration.close();
     }
@@ -508,7 +519,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
             return childByQName((Module) container, name);
         } else {
             throw new IllegalArgumentException("Unhandled parameter types: "
-                    + Arrays.<Object>asList(container, name).toString());
+                    + Arrays.asList(container, name).toString());
         }
     }
 
@@ -539,7 +550,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
     private InstanceIdentifierContext<?> collectPathArguments(final InstanceIdentifierBuilder builder,
             final List<String> strings, final DataNodeContainer parentNode, final DOMMountPoint mountPoint,
             final boolean returnJustMountPoint) {
-        Preconditions.<List<String>>checkNotNull(strings);
+        Preconditions.checkNotNull(strings);
 
         if (parentNode == null) {
             return null;
@@ -551,6 +562,12 @@ public final class ControllerContext implements SchemaContextListener, Closeable
         }
 
         final String head = strings.iterator().next();
+
+        if (head.isEmpty()) {
+            final List<String> remaining = strings.subList(1, strings.size());
+            return collectPathArguments(builder, remaining, parentNode, mountPoint, returnJustMountPoint);
+        }
+
         final String nodeName = toNodeName(head);
         final String moduleName = toModuleName(head);
 
@@ -835,7 +852,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
     }
 
     private QName toQName(final SchemaContext schemaContext, final String name,
-            final java.util.Optional<Revision> revisionDate) {
+            final Optional<Revision> revisionDate) {
         checkPreconditions();
         final String module = toModuleName(name);
         final String node = toNodeName(name);
@@ -855,7 +872,7 @@ public final class ControllerContext implements SchemaContextListener, Closeable
         return node instanceof ListSchemaNode || node instanceof ContainerSchemaNode;
     }
 
-    public RpcDefinition getRpcDefinition(final String name, final java.util.Optional<Revision> revisionDate) {
+    public RpcDefinition getRpcDefinition(final String name, final Optional<Revision> revisionDate) {
         final QName validName = toQName(this.globalSchema, name, revisionDate);
         return validName == null ? null : this.qnameToRpc.get().get(validName);
     }