BUG-2713 Extract capability implementations into util 34/16634/3
authorMaros Marsalek <mmarsale@cisco.com>
Mon, 16 Mar 2015 12:22:03 +0000 (13:22 +0100)
committerMaros Marsalek <mmarsale@cisco.com>
Mon, 16 Mar 2015 15:01:04 +0000 (16:01 +0100)
Identical implementations all over the place are now in 2 classes in
netconf-util

Change-Id: Ibc2aa78edb581654da1ac890d109d2f32cf94738
Signed-off-by: Maros Marsalek <mmarsale@cisco.com>
13 files changed:
features/netconf/pom.xml
features/netconf/src/main/resources/features.xml
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationServiceFactoryImpl.java
opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/YangStoreService.java
opendaylight/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/controller/netconf/mdsal/connector/MdsalNetconfOperationServiceFactory.java
opendaylight/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/NetconfMdsalMonitoringMapperModule.java
opendaylight/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/netconf/monitoring/NetconfMonitoringOperationServiceFactory.java
opendaylight/netconf/netconf-notifications-impl/src/main/java/org/opendaylight/controller/netconf/notifications/impl/osgi/Activator.java
opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/FakeModuleBuilderCapability.java
opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/ModuleBuilderCapability.java
opendaylight/netconf/netconf-util/pom.xml
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/capability/BasicCapability.java [new file with mode: 0644]
opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/capability/YangModuleCapability.java [new file with mode: 0644]

index b28a53b65c72a0dbf0860a0febbed3fc88c4c69f..28c0e0a230091debe2bd608d9da76ca7bc81700f 100644 (file)
       <groupId>org.opendaylight.yangtools.model</groupId>
       <artifactId>ietf-yang-types</artifactId>
     </dependency>
+      <dependency>
+          <groupId>org.opendaylight.yangtools</groupId>
+          <artifactId>yang-model-api</artifactId>
+      </dependency>
     <dependency>
       <groupId>org.opendaylight.controller</groupId>
       <artifactId>netconf-mapping-api</artifactId>
index aa8287d70928690cd9c3f4c30247b4597f167fe4..dbd940f5e663e157409f1a57ac4fa421680572a2 100644 (file)
@@ -35,6 +35,7 @@
   </feature>
   <feature name='odl-netconf-util' version='${project.version}'>
     <feature version='${project.version}'>odl-netconf-mapping-api</feature>
+    <bundle>mvn:org.opendaylight.yangtools/yang-model-api/${yangtools.version}</bundle>
     <bundle>mvn:org.opendaylight.controller/netconf-util/${project.version}</bundle>
   </feature>
     <feature name='odl-netconf-impl' version='${project.version}' description="OpenDaylight :: Netconf :: Impl">
index 590f4c4ceb038b2a70f72c2379d5e759bc285db6..cb9c956b90c8e10bba8283bd75eabe979cb9d068 100644 (file)
@@ -8,18 +8,16 @@
 
 package org.opendaylight.controller.netconf.confignetconfconnector.osgi;
 
-import com.google.common.base.Optional;
 import java.lang.management.ManagementFactory;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 import javax.management.MBeanServer;
 import org.opendaylight.controller.config.util.ConfigRegistryJMXClient;
 import org.opendaylight.controller.netconf.api.Capability;
 import org.opendaylight.controller.netconf.api.monitoring.CapabilityListener;
-import org.opendaylight.controller.netconf.confignetconfconnector.util.Util;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory;
+import org.opendaylight.controller.netconf.util.capability.BasicCapability;
+import org.opendaylight.controller.netconf.util.capability.YangModuleCapability;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -100,94 +98,10 @@ public class NetconfOperationServiceFactoryImpl implements NetconfOperationServi
 
         Set<Module> modules = yangStoreSnapshot.getModules();
         for (Module module : modules) {
-            capabilities.add(new YangStoreCapability(module, yangStoreSnapshot.getModuleSource(module)));
+            capabilities.add(new YangModuleCapability(module, yangStoreSnapshot.getModuleSource(module)));
         }
 
         return capabilities;
     }
 
-    private static class BasicCapability implements Capability {
-
-        private final String capability;
-
-        private BasicCapability(final String capability) {
-            this.capability = capability;
-        }
-
-        @Override
-        public String getCapabilityUri() {
-            return capability;
-        }
-
-        @Override
-        public Optional<String> getModuleNamespace() {
-            return Optional.absent();
-        }
-
-        @Override
-        public Optional<String> getModuleName() {
-            return Optional.absent();
-        }
-
-        @Override
-        public Optional<String> getRevision() {
-            return Optional.absent();
-        }
-
-        @Override
-        public Optional<String> getCapabilitySchema() {
-            return Optional.absent();
-        }
-
-        @Override
-        public Collection<String> getLocation() {
-            return Collections.emptyList();
-        }
-
-        @Override
-        public String toString() {
-            return capability;
-        }
-    }
-
-    static final class YangStoreCapability extends BasicCapability {
-
-        private final String content;
-        private final String revision;
-        private final String moduleName;
-        private final String moduleNamespace;
-
-        public YangStoreCapability(final Module module, final String moduleContent) {
-            super(toCapabilityURI(module));
-            this.content = moduleContent;
-            this.moduleName = module.getName();
-            this.moduleNamespace = module.getNamespace().toString();
-            this.revision = Util.writeDate(module.getRevision());
-        }
-
-        @Override
-        public Optional<String> getCapabilitySchema() {
-            return Optional.of(content);
-        }
-
-        private static String toCapabilityURI(final Module module) {
-            return String.valueOf(module.getNamespace()) + "?module="
-                    + module.getName() + "&revision=" + Util.writeDate(module.getRevision());
-        }
-
-        @Override
-        public Optional<String> getModuleName() {
-            return Optional.of(moduleName);
-        }
-
-        @Override
-        public Optional<String> getModuleNamespace() {
-            return Optional.of(moduleNamespace);
-        }
-
-        @Override
-        public Optional<String> getRevision() {
-            return Optional.of(revision);
-        }
-    }
 }
index 176800fb975ba2dd7dc7fe05ad0ca03ffb301a3b..cb035161b4b2fb21388edcdaa2a857d257d52aca 100644 (file)
@@ -27,6 +27,7 @@ import org.opendaylight.controller.netconf.api.monitoring.CapabilityListener;
 import org.opendaylight.controller.netconf.notifications.BaseNetconfNotificationListener;
 import org.opendaylight.controller.netconf.notifications.BaseNotificationPublisherRegistration;
 import org.opendaylight.controller.netconf.notifications.NetconfNotificationCollector;
+import org.opendaylight.controller.netconf.util.capability.YangModuleCapability;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChange;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChangeBuilder;
@@ -154,7 +155,7 @@ public class YangStoreService implements YangStoreContext {
     private static final Function<Module, Capability> MODULE_TO_CAPABILITY = new Function<Module, Capability>() {
         @Override
         public Capability apply(final Module module) {
-            return new NetconfOperationServiceFactoryImpl.YangStoreCapability(module, module.getSource());
+            return new YangModuleCapability(module, module.getSource());
         }
     };
 
@@ -191,7 +192,7 @@ public class YangStoreService implements YangStoreContext {
     private static final Function<Module, Uri> MODULE_TO_URI = new Function<Module, Uri>() {
         @Override
         public Uri apply(final Module input) {
-            return new Uri(new NetconfOperationServiceFactoryImpl.YangStoreCapability(input, input.getSource()).getCapabilityUri());
+            return new Uri(new YangModuleCapability(input, input.getSource()).getCapabilityUri());
         }
     };
 
index ebb0e9d3d1ac2d9bf364afcb236e151ebecb8af2..89ce149e12f75d2f2c63dbd70aa823e95ce6b324 100644 (file)
@@ -8,18 +8,16 @@
 
 package org.opendaylight.controller.netconf.mdsal.connector;
 
-import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
 import org.opendaylight.controller.netconf.api.Capability;
 import org.opendaylight.controller.netconf.api.monitoring.CapabilityListener;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory;
+import org.opendaylight.controller.netconf.util.capability.BasicCapability;
+import org.opendaylight.controller.netconf.util.capability.YangModuleCapability;
 import org.opendaylight.controller.sal.core.api.model.SchemaService;
-import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.slf4j.Logger;
@@ -61,7 +59,7 @@ public class MdsalNetconfOperationServiceFactory implements NetconfOperationServ
         final Set<Module> modules = currentContext.getModules();
         for (final Module module : modules) {
             if(currentContext.getModuleSource(module).isPresent()) {
-                capabilities.add(new YangStoreCapability(module, currentContext.getModuleSource(module).get()));
+                capabilities.add(new YangModuleCapability(module, currentContext.getModuleSource(module).get()));
             } else {
                 LOG.warn("Missing source for module {}. This module will not be available from netconf server",
                         module);
@@ -76,88 +74,4 @@ public class MdsalNetconfOperationServiceFactory implements NetconfOperationServ
         return currentSchemaContext.registerCapabilityListener(listener);
     }
 
-    private static class BasicCapability implements Capability {
-
-        private final String capability;
-
-        private BasicCapability(final String capability) {
-            this.capability = capability;
-        }
-
-        @Override
-        public String getCapabilityUri() {
-            return capability;
-        }
-
-        @Override
-        public Optional<String> getModuleNamespace() {
-            return Optional.absent();
-        }
-
-        @Override
-        public Optional<String> getModuleName() {
-            return Optional.absent();
-        }
-
-        @Override
-        public Optional<String> getRevision() {
-            return Optional.absent();
-        }
-
-        @Override
-        public Optional<String> getCapabilitySchema() {
-            return Optional.absent();
-        }
-
-        @Override
-        public Collection<String> getLocation() {
-            return Collections.emptyList();
-        }
-
-        @Override
-        public String toString() {
-            return capability;
-        }
-    }
-
-    private static final class YangStoreCapability extends BasicCapability {
-
-        private final String content;
-        private final String revision;
-        private final String moduleName;
-        private final String moduleNamespace;
-
-        public YangStoreCapability(final Module module, final String moduleContent) {
-            super(toCapabilityURI(module));
-            this.content = moduleContent;
-            this.moduleName = module.getName();
-            this.moduleNamespace = module.getNamespace().toString();
-            this.revision = SimpleDateFormatUtil.getRevisionFormat().format(module.getRevision());
-        }
-
-        @Override
-        public Optional<String> getCapabilitySchema() {
-            return Optional.of(content);
-        }
-
-        private static String toCapabilityURI(final Module module) {
-            return String.valueOf(module.getNamespace()) + "?module="
-                    + module.getName() + "&revision=" + SimpleDateFormatUtil.getRevisionFormat().format(module.getRevision());
-        }
-
-        @Override
-        public Optional<String> getModuleName() {
-            return Optional.of(moduleName);
-        }
-
-        @Override
-        public Optional<String> getModuleNamespace() {
-            return Optional.of(moduleNamespace);
-        }
-
-        @Override
-        public Optional<String> getRevision() {
-            return Optional.of(revision);
-        }
-    }
 }
index dadc0f493b26fad16893ccf73193868d781ccfd2..3c73c2c84c5f893b9058bb123033c3be9869a633 100644 (file)
@@ -1,11 +1,6 @@
 package org.opendaylight.controller.config.yang.netconf.mdsal.monitoring;
 
-import com.google.common.base.Optional;
-import com.google.common.collect.Sets;
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 import java.util.Set;
 import org.opendaylight.controller.netconf.api.Capability;
 import org.opendaylight.controller.netconf.api.monitoring.CapabilityListener;
@@ -14,7 +9,6 @@ import org.opendaylight.controller.netconf.mapping.api.NetconfOperation;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory;
 import org.opendaylight.controller.netconf.monitoring.GetSchema;
-import org.opendaylight.controller.netconf.monitoring.MonitoringConstants;
 
 public class NetconfMdsalMonitoringMapperModule extends org.opendaylight.controller.config.yang.netconf.mdsal.monitoring.AbstractNetconfMdsalMonitoringMapperModule {
     public NetconfMdsalMonitoringMapperModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
@@ -56,39 +50,6 @@ public class NetconfMdsalMonitoringMapperModule extends org.opendaylight.control
 
         private final NetconfOperationService operationService;
 
-        private static final Set<Capability> CAPABILITIES = Sets.<Capability>newHashSet(new Capability() {
-
-            @Override
-            public String getCapabilityUri() {
-                return MonitoringConstants.URI;
-            }
-
-            @Override
-            public Optional<String> getModuleNamespace() {
-                return Optional.of(MonitoringConstants.NAMESPACE);
-            }
-
-            @Override
-            public Optional<String> getModuleName() {
-                return Optional.of(MonitoringConstants.MODULE_NAME);
-            }
-
-            @Override
-            public Optional<String> getRevision() {
-                return Optional.of(MonitoringConstants.MODULE_REVISION);
-            }
-
-            @Override
-            public Optional<String> getCapabilitySchema() {
-                return Optional.absent();
-            }
-
-            @Override
-            public Collection<String> getLocation() {
-                return Collections.emptyList();
-            }
-        });
-
         private static final AutoCloseable AUTO_CLOSEABLE = new AutoCloseable() {
             @Override
             public void close() throws Exception {
@@ -96,8 +57,6 @@ public class NetconfMdsalMonitoringMapperModule extends org.opendaylight.control
             }
         };
 
-        private final List<CapabilityListener> listeners = new ArrayList<>();
-
         public MdSalMonitoringMapperFactory(final NetconfOperationService operationService) {
             this.operationService = operationService;
         }
@@ -109,22 +68,19 @@ public class NetconfMdsalMonitoringMapperModule extends org.opendaylight.control
 
         @Override
         public Set<Capability> getCapabilities() {
-            return CAPABILITIES;
+            // TODO
+            // No capabilities exposed to prevent clashes with schemas from mdsal-netconf-connector (it exposes all the schemas)
+            // If the schemas exposed by mdsal-netconf-connector are filtered, this class would expose monitoring related models
+            return Collections.emptySet();
         }
 
         @Override
         public AutoCloseable registerCapabilityListener(final CapabilityListener listener) {
-            listener.onCapabilitiesAdded(getCapabilities());
-            listeners.add(listener);
             return AUTO_CLOSEABLE;
         }
 
         @Override
-        public void close() {
-            for (final CapabilityListener listener : listeners) {
-                listener.onCapabilitiesRemoved(getCapabilities());
-            }
-        }
+        public void close() {}
     }
 
 
index 78c23688e4a019b96964e531cb261dec38d465a2..cac15044f0fe0b57dd45dec7d14b8e7f89539e48 100644 (file)
@@ -8,58 +8,17 @@
 
 package org.opendaylight.controller.netconf.monitoring;
 
-import com.google.common.base.Optional;
-import com.google.common.collect.Sets;
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 import java.util.Set;
 import org.opendaylight.controller.netconf.api.Capability;
 import org.opendaylight.controller.netconf.api.monitoring.CapabilityListener;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService;
 import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory;
 
-/**
-* Created by mmarsale on 18.2.2015.
-*/
 public class NetconfMonitoringOperationServiceFactory implements NetconfOperationServiceFactory, AutoCloseable {
 
     private final NetconfMonitoringOperationService operationService;
 
-    private static final Set<Capability> CAPABILITIES = Sets.<Capability>newHashSet(new Capability() {
-
-        @Override
-        public String getCapabilityUri() {
-            return MonitoringConstants.URI;
-        }
-
-        @Override
-        public Optional<String> getModuleNamespace() {
-            return Optional.of(MonitoringConstants.NAMESPACE);
-        }
-
-        @Override
-        public Optional<String> getModuleName() {
-            return Optional.of(MonitoringConstants.MODULE_NAME);
-        }
-
-        @Override
-        public Optional<String> getRevision() {
-            return Optional.of(MonitoringConstants.MODULE_REVISION);
-        }
-
-        @Override
-        public Optional<String> getCapabilitySchema() {
-            return Optional.absent();
-        }
-
-        @Override
-        public Collection<String> getLocation() {
-            return Collections.emptyList();
-        }
-    });
-
     private static final AutoCloseable AUTO_CLOSEABLE = new AutoCloseable() {
         @Override
         public void close() throws Exception {
@@ -67,8 +26,6 @@ public class NetconfMonitoringOperationServiceFactory implements NetconfOperatio
         }
     };
 
-    private final List<CapabilityListener> listeners = new ArrayList<>();
-
     public NetconfMonitoringOperationServiceFactory(final NetconfMonitoringOperationService operationService) {
         this.operationService = operationService;
     }
@@ -80,20 +37,17 @@ public class NetconfMonitoringOperationServiceFactory implements NetconfOperatio
 
     @Override
     public Set<Capability> getCapabilities() {
-        return CAPABILITIES;
+        // TODO
+        // No capabilities exposed to prevent clashes with schemas from config-netconf-connector (it exposes all the schemas)
+        // If the schemas exposed by config-netconf-connector are filtered, this class would expose monitoring related models
+        return Collections.emptySet();
     }
 
     @Override
     public AutoCloseable registerCapabilityListener(final CapabilityListener listener) {
-        listener.onCapabilitiesAdded(getCapabilities());
-        listeners.add(listener);
         return AUTO_CLOSEABLE;
     }
 
     @Override
-    public void close() {
-        for (final CapabilityListener listener : listeners) {
-            listener.onCapabilitiesRemoved(getCapabilities());
-        }
-    }
+    public void close() {}
 }
index a0a0dfcb8f5e506071daa1b5b894aa0074f556ca..64442f743d576a55f39146ed80570443c450b51b 100644 (file)
@@ -8,9 +8,7 @@
 
 package org.opendaylight.controller.netconf.notifications.impl.osgi;
 
-import com.google.common.base.Optional;
 import com.google.common.collect.Sets;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Dictionary;
 import java.util.Hashtable;
@@ -26,6 +24,7 @@ import org.opendaylight.controller.netconf.notifications.NetconfNotificationColl
 import org.opendaylight.controller.netconf.notifications.impl.NetconfNotificationManager;
 import org.opendaylight.controller.netconf.notifications.impl.ops.CreateSubscription;
 import org.opendaylight.controller.netconf.notifications.impl.ops.Get;
+import org.opendaylight.controller.netconf.util.capability.BasicCapability;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
@@ -43,7 +42,7 @@ public class Activator implements BundleActivator {
 
         final NetconfOperationServiceFactory netconfOperationServiceFactory = new NetconfOperationServiceFactory() {
 
-            private final Set<Capability> capabilities = Collections.<Capability>singleton(new NotificationsCapability());
+            private final Set<Capability> capabilities = Collections.<Capability>singleton(new BasicCapability(NetconfNotification.NOTIFICATION_NAMESPACE));
 
             @Override
             public Set<Capability> getCapabilities() {
@@ -103,36 +102,4 @@ public class Activator implements BundleActivator {
             operationaServiceRegistration = null;
         }
     }
-
-    private class NotificationsCapability implements Capability {
-        @Override
-        public String getCapabilityUri() {
-            return NetconfNotification.NOTIFICATION_NAMESPACE;
-        }
-
-        @Override
-        public Optional<String> getModuleNamespace() {
-            return Optional.absent();
-        }
-
-        @Override
-        public Optional<String> getModuleName() {
-            return Optional.absent();
-        }
-
-        @Override
-        public Optional<String> getRevision() {
-            return Optional.absent();
-        }
-
-        @Override
-        public Optional<String> getCapabilitySchema() {
-            return Optional.absent();
-        }
-
-        @Override
-        public Collection<String> getLocation() {
-            return Collections.emptyList();
-        }
-    }
 }
index 5f8107ccb19e1bc1c490d34b04a71911eac007f2..b397bcb4c488aaf731285f6136d17b8feb9a241a 100644 (file)
@@ -9,53 +9,16 @@
 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.api.Capability;
-import org.opendaylight.controller.netconf.confignetconfconnector.util.Util;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.parser.builder.impl.ModuleBuilder;
 
 /**
  * Can be passed instead of ModuleBuilderCapability when building capabilities
  * in NetconfDeviceSimulator when testing various schema resolution related exceptions.
  */
-public class FakeModuleBuilderCapability implements Capability{
-    private static final Date NO_REVISION = new Date(0);
-    private static final List<String> NETCONF = Collections.singletonList("NETCONF");
-    private final ModuleBuilder input;
-    private final Optional<String> content;
+public class FakeModuleBuilderCapability extends ModuleBuilderCapability {
 
     public FakeModuleBuilderCapability(final ModuleBuilder input, final String inputStream) {
-        this.input = input;
-        this.content = Optional.of(inputStream);
-    }
-
-    @Override
-    public String getCapabilityUri() {
-        // FIXME capabilities in Netconf-impl need to check for NO REVISION
-        final String withoutRevision = getModuleNamespace().get() + "?module=" + getModuleName().get();
-        return hasRevision() ? withoutRevision + "&revision=" + Util.writeDate(input.getRevision()) : withoutRevision;
-    }
-
-    @Override
-    public Optional<String> getModuleNamespace() {
-        return Optional.of(input.getNamespace().toString());
-    }
-
-    @Override
-    public Optional<String> getModuleName() {
-        return Optional.of(input.getName());
-    }
-
-    @Override
-    public Optional<String> getRevision() {
-        return Optional.of(hasRevision() ? QName.formattedRevision(input.getRevision()) : "");
-    }
-
-    private boolean hasRevision() {
-        return !input.getRevision().equals(NO_REVISION);
+        super(input, inputStream);
     }
 
     /**
@@ -66,10 +29,4 @@ public class FakeModuleBuilderCapability implements Capability{
     public Optional<String> getCapabilitySchema() {
         return Optional.absent();
     }
-
-    @Override
-    public List<String> getLocation() {
-        return NETCONF;
-    }
-
 }
index eb9d906272561e52fc219624a07ce285e65d791a..fdff6d510eee73e66eabced70fbf2a75b936ace4 100644 (file)
@@ -17,7 +17,7 @@ import org.opendaylight.controller.netconf.confignetconfconnector.util.Util;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.parser.builder.impl.ModuleBuilder;
 
-final class ModuleBuilderCapability implements Capability {
+class ModuleBuilderCapability implements Capability {
     private static final Date NO_REVISION = new Date(0);
     private static final List<String> NETCONF = Collections.singletonList("NETCONF");
     private final ModuleBuilder input;
@@ -30,7 +30,6 @@ final class ModuleBuilderCapability implements Capability {
 
     @Override
     public String getCapabilityUri() {
-        // FIXME capabilities in Netconf-impl need to check for NO REVISION
         final String withoutRevision = getModuleNamespace().get() + "?module=" + getModuleName().get();
         return hasRevision() ? withoutRevision + "&revision=" + Util.writeDate(input.getRevision()) : withoutRevision;
     }
index 93c1f9b92aded20f8f3bfc0766a9d25e4359b573..6f9ebede8d39f9e61825e4b14f8f2e2cce4870e3 100644 (file)
       <groupId>org.opendaylight.yangtools</groupId>
       <artifactId>mockito-configuration</artifactId>
     </dependency>
+  <dependency>
+      <groupId>org.opendaylight.yangtools</groupId>
+      <artifactId>yang-model-api</artifactId>
+  </dependency>
   </dependencies>
 
   <build>
diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/capability/BasicCapability.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/capability/BasicCapability.java
new file mode 100644 (file)
index 0000000..999f83c
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.netconf.util.capability;
+
+import com.google.common.base.Optional;
+import java.util.Collection;
+import java.util.Collections;
+import org.opendaylight.controller.netconf.api.Capability;
+
+/**
+ * Capability representing a basic, one-line, string based capability
+ */
+public class BasicCapability implements Capability {
+
+    private final String capability;
+
+    public BasicCapability(final String capability) {
+        this.capability = capability;
+    }
+
+    @Override
+    public String getCapabilityUri() {
+        return capability;
+    }
+
+    @Override
+    public Optional<String> getModuleNamespace() {
+        return Optional.absent();
+    }
+
+    @Override
+    public Optional<String> getModuleName() {
+        return Optional.absent();
+    }
+
+    @Override
+    public Optional<String> getRevision() {
+        return Optional.absent();
+    }
+
+    @Override
+    public Optional<String> getCapabilitySchema() {
+        return Optional.absent();
+    }
+
+    @Override
+    public Collection<String> getLocation() {
+        return Collections.emptyList();
+    }
+
+    @Override
+    public String toString() {
+        return capability;
+    }
+}
diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/capability/YangModuleCapability.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/capability/YangModuleCapability.java
new file mode 100644 (file)
index 0000000..e41affd
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.netconf.util.capability;
+
+import com.google.common.base.Optional;
+import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
+import org.opendaylight.yangtools.yang.model.api.Module;
+
+/**
+ * Yang model representing capability.
+ */
+public final class YangModuleCapability extends BasicCapability {
+
+    private final String content;
+    private final String revision;
+    private final String moduleName;
+    private final String moduleNamespace;
+
+    public YangModuleCapability(final Module module, final String moduleContent) {
+        super(toCapabilityURI(module));
+        this.content = moduleContent;
+        this.moduleName = module.getName();
+        this.moduleNamespace = module.getNamespace().toString();
+        this.revision = SimpleDateFormatUtil.getRevisionFormat().format(module.getRevision());
+    }
+
+    @Override
+    public Optional<String> getCapabilitySchema() {
+        return Optional.of(content);
+    }
+
+    private static String toCapabilityURI(final Module module) {
+        return String.valueOf(module.getNamespace()) + "?module="
+                + module.getName() + "&revision=" + SimpleDateFormatUtil.getRevisionFormat().format(module.getRevision());
+    }
+
+    @Override
+    public Optional<String> getModuleName() {
+        return Optional.of(moduleName);
+    }
+
+    @Override
+    public Optional<String> getModuleNamespace() {
+        return Optional.of(moduleNamespace);
+    }
+
+    @Override
+    public Optional<String> getRevision() {
+        return Optional.of(revision);
+    }
+}