Merge "Optimize Capability.getLocation()"
authorTony Tkacik <ttkacik@cisco.com>
Mon, 12 Jan 2015 16:31:29 +0000 (16:31 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Mon, 12 Jan 2015 16:31:29 +0000 (16:31 +0000)
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationServiceImpl.java
opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfMonitoringServiceImpl.java
opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/NetconfMonitoringServiceImplTest.java
opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfITMonitoringTest.java
opendaylight/netconf/netconf-mapping-api/src/main/java/org/opendaylight/controller/netconf/mapping/api/Capability.java
opendaylight/netconf/netconf-monitoring/src/main/java/org/opendaylight/controller/netconf/monitoring/osgi/NetconfMonitoringOperationService.java
opendaylight/netconf/netconf-monitoring/src/test/java/org/opendaylight/controller/netconf/monitoring/osgi/NetconfMonitoringOperationServiceTest.java
opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/ModuleBuilderCapability.java

index 7008879e9fb9fc013896fb2936cc9e20dc67b6ce..902be44fd9d78847d218fea620993d411b099314 100644 (file)
@@ -12,8 +12,9 @@ import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Sets;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import org.opendaylight.controller.config.api.LookupRegistry;
@@ -36,8 +37,8 @@ public class NetconfOperationServiceImpl implements NetconfOperationService {
     private final Set<Capability> capabilities;
     private final TransactionProvider transactionProvider;
 
-    public NetconfOperationServiceImpl(YangStoreService yangStoreService, ConfigRegistryJMXClient jmxClient,
-            String netconfSessionIdForReporting) throws YangStoreException {
+    public NetconfOperationServiceImpl(final YangStoreService yangStoreService, final ConfigRegistryJMXClient jmxClient,
+            final String netconfSessionIdForReporting) throws YangStoreException {
 
         yangStoreSnapshot = yangStoreService.getYangStoreSnapshot();
         checkConsistencyBetweenYangStoreAndConfig(jmxClient, yangStoreSnapshot);
@@ -50,7 +51,7 @@ public class NetconfOperationServiceImpl implements NetconfOperationService {
 
 
     @VisibleForTesting
-    static void checkConsistencyBetweenYangStoreAndConfig(LookupRegistry jmxClient, YangStoreSnapshot yangStoreSnapshot) {
+    static void checkConsistencyBetweenYangStoreAndConfig(final LookupRegistry jmxClient, final YangStoreSnapshot yangStoreSnapshot) {
         Set<String> missingModulesFromConfig = Sets.newHashSet();
 
         Set<String> modulesSeenByConfig = jmxClient.getAvailableModuleFactoryQNames();
@@ -89,7 +90,7 @@ public class NetconfOperationServiceImpl implements NetconfOperationService {
         return operationProvider.getOperations();
     }
 
-    private static Set<Capability> setupCapabilities(YangStoreSnapshot yangStoreSnapshot) {
+    private static Set<Capability> setupCapabilities(final YangStoreSnapshot yangStoreSnapshot) {
         Set<Capability> capabilities = new HashSet<>();
         // [RFC6241] 8.3.  Candidate Configuration Capability
         capabilities.add(new BasicCapability("urn:ietf:params:netconf:capability:candidate:1.0"));
@@ -110,7 +111,7 @@ public class NetconfOperationServiceImpl implements NetconfOperationService {
 
         private final String capability;
 
-        private BasicCapability(String capability) {
+        private BasicCapability(final String capability) {
             this.capability = capability;
         }
 
@@ -140,8 +141,8 @@ public class NetconfOperationServiceImpl implements NetconfOperationService {
         }
 
         @Override
-        public Optional<List<String>> getLocation() {
-            return Optional.absent();
+        public Collection<String> getLocation() {
+            return Collections.emptyList();
         }
 
         @Override
@@ -157,7 +158,7 @@ public class NetconfOperationServiceImpl implements NetconfOperationService {
         private final String moduleName;
         private final String moduleNamespace;
 
-        public YangStoreCapability(Module module, String moduleContent) {
+        public YangStoreCapability(final Module module, final String moduleContent) {
             super(toCapabilityURI(module));
             this.content = moduleContent;
             this.moduleName = module.getName();
@@ -170,7 +171,7 @@ public class NetconfOperationServiceImpl implements NetconfOperationService {
             return Optional.of(content);
         }
 
-        private static String toCapabilityURI(Module module) {
+        private static String toCapabilityURI(final Module module) {
             return String.valueOf(module.getNamespace()) + "?module="
                     + module.getName() + "&revision=" + Util.writeDate(module.getRevision());
         }
index 3f44ff4ff834120d3edb655e55b5419b1569e7e0..efbe3ad68fe4615334c08206054cc755e20ff87b 100644 (file)
@@ -10,10 +10,12 @@ package org.opendaylight.controller.netconf.impl.osgi;
 import com.google.common.base.Function;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Collections2;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableList.Builder;
 import io.netty.util.internal.ConcurrentSet;
-import java.util.Collections;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import javax.annotation.Nonnull;
@@ -37,25 +39,32 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class NetconfMonitoringServiceImpl implements NetconfMonitoringService, SessionMonitoringService {
-
+    private static final Schema.Location NETCONF_LOCATION = new Schema.Location(Schema.Location.Enumeration.NETCONF);
+    private static final List<Schema.Location> NETCONF_LOCATIONS = ImmutableList.of(NETCONF_LOCATION);
     private static final Logger LOG = LoggerFactory.getLogger(NetconfMonitoringServiceImpl.class);
+    private static final Function<NetconfManagementSession, Session> SESSION_FUNCTION = new Function<NetconfManagementSession, Session>() {
+        @Override
+        public Session apply(@Nonnull final NetconfManagementSession input) {
+            return input.toManagementSession();
+        }
+    };
 
     private final Set<NetconfManagementSession> sessions = new ConcurrentSet<>();
     private final NetconfOperationProvider netconfOperationProvider;
 
-    public NetconfMonitoringServiceImpl(NetconfOperationProvider netconfOperationProvider) {
+    public NetconfMonitoringServiceImpl(final NetconfOperationProvider netconfOperationProvider) {
         this.netconfOperationProvider = netconfOperationProvider;
     }
 
     @Override
-    public void onSessionUp(NetconfManagementSession session) {
+    public void onSessionUp(final NetconfManagementSession session) {
         LOG.debug("Session {} up", session);
         Preconditions.checkState(!sessions.contains(session), "Session %s was already added", session);
         sessions.add(session);
     }
 
     @Override
-    public void onSessionDown(NetconfManagementSession session) {
+    public void onSessionDown(final NetconfManagementSession session) {
         LOG.debug("Session {} down", session);
         Preconditions.checkState(sessions.contains(session), "Session %s not present", session);
         sessions.remove(session);
@@ -63,7 +72,7 @@ public class NetconfMonitoringServiceImpl implements NetconfMonitoringService, S
 
     @Override
     public Sessions getSessions() {
-        return new SessionsBuilder().setSession(transformSessions(sessions)).build();
+        return new SessionsBuilder().setSession(ImmutableList.copyOf(Collections2.transform(sessions, SESSION_FUNCTION))).build();
     }
 
     @Override
@@ -78,65 +87,55 @@ public class NetconfMonitoringServiceImpl implements NetconfMonitoringService, S
         }
     }
 
-    private Schemas transformSchemas(Set<NetconfOperationService> services) {
-        Set<Capability> caps = Sets.newHashSet();
-
-        List<Schema> schemas = Lists.newArrayList();
-
-
+    private static Schemas transformSchemas(final Set<NetconfOperationService> services) {
+        // FIXME: Capability implementations do not have hashcode/equals!
+        final Set<Capability> caps = new HashSet<>();
         for (NetconfOperationService netconfOperationService : services) {
             // TODO check for duplicates ? move capability merging to snapshot
             // Split capabilities from operations first and delete this duplicate code
             caps.addAll(netconfOperationService.getCapabilities());
         }
 
+        final List<Schema> schemas = new ArrayList<>(caps.size());
         for (Capability cap : caps) {
-            SchemaBuilder builder = new SchemaBuilder();
-
-            if (cap.getCapabilitySchema().isPresent() == false) {
-                continue;
-            }
+            if (cap.getCapabilitySchema().isPresent()) {
+                SchemaBuilder builder = new SchemaBuilder();
+                Preconditions.checkState(cap.getModuleNamespace().isPresent());
+                builder.setNamespace(new Uri(cap.getModuleNamespace().get()));
 
-            Preconditions.checkState(cap.getModuleNamespace().isPresent());
-            builder.setNamespace(new Uri(cap.getModuleNamespace().get()));
+                Preconditions.checkState(cap.getRevision().isPresent());
+                String version = cap.getRevision().get();
+                builder.setVersion(version);
 
-            Preconditions.checkState(cap.getRevision().isPresent());
-            String version = cap.getRevision().get();
-            builder.setVersion(version);
+                Preconditions.checkState(cap.getModuleName().isPresent());
+                String identifier = cap.getModuleName().get();
+                builder.setIdentifier(identifier);
 
-            Preconditions.checkState(cap.getModuleName().isPresent());
-            String identifier = cap.getModuleName().get();
-            builder.setIdentifier(identifier);
+                builder.setFormat(Yang.class);
 
-            builder.setFormat(Yang.class);
+                builder.setLocation(transformLocations(cap.getLocation()));
 
-            builder.setLocation(transformLocations(cap.getLocation().or(Collections.<String>emptyList())));
+                builder.setKey(new SchemaKey(Yang.class, identifier, version));
 
-            builder.setKey(new SchemaKey(Yang.class, identifier, version));
-
-            schemas.add(builder.build());
+                schemas.add(builder.build());
+            }
         }
 
         return new SchemasBuilder().setSchema(schemas).build();
     }
 
-    private List<Schema.Location> transformLocations(List<String> locations) {
-        List<Schema.Location> monitoringLocations = Lists.newArrayList();
-        monitoringLocations.add(new Schema.Location(Schema.Location.Enumeration.NETCONF));
+    private static List<Schema.Location> transformLocations(final Collection<String> locations) {
+        if (locations.isEmpty()) {
+            return NETCONF_LOCATIONS;
+        }
+
+        final Builder<Schema.Location> b = ImmutableList.builder();
+        b.add(NETCONF_LOCATION);
 
         for (String location : locations) {
-            monitoringLocations.add(new Schema.Location(new Uri(location)));
+            b.add(new Schema.Location(new Uri(location)));
         }
 
-        return monitoringLocations;
-    }
-
-    private List<Session> transformSessions(Set<NetconfManagementSession> sessions) {
-        return Lists.newArrayList(Collections2.transform(sessions, new Function<NetconfManagementSession, Session>() {
-            @Override
-            public Session apply(@Nonnull NetconfManagementSession input) {
-                return input.toManagementSession();
-            }
-        }));
+        return b.build();
     }
 }
index 0d296c5f5269c0662f9b27db9d6ef1973038d8c8..93caa09286435f627638259784100d85ab203450 100644 (file)
@@ -90,7 +90,7 @@ public class NetconfMonitoringServiceImplTest {
         Optional<String> optRev = Optional.of("rev");
         doReturn(optRev).when(cap).getRevision();
         doReturn(Optional.of("modName")).when(cap).getModuleName();
-        doReturn(Optional.of(Lists.newArrayList("loc"))).when(cap).getLocation();
+        doReturn(Lists.newArrayList("loc")).when(cap).getLocation();
         doNothing().when(snapshot).close();
 
         assertNotNull(service.getSchemas());
index 463b5f045efa9ea1f34a3694198ecc7e26fdd937..ea94fd3f8bbf9d5c56f697877b88905e89740335 100644 (file)
@@ -199,8 +199,8 @@ public class NetconfITMonitoringTest extends AbstractNetconfConfigTest {
         }
 
         @Override
-        public Optional<List<String>> getLocation() {
-            return Optional.absent();
+        public List<String> getLocation() {
+            return Collections.emptyList();
         }
     }
 }
index f55a90e568496b57817384e287175c05ba4aa5d7..408756bf4d221ac2eccde2cbb35133a7592e417f 100644 (file)
@@ -9,7 +9,7 @@
 package org.opendaylight.controller.netconf.mapping.api;
 
 import com.google.common.base.Optional;
-import java.util.List;
+import java.util.Collection;
 
 /**
  * Contains capability URI announced by server hello message and optionally its
@@ -27,5 +27,5 @@ public interface Capability {
 
     public Optional<String> getCapabilitySchema();
 
-    public Optional<List<String>> getLocation();
+    public Collection<String> getLocation();
 }
index e9e92d9202297c626d57e02bcd173beed9ebdc13..a17e139131461bcc2c7ac12505f9d59ae207eba0 100644 (file)
@@ -9,7 +9,8 @@ package org.opendaylight.controller.netconf.monitoring.osgi;
 
 import com.google.common.base.Optional;
 import com.google.common.collect.Sets;
-import java.util.List;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Set;
 import org.opendaylight.controller.netconf.api.monitoring.NetconfMonitoringService;
 import org.opendaylight.controller.netconf.mapping.api.Capability;
@@ -48,14 +49,14 @@ public class NetconfMonitoringOperationService implements NetconfOperationServic
         }
 
         @Override
-        public Optional<List<String>> getLocation() {
-            return Optional.absent();
+        public Collection<String> getLocation() {
+            return Collections.emptyList();
         }
     });
 
     private final NetconfMonitoringService monitor;
 
-    public NetconfMonitoringOperationService(NetconfMonitoringService monitor) {
+    public NetconfMonitoringOperationService(final NetconfMonitoringService monitor) {
         this.monitor = monitor;
     }
 
index 74e6747ab79608b9c13fefd37348d0e3e18555e4..7873183188bb36c56ae93d8fce996bc18b504d6f 100644 (file)
@@ -12,6 +12,7 @@ import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.mock;
 
 import com.google.common.base.Optional;
+import java.util.Collections;
 import org.junit.Test;
 import org.opendaylight.controller.netconf.api.monitoring.NetconfMonitoringService;
 import org.opendaylight.controller.netconf.monitoring.MonitoringConstants;
@@ -24,8 +25,8 @@ public class NetconfMonitoringOperationServiceTest {
 
         assertEquals(1, service.getNetconfOperations().size());
 
-        assertEquals(Optional.absent(), service.getCapabilities().iterator().next().getCapabilitySchema());
-        assertEquals(Optional.absent(), service.getCapabilities().iterator().next().getLocation());
+        assertEquals(Optional.<String>absent(), service.getCapabilities().iterator().next().getCapabilitySchema());
+        assertEquals(Collections.<String>emptyList(), service.getCapabilities().iterator().next().getLocation());
         assertEquals(Optional.of(MonitoringConstants.MODULE_REVISION), service.getCapabilities().iterator().next().getRevision());
         assertEquals(Optional.of(MonitoringConstants.MODULE_NAME), service.getCapabilities().iterator().next().getModuleName());
         assertEquals(Optional.of(MonitoringConstants.NAMESPACE), service.getCapabilities().iterator().next().getModuleNamespace());
index 1a68f55e557bd217703a5e7de04676c38c655592..68f8796d819f301b20f0d17e274fc0b981cb9816 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.controller.netconf.test.tool;
 
 import com.google.common.base.Optional;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import org.opendaylight.controller.netconf.confignetconfconnector.util.Util;
@@ -58,7 +59,7 @@ final class ModuleBuilderCapability implements Capability {
     }
 
     @Override
-    public Optional<List<String>> getLocation() {
-        return Optional.absent();
+    public List<String> getLocation() {
+        return Collections.emptyList();
     }
 }