From 980322fdf8deb01893af9f31dfdda69df37bc7f1 Mon Sep 17 00:00:00 2001 From: Maros Marsalek Date: Mon, 16 Mar 2015 13:22:03 +0100 Subject: [PATCH] BUG-2713 Extract capability implementations into util Identical implementations all over the place are now in 2 classes in netconf-util Change-Id: Ibc2aa78edb581654da1ac890d109d2f32cf94738 Signed-off-by: Maros Marsalek --- features/netconf/pom.xml | 4 + .../netconf/src/main/resources/features.xml | 1 + .../NetconfOperationServiceFactoryImpl.java | 92 +------------------ .../osgi/YangStoreService.java | 5 +- .../MdsalNetconfOperationServiceFactory.java | 92 +------------------ .../NetconfMdsalMonitoringMapperModule.java | 54 +---------- ...confMonitoringOperationServiceFactory.java | 56 +---------- .../notifications/impl/osgi/Activator.java | 37 +------- .../tool/FakeModuleBuilderCapability.java | 47 +--------- .../test/tool/ModuleBuilderCapability.java | 3 +- opendaylight/netconf/netconf-util/pom.xml | 4 + .../util/capability/BasicCapability.java | 61 ++++++++++++ .../util/capability/YangModuleCapability.java | 57 ++++++++++++ 13 files changed, 151 insertions(+), 362 deletions(-) create mode 100644 opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/capability/BasicCapability.java create mode 100644 opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/capability/YangModuleCapability.java diff --git a/features/netconf/pom.xml b/features/netconf/pom.xml index b28a53b65c..28c0e0a230 100644 --- a/features/netconf/pom.xml +++ b/features/netconf/pom.xml @@ -78,6 +78,10 @@ org.opendaylight.yangtools.model ietf-yang-types + + org.opendaylight.yangtools + yang-model-api + org.opendaylight.controller netconf-mapping-api diff --git a/features/netconf/src/main/resources/features.xml b/features/netconf/src/main/resources/features.xml index aa8287d709..dbd940f5e6 100644 --- a/features/netconf/src/main/resources/features.xml +++ b/features/netconf/src/main/resources/features.xml @@ -35,6 +35,7 @@ odl-netconf-mapping-api + mvn:org.opendaylight.yangtools/yang-model-api/${yangtools.version} mvn:org.opendaylight.controller/netconf-util/${project.version} diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationServiceFactoryImpl.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationServiceFactoryImpl.java index 590f4c4ceb..cb9c956b90 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationServiceFactoryImpl.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/NetconfOperationServiceFactoryImpl.java @@ -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 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 getModuleNamespace() { - return Optional.absent(); - } - - @Override - public Optional getModuleName() { - return Optional.absent(); - } - - @Override - public Optional getRevision() { - return Optional.absent(); - } - - @Override - public Optional getCapabilitySchema() { - return Optional.absent(); - } - - @Override - public Collection 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 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 getModuleName() { - return Optional.of(moduleName); - } - - @Override - public Optional getModuleNamespace() { - return Optional.of(moduleNamespace); - } - - @Override - public Optional getRevision() { - return Optional.of(revision); - } - } } diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/YangStoreService.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/YangStoreService.java index 176800fb97..cb035161b4 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/YangStoreService.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/osgi/YangStoreService.java @@ -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_TO_CAPABILITY = new Function() { @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_TO_URI = new Function() { @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()); } }; diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/controller/netconf/mdsal/connector/MdsalNetconfOperationServiceFactory.java b/opendaylight/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/controller/netconf/mdsal/connector/MdsalNetconfOperationServiceFactory.java index ebb0e9d3d1..89ce149e12 100644 --- a/opendaylight/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/controller/netconf/mdsal/connector/MdsalNetconfOperationServiceFactory.java +++ b/opendaylight/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/controller/netconf/mdsal/connector/MdsalNetconfOperationServiceFactory.java @@ -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 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 getModuleNamespace() { - return Optional.absent(); - } - - @Override - public Optional getModuleName() { - return Optional.absent(); - } - - @Override - public Optional getRevision() { - return Optional.absent(); - } - - @Override - public Optional getCapabilitySchema() { - return Optional.absent(); - } - - @Override - public Collection 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 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 getModuleName() { - return Optional.of(moduleName); - } - - @Override - public Optional getModuleNamespace() { - return Optional.of(moduleNamespace); - } - - @Override - public Optional getRevision() { - return Optional.of(revision); - } - } } diff --git a/opendaylight/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/NetconfMdsalMonitoringMapperModule.java b/opendaylight/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/NetconfMdsalMonitoringMapperModule.java index dadc0f493b..3c73c2c84c 100644 --- a/opendaylight/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/NetconfMdsalMonitoringMapperModule.java +++ b/opendaylight/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/config/yang/netconf/mdsal/monitoring/NetconfMdsalMonitoringMapperModule.java @@ -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 CAPABILITIES = Sets.newHashSet(new Capability() { - - @Override - public String getCapabilityUri() { - return MonitoringConstants.URI; - } - - @Override - public Optional getModuleNamespace() { - return Optional.of(MonitoringConstants.NAMESPACE); - } - - @Override - public Optional getModuleName() { - return Optional.of(MonitoringConstants.MODULE_NAME); - } - - @Override - public Optional getRevision() { - return Optional.of(MonitoringConstants.MODULE_REVISION); - } - - @Override - public Optional getCapabilitySchema() { - return Optional.absent(); - } - - @Override - public Collection 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 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 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() {} } diff --git a/opendaylight/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/netconf/monitoring/NetconfMonitoringOperationServiceFactory.java b/opendaylight/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/netconf/monitoring/NetconfMonitoringOperationServiceFactory.java index 78c23688e4..cac15044f0 100644 --- a/opendaylight/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/netconf/monitoring/NetconfMonitoringOperationServiceFactory.java +++ b/opendaylight/netconf/mdsal-netconf-monitoring/src/main/java/org/opendaylight/controller/netconf/monitoring/NetconfMonitoringOperationServiceFactory.java @@ -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 CAPABILITIES = Sets.newHashSet(new Capability() { - - @Override - public String getCapabilityUri() { - return MonitoringConstants.URI; - } - - @Override - public Optional getModuleNamespace() { - return Optional.of(MonitoringConstants.NAMESPACE); - } - - @Override - public Optional getModuleName() { - return Optional.of(MonitoringConstants.MODULE_NAME); - } - - @Override - public Optional getRevision() { - return Optional.of(MonitoringConstants.MODULE_REVISION); - } - - @Override - public Optional getCapabilitySchema() { - return Optional.absent(); - } - - @Override - public Collection 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 listeners = new ArrayList<>(); - public NetconfMonitoringOperationServiceFactory(final NetconfMonitoringOperationService operationService) { this.operationService = operationService; } @@ -80,20 +37,17 @@ public class NetconfMonitoringOperationServiceFactory implements NetconfOperatio @Override public Set 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() {} } diff --git a/opendaylight/netconf/netconf-notifications-impl/src/main/java/org/opendaylight/controller/netconf/notifications/impl/osgi/Activator.java b/opendaylight/netconf/netconf-notifications-impl/src/main/java/org/opendaylight/controller/netconf/notifications/impl/osgi/Activator.java index a0a0dfcb8f..64442f743d 100644 --- a/opendaylight/netconf/netconf-notifications-impl/src/main/java/org/opendaylight/controller/netconf/notifications/impl/osgi/Activator.java +++ b/opendaylight/netconf/netconf-notifications-impl/src/main/java/org/opendaylight/controller/netconf/notifications/impl/osgi/Activator.java @@ -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 capabilities = Collections.singleton(new NotificationsCapability()); + private final Set capabilities = Collections.singleton(new BasicCapability(NetconfNotification.NOTIFICATION_NAMESPACE)); @Override public Set 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 getModuleNamespace() { - return Optional.absent(); - } - - @Override - public Optional getModuleName() { - return Optional.absent(); - } - - @Override - public Optional getRevision() { - return Optional.absent(); - } - - @Override - public Optional getCapabilitySchema() { - return Optional.absent(); - } - - @Override - public Collection getLocation() { - return Collections.emptyList(); - } - } } diff --git a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/FakeModuleBuilderCapability.java b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/FakeModuleBuilderCapability.java index 5f8107ccb1..b397bcb4c4 100644 --- a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/FakeModuleBuilderCapability.java +++ b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/FakeModuleBuilderCapability.java @@ -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 NETCONF = Collections.singletonList("NETCONF"); - private final ModuleBuilder input; - private final Optional 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 getModuleNamespace() { - return Optional.of(input.getNamespace().toString()); - } - - @Override - public Optional getModuleName() { - return Optional.of(input.getName()); - } - - @Override - public Optional 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 getCapabilitySchema() { return Optional.absent(); } - - @Override - public List getLocation() { - return NETCONF; - } - } diff --git a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/ModuleBuilderCapability.java b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/ModuleBuilderCapability.java index eb9d906272..fdff6d510e 100644 --- a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/ModuleBuilderCapability.java +++ b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/ModuleBuilderCapability.java @@ -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 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; } diff --git a/opendaylight/netconf/netconf-util/pom.xml b/opendaylight/netconf/netconf-util/pom.xml index 93c1f9b92a..6f9ebede8d 100644 --- a/opendaylight/netconf/netconf-util/pom.xml +++ b/opendaylight/netconf/netconf-util/pom.xml @@ -50,6 +50,10 @@ org.opendaylight.yangtools mockito-configuration + + org.opendaylight.yangtools + yang-model-api + 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 index 0000000000..999f83cf9c --- /dev/null +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/capability/BasicCapability.java @@ -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 getModuleNamespace() { + return Optional.absent(); + } + + @Override + public Optional getModuleName() { + return Optional.absent(); + } + + @Override + public Optional getRevision() { + return Optional.absent(); + } + + @Override + public Optional getCapabilitySchema() { + return Optional.absent(); + } + + @Override + public Collection 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 index 0000000000..e41affd471 --- /dev/null +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/capability/YangModuleCapability.java @@ -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 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 getModuleName() { + return Optional.of(moduleName); + } + + @Override + public Optional getModuleNamespace() { + return Optional.of(moduleNamespace); + } + + @Override + public Optional getRevision() { + return Optional.of(revision); + } +} -- 2.36.6