From: Robert Varga Date: Wed, 11 Oct 2017 19:31:07 +0000 (+0200) Subject: Adjust to yangtools-2.0.0 changes X-Git-Tag: release/oxygen~43 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=20a32e6459fd1e27e7669bf1ebc7742b96787b94 Adjust to yangtools-2.0.0 changes Change-Id: Ib86747e5ed19c0c00bb46b8d7e4936f4d90c4364 Signed-off-by: Robert Varga Signed-off-by: Stephen Kitt --- diff --git a/features/config/odl-config-netty-config-api/src/main/feature/feature.xml b/features/config/odl-config-netty-config-api/src/main/feature/feature.xml new file mode 100644 index 0000000000..63903bf3e3 --- /dev/null +++ b/features/config/odl-config-netty-config-api/src/main/feature/feature.xml @@ -0,0 +1,13 @@ + + + + + odl-netty-4 + + diff --git a/features/mdsal/odl-mdsal-broker-local/src/main/feature/feature.xml b/features/mdsal/odl-mdsal-broker-local/src/main/feature/feature.xml index 654311ab6f..3593abfbb7 100644 --- a/features/mdsal/odl-mdsal-broker-local/src/main/feature/feature.xml +++ b/features/mdsal/odl-mdsal-broker-local/src/main/feature/feature.xml @@ -10,6 +10,7 @@ mvn:org.opendaylight.controller/odl-mdsal-common/${project.version}/xml/features + odl-lmax-3 mvn:org.opendaylight.controller/sal-schema-service/${project.version} mvn:org.opendaylight.controller/blueprint/${blueprint.version} diff --git a/features/mdsal/odl-mdsal-clustering-commons/src/main/feature/feature.xml b/features/mdsal/odl-mdsal-clustering-commons/src/main/feature/feature.xml new file mode 100644 index 0000000000..2c9dfd0ac7 --- /dev/null +++ b/features/mdsal/odl-mdsal-clustering-commons/src/main/feature/feature.xml @@ -0,0 +1,15 @@ + + + + + odl-akka-system-2.5 + odl-akka-persistence-2.5 + odl-akka-clustering-2.5 + + diff --git a/features/mdsal/odl-mdsal-remoterpc-connector/src/main/feature/feature.xml b/features/mdsal/odl-mdsal-remoterpc-connector/src/main/feature/feature.xml new file mode 100644 index 0000000000..e64822e9bd --- /dev/null +++ b/features/mdsal/odl-mdsal-remoterpc-connector/src/main/feature/feature.xml @@ -0,0 +1,13 @@ + + + + + odl-akka-leveldb-0.7 + + diff --git a/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/DataStoreAppConfigDefaultXMLReader.java b/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/DataStoreAppConfigDefaultXMLReader.java index ece690112a..9f909c4084 100644 --- a/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/DataStoreAppConfigDefaultXMLReader.java +++ b/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/DataStoreAppConfigDefaultXMLReader.java @@ -112,8 +112,7 @@ public class DataStoreAppConfigDefaultXMLReader { SchemaContext schemaContext = schemaService.getGlobalContext(); - Module module = schemaContext.findModuleByNamespaceAndRevision(bindingContext.bindingQName.getNamespace(), - bindingContext.bindingQName.getRevision()); + Module module = schemaContext.findModule(bindingContext.bindingQName.getModule()).orElse(null); checkNotNull(module, "%s: Could not obtain the module schema for namespace %s, revision %s", logName, bindingContext.bindingQName.getNamespace(), bindingContext.bindingQName.getRevision()); @@ -138,13 +137,13 @@ public class DataStoreAppConfigDefaultXMLReader { return (T) appConfig; } - private static void checkNotNull(Object reference, String errorMessageFormat, Object... formatArgs) - throws ConfigXMLReaderException { + private static void checkNotNull(final Object reference, final String errorMessageFormat, + final Object... formatArgs) throws ConfigXMLReaderException { checkCondition(reference != null, errorMessageFormat, formatArgs); } - private static void checkCondition(boolean expression, String errorMessageFormat, Object... formatArgs) - throws ConfigXMLReaderException { + private static void checkCondition(final boolean expression, final String errorMessageFormat, + final Object... formatArgs) throws ConfigXMLReaderException { if (!expression) { throw new ConfigXMLReaderException(String.format(errorMessageFormat, formatArgs)); } diff --git a/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/RpcUtil.java b/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/RpcUtil.java index ee9e36e9d2..dc65d9b918 100644 --- a/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/RpcUtil.java +++ b/opendaylight/blueprint/src/main/java/org/opendaylight/controller/blueprint/ext/RpcUtil.java @@ -36,8 +36,7 @@ final class RpcUtil { static Collection decomposeRpcService(final Class service, final SchemaContext schemaContext, final Predicate filter) { final QNameModule moduleName = BindingReflections.getQNameModule(service); - final Module module = schemaContext.findModuleByNamespaceAndRevision(moduleName.getNamespace(), - moduleName.getRevision()); + final Module module = schemaContext.findModule(moduleName).get(); LOG.debug("Resolved service {} to module {}", service, module); final Collection rpcs = module.getRpcs(); diff --git a/opendaylight/config/config-api/src/main/java/org/opendaylight/controller/config/api/ValidationException.java b/opendaylight/config/config-api/src/main/java/org/opendaylight/controller/config/api/ValidationException.java index 760853e93b..9daacd16dc 100644 --- a/opendaylight/config/config-api/src/main/java/org/opendaylight/controller/config/api/ValidationException.java +++ b/opendaylight/config/config-api/src/main/java/org/opendaylight/controller/config/api/ValidationException.java @@ -102,8 +102,8 @@ public class ValidationException extends Exception { this.message = message; } - public void setStackTrace(final String stackTrace) { - this.stackTrace = stackTrace; + public void setStackTrace(final String trace) { + this.stackTrace = trace; } @Override diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/ConfigSubsystemFacade.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/ConfigSubsystemFacade.java index 0f9e6f3ac0..4ee3c7ae6e 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/ConfigSubsystemFacade.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/ConfigSubsystemFacade.java @@ -10,17 +10,13 @@ package org.opendaylight.controller.config.facade.xml; import com.google.common.base.Optional; import com.google.common.collect.Multimap; - import java.io.Closeable; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; - import javax.management.InstanceNotFoundException; import javax.management.ObjectName; - import org.opendaylight.controller.config.api.ConflictingVersionException; import org.opendaylight.controller.config.api.ValidationException; import org.opendaylight.controller.config.api.jmx.CommitStatus; @@ -53,6 +49,7 @@ import org.opendaylight.controller.config.util.xml.XmlMappingConstants; import org.opendaylight.controller.config.util.xml.XmlUtil; import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry; import org.opendaylight.controller.config.yangjmxgenerator.RuntimeBeanEntry; +import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.slf4j.Logger; @@ -205,7 +202,7 @@ public class ConfigSubsystemFacade implements Closeable { setOnTransaction(ta, configExecution); } - private void setServicesOnTransaction(final ConfigTransactionClient ta, final ConfigExecution execution) + private static void setServicesOnTransaction(final ConfigTransactionClient ta, final ConfigExecution execution) throws DocumentedException { Services services = execution.getServices(); @@ -244,11 +241,12 @@ public class ConfigSubsystemFacade implements Closeable { } } - private String getQname(final ConfigTransactionClient ta, final String namespace, final String serviceName) { + private static String getQname(final ConfigTransactionClient ta, final String namespace, + final String serviceName) { return ta.getServiceInterfaceName(namespace, serviceName); } - private void setOnTransaction(final ConfigTransactionClient ta, final ConfigExecution execution) + private static void setOnTransaction(final ConfigTransactionClient ta, final ConfigExecution execution) throws DocumentedException { for (Multimap modulesToResolved : execution.getResolvedXmlElements(ta) @@ -268,8 +266,8 @@ public class ConfigSubsystemFacade implements Closeable { } } - private void handleMisssingInstancesOnTransaction(final ConfigTransactionClient ta, final ConfigExecution execution) - throws DocumentedException { + private static void handleMisssingInstancesOnTransaction(final ConfigTransactionClient ta, + final ConfigExecution execution) throws DocumentedException { for (Multimap modulesToResolved : execution.getModulesDefinition(ta) .values()) { @@ -289,18 +287,20 @@ public class ConfigSubsystemFacade implements Closeable { final YangStoreContext snapshot = yangStoreService.getCurrentSnapshot(); Map> factories = transformMbeToModuleConfigs( snapshot.getModuleMXBeanEntryMap()); - Map> identitiesMap = transformIdentities(snapshot.getModules()); + Map, IdentityMapping>> identitiesMap = + transformIdentities(snapshot.getModules()); return new Config(factories, identitiesMap, snapshot.getEnumResolver()); } - private static Map> transformIdentities(final Set modules) { - Map> mappedIds = new HashMap<>(); + private static Map, IdentityMapping>> transformIdentities( + final Set modules) { + Map, IdentityMapping>> mappedIds = new HashMap<>(); for (Module module : modules) { String namespace = module.getNamespace().toString(); - Map revisionsByNamespace = mappedIds.computeIfAbsent(namespace, + Map, IdentityMapping> revisionsByNamespace = mappedIds.computeIfAbsent(namespace, k -> new HashMap<>()); - Date revision = module.getRevision(); + Optional revision = Optional.fromJavaUtil(module.getRevision()); IdentityMapping identityMapping = revisionsByNamespace.computeIfAbsent(revision, k -> new IdentityMapping()); diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/ConfigSubsystemFacadeFactory.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/ConfigSubsystemFacadeFactory.java index 895bcc5a30..1d680a95ad 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/ConfigSubsystemFacadeFactory.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/ConfigSubsystemFacadeFactory.java @@ -16,6 +16,7 @@ import org.opendaylight.controller.config.util.ConfigRegistryJMXClient; import org.opendaylight.controller.config.util.capability.Capability; import org.opendaylight.controller.config.util.capability.YangModuleCapability; import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; public class ConfigSubsystemFacadeFactory { @@ -47,7 +48,8 @@ public class ConfigSubsystemFacadeFactory { Set modules = yangStoreService.getModules(); final Set capabilities = Sets.newHashSet(); for (Module module : modules) { - capabilities.add(new YangModuleCapability(module, yangStoreService.getModuleSource(module))); + capabilities.add(new YangModuleCapability(module, yangStoreService.getModuleSource( + RevisionSourceIdentifier.create(module.getName(), module.getRevision())))); } return capabilities; } diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/fromxml/ObjectXmlReader.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/fromxml/ObjectXmlReader.java index 4fa679645f..c99d21d6ac 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/fromxml/ObjectXmlReader.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/fromxml/ObjectXmlReader.java @@ -8,9 +8,9 @@ package org.opendaylight.controller.config.facade.xml.mapping.attributes.fromxml; +import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.Maps; -import java.util.Date; import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -25,15 +25,16 @@ import org.opendaylight.controller.config.yangjmxgenerator.attribute.JavaAttribu import org.opendaylight.controller.config.yangjmxgenerator.attribute.ListAttribute; import org.opendaylight.controller.config.yangjmxgenerator.attribute.ListDependenciesAttribute; import org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute; +import org.opendaylight.yangtools.yang.common.Revision; public class ObjectXmlReader extends AttributeIfcSwitchStatement { private String key; - private Map> identityMap; + private Map, IdentityMapping>> identityMap; @SuppressWarnings("checkstyle:hiddenField") public Map prepareReading(final Map yangToAttrConfig, - final Map> identityMap) { + final Map, IdentityMapping>> identityMap) { Map strategies = Maps.newHashMap(); this.identityMap = identityMap; diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/fromxml/SimpleIdentityRefAttributeReadingStrategy.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/fromxml/SimpleIdentityRefAttributeReadingStrategy.java index c64731e26f..679631b24c 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/fromxml/SimpleIdentityRefAttributeReadingStrategy.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/fromxml/SimpleIdentityRefAttributeReadingStrategy.java @@ -8,24 +8,25 @@ package org.opendaylight.controller.config.facade.xml.mapping.attributes.fromxml; +import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import java.net.URI; -import java.util.Date; import java.util.HashMap; import java.util.Map; import org.opendaylight.controller.config.facade.xml.mapping.IdentityMapping; import org.opendaylight.controller.config.util.xml.DocumentedException; import org.opendaylight.controller.config.util.xml.XmlElement; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Revision; public class SimpleIdentityRefAttributeReadingStrategy extends SimpleAttributeReadingStrategy { private final String key; - private final Map> identityMap; + private final Map, IdentityMapping>> identityMap; public SimpleIdentityRefAttributeReadingStrategy(final String nullableDefault, final String key, - final Map> identityMap) { + final Map, IdentityMapping>> identityMap) { super(nullableDefault); this.key = key; this.identityMap = identityMap; @@ -49,10 +50,10 @@ public class SimpleIdentityRefAttributeReadingStrategy extends SimpleAttributeRe namespace = namespaceOfTextContent.getValue(); } - Date revision = null; - Map revisions = identityMap.get(namespace); + Optional revision = null; + Map, IdentityMapping> revisions = identityMap.get(namespace); if (revisions.keySet().size() > 1) { - for (Map.Entry revisionToIdentityEntry : revisions.entrySet()) { + for (Map.Entry, IdentityMapping> revisionToIdentityEntry : revisions.entrySet()) { if (revisionToIdentityEntry.getValue().containsIdName(localName)) { Preconditions.checkState(revision == null, "Duplicate identity %s, in namespace %s, " @@ -64,7 +65,7 @@ public class SimpleIdentityRefAttributeReadingStrategy extends SimpleAttributeRe } else { revision = revisions.keySet().iterator().next(); } - return QName.create(URI.create(namespace), revision, localName).toString(); + return QName.create(URI.create(namespace), revision.toJavaUtil(), localName).toString(); } @Override diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/mapping/SimpleAttributeMappingStrategy.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/mapping/SimpleAttributeMappingStrategy.java index a79e96a23c..782d243550 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/mapping/SimpleAttributeMappingStrategy.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/mapping/SimpleAttributeMappingStrategy.java @@ -11,10 +11,9 @@ package org.opendaylight.controller.config.facade.xml.mapping.attributes.mapping import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.Maps; -import java.util.Date; import java.util.Map; import javax.management.openmbean.SimpleType; -import org.opendaylight.controller.config.facade.xml.util.Util; +import org.opendaylight.yangtools.yang.common.Revision; public class SimpleAttributeMappingStrategy extends AbstractAttributeMappingStrategy> { @@ -43,7 +42,7 @@ public class SimpleAttributeMappingStrategy extends AbstractAttributeMappingStra static { WRITER_PLUGINS.put(DEFAULT_WRITER_PLUGIN, new DefaultWriterPlugin()); - WRITER_PLUGINS.put(Date.class.getCanonicalName(), new DatePlugin()); + WRITER_PLUGINS.put(Revision.class.getCanonicalName(), new RevisionPlugin()); } /** @@ -61,12 +60,12 @@ public class SimpleAttributeMappingStrategy extends AbstractAttributeMappingStra } } - static class DatePlugin implements WriterPlugin { + static class RevisionPlugin implements WriterPlugin { @Override public String writeObject(final Object value) { - Preconditions.checkArgument(value instanceof Date, "Attribute must be Date"); - return Util.writeDate((Date) value); + Preconditions.checkArgument(value instanceof Revision, "Attribute must be Date"); + return ((Revision) value).toString(); } } diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/resolving/SimpleAttributeResolvingStrategy.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/resolving/SimpleAttributeResolvingStrategy.java index 12f48e3777..f7952528d1 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/resolving/SimpleAttributeResolvingStrategy.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/resolving/SimpleAttributeResolvingStrategy.java @@ -14,12 +14,13 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.math.BigDecimal; import java.math.BigInteger; -import java.text.ParseException; +import java.time.format.DateTimeParseException; import java.util.Date; import java.util.Map; import javax.management.openmbean.SimpleType; import org.opendaylight.controller.config.facade.xml.util.Util; import org.opendaylight.controller.config.util.xml.DocumentedException; +import org.opendaylight.yangtools.yang.common.Revision; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -138,8 +139,8 @@ final class SimpleAttributeResolvingStrategy extends AbstractAttributeResolvingS @Override protected Object parseObject(final Class type, final String value) throws DocumentedException { try { - return Util.readDate(value); - } catch (final ParseException e) { + return Revision.ofNullable(value).orElse(null); + } catch (final DateTimeParseException e) { LOG.trace("Unable parse value {} due to ", value, e); throw new DocumentedException("Unable to parse value " + value + " as date.", e, DocumentedException.ErrorType.APPLICATION, DocumentedException.ErrorTag.OPERATION_FAILED, diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/Config.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/Config.java index 1b62183be1..381934ae13 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/Config.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/Config.java @@ -18,7 +18,6 @@ import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import java.util.Collection; import java.util.Collections; -import java.util.Date; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -32,6 +31,7 @@ import org.opendaylight.controller.config.util.xml.DocumentedException; import org.opendaylight.controller.config.util.xml.XmlElement; import org.opendaylight.controller.config.util.xml.XmlMappingConstants; import org.opendaylight.controller.config.util.xml.XmlUtil; +import org.opendaylight.yangtools.yang.common.Revision; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -41,16 +41,16 @@ public class Config { Map> moduleConfigs; - private final Map> identityMap; + private final Map, IdentityMapping>> identityMap; private final EnumResolver enumResolver; public Config(final Map> moduleConfigs, final EnumResolver enumResolver) { - this(moduleConfigs, Collections.>emptyMap(), enumResolver); + this(moduleConfigs, Collections., IdentityMapping>>emptyMap(), enumResolver); } public Config(final Map> moduleConfigs, - final Map> identityMap, final EnumResolver enumResolver) { + final Map, IdentityMapping>> identityMap, final EnumResolver enumResolver) { this.moduleConfigs = moduleConfigs; this.identityMap = identityMap; this.enumResolver = enumResolver; diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/InstanceConfig.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/InstanceConfig.java index ff9a9f6ff7..1bea5c2638 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/InstanceConfig.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/InstanceConfig.java @@ -11,15 +11,11 @@ package org.opendaylight.controller.config.facade.xml.mapping.config; import com.google.common.base.Optional; import com.google.common.collect.Lists; import com.google.common.collect.Maps; - -import java.util.Date; import java.util.List; import java.util.Map; import java.util.Map.Entry; - import javax.management.ObjectName; import javax.management.openmbean.OpenType; - import org.opendaylight.controller.config.facade.xml.mapping.IdentityMapping; import org.opendaylight.controller.config.facade.xml.mapping.attributes.fromxml.AttributeConfigElement; import org.opendaylight.controller.config.facade.xml.mapping.attributes.fromxml.AttributeReadingStrategy; @@ -39,6 +35,7 @@ import org.opendaylight.controller.config.util.xml.XmlMappingConstants; import org.opendaylight.controller.config.util.xml.XmlUtil; import org.opendaylight.controller.config.yangjmxgenerator.RuntimeBeanEntry; import org.opendaylight.controller.config.yangjmxgenerator.attribute.AttributeIfc; +import org.opendaylight.yangtools.yang.common.Revision; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -142,9 +139,9 @@ public final class InstanceConfig { } public InstanceConfigElementResolved fromXml(XmlElement moduleElement, final ServiceRegistryWrapper services, - final String moduleNamespace, final EditStrategyType defaultStrategy, - final Map> identityMap, - final EnumResolver enumResolver) + final String moduleNamespace, final EditStrategyType defaultStrategy, + final Map, IdentityMapping>> identityMap, + final EnumResolver enumResolver) throws DocumentedException { Map retVal = Maps.newHashMap(); diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/ModuleConfig.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/ModuleConfig.java index ca01f86fec..3746c35e7e 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/ModuleConfig.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/mapping/config/ModuleConfig.java @@ -9,7 +9,6 @@ package org.opendaylight.controller.config.facade.xml.mapping.config; import com.google.common.base.Optional; -import java.util.Date; import java.util.Map; import javax.management.ObjectName; import org.opendaylight.controller.config.api.jmx.ObjectNameUtil; @@ -20,6 +19,7 @@ import org.opendaylight.controller.config.util.xml.DocumentedException; import org.opendaylight.controller.config.util.xml.XmlElement; import org.opendaylight.controller.config.util.xml.XmlMappingConstants; import org.opendaylight.controller.config.util.xml.XmlUtil; +import org.opendaylight.yangtools.yang.common.Revision; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -59,7 +59,7 @@ public class ModuleConfig { public ModuleElementResolved fromXml(final XmlElement moduleElement, final ServiceRegistryWrapper depTracker, final String instanceName, final String moduleNamespace, final EditStrategyType defaultStrategy, - final Map> identityMap, final EnumResolver enumResolver) + final Map, IdentityMapping>> identityMap, final EnumResolver enumResolver) throws DocumentedException { InstanceConfigElementResolved ice = instanceConfig.fromXml(moduleElement, depTracker, moduleNamespace, diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreContext.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreContext.java index 868a5d8591..8e97d76993 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreContext.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreContext.java @@ -12,7 +12,7 @@ import java.util.Set; import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; public interface YangStoreContext { @@ -38,7 +38,7 @@ public interface YangStoreContext { */ Set getModules(); - String getModuleSource(ModuleIdentifier moduleIdentifier); + String getModuleSource(SourceIdentifier moduleIdentifier); EnumResolver getEnumResolver(); } diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreService.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreService.java index 4eef7ee39e..02865c2163 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreService.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreService.java @@ -26,8 +26,9 @@ import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry; import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier; import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider; +import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; @@ -94,7 +95,7 @@ public class YangStoreService implements YangStoreContext { } @Override - public String getModuleSource(final ModuleIdentifier moduleIdentifier) { + public String getModuleSource(final SourceIdentifier moduleIdentifier) { return this.snap.getModuleSource(moduleIdentifier); } @@ -146,6 +147,7 @@ public class YangStoreService implements YangStoreContext { private static Set toCapabilities(final Set modules, final YangStoreContext current) { return ImmutableSet.copyOf(Collections2.transform(modules, - input -> new YangModuleCapability(input, current.getModuleSource(input)))); + input -> new YangModuleCapability(input, current.getModuleSource( + RevisionSourceIdentifier.create(input.getName(), input.getRevision()))))); } } diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreSnapshot.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreSnapshot.java index ce34496810..452054518e 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreSnapshot.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/osgi/YangStoreSnapshot.java @@ -8,13 +8,12 @@ package org.opendaylight.controller.config.facade.xml.osgi; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.BiMap; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.common.io.ByteStreams; -import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.ListenableFuture; import java.io.IOException; import java.io.InputStream; import java.lang.ref.SoftReference; @@ -25,6 +24,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import java.util.Set; +import java.util.concurrent.ExecutionException; import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry; import org.opendaylight.controller.config.yangjmxgenerator.PackageTranslator; import org.opendaylight.controller.config.yangjmxgenerator.ServiceInterfaceEntry; @@ -35,7 +35,7 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException; +import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; @@ -151,17 +151,15 @@ public final class YangStoreSnapshot implements YangStoreContext, EnumResolver { } @Override - public String getModuleSource(final org.opendaylight.yangtools.yang.model.api.ModuleIdentifier moduleIdentifier) { - final CheckedFuture source = this.sourceProvider - .getSource(SourceIdentifier.create(moduleIdentifier.getName(), - Optional.fromNullable(QName.formattedRevision(moduleIdentifier.getRevision())))); - + public String getModuleSource(final SourceIdentifier moduleIdentifier) { + final ListenableFuture source = this.sourceProvider.getSource( + RevisionSourceIdentifier.create(moduleIdentifier.getName(), moduleIdentifier.getRevision())); try { - final YangTextSchemaSource yangTextSchemaSource = source.checkedGet(); + final YangTextSchemaSource yangTextSchemaSource = source.get(); try (InputStream inStream = yangTextSchemaSource.openStream()) { return new String(ByteStreams.toByteArray(inStream), StandardCharsets.UTF_8); } - } catch (SchemaSourceException | IOException e) { + } catch (ExecutionException | InterruptedException | IOException e) { LOG.warn("Unable to provide source for {}", moduleIdentifier, e); throw new IllegalArgumentException("Unable to provide source for " + moduleIdentifier, e); } diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/rpc/InstanceRuntimeRpc.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/rpc/InstanceRuntimeRpc.java index e0c78f8d48..8c101be4f5 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/rpc/InstanceRuntimeRpc.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/rpc/InstanceRuntimeRpc.java @@ -8,9 +8,9 @@ package org.opendaylight.controller.config.facade.xml.rpc; +import com.google.common.base.Optional; import com.google.common.collect.Maps; import java.util.Collections; -import java.util.Date; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -27,6 +27,7 @@ import org.opendaylight.controller.config.util.xml.XmlElement; import org.opendaylight.controller.config.yangjmxgenerator.RuntimeBeanEntry.Rpc; import org.opendaylight.controller.config.yangjmxgenerator.attribute.AttributeIfc; import org.opendaylight.controller.config.yangjmxgenerator.attribute.JavaAttribute; +import org.opendaylight.yangtools.yang.common.Revision; public final class InstanceRuntimeRpc { @@ -75,7 +76,7 @@ public final class InstanceRuntimeRpc { // FIXME add identity map to runtime data Map strats = new ObjectXmlReader().prepareReading(yangToAttrConfig, - Collections.>emptyMap()); + Collections., IdentityMapping>>emptyMap()); for (Entry readStratEntry : strats.entrySet()) { List configNodes = configRootNode.getChildElements(readStratEntry.getKey()); diff --git a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/util/Util.java b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/util/Util.java index 18ba37eace..d704d63037 100644 --- a/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/util/Util.java +++ b/opendaylight/config/config-manager-facade-xml/src/main/java/org/opendaylight/controller/config/facade/xml/util/Util.java @@ -8,25 +8,13 @@ package org.opendaylight.controller.config.facade.xml.util; -import static org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil.getRevisionFormat; - import com.google.common.base.Preconditions; -import java.text.ParseException; -import java.util.Date; public final class Util { private Util() { } - public static String writeDate(final Date date) { - return getRevisionFormat().format(date); - } - - public static Date readDate(final String string) throws ParseException { - return getRevisionFormat().parse(string); - } - public static void checkType(final Object value, final Class clazz) { Preconditions.checkArgument(clazz.isAssignableFrom(value.getClass()), "Unexpected type " + value.getClass() + " should be " + clazz + " of " + value); diff --git a/opendaylight/config/config-manager-facade-xml/src/test/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/fromxml/SimpleIdentityRefAttributeReadingStrategyTest.java b/opendaylight/config/config-manager-facade-xml/src/test/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/fromxml/SimpleIdentityRefAttributeReadingStrategyTest.java index bf678ffed4..60d2118bdf 100644 --- a/opendaylight/config/config-manager-facade-xml/src/test/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/fromxml/SimpleIdentityRefAttributeReadingStrategyTest.java +++ b/opendaylight/config/config-manager-facade-xml/src/test/java/org/opendaylight/controller/config/facade/xml/mapping/attributes/fromxml/SimpleIdentityRefAttributeReadingStrategyTest.java @@ -10,40 +10,37 @@ package org.opendaylight.controller.config.facade.xml.mapping.attributes.fromxml import static org.junit.Assert.assertEquals; +import com.google.common.base.Optional; import com.google.common.collect.Maps; import java.net.URI; import java.util.Collections; -import java.util.Date; import java.util.Map; import org.junit.Test; import org.opendaylight.controller.config.facade.xml.mapping.IdentityMapping; import org.opendaylight.controller.config.util.xml.XmlElement; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Revision; public class SimpleIdentityRefAttributeReadingStrategyTest { @Test public void testReadIdRef() throws Exception { - final Map> identityMapping = Maps.newHashMap(); + final Map, IdentityMapping>> identityMapping = Maps.newHashMap(); final IdentityMapping value = new IdentityMapping(); - final Date rev = new Date(); + final Optional rev = Optional.of(Revision.of("2017-10-10")); identityMapping.put("namespace", Collections.singletonMap(rev, value)); identityMapping.put("inner", Collections.singletonMap(rev, value)); final SimpleIdentityRefAttributeReadingStrategy key = new SimpleIdentityRefAttributeReadingStrategy(null, "key", identityMapping); String read = key.readElementContent(XmlElement.fromString("local")); - assertEquals( - org.opendaylight.yangtools.yang.common.QName.create(URI.create("namespace"), rev, "local").toString(), - read); + assertEquals(QName.create(URI.create("namespace"), rev.toJavaUtil(), "local").toString(), read); read = key.readElementContent(XmlElement.fromString("a:local")); - assertEquals(org.opendaylight.yangtools.yang.common.QName.create(URI.create("inner"), rev, "local").toString(), - read); + assertEquals(QName.create(URI.create("inner"), rev.toJavaUtil(), "local").toString(), read); read = key.readElementContent( - XmlElement.fromString("local").getOnlyChildElement()); - assertEquals( - org.opendaylight.yangtools.yang.common.QName.create(URI.create("namespace"), rev, "local").toString(), - read); + XmlElement.fromString("local").getOnlyChildElement()); + assertEquals(QName.create(URI.create("namespace"), rev.toJavaUtil(), "local").toString(), read); } } diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/mapping/RefreshingSCPModuleInfoRegistry.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/mapping/RefreshingSCPModuleInfoRegistry.java index 97042f2c7d..d59232cf08 100644 --- a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/mapping/RefreshingSCPModuleInfoRegistry.java +++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/mapping/RefreshingSCPModuleInfoRegistry.java @@ -89,7 +89,7 @@ public class RefreshingSCPModuleInfoRegistry implements ModuleInfoRegistry, Auto } @Override - public void close() throws Exception { + public void close() { this.inner.close(); // send modify event when a bundle disappears updateService(); diff --git a/opendaylight/config/config-persister-impl/src/test/java/org/opendaylight/controller/config/persist/impl/ConfigPusherImplTest.java b/opendaylight/config/config-persister-impl/src/test/java/org/opendaylight/controller/config/persist/impl/ConfigPusherImplTest.java index bfb606e9ac..28f6ce83c8 100644 --- a/opendaylight/config/config-persister-impl/src/test/java/org/opendaylight/controller/config/persist/impl/ConfigPusherImplTest.java +++ b/opendaylight/config/config-persister-impl/src/test/java/org/opendaylight/controller/config/persist/impl/ConfigPusherImplTest.java @@ -19,6 +19,7 @@ import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; + import com.google.common.base.Throwables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -46,7 +47,7 @@ import org.opendaylight.controller.config.persist.api.Persister; import org.opendaylight.controller.config.spi.Module; import org.opendaylight.controller.config.util.ConfigRegistryClient; import org.opendaylight.controller.config.util.capability.Capability; -import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.w3c.dom.Element; public class ConfigPusherImplTest { @@ -71,7 +72,7 @@ public class ConfigPusherImplTest { @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); - doReturn("content").when(yangStoreService).getModuleSource(any(ModuleIdentifier.class)); + doReturn("content").when(yangStoreService).getModuleSource(any(SourceIdentifier.class)); doReturn("mocked snapshot").when(mockedConfigSnapshot).toString(); doReturn("").when(mockedConfigSnapshot).getConfigSnapshot(); doReturn(Collections.emptySet()).when(yangStoreService).getModules(); diff --git a/opendaylight/config/config-util/src/main/java/org/opendaylight/controller/config/util/capability/YangModuleCapability.java b/opendaylight/config/config-util/src/main/java/org/opendaylight/controller/config/util/capability/YangModuleCapability.java index dcf16b34ed..521a09f921 100644 --- a/opendaylight/config/config-util/src/main/java/org/opendaylight/controller/config/util/capability/YangModuleCapability.java +++ b/opendaylight/config/config-util/src/main/java/org/opendaylight/controller/config/util/capability/YangModuleCapability.java @@ -9,7 +9,7 @@ package org.opendaylight.controller.config.util.capability; import com.google.common.base.Optional; -import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil; +import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.Module; /** @@ -27,7 +27,7 @@ public final class YangModuleCapability extends BasicCapability { this.content = moduleContent; this.moduleName = module.getName(); this.moduleNamespace = module.getNamespace().toString(); - this.revision = SimpleDateFormatUtil.getRevisionFormat().format(module.getRevision()); + this.revision = module.getRevision().map(Revision::toString).orElse(null); } @Override @@ -36,8 +36,14 @@ public final class YangModuleCapability extends BasicCapability { } private static String toCapabilityURI(final Module module) { - return String.valueOf(module.getNamespace()) + "?module=" - + module.getName() + "&revision=" + SimpleDateFormatUtil.getRevisionFormat().format(module.getRevision()); + final StringBuilder sb = new StringBuilder(); + sb.append(module.getNamespace()).append("?module=").append(module.getName()); + + final java.util.Optional rev = module.getRevision(); + if (rev.isPresent()) { + sb.append("&revision=").append(rev.get()); + } + return sb.toString(); } @Override diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/JMXGenerator.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/JMXGenerator.java index 34480b9d10..18eb601747 100644 --- a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/JMXGenerator.java +++ b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/JMXGenerator.java @@ -9,19 +9,20 @@ package org.opendaylight.controller.config.yangjmxgenerator.plugin; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; import com.google.common.io.Files; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.Set; +import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.maven.project.MavenProject; @@ -80,15 +81,15 @@ public class JMXGenerator implements BasicCodeGenerator, MavenProjectAware { } @Override - public Collection generateSources(final SchemaContext context, - final File outputBaseDir, final Set yangModulesInCurrentMavenModule) { + public Collection generateSources(final SchemaContext context, final File outputBaseDir, + final Set currentModules, final Function> moduleResourcePathResolver) { Preconditions.checkArgument(context != null, "Null context received"); Preconditions.checkArgument(outputBaseDir != null, "Null outputBaseDir received"); Preconditions - .checkArgument((this.namespaceToPackageMapping != null) && !this.namespaceToPackageMapping.isEmpty(), + .checkArgument(this.namespaceToPackageMapping != null && !this.namespaceToPackageMapping.isEmpty(), "No namespace to package mapping provided in additionalConfiguration"); final PackageTranslator packageTranslator = new PackageTranslator(this.namespaceToPackageMapping); @@ -117,7 +118,7 @@ public class JMXGenerator implements BasicCodeGenerator, MavenProjectAware { + sieEntry.getValue()); } } - if (yangModulesInCurrentMavenModule.contains(module)) { + if (currentModules.contains(module)) { // write this sie to disk for (final ServiceInterfaceEntry sie : namesToSIEntries.values()) { try { @@ -138,7 +139,7 @@ public class JMXGenerator implements BasicCodeGenerator, MavenProjectAware { final StringBuilder fullyQualifiedNamesOfFactories = new StringBuilder(); // create MBEs - for (final Module module : yangModulesInCurrentMavenModule) { + for (final Module module : currentModules) { final String packageName = packageTranslator.getPackageName(module); final Map namesToMBEs = ModuleMXBeanEntry .create(module, qNamesToSIEs, context, new TypeProviderWrapper(new TypeProviderImpl(context)), @@ -162,7 +163,7 @@ public class JMXGenerator implements BasicCodeGenerator, MavenProjectAware { } } // create ModuleFactory file if needed - if ((fullyQualifiedNamesOfFactories.length() > 0) + if (fullyQualifiedNamesOfFactories.length() > 0 && this.generateModuleFactoryFile) { final File serviceLoaderFile = JMXGenerator.concatFolders( this.resourceBaseDir, "META-INF", "services", @@ -171,7 +172,8 @@ public class JMXGenerator implements BasicCodeGenerator, MavenProjectAware { serviceLoaderFile.getParentFile().mkdirs(); try { serviceLoaderFile.createNewFile(); - Files.write(fullyQualifiedNamesOfFactories.toString(), serviceLoaderFile, StandardCharsets.UTF_8); + Files.asCharSink(serviceLoaderFile, StandardCharsets.UTF_8).write( + fullyQualifiedNamesOfFactories.toString()); } catch (final IOException e) { final String message = "Cannot write to " + serviceLoaderFile; LOG.error(message, e); @@ -204,7 +206,7 @@ public class JMXGenerator implements BasicCodeGenerator, MavenProjectAware { private static Map extractNamespaceMapping( final Map additionalCfg) { - final Map namespaceToPackage = Maps.newHashMap(); + final Map namespaceToPackage = new HashMap<>(); for (final String key : additionalCfg.keySet()) { if (key.startsWith(NAMESPACE_TO_PACKAGE_PREFIX)) { final String mapping = additionalCfg.get(key); @@ -237,24 +239,21 @@ public class JMXGenerator implements BasicCodeGenerator, MavenProjectAware { @VisibleForTesting static class GeneratedFilesTracker { - private final Set files = Sets.newHashSet(); + private final Set files = new HashSet<>(); void addFile(final File file) { if (this.files.contains(file)) { - final List undeletedFiles = Lists.newArrayList(); + final List undeletedFiles = new ArrayList<>(); for (final File presentFile : this.files) { if (!presentFile.delete()) { undeletedFiles.add(presentFile); } } if (!undeletedFiles.isEmpty()) { - LOG.error( - "Illegal state occurred: Unable to delete already generated files, undeleted files: {}", + LOG.error("Illegal state occurred: Unable to delete already generated files, undeleted files: {}", undeletedFiles); } - throw new IllegalStateException( - "Name conflict in generated files, file" + file - + " present twice"); + throw new IllegalStateException("Name conflict in generated files, file" + file + " present twice"); } this.files.add(file); } diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/Annotation.java b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/Annotation.java index 8f00f908ef..541c28a0c5 100644 --- a/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/Annotation.java +++ b/opendaylight/config/yang-jmx-generator-plugin/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/ftl/model/Annotation.java @@ -21,12 +21,13 @@ import org.opendaylight.controller.config.api.annotations.ServiceInterfaceAnnota import org.opendaylight.controller.config.yangjmxgenerator.ServiceInterfaceEntry; import org.opendaylight.yangtools.yang.binding.annotations.ModuleQName; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Revision; public class Annotation { final String name; final List params; - public Annotation(String name, List params) { + public Annotation(final String name, final List params) { this.name = name; this.params = params; } @@ -39,7 +40,7 @@ public class Annotation { return params; } - public static Annotation createFromMap(Class annotationClass, Map parameters) { + public static Annotation createFromMap(final Class annotationClass, final Map parameters) { List parameterList = new ArrayList<>(); for(Entry entry: parameters.entrySet()) { parameterList.add(new Parameter(entry.getKey(), entry.getValue())); @@ -47,22 +48,22 @@ public class Annotation { return new Annotation(annotationClass.getCanonicalName(), parameterList); } - public static Annotation createDescriptionAnnotation(String description) { + public static Annotation createDescriptionAnnotation(final String description) { Preconditions.checkNotNull(description, "Cannot create annotation from null description"); return new Annotation(Description.class.getCanonicalName(), Lists.newArrayList(new Parameter("value", q(description)))); } - public static Annotation createModuleQNameANnotation(QName qName) { + public static Annotation createModuleQNameANnotation(final QName qName) { Map parameters = new HashMap<>(); parameters.put("namespace", q(qName.getNamespace().toString())); - parameters.put("revision", q(qName.getFormattedRevision())); + parameters.put("revision", q(qName.getRevision().map(Revision::toString).orElse(null))); parameters.put("name", q(qName.getLocalName())); return Annotation.createFromMap(ModuleQName.class, parameters); } - public static Collection createSieAnnotations(ServiceInterfaceEntry sie){ + public static Collection createSieAnnotations(final ServiceInterfaceEntry sie){ String exportedClassName = sie.getExportedOsgiClassName(); Preconditions.checkNotNull(sie.getQName(), @@ -75,7 +76,7 @@ public class Annotation { params.add(new Parameter("osgiRegistrationType", exportedClassName + ".class")); params.add(new Parameter("registerToOsgi", Boolean.toString(sie.isRegisterToOsgi()))); params.add(new Parameter("namespace", q(sie.getQName().getNamespace().toString()))); - params.add(new Parameter("revision", q(sie.getQName().getFormattedRevision()))); + params.add(new Parameter("revision", q(sie.getQName().getRevision().map(Revision::toString).orElse(null)))); params.add(new Parameter("localName", q(sie.getQName().getLocalName()))); Annotation sieAnnotation = new Annotation(ServiceInterfaceAnnotation.class.getCanonicalName(), params); @@ -85,7 +86,8 @@ public class Annotation { { List params = new ArrayList<>(); params.add(new Parameter("namespace", q(sie.getYangModuleQName().getNamespace().toString()))); - params.add(new Parameter("revision", q(sie.getYangModuleQName().getFormattedRevision()))); + params.add(new Parameter("revision", q(sie.getYangModuleQName().getRevision() + .map(Revision::toString).orElse(null)))); params.add(new Parameter("name", q(sie.getYangModuleQName().getLocalName()))); Annotation moduleQNameAnnotation = new Annotation(ModuleQName.class.getCanonicalName(), params); @@ -95,7 +97,7 @@ public class Annotation { } public static Annotation createRequireIfcAnnotation( - ServiceInterfaceEntry sie) { + final ServiceInterfaceEntry sie) { String reqIfc = sie.getFullyQualifiedName() + ".class"; return new Annotation(RequireInterface.class.getCanonicalName(), Lists.newArrayList(new Parameter("value", reqIfc))); @@ -103,15 +105,14 @@ public class Annotation { private static final String quote = "\""; - public static String q(String nullableDescription) { - return nullableDescription == null ? null : quote + nullableDescription - + quote; + public static String q(final String nullableDescription) { + return nullableDescription == null ? null : quote + nullableDescription + quote; } public static class Parameter { private final String key, value; - public Parameter(String key, String value) { + public Parameter(final String key, final String value) { this.key = key; this.value = value; } diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/JMXGeneratorFileNamesValidationTest.java b/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/JMXGeneratorFileNamesValidationTest.java index 3a820fdd0c..de868d6e89 100644 --- a/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/JMXGeneratorFileNamesValidationTest.java +++ b/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/JMXGeneratorFileNamesValidationTest.java @@ -13,7 +13,8 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import com.google.common.collect.Sets; +import com.google.common.collect.ImmutableSet; +import java.util.Optional; import org.junit.Test; import org.opendaylight.controller.config.yangjmxgenerator.ConfigConstants; import org.opendaylight.controller.config.yangjmxgenerator.PackageTranslatorTest; @@ -35,8 +36,8 @@ public class JMXGeneratorFileNamesValidationTest extends JMXGeneratorTest { map.put(JMXGenerator.MODULE_FACTORY_FILE_BOOLEAN, "randomValue"); jmxGenerator.setAdditionalConfig(map); try { - jmxGenerator.generateSources(context, outputBaseDir, - Sets.newHashSet(testFilesModule, testFiles1Module)); + jmxGenerator.generateSources(context, outputBaseDir, ImmutableSet.of(testFilesModule, testFiles1Module), + m -> Optional.empty()); fail(); } catch (RuntimeException e) { final Throwable cause = e.getCause(); diff --git a/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/JMXGeneratorTest.java b/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/JMXGeneratorTest.java index 61647c45e7..c306a1bbd1 100644 --- a/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/JMXGeneratorTest.java +++ b/opendaylight/config/yang-jmx-generator-plugin/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/plugin/JMXGeneratorTest.java @@ -17,6 +17,7 @@ import static org.junit.Assert.fail; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.opendaylight.controller.config.yangjmxgenerator.PackageTranslatorTest.EXPECTED_PACKAGE_PREFIX; + import com.github.javaparser.JavaParser; import com.github.javaparser.ParseException; import com.github.javaparser.ast.CompilationUnit; @@ -31,6 +32,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Optional; import java.util.Set; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -106,8 +108,8 @@ public class JMXGeneratorTest extends AbstractGeneratorTest { @Test public void generateSIsMBsTest() { - Collection files = jmxGenerator.generateSources(context, - outputBaseDir, context.getModules()); + Collection files = jmxGenerator.generateSources(context, outputBaseDir, context.getModules(), + m -> Optional.empty()); List expectedFileNames = new ArrayList<>(); expectedFileNames .addAll(ServiceInterfaceEntryTest.expectedSIEFileNames); @@ -147,8 +149,8 @@ public class JMXGeneratorTest extends AbstractGeneratorTest { @Test public void generateSIEsTest() throws IOException, ParseException { - Collection files = jmxGenerator.generateSources(context, - outputBaseDir, Collections.singleton(threadsModule)); + Collection files = jmxGenerator.generateSources(context, outputBaseDir, + Collections.singleton(threadsModule), m -> Optional.empty()); assertEquals(ServiceInterfaceEntryTest.expectedSIEFileNames, toFileNames(files)); for (File file : files) { @@ -205,7 +207,7 @@ public class JMXGeneratorTest extends AbstractGeneratorTest { jmxGenerator.setAdditionalConfig(map); Collection files = jmxGenerator.generateSources(context, outputBaseDir, - Collections.singleton(bgpListenerJavaModule)); + Collections.singleton(bgpListenerJavaModule), m -> Optional.empty()); assertEquals(expectedGenerateMBEsListNames, toFileNames(files)); } @@ -217,7 +219,7 @@ public class JMXGeneratorTest extends AbstractGeneratorTest { jmxGenerator.setAdditionalConfig(map); Collection files = jmxGenerator.generateSources(context, outputBaseDir, - Collections.singleton(threadsJavaModule)); + Collections.singleton(threadsJavaModule), m -> Optional.empty()); assertEquals(expectedModuleFileNames, toFileNames(files)); diff --git a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntry.java b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntry.java index 3d50ac3fe4..ebddb4ff81 100644 --- a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntry.java +++ b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntry.java @@ -73,8 +73,8 @@ public class ModuleMXBeanEntry extends AbstractEntry { private Collection runtimeBeans; private String nullableDummyContainerName; - ModuleMXBeanEntry(ModuleMXBeanEntryInitial initials, Map yangToAttributes, - Map providedServices2, Collection runtimeBeans) { + ModuleMXBeanEntry(final ModuleMXBeanEntryInitial initials, final Map yangToAttributes, + final Map providedServices2, final Collection runtimeBeans) { this.yangToAttributes = yangToAttributes; this.providedServices = Collections.unmodifiableMap(providedServices2); this.runtimeBeans = runtimeBeans; @@ -101,7 +101,7 @@ public class ModuleMXBeanEntry extends AbstractEntry { return ABSTRACT_PREFIX + getStubModuleName(); } - public String getFullyQualifiedName(String typeName) { + public String getFullyQualifiedName(final String typeName) { return FullyQualifiedNameHelper.getFullyQualifiedName(initial.packageName, typeName); } @@ -123,7 +123,7 @@ public class ModuleMXBeanEntry extends AbstractEntry { return providedServices; } - public void setRuntimeBeans(Collection newRuntimeBeans) { + public void setRuntimeBeans(final Collection newRuntimeBeans) { runtimeBeans = newRuntimeBeans; } @@ -147,10 +147,10 @@ public class ModuleMXBeanEntry extends AbstractEntry { * instances as values */ public static Map create( - Module currentModule, - Map qNamesToSIEs, - SchemaContext schemaContext, - TypeProviderWrapper typeProviderWrapper, String packageName) { + final Module currentModule, + final Map qNamesToSIEs, + final SchemaContext schemaContext, + final TypeProviderWrapper typeProviderWrapper, final String packageName) { ModuleMXBeanEntryBuilder builder = new ModuleMXBeanEntryBuilder().setModule(currentModule).setqNamesToSIEs(qNamesToSIEs) .setSchemaContext(schemaContext).setTypeProviderWrapper(typeProviderWrapper) @@ -163,7 +163,7 @@ public class ModuleMXBeanEntry extends AbstractEntry { return yangToAttributes; } - void setYangToAttributes(Map newAttributes) { + void setYangToAttributes(final Map newAttributes) { this.yangToAttributes = newAttributes; } @@ -186,21 +186,21 @@ public class ModuleMXBeanEntry extends AbstractEntry { return nullableDummyContainerName; } - public void setNullableDummyContainerName(String nullableDummyContainerName) { + public void setNullableDummyContainerName(final String nullableDummyContainerName) { this.nullableDummyContainerName = nullableDummyContainerName; } static final class ModuleMXBeanEntryInitial { - private String localName; - private String description; - private String packageName; - private String javaNamePrefix; - private String namespace; - private QName qName; + private final String localName; + private final String description; + private final String packageName; + private final String javaNamePrefix; + private final String namespace; + private final QName qName; - ModuleMXBeanEntryInitial(String localName, String description, String packageName, String javaNamePrefix, String namespace, QName qName) { + ModuleMXBeanEntryInitial(final String localName, final String description, final String packageName, final String javaNamePrefix, final String namespace, final QName qName) { this.localName = localName; this.description = description; this.packageName = packageName; @@ -218,22 +218,22 @@ public class ModuleMXBeanEntry extends AbstractEntry { private String namespace; private QName qName; - public ModuleMXBeanEntryInitialBuilder setPackageName(String packageName) { + public ModuleMXBeanEntryInitialBuilder setPackageName(final String packageName) { this.packageName = packageName; return this; } - public ModuleMXBeanEntryInitialBuilder setJavaNamePrefix(String javaNamePrefix) { + public ModuleMXBeanEntryInitialBuilder setJavaNamePrefix(final String javaNamePrefix) { this.javaNamePrefix = javaNamePrefix; return this; } - public ModuleMXBeanEntryInitialBuilder setNamespace(String namespace) { + public ModuleMXBeanEntryInitialBuilder setNamespace(final String namespace) { this.namespace = namespace; return this; } - public ModuleMXBeanEntryInitialBuilder setqName(QName qName) { + public ModuleMXBeanEntryInitialBuilder setqName(final QName qName) { this.qName = qName; return this; } @@ -242,9 +242,9 @@ public class ModuleMXBeanEntry extends AbstractEntry { return new ModuleMXBeanEntry.ModuleMXBeanEntryInitial(localName, description, packageName, javaNamePrefix, namespace, qName); } - public ModuleMXBeanEntryInitialBuilder setIdSchemaNode(IdentitySchemaNode idSchemaNode) { + public ModuleMXBeanEntryInitialBuilder setIdSchemaNode(final IdentitySchemaNode idSchemaNode) { this.localName = idSchemaNode.getQName().getLocalName(); - this.description = idSchemaNode.getDescription(); + this.description = idSchemaNode.getDescription().orElse(null); return this; } diff --git a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryBuilder.java b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryBuilder.java index 955e9b5f41..5f8f4e0cbb 100644 --- a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryBuilder.java +++ b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryBuilder.java @@ -37,8 +37,8 @@ import org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.NameConflictException; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.ServiceRef; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; -import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; +import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -131,12 +131,12 @@ final class ModuleMXBeanEntryBuilder { Map result = new HashMap<>(); - for (AugmentationSchema augmentation : currentModule.getAugmentations()) { + for (AugmentationSchemaNode augmentation : currentModule.getAugmentations()) { Collection childNodes = augmentation.getChildNodes(); - if (areAllChildrenChoiceCaseNodes(childNodes)) { - for (ChoiceCaseNode childCase : castChildNodesToChoiceCases(childNodes)) { + if (areAllChildrenCaseSchemaNodes(childNodes)) { + for (CaseSchemaNode childCase : castChildNodesToChoiceCases(childNodes)) { // TODO refactor, extract to standalone builder class - processChoiceCaseNode(result, uniqueGeneratedClassesNames, configModulePrefix, moduleIdentities, + processCaseSchemaNode(result, uniqueGeneratedClassesNames, configModulePrefix, moduleIdentities, unaugmentedModuleIdentities, augmentation, childCase); } } // skip if child nodes are not all cases @@ -172,7 +172,8 @@ final class ModuleMXBeanEntryBuilder { } } - private static void checkAttributeNamesUniqueness(final Map uniqueGeneratedClassesNames, final Map result) { + private static void checkAttributeNamesUniqueness(final Map uniqueGeneratedClassesNames, + final Map result) { for (Map.Entry entry : result.entrySet()) { checkUniqueRuntimeBeanAttributesName(entry.getValue(), uniqueGeneratedClassesNames); @@ -183,8 +184,8 @@ final class ModuleMXBeanEntryBuilder { Map moduleIdentities = Maps.newHashMap(); for (IdentitySchemaNode id : currentModule.getIdentities()) { - if (id.getBaseIdentity() != null - && ConfigConstants.MODULE_TYPE_Q_NAME.equals(id.getBaseIdentity().getQName())) { + if (!id.getBaseIdentities().isEmpty() + && ConfigConstants.MODULE_TYPE_Q_NAME.equals(id.getBaseIdentities().iterator().next().getQName())) { String identityLocalName = id.getQName().getLocalName(); if (moduleIdentities.containsKey(identityLocalName)) { throw new IllegalStateException("Module name already defined in this currentModule: " @@ -217,37 +218,39 @@ final class ModuleMXBeanEntryBuilder { return moduleIdentities; } - private static Collection castChildNodesToChoiceCases(final Collection childNodes) { - return Collections2.transform(childNodes, new Function() { + private static Collection castChildNodesToChoiceCases(final Collection childNodes) { + return Collections2.transform(childNodes, new Function() { @Nullable @Override - public ChoiceCaseNode apply(@Nullable final DataSchemaNode input) { - return (ChoiceCaseNode) input; + public CaseSchemaNode apply(@Nullable final DataSchemaNode input) { + return (CaseSchemaNode) input; } }); } - private static boolean areAllChildrenChoiceCaseNodes(final Iterable childNodes) { + private static boolean areAllChildrenCaseSchemaNodes(final Iterable childNodes) { for (DataSchemaNode childNode : childNodes) { - if (childNode instanceof ChoiceCaseNode == false) { + if (childNode instanceof CaseSchemaNode == false) { return false; } } return true; } - private void processChoiceCaseNode(final Map result, + private void processCaseSchemaNode( + final Map result, final Map uniqueGeneratedClassesNames, final String configModulePrefix, final Map moduleIdentities, - final Map unaugmentedModuleIdentities, final AugmentationSchema augmentation, - final DataSchemaNode when) { + final Map unaugmentedModuleIdentities, + final AugmentationSchemaNode augmentation, final DataSchemaNode when) { - ChoiceCaseNode choiceCaseNode = (ChoiceCaseNode) when; - if (choiceCaseNode.getConstraints() == null || choiceCaseNode.getConstraints().getWhenCondition() == null) { + CaseSchemaNode choiceCaseNode = (CaseSchemaNode) when; + if (!choiceCaseNode.getWhenCondition().isPresent()) { return; } - RevisionAwareXPath xPath = choiceCaseNode.getConstraints().getWhenCondition(); - Matcher matcher = getWhenConditionMatcher(configModulePrefix, xPath); + java.util.Optional xPath = choiceCaseNode.getWhenCondition(); + checkState(xPath.isPresent(), "Choice node %s does not have a when condition", choiceCaseNode); + Matcher matcher = getWhenConditionMatcher(configModulePrefix, xPath.get()); if (matcher.matches() == false) { return; } @@ -384,7 +387,7 @@ final class ModuleMXBeanEntryBuilder { * @param choiceCaseNode state or configuration case statement * @return either choiceCaseNode or its only child container */ - private static HAS_CHILDREN_AND_QNAME getDataNodeContainer(final ChoiceCaseNode choiceCaseNode) { + private static HAS_CHILDREN_AND_QNAME getDataNodeContainer(final CaseSchemaNode choiceCaseNode) { Collection childNodes = choiceCaseNode.getChildNodes(); if (childNodes.size() == 1) { DataSchemaNode onlyChild = childNodes.iterator().next(); @@ -479,14 +482,14 @@ final class ModuleMXBeanEntryBuilder { qNamesToSIEs, schemaContext); LeafSchemaNode refine = (LeafSchemaNode) usesNode.getRefines().values().iterator().next(); - boolean mandatory = refine.getConstraints().isMandatory(); + boolean mandatory = refine.isMandatory(); AbstractDependencyAttribute reference; if (dataNodeContainer instanceof ContainerSchemaNode) { reference = new DependencyAttribute(attrNode, serviceInterfaceEntry, mandatory, - attrNode.getDescription()); + attrNode.getDescription().orElse(null)); } else { reference = new ListDependenciesAttribute(attrNode, serviceInterfaceEntry, mandatory, - attrNode.getDescription()); + attrNode.getDescription().orElse(null)); } return Optional.of(reference); } @@ -528,7 +531,7 @@ final class ModuleMXBeanEntryBuilder { // Module from SchemaContext String prefix = m.group(1); ModuleImport moduleImport = findModuleImport(currentModule, prefix); - foundModule = schemaContext.findModuleByName(moduleImport.getModuleName(), moduleImport.getRevision()); + foundModule = schemaContext.findModule(moduleImport.getModuleName(), moduleImport.getRevision()).orElse(null); checkNotNull(foundModule, format("Module not found in SchemaContext by %s", moduleImport)); localSIName = m.group(2); } else { diff --git a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ServiceInterfaceEntry.java b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ServiceInterfaceEntry.java index 4cd0feb086..d7a8065680 100644 --- a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ServiceInterfaceEntry.java +++ b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ServiceInterfaceEntry.java @@ -10,6 +10,7 @@ package org.opendaylight.controller.config.yangjmxgenerator; import static com.google.common.base.Preconditions.checkNotNull; import static java.lang.String.format; import static org.opendaylight.controller.config.yangjmxgenerator.ConfigConstants.SERVICE_TYPE_Q_NAME; + import com.google.common.base.Optional; import java.util.ArrayList; import java.util.HashMap; @@ -56,12 +57,12 @@ public class ServiceInterfaceEntry extends AbstractEntry { private final QName yangModuleQName; private final boolean registerToOsgi; - private ServiceInterfaceEntry(IdentitySchemaNode id, String packageName, QName yangModuleQName) { + private ServiceInterfaceEntry(final IdentitySchemaNode id, final String packageName, final QName yangModuleQName) { this(Optional. absent(), id, packageName, yangModuleQName); } - private ServiceInterfaceEntry(Optional base, - IdentitySchemaNode id, String packageName, QName yangModuleQName) { + private ServiceInterfaceEntry(final Optional base, + final IdentitySchemaNode id, final String packageName, final QName yangModuleQName) { checkNotNull(base); this.maybeBaseCache = base; List unknownSchemaNodes = id.getUnknownSchemaNodes(); @@ -93,13 +94,13 @@ public class ServiceInterfaceEntry extends AbstractEntry { this.registerToOsgi = !disableOsgiServiceRegistration; this.exportedOsgiClassName = exportedOsgiClassNames.get(0); qName = id.getQName(); - nullableDescription = id.getDescription(); + nullableDescription = id.getDescription().orElse(null); typeName = getSimpleName(exportedOsgiClassName) + CLASS_NAME_SUFFIX; this.packageName = packageName; this.yangModuleQName = yangModuleQName; } - private static final String getSimpleName(String fullyQualifiedName) { + private static final String getSimpleName(final String fullyQualifiedName) { int lastDotPosition = fullyQualifiedName.lastIndexOf("."); return fullyQualifiedName.substring(lastDotPosition + 1); } @@ -128,8 +129,8 @@ public class ServiceInterfaceEntry extends AbstractEntry { * @return Map of QNames as keys and ServiceInterfaceEntry instances as * values */ - public static Map create(Module currentModule, - String packageName,Map definedSEItracker) { + public static Map create(final Module currentModule, + final String packageName,final Map definedSEItracker) { LOG.debug("Generating ServiceInterfaces from {} to package {}", currentModule.getNamespace(), packageName); @@ -149,17 +150,17 @@ public class ServiceInterfaceEntry extends AbstractEntry { .hasNext();) { IdentitySchemaNode identity = iterator.next(); ServiceInterfaceEntry created = null; - if (identity.getBaseIdentity() == null) { + if (identity.getBaseIdentities().isEmpty()) { // this can happen while loading config module, just skip // the identity continue; - } else if (identity.getBaseIdentity().getQName() + } else if (identity.getBaseIdentities().iterator().next().getQName() .equals(SERVICE_TYPE_Q_NAME)) { // this is a base type created = new ServiceInterfaceEntry(identity, packageName, ModuleUtil.getQName(currentModule)); } else { ServiceInterfaceEntry foundBase = definedSEItracker - .get(identity.getBaseIdentity()); + .get(identity.getBaseIdentities().iterator().next()); // derived type, did we convert the parent? if (foundBase != null) { created = new ServiceInterfaceEntry( @@ -206,7 +207,7 @@ public class ServiceInterfaceEntry extends AbstractEntry { } @Override - public boolean equals(Object o) { + public boolean equals(final Object o) { if (this == o) { return true; } diff --git a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/JavaAttribute.java b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/JavaAttribute.java index 099d8ed152..f1c23cb86e 100644 --- a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/JavaAttribute.java +++ b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/JavaAttribute.java @@ -10,6 +10,7 @@ package org.opendaylight.controller.config.yangjmxgenerator.attribute; import com.google.common.base.Preconditions; import java.util.Arrays; import java.util.List; +import java.util.Optional; import javax.management.openmbean.ArrayType; import javax.management.openmbean.CompositeType; import javax.management.openmbean.OpenDataException; @@ -42,9 +43,17 @@ public class JavaAttribute extends AbstractAttribute implements TypedAttribute { this.typeDefinition = CompatUtils.compatLeafType(leaf); this.typeProviderWrapper = typeProviderWrapper; - this.nullableDefault = leaf.getDefault(); - this.nullableDefaultWrappedForCode = leaf.getDefault() == null ? null : typeProviderWrapper.getDefault(leaf); - this.nullableDescription = leaf.getDescription(); + + final Optional typeDefault = leaf.getType().getDefaultValue(); + if (typeDefault.isPresent()) { + nullableDefault = (String) typeDefault.get(); + nullableDefaultWrappedForCode = typeProviderWrapper.getDefault(leaf); + } else { + nullableDefault = null; + nullableDefaultWrappedForCode = null; + } + + this.nullableDescription = leaf.getDescription().orElse(null); } public JavaAttribute(final LeafListSchemaNode leaf, @@ -54,7 +63,7 @@ public class JavaAttribute extends AbstractAttribute implements TypedAttribute { this.typeDefinition = leaf.getType(); this.typeProviderWrapper = typeProviderWrapper; this.nullableDefault = this.nullableDefaultWrappedForCode = null; - this.nullableDescription = leaf.getDescription(); + this.nullableDescription = leaf.getDescription().orElse(null); } public boolean isUnion() { @@ -105,7 +114,7 @@ public class JavaAttribute extends AbstractAttribute implements TypedAttribute { if (this == o) { return true; } - if ((o == null) || (getClass() != o.getClass())) { + if (o == null || getClass() != o.getClass()) { return false; } if (!super.equals(o)) { @@ -133,12 +142,12 @@ public class JavaAttribute extends AbstractAttribute implements TypedAttribute { @Override public int hashCode() { int result = super.hashCode(); - result = (31 * result) + (this.type != null ? this.type.hashCode() : 0); - result = (31 - * result) + result = 31 * result + (this.type != null ? this.type.hashCode() : 0); + result = 31 + * result + (this.nullableDescription != null ? this.nullableDescription.hashCode() : 0); - result = (31 * result) + result = 31 * result + (this.nullableDefault != null ? this.nullableDefault.hashCode() : 0); return result; } diff --git a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/ListAttribute.java b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/ListAttribute.java index f53beacf07..10971e7413 100644 --- a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/ListAttribute.java +++ b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/ListAttribute.java @@ -28,7 +28,7 @@ public class ListAttribute extends AbstractAttribute implements TypedAttribute { final TOAttribute innerAttribute = TOAttribute.create(node, typeProvider, packageName); - return new ListAttribute(node, innerAttribute, node.getDescription()); + return new ListAttribute(node, innerAttribute, node.getDescription().orElse(null)); } public static ListAttribute create(final LeafListSchemaNode node, @@ -36,7 +36,7 @@ public class ListAttribute extends AbstractAttribute implements TypedAttribute { final JavaAttribute innerAttribute = new JavaAttribute(node, typeProvider); - return new ListAttribute(node, innerAttribute, node.getDescription()); + return new ListAttribute(node, innerAttribute, node.getDescription().orElse(null)); } ListAttribute(final DataSchemaNode attrNode, final TypedAttribute innerAttribute, @@ -70,11 +70,11 @@ public class ListAttribute extends AbstractAttribute implements TypedAttribute { @Override public int hashCode() { int result = super.hashCode(); - result = (31 - * result) + result = 31 + * result + (this.nullableDescription != null ? this.nullableDescription.hashCode() : 0); - result = (31 * result) + result = 31 * result + (this.nullableDefault != null ? this.nullableDefault.hashCode() : 0); return result; } @@ -84,7 +84,7 @@ public class ListAttribute extends AbstractAttribute implements TypedAttribute { if (this == o) { return true; } - if ((o == null) || (getClass() != o.getClass())) { + if (o == null || getClass() != o.getClass()) { return false; } if (!super.equals(o)) { diff --git a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/TOAttribute.java b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/TOAttribute.java index 5b7385800e..2fa4379f03 100644 --- a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/TOAttribute.java +++ b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/attribute/TOAttribute.java @@ -52,19 +52,16 @@ public class TOAttribute extends AbstractAttribute implements TypedAttribute { // Transfer Object: get the leaves final Map map = new HashMap<>(); final Map attributeNameMap = new HashMap<>(); - for (final DataSchemaNode dataSchemaNode : containerSchemaNode - .getChildNodes()) { + for (final DataSchemaNode dataSchemaNode : containerSchemaNode.getChildNodes()) { try { final String yangName = dataSchemaNode.getQName().getLocalName(); - map.put(yangName, - createInnerAttribute(dataSchemaNode, - typeProviderWrapper, packageName)); + map.put(yangName, createInnerAttribute(dataSchemaNode, typeProviderWrapper, packageName)); } catch (final IllegalArgumentException e) { throw new IllegalStateException("Unable to create TO", e); } } return new TOAttribute(containerSchemaNode, map, attributeNameMap, - containerSchemaNode.getDescription(), packageName); + containerSchemaNode.getDescription().orElse(null), packageName); } private static AttributeIfc createInnerAttribute( @@ -73,17 +70,13 @@ public class TOAttribute extends AbstractAttribute implements TypedAttribute { final Class type = isAllowedType(dataSchemaNode); if (type.equals(LeafSchemaNode.class)) { - return new JavaAttribute((LeafSchemaNode) dataSchemaNode, - typeProviderWrapper); + return new JavaAttribute((LeafSchemaNode) dataSchemaNode, typeProviderWrapper); } else if (type.equals(ListSchemaNode.class)) { - return ListAttribute.create((ListSchemaNode) dataSchemaNode, - typeProviderWrapper, packageName); + return ListAttribute.create((ListSchemaNode) dataSchemaNode, typeProviderWrapper, packageName); } else if (type.equals(LeafListSchemaNode.class)) { - return ListAttribute.create((LeafListSchemaNode) dataSchemaNode, - typeProviderWrapper); + return ListAttribute.create((LeafListSchemaNode) dataSchemaNode, typeProviderWrapper); } else if (type.equals(ContainerSchemaNode.class)) { - return TOAttribute.create((ContainerSchemaNode) dataSchemaNode, - typeProviderWrapper, packageName); + return TOAttribute.create((ContainerSchemaNode) dataSchemaNode, typeProviderWrapper, packageName); } throw new IllegalStateException("This should never happen"); @@ -92,7 +85,7 @@ public class TOAttribute extends AbstractAttribute implements TypedAttribute { private static Class isAllowedType( final DataSchemaNode dataSchemaNode) { for (final Class allowedType : ALLOWED_CHILDREN) { - if (allowedType.isAssignableFrom(dataSchemaNode.getClass()) == true) { + if (allowedType.isAssignableFrom(dataSchemaNode.getClass())) { return allowedType; } } @@ -160,7 +153,7 @@ public class TOAttribute extends AbstractAttribute implements TypedAttribute { if (this == o) { return true; } - if ((o == null) || (getClass() != o.getClass())) { + if (o == null || getClass() != o.getClass()) { return false; } if (!super.equals(o)) { @@ -190,14 +183,14 @@ public class TOAttribute extends AbstractAttribute implements TypedAttribute { @Override public int hashCode() { int result = super.hashCode(); - result = (31 - * result) + result = 31 + * result + (this.nullableDescription != null ? this.nullableDescription.hashCode() : 0); - result = (31 * result) + result = 31 * result + (this.nullableDefault != null ? this.nullableDefault.hashCode() : 0); - result = (31 - * result) + result = 31 + * result + (this.yangNameToAttributeMap != null ? this.yangNameToAttributeMap .hashCode() : 0); return result; diff --git a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/AbstractYangTest.java b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/AbstractYangTest.java index 9a23221433..c0e26688a6 100644 --- a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/AbstractYangTest.java +++ b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/AbstractYangTest.java @@ -10,7 +10,9 @@ package org.opendaylight.controller.config.yangjmxgenerator; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; + import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Sets; import java.io.InputStream; import java.util.ArrayList; @@ -46,20 +48,20 @@ public abstract class AbstractYangTest { @Before public void loadYangFiles() throws Exception { - final List yangISs = new ArrayList<>(); - yangISs.addAll(getStreams("/test-config-threads.yang", - "/test-config-threads-java.yang", - "/config-bgp-listener-impl.yang", "/ietf-inet-types.yang", - "/config-jmx-it.yang", "/config-jmx-it-impl.yang", - "/test-config-files.yang", "/test-config-files1.yang")); + final List yangResources = new ArrayList<>(); + yangResources.add("/test-config-threads.yang"); + yangResources.add("/test-config-threads-java.yang"); + yangResources.add("/config-bgp-listener-impl.yang"); + yangResources.add("/ietf-inet-types.yang"); + yangResources.add("/config-jmx-it.yang"); + yangResources.add("/config-jmx-it-impl.yang"); + yangResources.add("/test-config-files.yang"); + yangResources.add("/test-config-files1.yang"); - yangISs.addAll(getConfigApiYangInputStreams()); + yangResources.addAll(getConfigApiYangs()); + + this.context = YangParserTestUtils.parseYangResources(AbstractYangTest.class, yangResources); - this.context = YangParserTestUtils.parseYangStreams(yangISs); - // close ISs - for (final InputStream is : yangISs) { - is.close(); - } this.namesToModules = YangModelSearchUtils.mapModulesByNames(this.context .getModules()); this.configModule = this.namesToModules.get(ConfigConstants.CONFIG_MODULE); @@ -74,11 +76,10 @@ public abstract class AbstractYangTest { this.jmxImplModule = this.namesToModules.get("config-jmx-it-impl"); this.testFilesModule = this.namesToModules.get("test-config-files"); this.testFiles1Module = this.namesToModules.get("test-config-files1"); - } - public static List getConfigApiYangInputStreams() { - return getStreams("/META-INF/yang/config@2013-04-05.yang", "/META-INF/yang/rpc-context@2013-06-17.yang"); + public static List getConfigApiYangs() { + return ImmutableList.of("/META-INF/yang/config@2013-04-05.yang", "/META-INF/yang/rpc-context@2013-06-17.yang"); } public Map mapIdentitiesByQNames(final Module module) { diff --git a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryNameConflictTest.java b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryNameConflictTest.java index 3eec98e8a1..54a980abfa 100644 --- a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryNameConflictTest.java +++ b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryNameConflictTest.java @@ -9,19 +9,20 @@ package org.opendaylight.controller.config.yangjmxgenerator; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; + import com.google.common.base.Preconditions; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; +import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.NameConflictException; import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.YangModelSearchUtils; import org.opendaylight.mdsal.binding.yang.types.TypeProviderImpl; +import org.opendaylight.yangtools.yang.common.YangConstants; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; import org.slf4j.Logger; @@ -29,106 +30,67 @@ import org.slf4j.LoggerFactory; public class ModuleMXBeanEntryNameConflictTest extends AbstractYangTest { - private static final Logger LOG = LoggerFactory - .getLogger(ModuleMXBeanEntryNameConflictTest.class); + private static final Logger LOG = LoggerFactory.getLogger(ModuleMXBeanEntryNameConflictTest.class); public static final String PACKAGE_NAME = "pack2"; - Map testedFilesToYangModules = new HashMap<>(); - Map testedYangModulesToExpectedConflictingName = new HashMap<>(); - - @Ignore - @Test - public void testNameConflicts() throws Exception { - prepareSamples(); - prepareExceptionAssertions(); - - for (final Map.Entry currentTestEntry : this.testedFilesToYangModules - .entrySet()) { - final String moduleName = currentTestEntry.getValue(); - final File yangFile = currentTestEntry.getKey(); - final Module testedModule = loadYangs(yangFile, moduleName); - - try { - LOG.debug("Testing {}", yangFile); - ModuleMXBeanEntry.create(testedModule, - new HashMap<>(), this.context, - new TypeProviderWrapper(new TypeProviderImpl(this.context)), - PACKAGE_NAME); - fail(yangFile.toString() - + " did not cause a name conflict and should"); - } catch (final NameConflictException e) { - assertEquals( - this.testedYangModulesToExpectedConflictingName - .get(moduleName), - e.getConflictingName()); - } - } - } - - private void prepareSamples() { - final File first = new File(getClass().getResource( - "/duplicates/config-test-duplicate-attribute-in-list.yang") - .getFile()); - final File dir = first.getParentFile(); - - for (final File testYang : dir.listFiles()) { - final String moduleName = getYangModuleName(testYang.getName()); - this.testedFilesToYangModules.put(testYang, moduleName); - } - } - private void prepareExceptionAssertions() { - this.testedYangModulesToExpectedConflictingName.put( - "config-test-duplicate-attribute", "DtoA"); - this.testedYangModulesToExpectedConflictingName.put( - "config-test-duplicate-attribute-in-list", "DtoA"); - this.testedYangModulesToExpectedConflictingName.put( - "config-test-duplicate-attribute-runtime-bean", "DtoA"); - this.testedYangModulesToExpectedConflictingName.put( - "config-test-generated-attributes-name-conflict", "StateB"); - this.testedYangModulesToExpectedConflictingName.put( - "config-test-runtime-bean-list-name-conflict", + private final List testedModules = ImmutableList.of( + "config-test-duplicate-attribute-in-list", + "config-test-duplicate-attribute-in-runtime-and-mxbean", + "config-test-duplicate-attribute-runtime-bean", + "config-test-duplicate-attribute", + "config-test-generated-attributes-name-conflict", + "config-test-runtime-bean-list-name-conflict2", + "config-test-runtime-bean-list-name-conflict", + "config-test-runtime-bean-name-conflict2", + "config-test-runtime-bean-name-conflict"); + private final Map testedYangModulesToExpectedConflictingName = new HashMap<>(); + + @Before + public void setup() { + testedYangModulesToExpectedConflictingName.put("config-test-duplicate-attribute", "DtoA"); + testedYangModulesToExpectedConflictingName.put("config-test-duplicate-attribute-in-list", "DtoA"); + testedYangModulesToExpectedConflictingName.put("config-test-duplicate-attribute-runtime-bean", "DtoA"); + testedYangModulesToExpectedConflictingName.put("config-test-generated-attributes-name-conflict", "StateB"); + testedYangModulesToExpectedConflictingName.put("config-test-runtime-bean-list-name-conflict", "StateARuntimeMXBean"); - this.testedYangModulesToExpectedConflictingName.put( - "config-test-runtime-bean-list-name-conflict2", + testedYangModulesToExpectedConflictingName.put("config-test-runtime-bean-list-name-conflict2", "StateARuntimeMXBean"); - this.testedYangModulesToExpectedConflictingName - .put("config-test-runtime-bean-name-conflict", "StateARuntimeMXBean"); - this.testedYangModulesToExpectedConflictingName.put( - "config-test-runtime-bean-name-conflict2", + testedYangModulesToExpectedConflictingName.put("config-test-runtime-bean-name-conflict", "StateARuntimeMXBean"); - this.testedYangModulesToExpectedConflictingName.put( - "config-test-duplicate-attribute-in-runtime-and-mxbean", - "port"); - } - - private static String getYangModuleName(final String name) { - final int startIndex = 0; - final int endIndex = name.indexOf(".yang"); - return name.substring(startIndex, endIndex); + testedYangModulesToExpectedConflictingName.put("config-test-runtime-bean-name-conflict2", + "StateARuntimeMXBean"); + testedYangModulesToExpectedConflictingName.put("config-test-duplicate-attribute-in-runtime-and-mxbean", "port"); } - private Module loadYangs(final File testedModule, final String moduleName) - throws Exception { - final List yangISs = new ArrayList<>(); - yangISs.addAll(getStreams("/ietf-inet-types.yang")); - - yangISs.add(new FileInputStream(testedModule)); + private Module loadYangs(final String testedModule, final String moduleName) { + final List yangs = new ArrayList<>(); + yangs.add("/ietf-inet-types.yang"); + yangs.add("/duplicates/" + testedModule + YangConstants.RFC6020_YANG_FILE_EXTENSION); + yangs.addAll(getConfigApiYangs()); - yangISs.addAll(getConfigApiYangInputStreams()); - - this.context = YangParserTestUtils.parseYangStreams(yangISs); - // close ISs - for (final InputStream is : yangISs) { - is.close(); - } - this.namesToModules = YangModelSearchUtils.mapModulesByNames(this.context - .getModules()); + this.context = YangParserTestUtils.parseYangResources(ModuleMXBeanEntryNameConflictTest.class, yangs); + this.namesToModules = YangModelSearchUtils.mapModulesByNames(this.context.getModules()); this.configModule = this.namesToModules.get(ConfigConstants.CONFIG_MODULE); final Module module = this.namesToModules.get(moduleName); - Preconditions.checkNotNull(module, "Cannot get module %s from %s", - moduleName, this.namesToModules.keySet()); + Preconditions.checkNotNull(module, "Cannot get module %s from %s", moduleName, this.namesToModules.keySet()); return module; } + @Ignore + @Test + public void testNameConflicts() { + for (final String moduleName : testedModules) { + final Module testedModule = loadYangs(moduleName, moduleName); + + try { + LOG.debug("Testing {}", moduleName); + ModuleMXBeanEntry.create(testedModule, new HashMap<>(), this.context, + new TypeProviderWrapper(new TypeProviderImpl(this.context)), PACKAGE_NAME); + fail(moduleName + " did not cause a name conflict and should"); + } catch (final NameConflictException e) { + assertEquals(this.testedYangModulesToExpectedConflictingName.get(moduleName), e.getConflictingName()); + } + } + } } diff --git a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryTest.java b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryTest.java index fbd7fb5def..d7fb213bea 100644 --- a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryTest.java +++ b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryTest.java @@ -21,11 +21,8 @@ import static org.mockito.Mockito.mock; import com.google.common.collect.Sets; import java.net.URI; import java.net.URISyntaxException; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Collections; -import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -47,6 +44,7 @@ import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.mdsal.binding.model.util.Types; import org.opendaylight.mdsal.binding.yang.types.TypeProviderImpl; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; @@ -56,20 +54,13 @@ public class ModuleMXBeanEntryTest extends AbstractYangTest { public static final String PACKAGE_NAME = "pack2"; protected static final URI THREADS_NAMESPACE; - protected static final Date THREADS_REVISION_DATE; + protected static final Revision THREADS_REVISION_DATE = Revision.of("2013-04-09"); static { try { - THREADS_NAMESPACE = new URI(ConfigConstants.CONFIG_NAMESPACE - + ":threads"); + THREADS_NAMESPACE = new URI(ConfigConstants.CONFIG_NAMESPACE + ":threads"); } catch (final URISyntaxException e) { - throw new Error(e); - } - final SimpleDateFormat revisionFormat = new SimpleDateFormat("yyyy-MM-dd"); - try { - THREADS_REVISION_DATE = revisionFormat.parse("2013-04-09"); - } catch (final ParseException e) { - throw new Error(e); + throw new ExceptionInInitializerError(e); } } diff --git a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/RuntimeBeanEntryTest.java b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/RuntimeBeanEntryTest.java index 629b1542ba..bdacef8efe 100644 --- a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/RuntimeBeanEntryTest.java +++ b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/RuntimeBeanEntryTest.java @@ -25,7 +25,7 @@ import org.mockito.Mockito; import org.opendaylight.controller.config.yangjmxgenerator.attribute.JavaAttribute; import org.opendaylight.mdsal.binding.yang.types.TypeProviderImpl; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; +import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode; import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; @@ -45,7 +45,7 @@ public class RuntimeBeanEntryTest extends AbstractYangTest { @Test public void createRuntimeBean() { - final ChoiceCaseNode caseNode = Mockito.mock(ChoiceCaseNode.class); + final CaseSchemaNode caseNode = Mockito.mock(CaseSchemaNode.class); doReturn(new HashSet()).when(caseNode).getChildNodes(); doReturn(new ArrayList()).when(caseNode) .getUnknownSchemaNodes(); diff --git a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/RuntimeRegistratorTest.java b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/RuntimeRegistratorTest.java index b3b06151eb..8228eb69ea 100644 --- a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/RuntimeRegistratorTest.java +++ b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/RuntimeRegistratorTest.java @@ -10,17 +10,17 @@ package org.opendaylight.controller.config.yangjmxgenerator; import static org.apache.commons.lang3.StringUtils.capitalize; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; + import com.google.common.base.Optional; import java.net.URI; import java.util.Collections; import java.util.List; import org.junit.Test; -import org.opendaylight.controller.config.yangjmxgenerator.RuntimeBeanEntry.Rpc; -import org.opendaylight.controller.config.yangjmxgenerator.attribute.AttributeIfc; import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; +import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition; public class RuntimeRegistratorTest { // TODO add more tests @@ -29,9 +29,8 @@ public class RuntimeRegistratorTest { final DataNodeContainer nodeContainer = mock(DataNodeContainer.class); doReturn("DataSchemaNode").when(nodeContainer).toString(); return new RuntimeBeanEntry("pa.cka.ge", nodeContainer, - "module-name", "ModuleName", true, Optional. absent(), - Collections. emptyList(), children, - Collections. emptySet()); + "module-name", "ModuleName", true, Optional.absent(), + Collections.emptyList(), children, Collections.emptySet()); } protected RuntimeBeanEntry prepareChildRB(final List children, @@ -40,25 +39,24 @@ public class RuntimeRegistratorTest { doReturn("DataSchemaNode").when(nodeContainer).toString(); return new RuntimeBeanEntry("pa.cka.ge", nodeContainer, prefix + "child-name", capitalize(prefix) + "ChildName", false, - Optional. absent(), - Collections. emptyList(), children, - Collections. emptySet()); + Optional.absent(), Collections.emptyList(), children, Collections.emptySet()); } @Test public void testHierarchy() { final LeafSchemaNode leaf = mock(LeafSchemaNode.class); - doReturn(new QName(URI.create("urn:x"), "leaf-local-name")).when(leaf) - .getQName(); + doReturn(QName.create(URI.create("urn:x"), "leaf-local-name")).when(leaf).getQName(); doReturn(Collections.emptyList()).when(leaf).getUnknownSchemaNodes(); - doReturn(null).when(leaf).getDefault(); - doReturn(null).when(leaf).getDescription(); + doReturn(java.util.Optional.empty()).when(leaf).getDescription(); + + final StringTypeDefinition leafType = mock(StringTypeDefinition.class); + doReturn(java.util.Optional.empty()).when(leafType).getDefaultValue(); + doReturn(leafType).when(leaf).getType(); final TypeProviderWrapper typeProviderWrapper = mock(TypeProviderWrapper.class); final Type mockedType = mock(Type.class); doReturn(mockedType).when(typeProviderWrapper).getType(leaf); doReturn("java.lang.String").when(mockedType).getFullyQualifiedName(); - } } diff --git a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/SchemaContextTest.java b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/SchemaContextTest.java index b189db4c08..4ed0bc8027 100644 --- a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/SchemaContextTest.java +++ b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/SchemaContextTest.java @@ -29,7 +29,7 @@ import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; public class SchemaContextTest extends AbstractYangTest { - IdentitySchemaNode findIdentityByQName(Module module, QName qName) { + IdentitySchemaNode findIdentityByQName(final Module module, final QName qName) { Map mapIdentitiesByQNames = mapIdentitiesByQNames(module); IdentitySchemaNode found = mapIdentitiesByQNames.get(qName); assertNotNull(found); @@ -60,7 +60,7 @@ public class SchemaContextTest extends AbstractYangTest { // all except scheduled-threadpool should have base set to // serviceType if (localName.equals("scheduled-threadpool") == false) { - assertEquals(serviceType, id.getBaseIdentity()); + assertEquals(serviceType, id.getBaseIdentities().iterator().next()); } } assertNotNull(eventBusSchemaNode); @@ -75,9 +75,8 @@ public class SchemaContextTest extends AbstractYangTest { usn.getNodeType()); } - private void assertAllIdentitiesAreExpected( - Module module, - Map> expectedIdentitiesToBases) { + private static void assertAllIdentitiesAreExpected(final Module module, + final Map> expectedIdentitiesToBases) { Map> copyOfExpectedNames = new HashMap<>( expectedIdentitiesToBases); for (IdentitySchemaNode id : module.getIdentities()) { @@ -88,8 +87,7 @@ public class SchemaContextTest extends AbstractYangTest { .remove(localName); if (maybeExpectedBaseQName.isPresent()) { assertEquals("Unexpected base identity of " + localName, - maybeExpectedBaseQName.get(), id.getBaseIdentity() - .getQName()); + maybeExpectedBaseQName.get(), id.getBaseIdentities().iterator().next().getQName()); } } assertEquals("Expected identities not found " + copyOfExpectedNames, @@ -98,21 +96,14 @@ public class SchemaContextTest extends AbstractYangTest { @Test public void testReadingIdentities_threadsJavaModule() { - Map> expectedIdentitiesToBases = new HashMap>(){ - private static final long serialVersionUID = 1L; + Map> expected = new HashMap<>(); + expected.put(ModuleMXBeanEntryTest.EVENTBUS_MXB_NAME, Optional.of(MODULE_TYPE_Q_NAME)); + expected.put(ModuleMXBeanEntryTest.ASYNC_EVENTBUS_MXB_NAME, Optional.of(MODULE_TYPE_Q_NAME)); + expected.put(ModuleMXBeanEntryTest.THREADFACTORY_NAMING_MXB_NAME, Optional.of(MODULE_TYPE_Q_NAME)); + expected.put(ModuleMXBeanEntryTest.THREADPOOL_DYNAMIC_MXB_NAME, Optional.of(MODULE_TYPE_Q_NAME)); + expected.put("thread-rpc-context", Optional.absent()); + expected.put(ModuleMXBeanEntryTest.THREADPOOL_REGISTRY_IMPL_NAME, Optional.of(MODULE_TYPE_Q_NAME)); - { - put(ModuleMXBeanEntryTest.EVENTBUS_MXB_NAME, Optional.of(MODULE_TYPE_Q_NAME)); - put(ModuleMXBeanEntryTest.ASYNC_EVENTBUS_MXB_NAME, Optional.of(MODULE_TYPE_Q_NAME)); - put(ModuleMXBeanEntryTest.THREADFACTORY_NAMING_MXB_NAME, Optional.of(MODULE_TYPE_Q_NAME)); - put(ModuleMXBeanEntryTest.THREADPOOL_DYNAMIC_MXB_NAME, Optional.of(MODULE_TYPE_Q_NAME)); - put("thread-rpc-context", Optional.absent()); - put(ModuleMXBeanEntryTest.THREADPOOL_REGISTRY_IMPL_NAME, Optional.of(MODULE_TYPE_Q_NAME)); - } - }; - - assertAllIdentitiesAreExpected(threadsJavaModule, - expectedIdentitiesToBases); + assertAllIdentitiesAreExpected(threadsJavaModule, expected); } - } diff --git a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ServiceInterfaceEntryTest.java b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ServiceInterfaceEntryTest.java index f021c2c81d..ae81ce5d3a 100644 --- a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ServiceInterfaceEntryTest.java +++ b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/ServiceInterfaceEntryTest.java @@ -14,10 +14,7 @@ import static org.junit.Assert.assertThat; import com.google.common.collect.Sets; import java.net.URI; import java.net.URISyntaxException; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.Arrays; -import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -27,6 +24,7 @@ import java.util.Set; import org.hamcrest.CoreMatchers; import org.junit.Test; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; public class ServiceInterfaceEntryTest extends AbstractYangTest { @@ -37,20 +35,13 @@ public class ServiceInterfaceEntryTest extends AbstractYangTest { + ".java, ThreadFactoryServiceInterface.java, ThreadPoolServiceInterface.java]"); private static final URI THREADS_NAMESPACE; - private static final Date THREADS_REVISION_DATE; + private static final Revision THREADS_REVISION_DATE = Revision.of("2013-04-09"); static { try { - THREADS_NAMESPACE = new URI(ConfigConstants.CONFIG_NAMESPACE - + ":threads"); + THREADS_NAMESPACE = new URI(ConfigConstants.CONFIG_NAMESPACE + ":threads"); } catch (URISyntaxException e) { - throw new Error(e); - } - SimpleDateFormat revisionFormat = new SimpleDateFormat("yyyy-MM-dd"); - try { - THREADS_REVISION_DATE = revisionFormat.parse("2013-04-09"); - } catch (ParseException e) { - throw new Error(e); + throw new ExceptionInInitializerError(e); } } diff --git a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/unknownextension/UnknownExtensionTest.java b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/unknownextension/UnknownExtensionTest.java index 85a0ef0107..5daaf0f72e 100644 --- a/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/unknownextension/UnknownExtensionTest.java +++ b/opendaylight/config/yang-jmx-generator/src/test/java/org/opendaylight/controller/config/yangjmxgenerator/unknownextension/UnknownExtensionTest.java @@ -10,8 +10,7 @@ package org.opendaylight.controller.config.yangjmxgenerator.unknownextension; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import com.google.common.collect.Lists; -import java.io.InputStream; +import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.opendaylight.controller.config.yangjmxgenerator.ConfigConstants; @@ -23,25 +22,20 @@ public class UnknownExtensionTest extends ServiceInterfaceEntryTest { @Test public void testStopOnUnknownLanguageExtension() throws Exception { - List yangISs = Lists.newArrayList(getClass() - .getResourceAsStream("test-ifcWithUnknownExtension.yang")); - yangISs.addAll(getConfigApiYangInputStreams()); + List yangs = new ArrayList<>(); + yangs.addAll(getConfigApiYangs()); + yangs.add("test-ifcWithUnknownExtension.yang"); + + context = YangParserTestUtils.parseYangResources(UnknownExtensionTest.class, yangs); + namesToModules = YangModelSearchUtils.mapModulesByNames(context.getModules()); + configModule = namesToModules.get(ConfigConstants.CONFIG_MODULE); + threadsModule = namesToModules.get(ConfigConstants.CONFIG_THREADS_MODULE); try { - context = YangParserTestUtils.parseYangStreams(yangISs); - namesToModules = YangModelSearchUtils.mapModulesByNames(context.getModules()); - configModule = namesToModules.get(ConfigConstants.CONFIG_MODULE); - threadsModule = namesToModules.get(ConfigConstants.CONFIG_THREADS_MODULE); - try { - super.testCreateFromIdentities(); - fail(); - } catch (IllegalStateException e) { - assertTrue(e.getMessage(), - e.getMessage().startsWith("Unexpected unknown schema node.")); - } - } finally { - for (InputStream is : yangISs) { - is.close(); - } + super.testCreateFromIdentities(); + fail(); + } catch (IllegalStateException e) { + assertTrue(e.getMessage(), + e.getMessage().startsWith("Unexpected unknown schema node.")); } } diff --git a/opendaylight/md-sal/cds-access-api/src/test/java/org/opendaylight/controller/cluster/access/commands/ConnectClientSuccessTest.java b/opendaylight/md-sal/cds-access-api/src/test/java/org/opendaylight/controller/cluster/access/commands/ConnectClientSuccessTest.java index daaae4f9b4..c7622bbcfb 100644 --- a/opendaylight/md-sal/cds-access-api/src/test/java/org/opendaylight/controller/cluster/access/commands/ConnectClientSuccessTest.java +++ b/opendaylight/md-sal/cds-access-api/src/test/java/org/opendaylight/controller/cluster/access/commands/ConnectClientSuccessTest.java @@ -23,12 +23,13 @@ import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.cluster.access.ABIVersion; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory; public class ConnectClientSuccessTest extends AbstractRequestSuccessTest { - private static final DataTree TREE = InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL); + private static final DataTree TREE = new InMemoryDataTreeFactory().create( + DataTreeConfiguration.DEFAULT_OPERATIONAL); private static final ActorSystem SYSTEM = ActorSystem.create("test"); private static final ActorRef ACTOR_REF = TestProbe.apply(SYSTEM).ref(); private static final ActorSelection ACTOR_SELECTION = ActorSelection.apply(ACTOR_REF, "foo"); diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingStructuralType.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingStructuralType.java index 7cd17dc4d8..64d98ed01a 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingStructuralType.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingStructuralType.java @@ -7,7 +7,7 @@ */ package org.opendaylight.controller.md.sal.binding.impl; -import com.google.common.base.Optional; +import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; @@ -83,8 +83,11 @@ enum BindingStructuralType { UNKNOWN; static BindingStructuralType from(final DataTreeCandidateNode domChildNode) { - final Optional> dataBased = domChildNode.getDataAfter().or(domChildNode.getDataBefore()); - if(dataBased.isPresent()) { + Optional> dataBased = domChildNode.getDataAfter(); + if (!dataBased.isPresent()) { + dataBased = domChildNode.getDataBefore(); + } + if (dataBased.isPresent()) { return from(dataBased.get()); } return from(domChildNode.getIdentifier()); diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java index e4e205307c..2d4d9b83e5 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java @@ -15,10 +15,8 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableBiMap; import java.lang.reflect.Method; -import java.net.URI; import java.util.AbstractMap.SimpleEntry; import java.util.Collection; -import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.Map; @@ -309,11 +307,9 @@ public class BindingToNormalizedNodeCodec private Module getModuleBlocking(final Class modeledClass) { final QNameModule moduleName = BindingReflections.getQNameModule(modeledClass); - final URI namespace = moduleName.getNamespace(); - final Date revision = moduleName.getRevision(); - Module module = runtimeContext().getSchemaContext().findModuleByNamespaceAndRevision(namespace, revision); - if ((module == null) && this.futureSchema.waitForSchema(namespace, revision)) { - module = runtimeContext().getSchemaContext().findModuleByNamespaceAndRevision(namespace, revision); + Module module = runtimeContext().getSchemaContext().findModule(moduleName).orElse(null); + if (module == null && this.futureSchema.waitForSchema(moduleName)) { + module = runtimeContext().getSchemaContext().findModule(moduleName).orElse(null); } Preconditions.checkState(module != null, "Schema for %s is not available.", modeledClass); return module; @@ -332,7 +328,7 @@ public class BindingToNormalizedNodeCodec private Method findRpcMethod(final Class key, final RpcDefinition rpcDef) throws NoSuchMethodException { final String methodName = BindingMapping.getMethodName(rpcDef.getQName()); - if ((rpcDef.getInput() != null) && isExplicitStatement(rpcDef.getInput())) { + if (rpcDef.getInput() != null && isExplicitStatement(rpcDef.getInput())) { final Class inputClz = runtimeContext().getClassForSchema(rpcDef.getInput()); return key.getMethod(methodName, inputClz); } @@ -340,8 +336,8 @@ public class BindingToNormalizedNodeCodec } private static boolean isExplicitStatement(final ContainerSchemaNode node) { - return (node instanceof EffectiveStatement) - && (((EffectiveStatement) node).getDeclared().getStatementSource() == StatementSource.DECLARATION); + return node instanceof EffectiveStatement + && ((EffectiveStatement) node).getDeclared().getStatementSource() == StatementSource.DECLARATION; } private BindingRuntimeContext runtimeContext() { diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/FutureSchema.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/FutureSchema.java index e2fa7d1daf..0c316e809d 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/FutureSchema.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/FutureSchema.java @@ -11,10 +11,8 @@ package org.opendaylight.controller.md.sal.binding.impl; import com.google.common.base.Predicate; import com.google.common.base.Throwables; import com.google.common.util.concurrent.SettableFuture; -import java.net.URI; import java.util.Collection; import java.util.Collections; -import java.util.Date; import java.util.LinkedHashSet; import java.util.Set; import java.util.concurrent.ExecutionException; @@ -23,6 +21,7 @@ import java.util.concurrent.TimeoutException; import javax.annotation.concurrent.GuardedBy; import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext; import org.opendaylight.yangtools.yang.binding.Augmentation; +import org.opendaylight.yangtools.yang.common.QNameModule; class FutureSchema implements AutoCloseable { @@ -88,11 +87,11 @@ class FutureSchema implements AutoCloseable { return schema != null; } - boolean waitForSchema(final URI namespace, final Date revision) { + boolean waitForSchema(final QNameModule module) { return addPostponedOpAndWait(new FutureSchemaPredicate() { @Override public boolean apply(final BindingRuntimeContext input) { - return input.getSchemaContext().findModuleByNamespaceAndRevision(namespace, revision) != null; + return input.getSchemaContext().findModule(module).isPresent(); } }); } diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/LazyDataObjectModification.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/LazyDataObjectModification.java index 4643323af6..74aa834818 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/LazyDataObjectModification.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/LazyDataObjectModification.java @@ -7,12 +7,12 @@ */ package org.opendaylight.controller.md.sal.binding.impl; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; +import java.util.Optional; import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeNode; import org.opendaylight.yangtools.yang.binding.Augmentation; diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/LazySerializedContainerNode.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/LazySerializedContainerNode.java index a0e45302e0..8185446fcd 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/LazySerializedContainerNode.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/LazySerializedContainerNode.java @@ -8,9 +8,9 @@ package org.opendaylight.controller.md.sal.binding.impl; -import com.google.common.base.Optional; import java.util.Collection; import java.util.Map; +import java.util.Optional; import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.common.QName; diff --git a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/impl/BindingNormalizedCodecTest.java b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/impl/BindingNormalizedCodecTest.java index 2f38ec7285..b05e88bc85 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/impl/BindingNormalizedCodecTest.java +++ b/opendaylight/md-sal/sal-binding-broker/src/test/java/org/opendaylight/controller/md/sal/binding/impl/BindingNormalizedCodecTest.java @@ -11,18 +11,21 @@ package org.opendaylight.controller.md.sal.binding.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; + import com.google.common.collect.ImmutableBiMap; -import com.google.common.collect.Multimaps; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.SetMultimap; import com.google.common.util.concurrent.Uninterruptibles; import java.lang.reflect.Method; import java.net.URI; -import java.util.Collections; import java.util.Map; import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; +import javassist.ClassPool; import org.junit.Test; import org.opendaylight.controller.md.sal.binding.test.AbstractSchemaAwareTest; import org.opendaylight.mdsal.binding.dom.codec.gen.impl.DataObjectSerializerGenerator; @@ -38,15 +41,14 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controll import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.two.level.list.TopLevelListKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.util.AbstractSchemaContext; -import javassist.ClassPool; public class BindingNormalizedCodecTest extends AbstractSchemaAwareTest { @@ -164,22 +166,22 @@ public class BindingNormalizedCodecTest extends AbstractSchemaAwareTest { static class EmptySchemaContext extends AbstractSchemaContext { @Override public Set getModules() { - return Collections.emptySet(); + return ImmutableSet.of(); } @Override - protected Map getIdentifiersToSources() { - return Collections.emptyMap(); + protected Map getModuleMap() { + return ImmutableMap.of(); } @Override protected SetMultimap getNamespaceToModules() { - return Multimaps.forMap(Collections.emptyMap()); + return ImmutableSetMultimap.of(); } @Override protected SetMultimap getNameToModules() { - return Multimaps.forMap(Collections.emptyMap()); + return ImmutableSetMultimap.of(); } } } diff --git a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/WriteParentListenAugmentTest.java b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/WriteParentListenAugmentTest.java index a74b6ea246..aba648cdac 100644 --- a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/WriteParentListenAugmentTest.java +++ b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/WriteParentListenAugmentTest.java @@ -36,14 +36,14 @@ public class WriteParentListenAugmentTest extends AbstractDataServiceTest { private static final String TLL_NAME = "foo"; private static final TopLevelListKey TLL_KEY = new TopLevelListKey(TLL_NAME); - private static final InstanceIdentifier TLL_INSTANCE_ID_BA = InstanceIdentifier.builder(Top.class) // - .child(TopLevelList.class, TLL_KEY).toInstance(); + private static final InstanceIdentifier TLL_INSTANCE_ID_BA = InstanceIdentifier.builder(Top.class) + .child(TopLevelList.class, TLL_KEY).build(); private static final InstanceIdentifier AUGMENT_WILDCARDED_PATH = InstanceIdentifier - .builder(Top.class).child(TopLevelList.class).augmentation(TreeComplexUsesAugment.class).toInstance(); + .builder(Top.class).child(TopLevelList.class).augmentation(TreeComplexUsesAugment.class).build(); private static final InstanceIdentifier AUGMENT_TLL_PATH = InstanceIdentifier - .builder(Top.class).child(TopLevelList.class, TLL_KEY).augmentation(TreeComplexUsesAugment.class).toInstance(); + .builder(Top.class).child(TopLevelList.class, TLL_KEY).augmentation(TreeComplexUsesAugment.class).build(); @Test public void writeNodeListenAugment() throws Exception { @@ -56,8 +56,8 @@ public class WriteParentListenAugmentTest extends AbstractDataServiceTest { final WriteTransaction transaction = dataBroker.newWriteOnlyTransaction(); - TopLevelList tll = new TopLevelListBuilder() // - .setKey(TLL_KEY) // + TopLevelList tll = new TopLevelListBuilder() + .setKey(TLL_KEY) .addAugmentation(TreeComplexUsesAugment.class, treeComplexUsesAugment("one")).build(); transaction.put(LogicalDatastoreType.OPERATIONAL, TLL_INSTANCE_ID_BA, tll, true); transaction.submit().get(5, TimeUnit.SECONDS); @@ -72,13 +72,13 @@ public class WriteParentListenAugmentTest extends AbstractDataServiceTest { transaction2.submit().get(5, TimeUnit.SECONDS); TreeComplexUsesAugment readedAug = dataBroker.newReadOnlyTransaction().read( - LogicalDatastoreType.OPERATIONAL, AUGMENT_TLL_PATH).checkedGet(5, TimeUnit.SECONDS).get(); + LogicalDatastoreType.OPERATIONAL, AUGMENT_TLL_PATH).get(5, TimeUnit.SECONDS).get(); assertEquals("two", readedAug.getContainerWithUses().getLeafFromGrouping()); } - private TreeComplexUsesAugment treeComplexUsesAugment(final String value) { - return new TreeComplexUsesAugmentBuilder() // - .setContainerWithUses(new ContainerWithUsesBuilder().setLeafFromGrouping(value).build()) // + private static TreeComplexUsesAugment treeComplexUsesAugment(final String value) { + return new TreeComplexUsesAugmentBuilder() + .setContainerWithUses(new ContainerWithUsesBuilder().setLeafFromGrouping(value).build()) .build(); } } diff --git a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/WriteParentReadChildTest.java b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/WriteParentReadChildTest.java index dca56abcf4..153d9d2720 100644 --- a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/WriteParentReadChildTest.java +++ b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/bugfix/WriteParentReadChildTest.java @@ -44,7 +44,7 @@ public class WriteParentReadChildTest extends AbstractDataServiceTest { private static final List1Key LIST1_KEY = new List1Key(LIST1_NAME); private static final InstanceIdentifier TLL_INSTANCE_ID_BA = InstanceIdentifier.builder(Top.class) // - .child(TopLevelList.class, TLL_KEY).toInstance(); + .child(TopLevelList.class, TLL_KEY).build(); private static final InstanceIdentifier LIST1_INSTANCE_ID_BA = // TLL_INSTANCE_ID_BA.builder() // @@ -75,11 +75,11 @@ public class WriteParentReadChildTest extends AbstractDataServiceTest { transaction.submit().get(5, TimeUnit.SECONDS); Optional readList1 = dataBroker.newReadOnlyTransaction().read(LogicalDatastoreType.OPERATIONAL, - LIST1_INSTANCE_ID_BA).checkedGet(1000, TimeUnit.MILLISECONDS); + LIST1_INSTANCE_ID_BA).get(1000, TimeUnit.MILLISECONDS); assertTrue(readList1.isPresent()); Optional readList11 = dataBroker.newReadOnlyTransaction().read( - LogicalDatastoreType.OPERATIONAL, LIST11_INSTANCE_ID_BA).checkedGet(5, TimeUnit.SECONDS); + LogicalDatastoreType.OPERATIONAL, LIST11_INSTANCE_ID_BA).get(5, TimeUnit.SECONDS); assertNotNull("Readed flow should not be null.",readList11); assertTrue(readList11.isPresent()); assertEquals(list11, readList11.get()); diff --git a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/connect/dom/DOMRpcServiceTestBugfix560.java b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/connect/dom/DOMRpcServiceTestBugfix560.java index c7399e89f0..4b10353caa 100644 --- a/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/connect/dom/DOMRpcServiceTestBugfix560.java +++ b/opendaylight/md-sal/sal-binding-dom-it/src/test/java/org/opendaylight/controller/sal/binding/test/connect/dom/DOMRpcServiceTestBugfix560.java @@ -12,12 +12,12 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import com.google.common.base.Optional; +import com.google.common.io.ByteSource; import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.MoreExecutors; +import java.io.IOException; import java.io.InputStream; -import java.util.Collections; -import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import org.junit.After; @@ -41,12 +41,17 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controll import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.two.level.list.TopLevelListKey; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.YangModuleInfo; import org.opendaylight.yangtools.yang.binding.util.BindingReflections; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.StatementParserMode; +import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; /** @@ -89,13 +94,18 @@ public class DOMRpcServiceTestBugfix560 { bindingMountPointService = testContext.getBindingMountPointService(); assertNotNull(domMountPointService); - final InputStream moduleStream = BindingReflections.getModuleInfo( - OpendaylightTestRpcServiceService.class) - .getModuleSourceStream(); + final YangModuleInfo moduleInfo = BindingReflections.getModuleInfo(OpendaylightTestRpcServiceService.class); + assertNotNull(moduleInfo); - assertNotNull(moduleStream); - final List rpcModels = Collections.singletonList(moduleStream); - schemaContext = YangParserTestUtils.parseYangStreams(rpcModels); + schemaContext = YangParserTestUtils.parseYangSources(StatementParserMode.DEFAULT_MODE, null, + YangTextSchemaSource.delegateForByteSource(RevisionSourceIdentifier.create(moduleInfo.getName(), + Revision.ofNullable(moduleInfo.getRevision())), new ByteSource() { + + @Override + public InputStream openStream() throws IOException { + return moduleInfo.getModuleSourceStream(); + } + })); } private static org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier createBITllIdentifier( diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeOutputStreamWriter.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeOutputStreamWriter.java index 94d1baddc5..b81de75bb5 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeOutputStreamWriter.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeOutputStreamWriter.java @@ -13,6 +13,7 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Revision; /** * NormalizedNodeOutputStreamWriter will be used by distributed datastore to send normalized node in @@ -44,7 +45,7 @@ final class NormalizedNodeOutputStreamWriter extends AbstractNormalizedNodeDataO protected void writeQName(final QName qname) throws IOException { writeString(qname.getLocalName()); writeString(qname.getNamespace().toString()); - writeString(qname.getFormattedRevision()); + writeString(qname.getRevision().map(Revision::toString).orElse(null)); } @Override diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/util/AbstractDataTreeModificationCursor.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/util/AbstractDataTreeModificationCursor.java index f83f6afe8e..8c81d60819 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/util/AbstractDataTreeModificationCursor.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/util/AbstractDataTreeModificationCursor.java @@ -8,9 +8,9 @@ package org.opendaylight.controller.cluster.datastore.util; import com.google.common.annotations.Beta; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.base.Verify; +import java.util.Optional; import javax.annotation.Nonnull; import javax.annotation.concurrent.NotThreadSafe; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSchemaSourceSerializationProxy.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSchemaSourceSerializationProxy.java index 39302e4f56..202de58a27 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSchemaSourceSerializationProxy.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSchemaSourceSerializationProxy.java @@ -9,10 +9,10 @@ package org.opendaylight.controller.cluster.schema.provider.impl; import com.google.common.annotations.Beta; -import com.google.common.base.Optional; import com.google.common.io.ByteSource; import java.io.IOException; import java.io.Serializable; +import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; @@ -24,17 +24,17 @@ public class YangTextSchemaSourceSerializationProxy implements Serializable { private static final long serialVersionUID = -6361268518176019477L; private final byte[] schemaSource; - private final String revision; + private final Revision revision; private final String name; public YangTextSchemaSourceSerializationProxy(final YangTextSchemaSource source) throws IOException { - this.revision = source.getIdentifier().getRevision(); + this.revision = source.getIdentifier().getRevision().orElse(null); this.name = source.getIdentifier().getName(); this.schemaSource = source.read(); } public YangTextSchemaSource getRepresentation() { return YangTextSchemaSource.delegateForByteSource( - RevisionSourceIdentifier.create(name, Optional.fromNullable(revision)), ByteSource.wrap(schemaSource)); + RevisionSourceIdentifier.create(name, revision), ByteSource.wrap(schemaSource)); } } diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeStreamReaderWriterTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeStreamReaderWriterTest.java index 81d97678b0..e2e5aa4bef 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeStreamReaderWriterTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeStreamReaderWriterTest.java @@ -10,12 +10,12 @@ package org.opendaylight.controller.cluster.datastore.node.utils.stream; import static org.junit.Assert.assertEquals; -import com.google.common.base.Optional; import com.google.common.io.ByteStreams; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; +import java.util.Optional; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; @@ -79,7 +79,7 @@ public class NormalizedNodeStreamReaderWriterTest { } private static NormalizedNode createTestContainer() { - byte[] bytes1 = {1,2,3}; + byte[] bytes1 = {1, 2, 3}; LeafSetEntryNode entry1 = ImmutableLeafSetEntryNodeBuilder.create().withNodeIdentifier( new NodeWithValue<>(TestModel.BINARY_LEAF_LIST_QNAME, bytes1)).withValue(bytes1).build(); @@ -87,14 +87,11 @@ public class NormalizedNodeStreamReaderWriterTest { LeafSetEntryNode entry2 = ImmutableLeafSetEntryNodeBuilder.create().withNodeIdentifier( new NodeWithValue<>(TestModel.BINARY_LEAF_LIST_QNAME, bytes2)).withValue(bytes2).build(); - LeafSetEntryNode entry3 = ImmutableLeafSetEntryNodeBuilder.create().withNodeIdentifier( - new NodeWithValue<>(TestModel.BINARY_LEAF_LIST_QNAME, null)).withValue(null).build(); - return TestModel.createBaseTestContainerBuilder() .withChild(ImmutableLeafSetNodeBuilder.create().withNodeIdentifier( new NodeIdentifier(TestModel.BINARY_LEAF_LIST_QNAME)) - .withChild(entry1).withChild(entry2).withChild(entry3).build()) - .withChild(ImmutableNodes.leafNode(TestModel.SOME_BINARY_DATA_QNAME, new byte[]{1,2,3,4})) + .withChild(entry1).withChild(entry2).build()) + .withChild(ImmutableNodes.leafNode(TestModel.SOME_BINARY_DATA_QNAME, new byte[]{1, 2, 3, 4})) .withChild(Builders.orderedMapBuilder() .withNodeIdentifier(new NodeIdentifier(TestModel.ORDERED_LIST_QNAME)) .withChild(ImmutableNodes.mapEntry(TestModel.ORDERED_LIST_ENTRY_QNAME, diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java index a961f6a5af..47150420b4 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java @@ -52,15 +52,15 @@ public class NormalizedNodePrunerTest { MockitoAnnotations.initMocks(this); } - private static NormalizedNodePruner prunerFullSchema(YangInstanceIdentifier path) { + private static NormalizedNodePruner prunerFullSchema(final YangInstanceIdentifier path) { return new NormalizedNodePruner(path, FULL_SCHEMA); } - private static NormalizedNodePruner prunerNoAugSchema(YangInstanceIdentifier path) { + private static NormalizedNodePruner prunerNoAugSchema(final YangInstanceIdentifier path) { return new NormalizedNodePruner(path, NO_AUG_SCHEMA); } - private static NormalizedNodePruner prunerNoTestSchema(YangInstanceIdentifier path) { + private static NormalizedNodePruner prunerNoTestSchema(final YangInstanceIdentifier path) { return new NormalizedNodePruner(path, NO_TEST_SCHEMA); } @@ -140,7 +140,7 @@ public class NormalizedNodePrunerTest { } - private static int countNodes(NormalizedNode normalizedNode, final String namespaceFilter) { + private static int countNodes(final NormalizedNode normalizedNode, final String namespaceFilter) { if (normalizedNode == null) { return 0; } @@ -381,7 +381,7 @@ public class NormalizedNodePrunerTest { } private static NormalizedNode createTestContainer() { - byte[] bytes1 = {1,2,3}; + byte[] bytes1 = {1, 2, 3}; LeafSetEntryNode entry1 = ImmutableLeafSetEntryNodeBuilder.create().withNodeIdentifier( new NodeWithValue<>(TestModel.BINARY_LEAF_LIST_QNAME, bytes1)).withValue(bytes1).build(); @@ -389,14 +389,10 @@ public class NormalizedNodePrunerTest { LeafSetEntryNode entry2 = ImmutableLeafSetEntryNodeBuilder.create().withNodeIdentifier( new NodeWithValue<>(TestModel.BINARY_LEAF_LIST_QNAME, bytes2)).withValue(bytes2).build(); - LeafSetEntryNode entry3 = ImmutableLeafSetEntryNodeBuilder.create().withNodeIdentifier( - new NodeWithValue<>(TestModel.BINARY_LEAF_LIST_QNAME, null)).withValue(null).build(); - - return TestModel.createBaseTestContainerBuilder() .withChild(ImmutableLeafSetNodeBuilder.create().withNodeIdentifier( new NodeIdentifier(TestModel.BINARY_LEAF_LIST_QNAME)) - .withChild(entry1).withChild(entry2).withChild(entry3).build()) + .withChild(entry1).withChild(entry2).build()) .withChild(ImmutableNodes.leafNode(TestModel.SOME_BINARY_DATA_QNAME, new byte[]{1, 2, 3, 4})) .build(); } diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/util/TestModel.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/util/TestModel.java index 22d4d20dc7..72b8a3bb7f 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/util/TestModel.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/util/TestModel.java @@ -17,10 +17,8 @@ import com.google.common.collect.ImmutableSet; import java.io.InputStream; import java.math.BigDecimal; import java.math.BigInteger; -import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; import org.opendaylight.yangtools.yang.common.QName; @@ -49,7 +47,6 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLe import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; public final class TestModel { @@ -176,36 +173,17 @@ public final class TestModel { } public static SchemaContext createTestContext() { - List inputStreams = new ArrayList<>(); - inputStreams.add(getDatastoreTestInputStream()); - inputStreams.add(getDatastoreAugInputStream()); - inputStreams.add(getDatastoreTestNotificationInputStream()); - - return resolveSchemaContext(inputStreams); + return YangParserTestUtils.parseYangResources(TestModel.class, DATASTORE_TEST_YANG, DATASTORE_AUG_YANG, + DATASTORE_TEST_NOTIFICATION_YANG); } public static SchemaContext createTestContextWithoutTestSchema() { - List inputStreams = new ArrayList<>(); - inputStreams.add(getDatastoreTestNotificationInputStream()); - - return resolveSchemaContext(inputStreams); + return YangParserTestUtils.parseYangResource(DATASTORE_TEST_NOTIFICATION_YANG); } - public static SchemaContext createTestContextWithoutAugmentationSchema() { - List inputStreams = new ArrayList<>(); - inputStreams.add(getDatastoreTestInputStream()); - inputStreams.add(getDatastoreTestNotificationInputStream()); - - return resolveSchemaContext(inputStreams); - } - - private static SchemaContext resolveSchemaContext(final List streams) { - try { - return YangParserTestUtils.parseYangStreams(streams); - } catch (ReactorException e) { - throw new RuntimeException("Unable to build schema context from " + streams, e); - } + return YangParserTestUtils.parseYangResources(TestModel.class, DATASTORE_TEST_YANG, + DATASTORE_TEST_NOTIFICATION_YANG); } /** diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteSchemaProviderTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteSchemaProviderTest.java index 5ce2d9ba10..0b41cdfa4e 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteSchemaProviderTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteSchemaProviderTest.java @@ -14,7 +14,6 @@ import static org.junit.Assert.assertTrue; import akka.dispatch.ExecutionContexts; import akka.dispatch.Futures; -import com.google.common.base.Optional; import com.google.common.io.ByteSource; import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.MoreExecutors; @@ -23,6 +22,7 @@ import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.opendaylight.controller.cluster.schema.provider.RemoteYangTextSourceProvider; +import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; @@ -30,7 +30,7 @@ import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; public class RemoteSchemaProviderTest { - private static final SourceIdentifier ID = RevisionSourceIdentifier.create("Test", Optional.of("2015-10-30")); + private static final SourceIdentifier ID = RevisionSourceIdentifier.create("Test", Revision.of("2015-10-30")); private RemoteSchemaProvider remoteSchemaProvider; private RemoteYangTextSourceProvider mockedRemoteSchemaRepository; diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteYangTextSourceProviderImplTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteYangTextSourceProviderImplTest.java index 678bad7415..90fc4772d8 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteYangTextSourceProviderImplTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/RemoteYangTextSourceProviderImplTest.java @@ -12,7 +12,6 @@ import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import com.google.common.base.Optional; import com.google.common.io.ByteSource; import com.google.common.util.concurrent.Futures; import java.util.Collections; @@ -20,6 +19,7 @@ import java.util.Set; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; +import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException; @@ -31,7 +31,7 @@ import scala.concurrent.duration.Duration; public class RemoteYangTextSourceProviderImplTest { - private static final SourceIdentifier ID = RevisionSourceIdentifier.create("Test", Optional.of("2015-10-30")); + private static final SourceIdentifier ID = RevisionSourceIdentifier.create("Test", Revision.of("2015-10-30")); private RemoteYangTextSourceProviderImpl remoteRepository; private SchemaRepository mockedLocalRepository; diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSourceSerializationProxyTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSourceSerializationProxyTest.java index 95e141ae95..b2a86e1c0c 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSourceSerializationProxyTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/schema/provider/impl/YangTextSourceSerializationProxyTest.java @@ -11,7 +11,6 @@ package org.opendaylight.controller.cluster.schema.provider.impl; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; -import com.google.common.base.Optional; import com.google.common.io.ByteSource; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -21,6 +20,7 @@ import java.io.ObjectOutputStream; import java.nio.charset.StandardCharsets; import org.junit.Before; import org.junit.Test; +import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; @@ -32,7 +32,7 @@ public class YangTextSourceSerializationProxyTest { public void setUp() { String source = "Test source."; schemaSource = YangTextSchemaSource.delegateForByteSource( - RevisionSourceIdentifier.create("test", Optional.of("2015-10-30")), + RevisionSourceIdentifier.create("test", Revision.of("2015-10-30")), ByteSource.wrap(source.getBytes(StandardCharsets.UTF_8))); } diff --git a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java index ca344aa578..5aa3ec6431 100644 --- a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java +++ b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java @@ -30,9 +30,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder; import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode; -import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; import org.opendaylight.yangtools.yang.model.api.AugmentationTarget; -import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; +import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode; import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; @@ -326,7 +326,7 @@ public abstract class DataNormalizationOperation impleme private static final class AugmentationNormalization extends DataContainerNormalizationOperation { - public AugmentationNormalization(final AugmentationSchema augmentation, final DataNodeContainer schema) { + public AugmentationNormalization(final AugmentationSchemaNode augmentation, final DataNodeContainer schema) { super(augmentationIdentifierFrom(augmentation), augmentationProxy(augmentation,schema),null); } @@ -347,7 +347,7 @@ public abstract class DataNormalizationOperation impleme final DataSchemaNode result = potential.get(); // We try to look up if this node was added by augmentation - if ((schema instanceof DataSchemaNode) && result.isAugmenting()) { + if (schema instanceof DataSchemaNode && result.isAugmenting()) { return fromAugmentation(schema, (AugmentationTarget) schema, result); } return fromDataSchemaNode(result); @@ -454,7 +454,7 @@ public abstract class DataNormalizationOperation impleme final ImmutableMap.Builder> byQNameBuilder = ImmutableMap.builder(); final ImmutableMap.Builder> byArgBuilder = ImmutableMap.builder(); - for (final ChoiceCaseNode caze : schema.getCases()) { + for (final CaseSchemaNode caze : schema.getCases().values()) { for (final DataSchemaNode cazeChild : caze.getChildNodes()) { final DataNormalizationOperation childOp = fromDataSchemaNode(cazeChild); byArgBuilder.put(childOp.getIdentifier(), childOp); @@ -529,7 +529,7 @@ public abstract class DataNormalizationOperation impleme final DataSchemaNode result = potential.get(); // We try to look up if this node was added by augmentation - if ((schema instanceof DataSchemaNode) && result.isAugmenting()) { + if (schema instanceof DataSchemaNode && result.isAugmenting()) { return fromAugmentation(schema, (AugmentationTarget) schema, result); } return fromDataSchemaNode(result); @@ -538,7 +538,7 @@ public abstract class DataNormalizationOperation impleme private static ChoiceSchemaNode findChoice(final Iterable choices, final QName child) { ChoiceSchemaNode foundChoice = null; choiceLoop: for (final ChoiceSchemaNode choice : choices) { - for (final ChoiceCaseNode caze : choice.getCases()) { + for (final CaseSchemaNode caze : choice.getCases().values()) { if (findChildSchemaNode(caze, child).isPresent()) { foundChoice = choice; break choiceLoop; @@ -548,7 +548,7 @@ public abstract class DataNormalizationOperation impleme return foundChoice; } - public static AugmentationIdentifier augmentationIdentifierFrom(final AugmentationSchema augmentation) { + public static AugmentationIdentifier augmentationIdentifierFrom(final AugmentationSchemaNode augmentation) { final ImmutableSet.Builder potentialChildren = ImmutableSet.builder(); for (final DataSchemaNode child : augmentation.getChildNodes()) { potentialChildren.add(child.getQName()); @@ -556,7 +556,8 @@ public abstract class DataNormalizationOperation impleme return new AugmentationIdentifier(potentialChildren.build()); } - private static DataNodeContainer augmentationProxy(final AugmentationSchema augmentation, final DataNodeContainer schema) { + private static DataNodeContainer augmentationProxy(final AugmentationSchemaNode augmentation, + final DataNodeContainer schema) { final Set children = new HashSet<>(); for (final DataSchemaNode augNode : augmentation.getChildNodes()) { children.add(schema.getDataChildByName(augNode.getQName())); @@ -580,8 +581,8 @@ public abstract class DataNormalizationOperation impleme */ private static DataNormalizationOperation fromAugmentation(final DataNodeContainer parent, final AugmentationTarget parentAug, final DataSchemaNode child) { - AugmentationSchema augmentation = null; - for (final AugmentationSchema aug : parentAug.getAvailableAugmentations()) { + AugmentationSchemaNode augmentation = null; + for (final AugmentationSchemaNode aug : parentAug.getAvailableAugmentations()) { final DataSchemaNode potential = aug.getDataChildByName(child.getQName()); if (potential != null) { augmentation = aug; diff --git a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataSchemaContainerProxy.java b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataSchemaContainerProxy.java index 4c24c8a7f5..fc3db54ae0 100644 --- a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataSchemaContainerProxy.java +++ b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataSchemaContainerProxy.java @@ -10,8 +10,8 @@ package org.opendaylight.controller.md.sal.common.impl.util.compat; import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.Set; - import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -28,13 +28,13 @@ class DataSchemaContainerProxy implements DataNodeContainer { realChildSchemas = realChildSchema; mappedChildSchemas = new HashMap<>(); for(DataSchemaNode schema : realChildSchemas) { - mappedChildSchemas.put(schema.getQName(),schema); + mappedChildSchemas.put(schema.getQName(), schema); } } @Override - public DataSchemaNode getDataChildByName(final QName name) { - return mappedChildSchemas.get(name); + public Optional findDataChildByName(final QName name) { + return Optional.ofNullable(mappedChildSchemas.get(name)); } @Override @@ -56,5 +56,4 @@ class DataSchemaContainerProxy implements DataNodeContainer { public Set getUses() { return Collections.emptySet(); } - } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalProxyTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalProxyTransaction.java index b6e9bfabab..89402091fc 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalProxyTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/actors/dds/LocalProxyTransaction.java @@ -85,7 +85,7 @@ abstract class LocalProxyTransaction extends AbstractProxyTransaction { @Override final CheckedFuture>, ReadFailedException> doRead(final YangInstanceIdentifier path) { - return Futures.immediateCheckedFuture(readOnlyView().readNode(path)); + return Futures.immediateCheckedFuture(Optional.fromJavaUtil(readOnlyView().readNode(path))); } @Override @@ -109,7 +109,7 @@ abstract class LocalProxyTransaction extends AbstractProxyTransaction { // listeners, which we do not want to execute while we are reconnecting. if (request instanceof ReadTransactionRequest) { final YangInstanceIdentifier path = ((ReadTransactionRequest) request).getPath(); - final Optional> result = readOnlyView().readNode(path); + final Optional> result = Optional.fromJavaUtil(readOnlyView().readNode(path)); if (callback != null) { // XXX: FB does not see that callback is final, on stack and has be check for non-null. final Consumer> fbIsStupid = Preconditions.checkNotNull(callback); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendReadOnlyTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendReadOnlyTransaction.java index b245ceee2d..881518308c 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendReadOnlyTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendReadOnlyTransaction.java @@ -84,14 +84,16 @@ final class FrontendReadOnlyTransaction extends FrontendTransaction { private ExistsTransactionSuccess handleExistsTransaction(final ExistsTransactionRequest request) throws RequestException { - final Optional> data = openTransaction.getSnapshot().readNode(request.getPath()); + final Optional> data = Optional.fromJavaUtil(openTransaction.getSnapshot() + .readNode(request.getPath())); return recordSuccess(request.getSequence(), new ExistsTransactionSuccess(openTransaction.getIdentifier(), request.getSequence(), data.isPresent())); } private ReadTransactionSuccess handleReadTransaction(final ReadTransactionRequest request) throws RequestException { - final Optional> data = openTransaction.getSnapshot().readNode(request.getPath()); + final Optional> data = Optional.fromJavaUtil(openTransaction.getSnapshot().readNode( + request.getPath())); return recordSuccess(request.getSequence(), new ReadTransactionSuccess(openTransaction.getIdentifier(), request.getSequence(), data)); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendReadWriteTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendReadWriteTransaction.java index 2b444a6b57..5af7c7954e 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendReadWriteTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/FrontendReadWriteTransaction.java @@ -525,14 +525,16 @@ final class FrontendReadWriteTransaction extends FrontendTransaction { private ExistsTransactionSuccess handleExistsTransaction(final ExistsTransactionRequest request) throws RequestException { - final Optional> data = checkOpen().getSnapshot().readNode(request.getPath()); + final Optional> data = Optional.fromJavaUtil(checkOpen().getSnapshot().readNode( + request.getPath())); return recordSuccess(request.getSequence(), new ExistsTransactionSuccess(getIdentifier(), request.getSequence(), data.isPresent())); } private ReadTransactionSuccess handleReadTransaction(final ReadTransactionRequest request) throws RequestException { - final Optional> data = checkOpen().getSnapshot().readNode(request.getPath()); + final Optional> data = Optional.fromJavaUtil(checkOpen().getSnapshot().readNode( + request.getPath())); return recordSuccess(request.getSequence(), new ReadTransactionSuccess(getIdentifier(), request.getSequence(), data)); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java index 3719f749df..d7bbc1ca3c 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java @@ -103,8 +103,8 @@ import org.opendaylight.controller.cluster.raft.messages.RequestLeadership; import org.opendaylight.controller.cluster.raft.messages.ServerRemoved; import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload; import org.opendaylight.yangtools.concepts.Identifier; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TipProducingDataTree; import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider; @@ -1025,7 +1025,7 @@ public class Shard extends RaftActor { private DatastoreContext datastoreContext; private SchemaContextProvider schemaContextProvider; private DatastoreSnapshot.ShardSnapshot restoreFromSnapshot; - private TipProducingDataTree dataTree; + private DataTree dataTree; private volatile boolean sealed; protected AbstractBuilder(final Class shardClass) { @@ -1071,7 +1071,7 @@ public class Shard extends RaftActor { return self(); } - public T dataTree(final TipProducingDataTree newDataTree) { + public T dataTree(final DataTree newDataTree) { checkSealed(); this.dataTree = newDataTree; return self(); @@ -1097,7 +1097,7 @@ public class Shard extends RaftActor { return restoreFromSnapshot; } - public TipProducingDataTree getDataTree() { + public DataTree getDataTree() { return dataTree; } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java index e399cd49ab..9aca517bb1 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java @@ -68,15 +68,15 @@ import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.ConflictingModificationAppliedException; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateTip; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeTip; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TipProducingDataTree; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TipProducingDataTreeTip; import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory; import org.opendaylight.yangtools.yang.model.api.SchemaContext; @@ -129,24 +129,24 @@ public class ShardDataTree extends ShardDataTreeTransactionParent { private final ShardDataTreeChangeListenerPublisher treeChangeListenerPublisher; private final ShardDataChangeListenerPublisher dataChangeListenerPublisher; private final Collection> metadata; - private final TipProducingDataTree dataTree; + private final DataTree dataTree; private final String logContext; private final Shard shard; private Runnable runOnPendingTransactionsComplete; /** * Optimistic {@link DataTreeCandidate} preparation. Since our DataTree implementation is a - * {@link TipProducingDataTree}, each {@link DataTreeCandidate} is also a {@link DataTreeTip}, e.g. another + * {@link DataTree}, each {@link DataTreeCandidate} is also a {@link DataTreeTip}, e.g. another * candidate can be prepared on top of it. They still need to be committed in sequence. Here we track the current * tip of the data tree, which is the last DataTreeCandidate we have in flight, or the DataTree itself. */ - private TipProducingDataTreeTip tip; + private DataTreeTip tip; private SchemaContext schemaContext; private int currentTransactionBatch; - ShardDataTree(final Shard shard, final SchemaContext schemaContext, final TipProducingDataTree dataTree, + ShardDataTree(final Shard shard, final SchemaContext schemaContext, final DataTree dataTree, final ShardDataTreeChangeListenerPublisher treeChangeListenerPublisher, final ShardDataChangeListenerPublisher dataChangeListenerPublisher, final String logContext, final ShardDataTreeMetadata... metadata) { @@ -166,8 +166,17 @@ public class ShardDataTree extends ShardDataTreeTransactionParent { final ShardDataTreeChangeListenerPublisher treeChangeListenerPublisher, final ShardDataChangeListenerPublisher dataChangeListenerPublisher, final String logContext, final ShardDataTreeMetadata... metadata) { - this(shard, schemaContext, InMemoryDataTreeFactory.getInstance().create(treeType, root), - treeChangeListenerPublisher, dataChangeListenerPublisher, logContext, metadata); + this(shard, schemaContext, createDataTree(treeType, root), treeChangeListenerPublisher, + dataChangeListenerPublisher, logContext, metadata); + } + + private static DataTree createDataTree(final TreeType treeType, final YangInstanceIdentifier root) { + final DataTreeConfiguration baseConfig = DataTreeConfiguration.getDefault(treeType); + return new InMemoryDataTreeFactory().create(new DataTreeConfiguration.Builder(baseConfig.getTreeType()) + .setMandatoryNodesValidation(baseConfig.isMandatoryNodesValidationEnabled()) + .setUniqueIndexes(baseConfig.isUniqueIndexEnabled()) + .setRootPath(root) + .build()); } @VisibleForTesting @@ -185,7 +194,7 @@ public class ShardDataTree extends ShardDataTreeTransactionParent { return shard.ticker().read(); } - public TipProducingDataTree getDataTree() { + public DataTree getDataTree() { return dataTree; } @@ -619,7 +628,7 @@ public class ShardDataTree extends ShardDataTreeTransactionParent { } Optional readCurrentData() { - final Optional> currentState = + final java.util.Optional> currentState = dataTree.takeSnapshot().readNode(YangInstanceIdentifier.EMPTY); return currentState.isPresent() ? Optional.of(DataTreeCandidates.fromNormalizedNode( YangInstanceIdentifier.EMPTY, currentState.get())) : Optional.absent(); @@ -662,7 +671,7 @@ public class ShardDataTree extends ShardDataTreeTransactionParent { } public Optional> readNode(final YangInstanceIdentifier path) { - return dataTree.takeSnapshot().readNode(path); + return Optional.fromJavaUtil(dataTree.takeSnapshot().readNode(path)); } DataTreeSnapshot takeSnapshot() { @@ -1092,7 +1101,7 @@ public class ShardDataTree extends ShardDataTreeTransactionParent { return false; } - TipProducingDataTreeTip newTip = MoreObjects.firstNonNull(first.cohort.getCandidate(), dataTree); + DataTreeTip newTip = MoreObjects.firstNonNull(first.cohort.getCandidate(), dataTree); while (it.hasNext()) { final CommitEntry e = it.next(); if (cohort.equals(e.cohort)) { @@ -1114,7 +1123,7 @@ public class ShardDataTree extends ShardDataTreeTransactionParent { } @SuppressWarnings("checkstyle:IllegalCatch") - private void rebaseTransactions(final Iterator iter, @Nonnull final TipProducingDataTreeTip newTip) { + private void rebaseTransactions(final Iterator iter, @Nonnull final DataTreeTip newTip) { tip = Preconditions.checkNotNull(newTip); while (iter.hasNext()) { final SimpleShardDataTreeCohort cohort = iter.next().cohort; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java index 0e82116a0d..5b9c95f3b7 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java @@ -13,7 +13,6 @@ import akka.actor.PoisonPill; import akka.actor.Props; import akka.actor.ReceiveTimeout; import akka.japi.Creator; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; @@ -28,7 +27,6 @@ import org.opendaylight.controller.cluster.datastore.messages.ReadData; import org.opendaylight.controller.cluster.datastore.messages.ReadDataReply; import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; /** * The ShardTransaction Actor represents a remote transaction that delegates all actions to DOMDataReadWriteTransaction. @@ -105,8 +103,8 @@ public abstract class ShardTransaction extends AbstractUntypedActorWithMetering } final YangInstanceIdentifier path = message.getPath(); - Optional> optional = transaction.getSnapshot().readNode(path); - ReadDataReply readDataReply = new ReadDataReply(optional.orNull(), message.getVersion()); + ReadDataReply readDataReply = new ReadDataReply(transaction.getSnapshot().readNode(path).orElse(null), + message.getVersion()); sender().tell(readDataReply.toSerializable(), self()); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/AbstractEntityOwnerChangeListener.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/AbstractEntityOwnerChangeListener.java index 7d872b4a03..0b3ac7a243 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/AbstractEntityOwnerChangeListener.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/AbstractEntityOwnerChangeListener.java @@ -24,13 +24,12 @@ public abstract class AbstractEntityOwnerChangeListener implements DOMDataTreeCh .node(EntityType.QNAME).node(EntityType.QNAME).node(ENTITY_QNAME).node(ENTITY_QNAME) .node(ENTITY_OWNER_QNAME).build(); - void init(ShardDataTree shardDataTree) { + void init(final ShardDataTree shardDataTree) { shardDataTree.registerTreeChangeListener(EOS_PATH, this, Optional.absent(), noop -> { /* NOOP */ }); } - protected static String extractOwner(LeafNode ownerLeaf) { - Object value = ownerLeaf.getValue(); - return value != null ? value.toString() : null; + protected static String extractOwner(final LeafNode ownerLeaf) { + return ownerLeaf.getValue().toString(); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipCandidateRegistration.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipCandidateRegistration.java index 398671e660..4d65c55b83 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipCandidateRegistration.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipCandidateRegistration.java @@ -20,7 +20,8 @@ class DistributedEntityOwnershipCandidateRegistration extends AbstractObjectRegi implements DOMEntityOwnershipCandidateRegistration { private final DistributedEntityOwnershipService service; - DistributedEntityOwnershipCandidateRegistration(DOMEntity entity, DistributedEntityOwnershipService service) { + DistributedEntityOwnershipCandidateRegistration(final DOMEntity entity, + final DistributedEntityOwnershipService service) { super(entity); this.service = service; } @@ -29,11 +30,4 @@ class DistributedEntityOwnershipCandidateRegistration extends AbstractObjectRegi protected void removeRegistration() { service.unregisterCandidate(getInstance()); } - - @Override - public String toString() { - return "DistributedEntityOwnershipCandidateRegistration [entity=" + getInstance() + "]"; - } - - } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipListenerRegistration.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipListenerRegistration.java index 2e0f4b4f2d..149551b8c8 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipListenerRegistration.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipListenerRegistration.java @@ -7,6 +7,7 @@ */ package org.opendaylight.controller.cluster.datastore.entityownership; +import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.Preconditions; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener; import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration; @@ -22,8 +23,8 @@ class DistributedEntityOwnershipListenerRegistration extends AbstractObjectRegis private final DistributedEntityOwnershipService service; private final String entityType; - DistributedEntityOwnershipListenerRegistration(DOMEntityOwnershipListener listener, String entityType, - DistributedEntityOwnershipService service) { + DistributedEntityOwnershipListenerRegistration(final DOMEntityOwnershipListener listener, final String entityType, + final DistributedEntityOwnershipService service) { super(listener); this.entityType = Preconditions.checkNotNull(entityType, "entityType cannot be null"); this.service = Preconditions.checkNotNull(service, "DOMEntityOwnershipListener cannot be null"); @@ -40,8 +41,7 @@ class DistributedEntityOwnershipListenerRegistration extends AbstractObjectRegis } @Override - public String toString() { - return "DistributedEntityOwnershipListenerRegistration [entityType=" + getEntityType() - + ", listener=" + getInstance() + "]"; + protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { + return toStringHelper.add("entityType", entityType); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java index 944d14a3d9..1cb744670e 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/DistributedEntityOwnershipService.java @@ -187,7 +187,7 @@ public class DistributedEntityOwnershipService implements DOMEntityOwnershipServ return Optional.absent(); } - Optional> entityNode = dataTree.takeSnapshot().readNode( + java.util.Optional> entityNode = dataTree.takeSnapshot().readNode( entityPath(forEntity.getType(), forEntity.getIdentifier())); if (!entityNode.isPresent()) { return Optional.absent(); @@ -195,7 +195,7 @@ public class DistributedEntityOwnershipService implements DOMEntityOwnershipServ // Check if there are any candidates, if there are none we do not really have ownership state final MapEntryNode entity = (MapEntryNode) entityNode.get(); - final Optional> optionalCandidates = + final java.util.Optional> optionalCandidates = entity.getChild(CANDIDATE_NODE_ID); final boolean hasCandidates = optionalCandidates.isPresent() && ((MapNode) optionalCandidates.get()).getValue().size() > 0; @@ -204,7 +204,8 @@ public class DistributedEntityOwnershipService implements DOMEntityOwnershipServ } MemberName localMemberName = context.getCurrentMemberName(); - Optional> ownerLeaf = entity.getChild(ENTITY_OWNER_NODE_ID); + java.util.Optional> ownerLeaf = entity.getChild( + ENTITY_OWNER_NODE_ID); String owner = ownerLeaf.isPresent() ? ownerLeaf.get().getValue().toString() : null; boolean hasOwner = !Strings.isNullOrEmpty(owner); boolean isOwner = hasOwner && localMemberName.getName().equals(owner); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnerChangeListener.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnerChangeListener.java index 04037b35ea..0201745319 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnerChangeListener.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnerChangeListener.java @@ -9,12 +9,12 @@ package org.opendaylight.controller.cluster.datastore.entityownership; import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.createEntity; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.base.Verify; import java.util.Collection; import java.util.Objects; +import java.util.Optional; import org.opendaylight.controller.cluster.access.concepts.MemberName; import org.opendaylight.mdsal.eos.dom.api.DOMEntity; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnersModel.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnersModel.java index a392049a84..22d5935ca3 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnersModel.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnersModel.java @@ -52,15 +52,15 @@ public final class EntityOwnersModel { private EntityOwnersModel() { } - static YangInstanceIdentifier entityPath(String entityType, YangInstanceIdentifier entityId) { + static YangInstanceIdentifier entityPath(final String entityType, final YangInstanceIdentifier entityId) { return YangInstanceIdentifier.builder(ENTITY_OWNERS_PATH).node(EntityType.QNAME) .nodeWithKey(EntityType.QNAME, ENTITY_TYPE_QNAME, entityType).node(ENTITY_QNAME) .nodeWithKey(ENTITY_QNAME, ENTITY_ID_QNAME, entityId).build(); } - static YangInstanceIdentifier candidatePath(String entityType, YangInstanceIdentifier entityId, - String candidateName) { + static YangInstanceIdentifier candidatePath(final String entityType, final YangInstanceIdentifier entityId, + final String candidateName) { return YangInstanceIdentifier.builder(ENTITY_OWNERS_PATH).node(EntityType.QNAME) .nodeWithKey(EntityType.QNAME, ENTITY_TYPE_QNAME, entityType).node(ENTITY_QNAME) .nodeWithKey(ENTITY_QNAME, ENTITY_ID_QNAME, entityId).node(Candidate.QNAME) @@ -68,53 +68,55 @@ public final class EntityOwnersModel { } - static YangInstanceIdentifier candidatePath(YangInstanceIdentifier entityPath, String candidateName) { + static YangInstanceIdentifier candidatePath(final YangInstanceIdentifier entityPath, final String candidateName) { return YangInstanceIdentifier.builder(entityPath).node(Candidate.QNAME).nodeWithKey( Candidate.QNAME, CANDIDATE_NAME_QNAME, candidateName).build(); } - static NodeIdentifierWithPredicates candidateNodeKey(String candidateName) { + static NodeIdentifierWithPredicates candidateNodeKey(final String candidateName) { return new NodeIdentifierWithPredicates(Candidate.QNAME, CANDIDATE_NAME_QNAME, candidateName); } - static NormalizedNode entityOwnersWithCandidate(String entityType, YangInstanceIdentifier entityId, - String candidateName) { + static NormalizedNode entityOwnersWithCandidate(final String entityType, + final YangInstanceIdentifier entityId, final String candidateName) { return entityOwnersWithEntityTypeEntry(entityTypeEntryWithEntityEntry(entityType, entityEntryWithCandidateEntry(entityId, candidateName))); } - static ContainerNode entityOwnersWithEntityTypeEntry(MapEntryNode entityTypeNode) { + static ContainerNode entityOwnersWithEntityTypeEntry(final MapEntryNode entityTypeNode) { return ImmutableContainerNodeBuilder.create().withNodeIdentifier( ENTITY_OWNERS_NODE_ID).addChild(ImmutableNodes.mapNodeBuilder(EntityType.QNAME) .addChild(entityTypeNode).build()).build(); } - static MapEntryNode entityTypeEntryWithEntityEntry(String entityType, MapEntryNode entityNode) { + static MapEntryNode entityTypeEntryWithEntityEntry(final String entityType, final MapEntryNode entityNode) { return ImmutableNodes.mapEntryBuilder(EntityType.QNAME, ENTITY_TYPE_QNAME, entityType).addChild(ImmutableNodes.mapNodeBuilder( ENTITY_QNAME).addChild(entityNode).build()).build(); } - static MapEntryNode entityEntryWithCandidateEntry(YangInstanceIdentifier entityId, String candidateName) { + static MapEntryNode entityEntryWithCandidateEntry(final YangInstanceIdentifier entityId, + final String candidateName) { return ImmutableNodes.mapEntryBuilder(ENTITY_QNAME, ENTITY_ID_QNAME, entityId).addChild( candidateEntry(candidateName)).build(); } - static MapNode candidateEntry(String candidateName) { + static MapNode candidateEntry(final String candidateName) { return ImmutableOrderedMapNodeBuilder.create().withNodeIdentifier(new NodeIdentifier(Candidate.QNAME)) .addChild(candidateMapEntry(candidateName)).build(); } - static MapEntryNode candidateMapEntry(String candidateName) { + static MapEntryNode candidateMapEntry(final String candidateName) { return ImmutableNodes.mapEntry(Candidate.QNAME, CANDIDATE_NAME_QNAME, candidateName); } - static MapEntryNode entityEntryWithOwner(YangInstanceIdentifier entityId, String owner) { - return ImmutableNodes.mapEntryBuilder(ENTITY_QNAME, ENTITY_ID_QNAME, entityId).addChild( - ImmutableNodes.leafNode(ENTITY_OWNER_QNAME, owner)).build(); + static MapEntryNode entityEntryWithOwner(final YangInstanceIdentifier entityId, final String owner) { + return ImmutableNodes.mapEntryBuilder(ENTITY_QNAME, ENTITY_ID_QNAME, entityId) + .addChild(ImmutableNodes.leafNode(ENTITY_OWNER_QNAME, owner != null ? owner : "")) + .build(); } - public static String entityTypeFromEntityPath(YangInstanceIdentifier entityPath) { + public static String entityTypeFromEntityPath(final YangInstanceIdentifier entityPath) { YangInstanceIdentifier parent = entityPath; while (!parent.isEmpty()) { if (EntityType.QNAME.equals(parent.getLastPathArgument().getNodeType())) { @@ -127,7 +129,7 @@ public final class EntityOwnersModel { return null; } - static DOMEntity createEntity(YangInstanceIdentifier entityPath) { + static DOMEntity createEntity(final YangInstanceIdentifier entityPath) { String entityType = null; YangInstanceIdentifier entityId = null; for (PathArgument pathArg: entityPath.getPathArguments()) { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShard.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShard.java index b20d91cb76..6f4c8dbbd2 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShard.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipShard.java @@ -199,13 +199,13 @@ class EntityOwnershipShard extends Shard { getSender().tell(SuccessReply.INSTANCE, getSelf()); searchForEntities((entityTypeNode, entityNode) -> { - Optional> possibleType = entityTypeNode.getChild(ENTITY_TYPE_NODE_ID); + java.util.Optional> possibleType = entityTypeNode.getChild(ENTITY_TYPE_NODE_ID); String entityType = possibleType.isPresent() ? possibleType.get().getValue().toString() : null; if (registerListener.getEntityType().equals(entityType)) { final boolean hasOwner; final boolean isOwner; - Optional> possibleOwner = entityNode.getChild(ENTITY_OWNER_NODE_ID); + java.util.Optional> possibleOwner = entityNode.getChild(ENTITY_OWNER_NODE_ID); if (possibleOwner.isPresent()) { isOwner = localMemberName.getName().equals(possibleOwner.get().getValue().toString()); hasOwner = true; @@ -299,12 +299,12 @@ class EntityOwnershipShard extends Shard { private void notifyAllListeners() { searchForEntities((entityTypeNode, entityNode) -> { - Optional> possibleType = entityTypeNode.getChild(ENTITY_TYPE_NODE_ID); + java.util.Optional> possibleType = entityTypeNode.getChild(ENTITY_TYPE_NODE_ID); if (possibleType.isPresent()) { final boolean hasOwner; final boolean isOwner; - Optional> possibleOwner = entityNode.getChild(ENTITY_OWNER_NODE_ID); + java.util.Optional> possibleOwner = entityNode.getChild(ENTITY_OWNER_NODE_ID); if (possibleOwner.isPresent()) { isOwner = localMemberName.getName().equals(possibleOwner.get().getValue().toString()); hasOwner = true; @@ -388,12 +388,12 @@ class EntityOwnershipShard extends Shard { .node(entityTypeNode.getIdentifier()).node(ENTITY_NODE_ID).node(entityNode.getIdentifier()) .node(ENTITY_OWNER_NODE_ID).build(); - Optional possibleOwner = entityNode.getChild(ENTITY_OWNER_NODE_ID).transform( - node -> node.getValue().toString()); - String newOwner = newOwner(possibleOwner.orNull(), getCandidateNames(entityNode), + java.util.Optional possibleOwner = + entityNode.getChild(ENTITY_OWNER_NODE_ID).map(node -> node.getValue().toString()); + String newOwner = newOwner(possibleOwner.orElse(null), getCandidateNames(entityNode), getEntityOwnerElectionStrategy(entityPath)); - if (!newOwner.equals(possibleOwner.or(""))) { + if (!newOwner.equals(possibleOwner.orElse(""))) { modifications.add(new WriteModification(entityPath, ImmutableNodes.leafNode(ENTITY_OWNER_NODE_ID, newOwner))); } @@ -556,7 +556,7 @@ class EntityOwnershipShard extends Shard { LOG.debug("{}: Searching for entities owned by {}", persistenceId(), ownedBy); searchForEntities((entityTypeNode, entityNode) -> { - Optional> possibleOwner = + java.util.Optional> possibleOwner = entityNode.getChild(ENTITY_OWNER_NODE_ID); String currentOwner = possibleOwner.isPresent() ? possibleOwner.get().getValue().toString() : ""; if (ownedBy.contains(currentOwner)) { @@ -597,7 +597,7 @@ class EntityOwnershipShard extends Shard { } for (MapEntryNode entityType: ((MapNode) possibleEntityTypes.get()).getValue()) { - Optional> possibleEntities = entityType.getChild(ENTITY_NODE_ID); + java.util.Optional> possibleEntities = entityType.getChild(ENTITY_NODE_ID); if (!possibleEntities.isPresent()) { // shouldn't happen but handle anyway continue; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipStatistics.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipStatistics.java index f18ae66e2f..a96bbe3556 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipStatistics.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipStatistics.java @@ -10,11 +10,11 @@ package org.opendaylight.controller.cluster.datastore.entityownership; import static org.opendaylight.controller.cluster.datastore.entityownership.EntityOwnersModel.entityTypeFromEntityPath; -import com.google.common.base.Optional; import com.google.common.base.Strings; import java.util.Collection; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import javax.annotation.Nonnull; import org.opendaylight.yangtools.triemap.TrieMap; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbstractDataTreeCandidateNode.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbstractDataTreeCandidateNode.java index 85c5403b70..6c6a5af754 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbstractDataTreeCandidateNode.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbstractDataTreeCandidateNode.java @@ -7,9 +7,9 @@ */ package org.opendaylight.controller.cluster.datastore.persisted; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import java.util.Collection; +import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DeletedDataTreeCandidateNode.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DeletedDataTreeCandidateNode.java index 085a8457d1..ae88112095 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DeletedDataTreeCandidateNode.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DeletedDataTreeCandidateNode.java @@ -7,8 +7,8 @@ */ package org.opendaylight.controller.cluster.datastore.persisted; -import com.google.common.base.Optional; import java.util.Collection; +import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode; @@ -42,7 +42,7 @@ abstract class DeletedDataTreeCandidateNode extends AbstractDataTreeCandidateNod @Override public final Optional> getDataAfter() { - return Optional.absent(); + return Optional.empty(); } @Override diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/ModifiedDataTreeCandidateNode.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/ModifiedDataTreeCandidateNode.java index 81f91aa900..6820e1c885 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/ModifiedDataTreeCandidateNode.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/ModifiedDataTreeCandidateNode.java @@ -7,9 +7,9 @@ */ package org.opendaylight.controller.cluster.datastore.persisted; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import java.util.Collection; +import java.util.Optional; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManager.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManager.java index 0b3768f395..187d2522de 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManager.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManager.java @@ -1125,7 +1125,7 @@ class ShardManager extends AbstractUntypedPersistentActorWithMetering { private void updateSchemaContext(final Object message) { schemaContext = ((UpdateSchemaContext) message).getSchemaContext(); - LOG.debug("Got updated SchemaContext: # of modules {}", schemaContext.getAllModuleIdentifiers().size()); + LOG.debug("Got updated SchemaContext: # of modules {}", schemaContext.getModules().size()); for (ShardInformation info : localShards.values()) { info.setSchemaContext(schemaContext); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/NormalizedNodeAggregator.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/NormalizedNodeAggregator.java index 09b497fe6a..f587889ec0 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/NormalizedNodeAggregator.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/NormalizedNodeAggregator.java @@ -14,9 +14,9 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory; import org.opendaylight.yangtools.yang.model.api.SchemaContext; @@ -27,12 +27,12 @@ public final class NormalizedNodeAggregator { private NormalizedNodeAggregator(final YangInstanceIdentifier rootIdentifier, final List>> nodes, final SchemaContext schemaContext, - LogicalDatastoreType logicalDatastoreType) { + final LogicalDatastoreType logicalDatastoreType) { this.rootIdentifier = rootIdentifier; this.nodes = nodes; - this.dataTree = InMemoryDataTreeFactory.getInstance().create( - logicalDatastoreType == LogicalDatastoreType.CONFIGURATION ? TreeType.CONFIGURATION : - TreeType.OPERATIONAL); + this.dataTree = new InMemoryDataTreeFactory().create( + logicalDatastoreType == LogicalDatastoreType.CONFIGURATION ? DataTreeConfiguration.DEFAULT_CONFIGURATION + : DataTreeConfiguration.DEFAULT_OPERATIONAL); this.dataTree.setSchemaContext(schemaContext); } @@ -41,7 +41,7 @@ public final class NormalizedNodeAggregator { */ public static Optional> aggregate(final YangInstanceIdentifier rootIdentifier, final List>> nodes, final SchemaContext schemaContext, - LogicalDatastoreType logicalDatastoreType) throws DataValidationFailedException { + final LogicalDatastoreType logicalDatastoreType) throws DataValidationFailedException { return new NormalizedNodeAggregator(rootIdentifier, nodes, schemaContext, logicalDatastoreType).aggregate(); } @@ -66,6 +66,6 @@ public final class NormalizedNodeAggregator { } private Optional> getRootNode() { - return dataTree.takeSnapshot().readNode(rootIdentifier); + return Optional.fromJavaUtil(dataTree.takeSnapshot().readNode(rootIdentifier)); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModification.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModification.java index 0e97cd9588..d0699fbcba 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModification.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModification.java @@ -9,10 +9,10 @@ package org.opendaylight.controller.cluster.datastore.utils; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ForwardingObject; import java.io.IOException; +import java.util.Optional; import org.opendaylight.controller.cluster.datastore.node.utils.transformer.NormalizedNodePruner; import org.opendaylight.controller.cluster.datastore.util.AbstractDataTreeModificationCursor; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; @@ -38,7 +38,8 @@ public class PruningDataTreeModification extends ForwardingObject implements Dat private final SchemaContext schemaContext; private final DataTree dataTree; - public PruningDataTreeModification(DataTreeModification delegate, DataTree dataTree, SchemaContext schemaContext) { + public PruningDataTreeModification(final DataTreeModification delegate, final DataTree dataTree, + final SchemaContext schemaContext) { this.delegate = Preconditions.checkNotNull(delegate); this.dataTree = Preconditions.checkNotNull(dataTree); this.schemaContext = Preconditions.checkNotNull(schemaContext); @@ -50,7 +51,7 @@ public class PruningDataTreeModification extends ForwardingObject implements Dat } @Override - public void delete(YangInstanceIdentifier yangInstanceIdentifier) { + public void delete(final YangInstanceIdentifier yangInstanceIdentifier) { try { delegate.delete(yangInstanceIdentifier); } catch (SchemaValidationFailedException e) { @@ -59,7 +60,7 @@ public class PruningDataTreeModification extends ForwardingObject implements Dat } @Override - public void merge(YangInstanceIdentifier yangInstanceIdentifier, NormalizedNode normalizedNode) { + public void merge(final YangInstanceIdentifier yangInstanceIdentifier, final NormalizedNode normalizedNode) { try { if (YangInstanceIdentifier.EMPTY.equals(yangInstanceIdentifier)) { pruneAndMergeNode(yangInstanceIdentifier, normalizedNode); @@ -75,7 +76,8 @@ public class PruningDataTreeModification extends ForwardingObject implements Dat } - private void pruneAndMergeNode(YangInstanceIdentifier yangInstanceIdentifier, NormalizedNode normalizedNode) { + private void pruneAndMergeNode(final YangInstanceIdentifier yangInstanceIdentifier, + final NormalizedNode normalizedNode) { NormalizedNode pruned = pruneNormalizedNode(yangInstanceIdentifier, normalizedNode); if (pruned != null) { @@ -84,7 +86,7 @@ public class PruningDataTreeModification extends ForwardingObject implements Dat } @Override - public void write(YangInstanceIdentifier yangInstanceIdentifier, NormalizedNode normalizedNode) { + public void write(final YangInstanceIdentifier yangInstanceIdentifier, final NormalizedNode normalizedNode) { try { if (YangInstanceIdentifier.EMPTY.equals(yangInstanceIdentifier)) { pruneAndWriteNode(yangInstanceIdentifier, normalizedNode); @@ -99,7 +101,8 @@ public class PruningDataTreeModification extends ForwardingObject implements Dat } } - private void pruneAndWriteNode(YangInstanceIdentifier yangInstanceIdentifier, NormalizedNode normalizedNode) { + private void pruneAndWriteNode(final YangInstanceIdentifier yangInstanceIdentifier, + final NormalizedNode normalizedNode) { NormalizedNode pruned = pruneNormalizedNode(yangInstanceIdentifier, normalizedNode); if (pruned != null) { @@ -121,12 +124,12 @@ public class PruningDataTreeModification extends ForwardingObject implements Dat } @Override - public void applyToCursor(DataTreeModificationCursor dataTreeModificationCursor) { + public void applyToCursor(final DataTreeModificationCursor dataTreeModificationCursor) { delegate.applyToCursor(dataTreeModificationCursor); } @Override - public Optional> readNode(YangInstanceIdentifier yangInstanceIdentifier) { + public Optional> readNode(final YangInstanceIdentifier yangInstanceIdentifier) { return delegate.readNode(yangInstanceIdentifier); } @@ -136,7 +139,7 @@ public class PruningDataTreeModification extends ForwardingObject implements Dat } @VisibleForTesting - NormalizedNode pruneNormalizedNode(YangInstanceIdentifier path, NormalizedNode input) { + NormalizedNode pruneNormalizedNode(final YangInstanceIdentifier path, final NormalizedNode input) { NormalizedNodePruner pruner = new NormalizedNodePruner(path, schemaContext); try { NormalizedNodeWriter.forStreamWriter(pruner).write(input); @@ -151,14 +154,14 @@ public class PruningDataTreeModification extends ForwardingObject implements Dat private final DataTreeModification toModification; private final PruningDataTreeModification pruningModification; - PruningDataTreeModificationCursor(DataTreeModification toModification, - PruningDataTreeModification pruningModification) { + PruningDataTreeModificationCursor(final DataTreeModification toModification, + final PruningDataTreeModification pruningModification) { this.toModification = toModification; this.pruningModification = pruningModification; } @Override - public void write(PathArgument child, NormalizedNode data) { + public void write(final PathArgument child, final NormalizedNode data) { YangInstanceIdentifier path = current().node(child); NormalizedNode prunedNode = pruningModification.pruneNormalizedNode(path, data); if (prunedNode != null) { @@ -167,7 +170,7 @@ public class PruningDataTreeModification extends ForwardingObject implements Dat } @Override - public void merge(PathArgument child, NormalizedNode data) { + public void merge(final PathArgument child, final NormalizedNode data) { YangInstanceIdentifier path = current().node(child); NormalizedNode prunedNode = pruningModification.pruneNormalizedNode(path, data); if (prunedNode != null) { @@ -176,7 +179,7 @@ public class PruningDataTreeModification extends ForwardingObject implements Dat } @Override - public void delete(PathArgument child) { + public void delete(final PathArgument child) { try { toModification.delete(current().node(child)); } catch (SchemaValidationFailedException e) { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/DistributedShardChangePublisher.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/DistributedShardChangePublisher.java index f91dc3b260..759410a26e 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/DistributedShardChangePublisher.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/DistributedShardChangePublisher.java @@ -8,7 +8,6 @@ package org.opendaylight.controller.cluster.sharding; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import java.util.ArrayList; import java.util.Collection; @@ -17,6 +16,7 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; import javax.annotation.Nonnull; @@ -39,10 +39,10 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory; import org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaValidationFailedException; import org.slf4j.Logger; @@ -70,11 +70,27 @@ public class DistributedShardChangePublisher // TODO keeping the whole dataTree thats contained in subshards doesn't seem like a good idea // maybe the whole listener logic would be better in the backend shards where we have direct access to the // dataTree and wont have to cache it redundantly. - this.dataTree = InMemoryDataTreeFactory.getInstance().create( - TreeType.valueOf(prefix.getDatastoreType().name()), prefix.getRootIdentifier()); - dataTree.setSchemaContext(distributedDataStore.getActorContext().getSchemaContext()); + final DataTreeConfiguration baseConfig; + switch (prefix.getDatastoreType()) { + case CONFIGURATION: + baseConfig = DataTreeConfiguration.DEFAULT_CONFIGURATION; + break; + case OPERATIONAL: + baseConfig = DataTreeConfiguration.DEFAULT_OPERATIONAL; + break; + default: + throw new UnsupportedOperationException("Unknown prefix type " + prefix.getDatastoreType()); + } + + this.dataTree = new InMemoryDataTreeFactory().create(new DataTreeConfiguration.Builder(baseConfig.getTreeType()) + .setMandatoryNodesValidation(baseConfig.isMandatoryNodesValidationEnabled()) + .setUniqueIndexes(baseConfig.isUniqueIndexEnabled()) + .setRootPath(prefix.getRootIdentifier()) + .build()); + // XXX: can we guarantee that the root is present in the schemacontext? + this.dataTree.setSchemaContext(distributedDataStore.getActorContext().getSchemaContext()); this.shardPath = prefix.getRootIdentifier(); this.childShards = childShards; } @@ -363,13 +379,13 @@ public class DistributedShardChangePublisher @Nonnull @Override public Optional> getDataAfter() { - return Optional.absent(); + return Optional.empty(); } @Nonnull @Override public Optional> getDataBefore() { - return Optional.absent(); + return Optional.empty(); } } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/ShardProxyTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/ShardProxyTransaction.java index a614f92596..dcb74fa49e 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/ShardProxyTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/ShardProxyTransaction.java @@ -8,7 +8,6 @@ package org.opendaylight.controller.cluster.sharding; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.AsyncFunction; import com.google.common.util.concurrent.FutureCallback; @@ -20,6 +19,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map.Entry; +import java.util.Optional; import java.util.stream.Collectors; import javax.annotation.Nonnull; import org.opendaylight.controller.cluster.databroker.actors.dds.ClientTransaction; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/resources/org/opendaylight/blueprint/clustered-datastore.xml b/opendaylight/md-sal/sal-distributed-datastore/src/main/resources/org/opendaylight/blueprint/clustered-datastore.xml index 4bc117a5c7..8c6723b5bc 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/resources/org/opendaylight/blueprint/clustered-datastore.xml +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/resources/org/opendaylight/blueprint/clustered-datastore.xml @@ -124,6 +124,10 @@ + + + + @Override public void setUp() throws Exception { super.setUp(); - when(getDataTreeSnapshot().readNode(PATH)).thenReturn(Optional.absent()); + when(getDataTreeSnapshot().readNode(PATH)).thenReturn(java.util.Optional.empty()); } @Override diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransactionTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransactionTest.java index 5834833e68..04f706dc66 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransactionTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/databroker/actors/dds/ClientTransactionTest.java @@ -49,7 +49,7 @@ public class ClientTransactionTest extends AbstractClientHandleTest { actual.validate(invocation.getArgumentAt(0, DataTreeModification.class)); @@ -294,7 +293,7 @@ public abstract class AbstractShardTest extends AbstractActorTest { } public static NormalizedNode readStore(final DataTree store, final YangInstanceIdentifier id) { - return store.takeSnapshot().readNode(id).orNull(); + return store.takeSnapshot().readNode(id).orElse(null); } public void writeToStore(final TestActorRef shard, final YangInstanceIdentifier id, @@ -341,8 +340,8 @@ public abstract class AbstractShardTest extends AbstractActorTest { } DataTree setupInMemorySnapshotStore() throws DataValidationFailedException { - final DataTree testStore = InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL); - testStore.setSchemaContext(SCHEMA_CONTEXT); + final DataTree testStore = new InMemoryDataTreeFactory().create( + DataTreeConfiguration.DEFAULT_OPERATIONAL, SCHEMA_CONTEXT); writeToStore(testStore, TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME)); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DatastoreSnapshotRestoreTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DatastoreSnapshotRestoreTest.java index 96c45f3e14..a35a901c6f 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DatastoreSnapshotRestoreTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DatastoreSnapshotRestoreTest.java @@ -35,11 +35,10 @@ import org.opendaylight.controller.md.cluster.datastore.model.TestModel; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory; - /** * Unit tests for DatastoreSnapshotRestore. * @@ -93,7 +92,8 @@ public class DatastoreSnapshotRestoreTest { assertNull("Expected null DatastoreSnapshot", instance.getAndRemove("oper")); } - private static void assertDatastoreSnapshotEquals(DatastoreSnapshot expected, DatastoreSnapshot actual) { + private static void assertDatastoreSnapshotEquals(final DatastoreSnapshot expected, + final DatastoreSnapshot actual) { assertNotNull("DatastoreSnapshot is null", actual); assertEquals("getType", expected.getType(), actual.getType()); @@ -113,7 +113,7 @@ public class DatastoreSnapshotRestoreTest { } } - private static void assertSnapshotEquals(String prefix, Snapshot expected, Snapshot actual) { + private static void assertSnapshotEquals(final String prefix, final Snapshot expected, final Snapshot actual) { assertEquals(prefix + " lastIndex", expected.getLastIndex(), actual.getLastIndex()); assertEquals(prefix + " lastTerm", expected.getLastTerm(), actual.getLastTerm()); assertEquals(prefix + " lastAppliedIndex", expected.getLastAppliedIndex(), actual.getLastAppliedIndex()); @@ -125,14 +125,14 @@ public class DatastoreSnapshotRestoreTest { ((ShardSnapshotState)actual.getState()).getSnapshot().getRootNode()); } - private static ShardManagerSnapshot newShardManagerSnapshot(String... shards) { + private static ShardManagerSnapshot newShardManagerSnapshot(final String... shards) { return new ShardManagerSnapshot(Arrays.asList(shards), Collections.emptyMap()); } - private static Snapshot newSnapshot(YangInstanceIdentifier path, NormalizedNode node) + private static Snapshot newSnapshot(final YangInstanceIdentifier path, final NormalizedNode node) throws Exception { - DataTree dataTree = InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL); - dataTree.setSchemaContext(SchemaContextHelper.full()); + DataTree dataTree = new InMemoryDataTreeFactory().create(DataTreeConfiguration.DEFAULT_OPERATIONAL, + SchemaContextHelper.full()); AbstractShardTest.writeToStore(dataTree, path, node); NormalizedNode root = AbstractShardTest.readStore(dataTree, YangInstanceIdentifier.EMPTY); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreIntegrationTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreIntegrationTest.java index 688f9c377e..0b97772e94 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreIntegrationTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreIntegrationTest.java @@ -90,7 +90,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory; @@ -1282,8 +1282,8 @@ public class DistributedDataStoreIntegrationTest { CarsModel.newCarsMapNode(CarsModel.newCarEntry("optima", BigInteger.valueOf(20000L)), CarsModel.newCarEntry("sportage", BigInteger.valueOf(30000L)))); - DataTree dataTree = InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL); - dataTree.setSchemaContext(SchemaContextHelper.full()); + DataTree dataTree = new InMemoryDataTreeFactory().create( + DataTreeConfiguration.DEFAULT_OPERATIONAL, SchemaContextHelper.full()); AbstractShardTest.writeToStore(dataTree, CarsModel.BASE_PATH, carsNode); NormalizedNode root = AbstractShardTest.readStore(dataTree, YangInstanceIdentifier.EMPTY); @@ -1291,8 +1291,8 @@ public class DistributedDataStoreIntegrationTest { new ShardSnapshotState(new MetadataShardDataTreeSnapshot(root)), Collections.emptyList(), 2, 1, 2, 1, 1, "member-1", null); - dataTree = InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL); - dataTree.setSchemaContext(SchemaContextHelper.full()); + dataTree = new InMemoryDataTreeFactory().create(DataTreeConfiguration.DEFAULT_OPERATIONAL, + SchemaContextHelper.full()); final NormalizedNode peopleNode = PeopleModel.create(); AbstractShardTest.writeToStore(dataTree, PeopleModel.BASE_PATH, peopleNode); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreRemotingIntegrationTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreRemotingIntegrationTest.java index a82ebb7d2f..b78d017341 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreRemotingIntegrationTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DistributedDataStoreRemotingIntegrationTest.java @@ -97,9 +97,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TipProducingDataTree; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; @@ -642,8 +641,8 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { .findLocalShard("cars"); assertEquals("Cars follower shard found", true, carsFollowerShard.isPresent()); - final TipProducingDataTree dataTree = InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL); - dataTree.setSchemaContext(SchemaContextHelper.full()); + final DataTree dataTree = new InMemoryDataTreeFactory().create( + DataTreeConfiguration.DEFAULT_OPERATIONAL, SchemaContextHelper.full()); // Send a tx with immediate commit. @@ -1122,8 +1121,8 @@ public class DistributedDataStoreRemotingIntegrationTest extends AbstractTest { // Setup a saved snapshot on the leader. The follower will startup with no data and the leader should // install a snapshot to sync the follower. - TipProducingDataTree tree = InMemoryDataTreeFactory.getInstance().create(TreeType.CONFIGURATION); - tree.setSchemaContext(SchemaContextHelper.full()); + DataTree tree = new InMemoryDataTreeFactory().create(DataTreeConfiguration.DEFAULT_CONFIGURATION, + SchemaContextHelper.full()); final ContainerNode carsNode = CarsModel.newCarsNode( CarsModel.newCarsMapNode(CarsModel.newCarEntry("optima", BigInteger.valueOf(20000)))); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeTest.java index 3ca0f9c7aa..aa38e30fe8 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeTest.java @@ -32,7 +32,6 @@ import static org.opendaylight.controller.cluster.datastore.ShardDataTreeMocking import static org.opendaylight.controller.cluster.datastore.ShardDataTreeMocking.immediatePayloadReplication; import static org.opendaylight.controller.cluster.datastore.ShardDataTreeMocking.immediatePreCommit; -import com.google.common.base.Optional; import com.google.common.base.Ticker; import com.google.common.collect.Maps; import com.google.common.primitives.UnsignedLong; @@ -42,6 +41,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.function.Consumer; import org.junit.Before; @@ -175,7 +175,7 @@ public class ShardDataTreeTest extends AbstractTest { DOMDataTreeChangeListener listener = mock(DOMDataTreeChangeListener.class); shardDataTree.registerTreeChangeListener(CarsModel.CAR_LIST_PATH.node(CarsModel.CAR_QNAME), listener, - Optional.absent(), noop -> { }); + com.google.common.base.Optional.absent(), noop -> { }); addCar(shardDataTree, "optima"); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardRecoveryCoordinatorTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardRecoveryCoordinatorTest.java index 4467817a21..39285f9d67 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardRecoveryCoordinatorTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardRecoveryCoordinatorTest.java @@ -25,10 +25,11 @@ import org.opendaylight.controller.md.cluster.datastore.model.PeopleModel; import org.opendaylight.controller.md.cluster.datastore.model.SchemaContextHelper; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateTip; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TipProducingDataTree; import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory; import org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaValidationFailedException; @@ -85,9 +86,9 @@ public class ShardRecoveryCoordinatorTest extends AbstractTest { } } - private DataTreeCandidateTip createCar() { - final TipProducingDataTree dataTree = InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL); - dataTree.setSchemaContext(carsSchemaContext); + private DataTreeCandidate createCar() { + final DataTree dataTree = new InMemoryDataTreeFactory().create( + DataTreeConfiguration.DEFAULT_OPERATIONAL, carsSchemaContext); final DataTreeSnapshot snapshot = dataTree.takeSnapshot(); @@ -99,7 +100,7 @@ public class ShardRecoveryCoordinatorTest extends AbstractTest { } private Optional> readCars(final ShardDataTree shardDataTree) { - final TipProducingDataTree dataTree = shardDataTree.getDataTree(); + final DataTree dataTree = shardDataTree.getDataTree(); // FIXME: this should not be called here dataTree.setSchemaContext(peopleSchemaContext); @@ -107,7 +108,7 @@ public class ShardRecoveryCoordinatorTest extends AbstractTest { } private Optional> readPeople(final ShardDataTree shardDataTree) { - final TipProducingDataTree dataTree = shardDataTree.getDataTree(); + final DataTree dataTree = shardDataTree.getDataTree(); // FIXME: this should not be called here dataTree.setSchemaContext(peopleSchemaContext); @@ -115,8 +116,8 @@ public class ShardRecoveryCoordinatorTest extends AbstractTest { } private static ShardSnapshotState createSnapshot() { - final TipProducingDataTree dataTree = InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL); - dataTree.setSchemaContext(SchemaContextHelper.select(SchemaContextHelper.CARS_YANG, + final DataTree dataTree = new InMemoryDataTreeFactory().create( + DataTreeConfiguration.DEFAULT_OPERATIONAL, SchemaContextHelper.select(SchemaContextHelper.CARS_YANG, SchemaContextHelper.PEOPLE_YANG)); DataTreeSnapshot snapshot = dataTree.takeSnapshot(); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardTest.java index 5869271fb8..76745a442c 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardTest.java @@ -113,10 +113,9 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TipProducingDataTree; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory; @@ -425,8 +424,8 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); - final DataTree store = InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL); - store.setSchemaContext(SCHEMA_CONTEXT); + final DataTree store = new InMemoryDataTreeFactory().create(DataTreeConfiguration.DEFAULT_OPERATIONAL, + SCHEMA_CONTEXT); final ContainerNode container = ImmutableContainerNodeBuilder.create().withNodeIdentifier( new YangInstanceIdentifier.NodeIdentifier(TestModel.TEST_QNAME)) @@ -466,8 +465,8 @@ public class ShardTest extends AbstractShardTest { ShardTestKit.waitUntilLeader(shard); - final DataTree store = InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL); - store.setSchemaContext(SCHEMA_CONTEXT); + final DataTree store = new InMemoryDataTreeFactory().create(DataTreeConfiguration.DEFAULT_OPERATIONAL, + SCHEMA_CONTEXT); final DataTreeModification writeMod = store.takeSnapshot().newModification(); final ContainerNode node = ImmutableNodes.containerNode(TestModel.TEST_QNAME); @@ -1151,7 +1150,7 @@ public class ShardTest extends AbstractShardTest { private void testCommitWhenTransactionHasModifications(final boolean readWrite) throws Exception { new ShardTestKit(getSystem()) { { - final TipProducingDataTree dataTree = createDelegatingMockDataTree(); + final DataTree dataTree = createDelegatingMockDataTree(); final TestActorRef shard = actorFactory.createTestActor( newShardBuilder().dataTree(dataTree).props().withDispatcher(Dispatchers.DefaultDispatcherId()), "testCommitWhenTransactionHasModifications-" + readWrite); @@ -1208,7 +1207,7 @@ public class ShardTest extends AbstractShardTest { public void testCommitPhaseFailure() throws Exception { new ShardTestKit(getSystem()) { { - final TipProducingDataTree dataTree = createDelegatingMockDataTree(); + final DataTree dataTree = createDelegatingMockDataTree(); final TestActorRef shard = actorFactory.createTestActor( newShardBuilder().dataTree(dataTree).props().withDispatcher(Dispatchers.DefaultDispatcherId()), "testCommitPhaseFailure"); @@ -1285,7 +1284,7 @@ public class ShardTest extends AbstractShardTest { public void testPreCommitPhaseFailure() throws Exception { new ShardTestKit(getSystem()) { { - final TipProducingDataTree dataTree = createDelegatingMockDataTree(); + final DataTree dataTree = createDelegatingMockDataTree(); final TestActorRef shard = actorFactory.createTestActor( newShardBuilder().dataTree(dataTree).props().withDispatcher(Dispatchers.DefaultDispatcherId()), "testPreCommitPhaseFailure"); @@ -1353,7 +1352,7 @@ public class ShardTest extends AbstractShardTest { public void testCanCommitPhaseFailure() throws Exception { new ShardTestKit(getSystem()) { { - final TipProducingDataTree dataTree = createDelegatingMockDataTree(); + final DataTree dataTree = createDelegatingMockDataTree(); final TestActorRef shard = actorFactory.createTestActor( newShardBuilder().dataTree(dataTree).props().withDispatcher(Dispatchers.DefaultDispatcherId()), "testCanCommitPhaseFailure"); @@ -1400,7 +1399,7 @@ public class ShardTest extends AbstractShardTest { private void testImmediateCommitWithCanCommitPhaseFailure(final boolean readWrite) throws Exception { new ShardTestKit(getSystem()) { { - final TipProducingDataTree dataTree = createDelegatingMockDataTree(); + final DataTree dataTree = createDelegatingMockDataTree(); final TestActorRef shard = actorFactory.createTestActor( newShardBuilder().dataTree(dataTree).props().withDispatcher(Dispatchers.DefaultDispatcherId()), "testImmediateCommitWithCanCommitPhaseFailure-" + readWrite); @@ -1988,8 +1987,8 @@ public class ShardTest extends AbstractShardTest { */ @Test public void testInMemoryDataTreeRestore() throws ReadFailedException, DataValidationFailedException { - final DataTree store = InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL); - store.setSchemaContext(SCHEMA_CONTEXT); + final DataTree store = new InMemoryDataTreeFactory().create(DataTreeConfiguration.DEFAULT_OPERATIONAL, + SCHEMA_CONTEXT); final DataTreeModification putTransaction = store.takeSnapshot().newModification(); putTransaction.write(TestModel.TEST_PATH, diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/TransactionProxyTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/TransactionProxyTest.java index 8ee4a2dd70..da47b222df 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/TransactionProxyTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/TransactionProxyTest.java @@ -924,7 +924,8 @@ public class TransactionProxyTest extends AbstractTransactionProxyTest { doReturn(dataTreeSnapshot).when(dataTree).takeSnapshot(); doReturn(dataTreeModification).when(dataTreeSnapshot).newModification(); - doReturn(Optional.of(readResponse)).when(dataTreeModification).readNode(any(YangInstanceIdentifier.class)); + doReturn(java.util.Optional.of(readResponse)).when(dataTreeModification).readNode( + any(YangInstanceIdentifier.class)); return dataTree; } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/AbstractEntityOwnershipTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/AbstractEntityOwnershipTest.java index 05d37fd1b2..6b148af4fa 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/AbstractEntityOwnershipTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/AbstractEntityOwnershipTest.java @@ -24,9 +24,9 @@ import akka.pattern.Patterns; import akka.testkit.TestActorRef; import akka.util.Timeout; import com.google.common.base.Function; -import com.google.common.base.Optional; import com.google.common.base.Stopwatch; import com.google.common.util.concurrent.Uninterruptibles; +import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; @@ -78,8 +78,8 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { private static final AtomicInteger NEXT_SHARD_NUM = new AtomicInteger(); - protected void verifyEntityCandidate(NormalizedNode node, String entityType, - YangInstanceIdentifier entityId, String candidateName, boolean expectPresent) { + protected void verifyEntityCandidate(final NormalizedNode node, final String entityType, + final YangInstanceIdentifier entityId, final String candidateName, final boolean expectPresent) { try { assertNotNull("Missing " + EntityOwners.QNAME.toString(), node); assertTrue(node instanceof ContainerNode); @@ -98,8 +98,9 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { } } - protected void verifyEntityCandidate(String entityType, YangInstanceIdentifier entityId, String candidateName, - Function> reader, boolean expectPresent) { + protected void verifyEntityCandidate(final String entityType, final YangInstanceIdentifier entityId, + final String candidateName, final Function> reader, + final boolean expectPresent) { AssertionError lastError = null; Stopwatch sw = Stopwatch.createStarted(); while (sw.elapsed(TimeUnit.MILLISECONDS) <= 5000) { @@ -116,13 +117,13 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { throw lastError; } - protected void verifyEntityCandidate(String entityType, YangInstanceIdentifier entityId, String candidateName, - Function> reader) { + protected void verifyEntityCandidate(final String entityType, final YangInstanceIdentifier entityId, + final String candidateName, final Function> reader) { verifyEntityCandidate(entityType, entityId, candidateName, reader, true); } - protected MapEntryNode getMapEntryNodeChild(DataContainerNode parent, QName childMap, - QName child, Object key, boolean expectPresent) { + protected MapEntryNode getMapEntryNodeChild(final DataContainerNode parent, + final QName childMap, final QName child, final Object key, final boolean expectPresent) { Optional> childNode = parent.getChild(new NodeIdentifier(childMap)); assertEquals("Missing " + childMap.toString(), true, childNode.isPresent()); @@ -139,8 +140,8 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { return entityTypeEntry.isPresent() ? entityTypeEntry.get() : null; } - static void verifyOwner(String expected, String entityType, YangInstanceIdentifier entityId, - Function> reader) { + static void verifyOwner(final String expected, final String entityType, final YangInstanceIdentifier entityId, + final Function> reader) { AssertionError lastError = null; YangInstanceIdentifier entityPath = entityPath(entityType, entityId).node(ENTITY_OWNER_QNAME); Stopwatch sw = Stopwatch.createStarted(); @@ -160,8 +161,8 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { } @SuppressWarnings("checkstyle:IllegalCatch") - static void verifyOwner(final TestActorRef shard, String entityType, - YangInstanceIdentifier entityId, String localMemberName) { + static void verifyOwner(final TestActorRef shard, final String entityType, + final YangInstanceIdentifier entityId, final String localMemberName) { verifyOwner(localMemberName, entityType, entityId, path -> { try { return AbstractShardTest.readStore(shard, path); @@ -171,8 +172,8 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { }); } - protected void verifyNodeRemoved(YangInstanceIdentifier path, - Function> reader) { + protected void verifyNodeRemoved(final YangInstanceIdentifier path, + final Function> reader) { AssertionError lastError = null; Stopwatch sw = Stopwatch.createStarted(); while (sw.elapsed(TimeUnit.MILLISECONDS) <= 5000) { @@ -189,21 +190,21 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { throw lastError; } - static void writeNode(YangInstanceIdentifier path, NormalizedNode node, ShardDataTree shardDataTree) - throws DataValidationFailedException { + static void writeNode(final YangInstanceIdentifier path, final NormalizedNode node, + final ShardDataTree shardDataTree) throws DataValidationFailedException { DataTreeModification modification = shardDataTree.newModification(); modification.merge(path, node); commit(shardDataTree, modification); } - static void deleteNode(YangInstanceIdentifier path, ShardDataTree shardDataTree) + static void deleteNode(final YangInstanceIdentifier path, final ShardDataTree shardDataTree) throws DataValidationFailedException { DataTreeModification modification = shardDataTree.newModification(); modification.delete(path); commit(shardDataTree, modification); } - static void commit(ShardDataTree shardDataTree, DataTreeModification modification) + static void commit(final ShardDataTree shardDataTree, final DataTreeModification modification) throws DataValidationFailedException { modification.ready(); shardDataTree.getDataTree().validate(modification); @@ -221,7 +222,7 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { final boolean expIsOwner, final boolean expHasOwner, final boolean expInJeopardy) { return Matchers.argThat(new ArgumentMatcher() { @Override - public boolean matches(Object argument) { + public boolean matches(final Object argument) { DOMEntityOwnershipChange change = (DOMEntityOwnershipChange) argument; return expEntity.equals(change.getEntity()) && expWasOwner == change.getState().wasOwner() && expIsOwner == change.getState().isOwner() && expHasOwner == change.getState().hasOwner() @@ -229,7 +230,7 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { } @Override - public void describeTo(Description description) { + public void describeTo(final Description description) { description.appendValue(new DOMEntityOwnershipChange(expEntity, EntityOwnershipChangeState.from( expWasOwner, expIsOwner, expHasOwner), expInJeopardy)); } @@ -239,13 +240,13 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { static DOMEntityOwnershipChange ownershipChange(final DOMEntity expEntity) { return Matchers.argThat(new ArgumentMatcher() { @Override - public boolean matches(Object argument) { + public boolean matches(final Object argument) { DOMEntityOwnershipChange change = (DOMEntityOwnershipChange) argument; return expEntity.equals(change.getEntity()); } @Override - public void describeTo(Description description) { + public void describeTo(final Description description) { description.appendValue(new DOMEntityOwnershipChange(expEntity, EntityOwnershipChangeState.from( false, false, false))); } @@ -253,8 +254,8 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { } @SuppressWarnings("checkstyle:IllegalCatch") - static void verifyNoOwnerSet(TestActorRef shard, String entityType, - YangInstanceIdentifier entityId) { + static void verifyNoOwnerSet(final TestActorRef shard, final String entityType, + final YangInstanceIdentifier entityId) { YangInstanceIdentifier entityPath = entityPath(entityType, entityId).node(ENTITY_OWNER_QNAME); try { NormalizedNode node = AbstractShardTest.readStore(shard, entityPath); @@ -268,7 +269,7 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { } static void verifyRaftState(final TestActorRef shard, - Consumer verifier) + final Consumer verifier) throws Exception { AssertionError lastError = null; Stopwatch sw = Stopwatch.createStarted(); @@ -288,14 +289,14 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { throw lastError; } - static ShardIdentifier newShardId(String memberName) { + static ShardIdentifier newShardId(final String memberName) { return ShardIdentifier.create("entity-ownership", MemberName.forName(memberName), "operational" + NEXT_SHARD_NUM.getAndIncrement()); } @SuppressWarnings("checkstyle:IllegalCatch") - void verifyEntityCandidateRemoved(final TestActorRef shard, String entityType, - YangInstanceIdentifier entityId, String candidateName) { + void verifyEntityCandidateRemoved(final TestActorRef shard, final String entityType, + final YangInstanceIdentifier entityId, final String candidateName) { verifyNodeRemoved(candidatePath(entityType, entityId, candidateName), path -> { try { return AbstractShardTest.readStore(shard, path); @@ -306,8 +307,8 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { } @SuppressWarnings("checkstyle:IllegalCatch") - void verifyCommittedEntityCandidate(final TestActorRef shard, String entityType, - YangInstanceIdentifier entityId, String candidateName) { + void verifyCommittedEntityCandidate(final TestActorRef shard, + final String entityType, final YangInstanceIdentifier entityId, final String candidateName) { verifyEntityCandidate(entityType, entityId, candidateName, path -> { try { return AbstractShardTest.readStore(shard, path); @@ -318,8 +319,8 @@ public class AbstractEntityOwnershipTest extends AbstractActorTest { } @SuppressWarnings("checkstyle:IllegalCatch") - void verifyNoEntityCandidate(final TestActorRef shard, String entityType, - YangInstanceIdentifier entityId, String candidateName) { + void verifyNoEntityCandidate(final TestActorRef shard, final String entityType, + final YangInstanceIdentifier entityId, final String candidateName) { verifyEntityCandidate(entityType, entityId, candidateName, path -> { try { return AbstractShardTest.readStore(shard, path); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipStatisticsTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipStatisticsTest.java index d15111210b..652c5279ff 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipStatisticsTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipStatisticsTest.java @@ -120,7 +120,7 @@ public class EntityOwnershipStatisticsTest extends AbstractActorTest { assertStatistics(statistics, REMOTE_MEMBER_NAME2, 0L); // Clear the owner for entity 2 - writeNode(entityPath(ENTITY_TYPE, ENTITY_ID2), entityEntryWithOwner(ENTITY_ID2, null)); + writeNode(entityPath(ENTITY_TYPE, ENTITY_ID2), entityEntryWithOwner(ENTITY_ID2, "")); statistics = ownershipStatistics.all(); assertStatistics(statistics, LOCAL_MEMBER_NAME, 1L); assertStatistics(statistics, REMOTE_MEMBER_NAME1, 0L); @@ -128,7 +128,7 @@ public class EntityOwnershipStatisticsTest extends AbstractActorTest { // Clear the owner for entity 2 again - expect no change - writeNode(entityPath(ENTITY_TYPE, ENTITY_ID2), entityEntryWithOwner(ENTITY_ID2, null)); + writeNode(entityPath(ENTITY_TYPE, ENTITY_ID2), entityEntryWithOwner(ENTITY_ID2, "")); statistics = ownershipStatistics.all(); assertStatistics(statistics, LOCAL_MEMBER_NAME, 1L); assertStatistics(statistics, REMOTE_MEMBER_NAME1, 0L); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/messages/ReadyLocalTransactionSerializerTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/messages/ReadyLocalTransactionSerializerTest.java index 3546a50f56..cc5dbff973 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/messages/ReadyLocalTransactionSerializerTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/messages/ReadyLocalTransactionSerializerTest.java @@ -10,6 +10,7 @@ package org.opendaylight.controller.cluster.datastore.messages; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import java.io.NotSerializableException; import java.util.List; import org.junit.Test; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; @@ -21,9 +22,9 @@ import org.opendaylight.controller.cluster.datastore.modification.WriteModificat import org.opendaylight.controller.md.cluster.datastore.model.TestModel; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TipProducingDataTree; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory; @@ -35,9 +36,9 @@ import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFac public class ReadyLocalTransactionSerializerTest extends AbstractTest { @Test - public void testToAndFromBinary() { - TipProducingDataTree dataTree = InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL); - dataTree.setSchemaContext(TestModel.createTestContext()); + public void testToAndFromBinary() throws NotSerializableException { + DataTree dataTree = new InMemoryDataTreeFactory().create( + DataTreeConfiguration.DEFAULT_OPERATIONAL, TestModel.createTestContext()); DataTreeModification modification = dataTree.takeSnapshot().newModification(); ContainerNode writeData = ImmutableNodes.containerNode(TestModel.TEST_QNAME); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayloadTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayloadTest.java index 315246d497..09273b363c 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayloadTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayloadTest.java @@ -26,12 +26,12 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TipProducingDataTree; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; @@ -183,8 +183,8 @@ public class CommitTransactionPayloadTest extends AbstractTest { @Test public void testUnmodifiedRootCandidate() throws Exception { - final TipProducingDataTree dataTree = InMemoryDataTreeFactory.getInstance().create(TreeType.CONFIGURATION); - dataTree.setSchemaContext(SchemaContextHelper.select(SchemaContextHelper.CARS_YANG)); + final DataTree dataTree = new InMemoryDataTreeFactory().create( + DataTreeConfiguration.DEFAULT_CONFIGURATION, SchemaContextHelper.select(SchemaContextHelper.CARS_YANG)); DataTreeModification modification = dataTree.takeSnapshot().newModification(); modification.ready(); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/MockDataTreeChangeListener.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/MockDataTreeChangeListener.java index b414e0f269..e1a881f7ee 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/MockDataTreeChangeListener.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/MockDataTreeChangeListener.java @@ -11,13 +11,13 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.fail; -import com.google.common.base.Optional; -import com.google.common.collect.Lists; import com.google.common.util.concurrent.Uninterruptibles; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -31,16 +31,16 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; public class MockDataTreeChangeListener implements DOMDataTreeChangeListener { - private final List changeList = Lists.newArrayList(); + private final List changeList = new ArrayList<>(); private volatile CountDownLatch changeLatch; private int expChangeEventCount; - public MockDataTreeChangeListener(int expChangeEventCount) { + public MockDataTreeChangeListener(final int expChangeEventCount) { reset(expChangeEventCount); } - public void reset(int newExpChangeEventCount) { + public void reset(final int newExpChangeEventCount) { changeLatch = new CountDownLatch(newExpChangeEventCount); this.expChangeEventCount = newExpChangeEventCount; synchronized (changeList) { @@ -59,7 +59,7 @@ public class MockDataTreeChangeListener implements DOMDataTreeChangeListener { } @SuppressWarnings({ "unchecked", "rawtypes" }) - public void waitForChangeEvents(YangInstanceIdentifier... expPaths) { + public void waitForChangeEvents(final YangInstanceIdentifier... expPaths) { boolean done = Uninterruptibles.awaitUninterruptibly(changeLatch, 5, TimeUnit.SECONDS); if (!done) { fail(String.format("Missing change notifications. Expected: %d. Actual: %d", @@ -100,7 +100,7 @@ public class MockDataTreeChangeListener implements DOMDataTreeChangeListener { } } - public void verifyNotifiedData(YangInstanceIdentifier... paths) { + public void verifyNotifiedData(final YangInstanceIdentifier... paths) { Set pathSet = new HashSet<>(Arrays.asList(paths)); synchronized (changeList) { for (DataTreeCandidate c : changeList) { @@ -113,14 +113,14 @@ public class MockDataTreeChangeListener implements DOMDataTreeChangeListener { } } - public void expectNoMoreChanges(String assertMsg) { + public void expectNoMoreChanges(final String assertMsg) { Uninterruptibles.sleepUninterruptibly(500, TimeUnit.MILLISECONDS); synchronized (changeList) { assertEquals(assertMsg, expChangeEventCount, changeList.size()); } } - public void verifyNoNotifiedData(YangInstanceIdentifier... paths) { + public void verifyNoNotifiedData(final YangInstanceIdentifier... paths) { Set pathSet = new HashSet<>(Arrays.asList(paths)); synchronized (changeList) { for (DataTreeCandidate c : changeList) { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModificationTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModificationTest.java index 2d345e5ea8..18949ac21e 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModificationTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/PruningDataTreeModificationTest.java @@ -23,9 +23,9 @@ import static org.opendaylight.controller.md.cluster.datastore.model.TestModel.i import static org.opendaylight.controller.md.cluster.datastore.model.TestModel.outerNode; import static org.opendaylight.controller.md.cluster.datastore.model.TestModel.outerNodeEntry; -import com.google.common.base.Optional; import com.google.common.reflect.Reflection; import java.lang.reflect.InvocationTargetException; +import java.util.Optional; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; @@ -43,12 +43,12 @@ import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateTip; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModificationCursor; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TipProducingDataTree; import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; @@ -66,7 +66,7 @@ public class PruningDataTreeModificationTest { @Mock private DataTreeModification mockModification; - private TipProducingDataTree dataTree; + private DataTree dataTree; private DataTreeModification realModification; private DataTreeModification proxyModification; private PruningDataTreeModification pruningDataTreeModification; @@ -76,8 +76,8 @@ public class PruningDataTreeModificationTest { public void setUp() { MockitoAnnotations.initMocks(this); - dataTree = InMemoryDataTreeFactory.getInstance().create(TreeType.CONFIGURATION); - dataTree.setSchemaContext(SCHEMA_CONTEXT); + dataTree = new InMemoryDataTreeFactory().create(DataTreeConfiguration.DEFAULT_CONFIGURATION, + SCHEMA_CONTEXT); realModification = dataTree.takeSnapshot().newModification(); proxyModification = Reflection.newProxy(DataTreeModification.class, (proxy, method, args) -> { @@ -128,7 +128,7 @@ public class PruningDataTreeModificationTest { verify(mockModification, times(1)).merge(path, normalizedNode); - DataTreeCandidateTip candidate = getCandidate(); + DataTreeCandidate candidate = getCandidate(); assertEquals("getModificationType", ModificationType.UNMODIFIED, candidate.getRootNode().getModificationType()); } @@ -153,7 +153,7 @@ public class PruningDataTreeModificationTest { new YangInstanceIdentifier.NodeIdentifier(TEST_QNAME)).withChild(outerNode).build(); Optional> actual = dataTree.takeSnapshot().readNode(path); - assertEquals("After pruning present", true, actual.isPresent()); + assertTrue("After pruning present", actual.isPresent()); assertEquals("After pruning", prunedNode, actual.get()); } @@ -166,7 +166,7 @@ public class PruningDataTreeModificationTest { verify(mockModification, times(1)).merge(path, normalizedNode); - DataTreeCandidateTip candidate = getCandidate(); + DataTreeCandidate candidate = getCandidate(); assertEquals("getModificationType", ModificationType.UNMODIFIED, candidate.getRootNode().getModificationType()); } @@ -181,8 +181,8 @@ public class PruningDataTreeModificationTest { @Test public void testWriteRootNode() throws Exception { - final DataTree localDataTree = InMemoryDataTreeFactory.getInstance().create(TreeType.CONFIGURATION); - localDataTree.setSchemaContext(SCHEMA_CONTEXT); + final DataTree localDataTree = new InMemoryDataTreeFactory().create( + DataTreeConfiguration.DEFAULT_CONFIGURATION, SCHEMA_CONTEXT); DataTreeModification mod = localDataTree.takeSnapshot().newModification(); mod.write(CarsModel.BASE_PATH, CarsModel.create()); @@ -195,7 +195,7 @@ public class PruningDataTreeModificationTest { dataTree.commit(getCandidate()); Optional> actual = dataTree.takeSnapshot().readNode(YangInstanceIdentifier.EMPTY); - assertEquals("Root present", true, actual.isPresent()); + assertTrue("Root present", actual.isPresent()); assertEquals("Root node", normalizedNode, actual.get()); } @@ -227,7 +227,7 @@ public class PruningDataTreeModificationTest { verify(mockModification, times(1)).write(path, normalizedNode); - DataTreeCandidateTip candidate = getCandidate(); + DataTreeCandidate candidate = getCandidate(); assertEquals("getModificationType", ModificationType.UNMODIFIED, candidate.getRootNode().getModificationType()); } @@ -254,7 +254,7 @@ public class PruningDataTreeModificationTest { .withChild(ImmutableNodes.leafNode(NAME_QNAME, "name")).build(); Optional> actual = dataTree.takeSnapshot().readNode(path); - assertEquals("After pruning present", true, actual.isPresent()); + assertTrue("After pruning present", actual.isPresent()); assertEquals("After pruning", prunedNode, actual.get()); } @@ -289,12 +289,11 @@ public class PruningDataTreeModificationTest { dataTreeModification instanceof PruningDataTreeModification); } - private DataTreeCandidateTip getCandidate() throws DataValidationFailedException { + private DataTreeCandidate getCandidate() throws DataValidationFailedException { pruningDataTreeModification.ready(); DataTreeModification mod = pruningDataTreeModification.delegate(); mod = mod == proxyModification ? realModification : mod; dataTree.validate(mod); - DataTreeCandidateTip candidate = dataTree.prepare(mod); - return candidate; + return dataTree.prepare(mod); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/sharding/DistributedShardedDOMDataTreeTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/sharding/DistributedShardedDOMDataTreeTest.java index 23e6fdd70e..3e224a9715 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/sharding/DistributedShardedDOMDataTreeTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/sharding/DistributedShardedDOMDataTreeTest.java @@ -247,7 +247,7 @@ public class DistributedShardedDOMDataTreeTest extends AbstractTest { captorForSubtrees.capture()); final List> capturedValue = captorForChanges.getAllValues(); - final Optional> dataAfter = + final java.util.Optional> dataAfter = capturedValue.get(0).iterator().next().getRootNode().getDataAfter(); final NormalizedNode expected = ImmutableContainerNodeBuilder.create() diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/md/cluster/datastore/model/CompositeModel.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/md/cluster/datastore/model/CompositeModel.java index 3047082b4c..17f1c618bc 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/md/cluster/datastore/model/CompositeModel.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/md/cluster/datastore/model/CompositeModel.java @@ -11,10 +11,7 @@ import static org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes.ma import static org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes.mapEntryBuilder; import static org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes.mapNodeBuilder; -import java.io.InputStream; -import java.util.ArrayList; import java.util.HashSet; -import java.util.List; import java.util.Set; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; @@ -34,7 +31,6 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableCo import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetEntryNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetNodeBuilder; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; public final class CompositeModel { @@ -112,33 +108,9 @@ public final class CompositeModel { } - public static InputStream getDatastoreTestInputStream() { - return getInputStream(DATASTORE_TEST_YANG); - } - - public static InputStream getDatastoreAugInputStream() { - return getInputStream(DATASTORE_AUG_YANG); - } - - public static InputStream getDatastoreTestNotificationInputStream() { - return getInputStream(DATASTORE_TEST_NOTIFICATION_YANG); - } - - private static InputStream getInputStream(final String resourceName) { - return CompositeModel.class.getResourceAsStream(resourceName); - } - public static SchemaContext createTestContext() { - List inputStreams = new ArrayList<>(); - inputStreams.add(getDatastoreTestInputStream()); - inputStreams.add(getDatastoreAugInputStream()); - inputStreams.add(getDatastoreTestNotificationInputStream()); - - try { - return YangParserTestUtils.parseYangStreams(inputStreams); - } catch (ReactorException e) { - throw new RuntimeException("Unable to build schema context from " + inputStreams, e); - } + return YangParserTestUtils.parseYangResources(CompositeModel.class, DATASTORE_TEST_YANG, DATASTORE_AUG_YANG, + DATASTORE_TEST_NOTIFICATION_YANG); } /** diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/md/cluster/datastore/model/SchemaContextHelper.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/md/cluster/datastore/model/SchemaContextHelper.java index f2d23e0059..7f8b7483a4 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/md/cluster/datastore/model/SchemaContextHelper.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/md/cluster/datastore/model/SchemaContextHelper.java @@ -9,14 +9,8 @@ package org.opendaylight.controller.md.cluster.datastore.model; import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; public final class SchemaContextHelper { @@ -38,37 +32,17 @@ public final class SchemaContextHelper { } public static SchemaContext select(final String... schemaFiles) { - List streams = new ArrayList<>(schemaFiles.length); - - for (String schemaFile : schemaFiles) { - streams.add(getInputStream(schemaFile)); - } - - try { - return YangParserTestUtils.parseYangStreams(streams); - } catch (ReactorException e) { - throw new RuntimeException("Unable to build schema context from " + streams, e); - } + return YangParserTestUtils.parseYangResources(SchemaContextHelper.class, schemaFiles); } public static SchemaContext distributedShardedDOMDataTreeSchemaContext() { - final List streams = new ArrayList<>(); - try { - // we need prefix-shard-configuration and odl-datastore-test models - // for DistributedShardedDOMDataTree tests - streams.add(getInputStream(ODL_DATASTORE_TEST_YANG)); - streams.add(new FileInputStream("src/main/yang/prefix-shard-configuration.yang")); - return YangParserTestUtils.parseYangStreams(streams); - } catch (FileNotFoundException | ReactorException e) { - throw new RuntimeException(e); - } + // we need prefix-shard-configuration and odl-datastore-test models + // for DistributedShardedDOMDataTree tests + return YangParserTestUtils.parseYangResources(SchemaContextHelper.class, ODL_DATASTORE_TEST_YANG, + "/META-INF/yang/prefix-shard-configuration@2017-01-10.yang"); } public static SchemaContext entityOwners() { - try { - return YangParserTestUtils.parseYangSources(new File("src/main/yang/entity-owners.yang")); - } catch (IOException | ReactorException e) { - throw new RuntimeException(e); - } + return YangParserTestUtils.parseYangFiles(new File("src/main/yang/entity-owners.yang")); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/md/cluster/datastore/model/TestModel.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/md/cluster/datastore/model/TestModel.java index c75bd04bf4..836d7f9cfa 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/md/cluster/datastore/model/TestModel.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/md/cluster/datastore/model/TestModel.java @@ -7,11 +7,6 @@ */ package org.opendaylight.controller.md.cluster.datastore.model; -import com.google.common.io.Resources; -import java.io.IOException; -import java.io.InputStream; -import java.util.Collections; -import java.util.List; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; @@ -23,7 +18,6 @@ import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; public final class TestModel { @@ -63,20 +57,7 @@ public final class TestModel { } public static SchemaContext createTestContext() { - final List sources; - - try { - sources = Collections.singletonList( - Resources.asByteSource(TestModel.class.getResource(DATASTORE_TEST_YANG)).openStream()); - } catch (IOException e1) { - throw new ExceptionInInitializerError(e1); - } - - try { - return YangParserTestUtils.parseYangStreams(sources); - } catch (ReactorException e) { - throw new RuntimeException("Unable to build schema context from " + sources, e); - } + return YangParserTestUtils.parseYangResource(DATASTORE_TEST_YANG); } public static DataContainerChild outerNode(final int... ids) { diff --git a/opendaylight/md-sal/sal-dom-api/src/test/java/org/opendaylight/controller/md/sal/dom/api/AbstractDOMDataTreeServiceTestSuite.java b/opendaylight/md-sal/sal-dom-api/src/test/java/org/opendaylight/controller/md/sal/dom/api/AbstractDOMDataTreeServiceTestSuite.java index 896c606eb9..d2872e256c 100644 --- a/opendaylight/md-sal/sal-dom-api/src/test/java/org/opendaylight/controller/md/sal/dom/api/AbstractDOMDataTreeServiceTestSuite.java +++ b/opendaylight/md-sal/sal-dom-api/src/test/java/org/opendaylight/controller/md/sal/dom/api/AbstractDOMDataTreeServiceTestSuite.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.md.sal.dom.api; import static org.junit.Assert.assertNotNull; + import com.google.common.util.concurrent.CheckedFuture; import java.net.URI; import java.util.Collections; @@ -26,7 +27,7 @@ import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableCo * can be used. */ public abstract class AbstractDOMDataTreeServiceTestSuite { - protected static final QNameModule TEST_MODULE = QNameModule.create(URI.create("urn:opendaylight:params:xml:ns:yang:controller:md:sal:test:store"), null); + protected static final QNameModule TEST_MODULE = QNameModule.create(URI.create("urn:opendaylight:params:xml:ns:yang:controller:md:sal:test:store")); protected static final YangInstanceIdentifier UNORDERED_CONTAINER_IID = YangInstanceIdentifier.create( new NodeIdentifier(QName.create(TEST_MODULE, "lists")), diff --git a/opendaylight/md-sal/sal-dom-broker-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomInmemoryDataBrokerModule.java b/opendaylight/md-sal/sal-dom-broker-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomInmemoryDataBrokerModule.java index 37ac3deb13..001b4fdeac 100644 --- a/opendaylight/md-sal/sal-dom-broker-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomInmemoryDataBrokerModule.java +++ b/opendaylight/md-sal/sal-dom-broker-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/DomInmemoryDataBrokerModule.java @@ -79,7 +79,7 @@ public final class DomInmemoryDataBrokerModule extends */ ExecutorService listenableFutureExecutor = SpecialExecutors.newBlockingBoundedCachedThreadPool( getMaxDataBrokerFutureCallbackPoolSize(), getMaxDataBrokerFutureCallbackQueueSize(), - "CommitFutures"); + "CommitFutures", SerializedDOMDataBroker.class); final List mBeans = Lists.newArrayList(); final DurationStatisticsTracker commitStatsTracker; @@ -93,7 +93,7 @@ public final class DomInmemoryDataBrokerModule extends * system it's running on. */ ExecutorService commitExecutor = SpecialExecutors.newBoundedSingleThreadExecutor( - getMaxDataBrokerCommitQueueSize(), "WriteTxCommit"); + getMaxDataBrokerCommitQueueSize(), "WriteTxCommit", SerializedDOMDataBroker.class); SerializedDOMDataBroker sdb = new SerializedDOMDataBroker(datastores, new DeadlockDetectingListeningExecutorService(commitExecutor, diff --git a/opendaylight/md-sal/sal-dom-broker-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/SchemaServiceImplSingletonModule.java b/opendaylight/md-sal/sal-dom-broker-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/SchemaServiceImplSingletonModule.java index 93942957df..bb02015e4f 100644 --- a/opendaylight/md-sal/sal-dom-broker-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/SchemaServiceImplSingletonModule.java +++ b/opendaylight/md-sal/sal-dom-broker-config/src/main/java/org/opendaylight/controller/config/yang/md/sal/dom/impl/SchemaServiceImplSingletonModule.java @@ -7,7 +7,7 @@ */ package org.opendaylight.controller.config.yang.md.sal.dom.impl; -import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.ListenableFuture; import org.opendaylight.controller.config.api.osgi.WaitingServiceTracker; import org.opendaylight.controller.sal.core.api.model.SchemaService; import org.opendaylight.controller.sal.core.api.model.YangTextSourceProvider; @@ -15,7 +15,6 @@ import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.osgi.framework.BundleContext; @@ -105,8 +104,8 @@ org.opendaylight.controller.config.yang.md.sal.dom.impl.AbstractSchemaServiceImp } @Override - public CheckedFuture getSource( - SourceIdentifier sourceIdentifier) { + public ListenableFuture getSource( + final SourceIdentifier sourceIdentifier) { return sourceProvider.getSource(sourceIdentifier); } } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMRpcRoutingTable.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMRpcRoutingTable.java index 2e1348718e..800a35fa71 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMRpcRoutingTable.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMRpcRoutingTable.java @@ -138,7 +138,7 @@ final class DOMRpcRoutingTable { private static RpcDefinition findRpcDefinition(final SchemaContext context, final SchemaPath schemaPath) { if (context != null) { final QName qname = schemaPath.getPathFromRoot().iterator().next(); - final Module module = context.findModuleByNamespaceAndRevision(qname.getNamespace(), qname.getRevision()); + final Module module = context.findModule(qname.getModule()).orElse(null); if (module != null && module.getRpcs() != null) { for (RpcDefinition rpc : module.getRpcs()) { if (qname.equals(rpc.getQName())) { diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/RoutedDOMRpcRoutingTableEntry.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/RoutedDOMRpcRoutingTableEntry.java index f2236d4858..52921183fb 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/RoutedDOMRpcRoutingTableEntry.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/RoutedDOMRpcRoutingTableEntry.java @@ -7,12 +7,12 @@ */ package org.opendaylight.controller.md.sal.dom.broker.impl; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.Futures; import java.util.List; import java.util.Map; +import java.util.Optional; import org.opendaylight.controller.md.sal.dom.api.DOMRpcException; import org.opendaylight.controller.md.sal.dom.api.DOMRpcIdentifier; import org.opendaylight.controller.md.sal.dom.api.DOMRpcImplementation; diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/legacy/sharded/adapter/ShardedDOMDataBrokerDelegatingReadWriteTransaction.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/legacy/sharded/adapter/ShardedDOMDataBrokerDelegatingReadWriteTransaction.java index f7705c1ba3..84e19a34fc 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/legacy/sharded/adapter/ShardedDOMDataBrokerDelegatingReadWriteTransaction.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/legacy/sharded/adapter/ShardedDOMDataBrokerDelegatingReadWriteTransaction.java @@ -38,9 +38,9 @@ import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory; import org.opendaylight.yangtools.yang.model.api.SchemaContext; @@ -80,12 +80,12 @@ class ShardedDOMDataBrokerDelegatingReadWriteTransaction implements DOMDataReadW this.txIdentifier = checkNotNull(readWriteTxId); this.initialReadMap = Maps.newEnumMap(LogicalDatastoreType.class); - final InMemoryDataTreeFactory treeFactory = InMemoryDataTreeFactory.getInstance(); + final InMemoryDataTreeFactory treeFactory = new InMemoryDataTreeFactory(); final ImmutableMap.Builder snapshotMapBuilder = ImmutableMap.builder(); final ImmutableMap.Builder> modificationHistoryMapBuilder = ImmutableMap.builder(); for (final LogicalDatastoreType store : LogicalDatastoreType.values()) { - final DataTree tree = treeFactory.create(treeTypeForStore(store)); + final DataTree tree = treeFactory.create(treeConfigForStore(store)); tree.setSchemaContext(ctx); snapshotMapBuilder.put(store, tree.takeSnapshot()); @@ -137,7 +137,7 @@ class ShardedDOMDataBrokerDelegatingReadWriteTransaction implements DOMDataReadW mod.write(path, result.get()); } applyModificationHistoryToSnapshot(mod, currentHistory); - readResult.set(mod.readNode(path)); + readResult.set(Optional.fromJavaUtil(mod.readNode(path))); } @Override @@ -190,17 +190,17 @@ class ShardedDOMDataBrokerDelegatingReadWriteTransaction implements DOMDataReadW private void initialRead(final YangInstanceIdentifier path) { root = path; - final InMemoryDataTreeFactory treeFactory = InMemoryDataTreeFactory.getInstance(); for (final LogicalDatastoreType store : LogicalDatastoreType.values()) { initialReadMap.put(store, readTxDelegate.read(store, path)); } } - private TreeType treeTypeForStore(final LogicalDatastoreType store) { - return store == LogicalDatastoreType.CONFIGURATION ? TreeType.CONFIGURATION : TreeType.OPERATIONAL; + private static DataTreeConfiguration treeConfigForStore(final LogicalDatastoreType store) { + return store == LogicalDatastoreType.CONFIGURATION ? DataTreeConfiguration.DEFAULT_CONFIGURATION + : DataTreeConfiguration.DEFAULT_OPERATIONAL; } - private void applyModificationHistoryToSnapshot(final DataTreeModification dataTreeModification, + private static void applyModificationHistoryToSnapshot(final DataTreeModification dataTreeModification, final Queue modificationHistory) { while (!modificationHistory.isEmpty()) { final Modification modification = modificationHistory.poll(); diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/mount/DOMMountPointServiceImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/mount/DOMMountPointServiceImpl.java index 5fccde2864..c80d75f0d1 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/mount/DOMMountPointServiceImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/mount/DOMMountPointServiceImpl.java @@ -125,7 +125,7 @@ public class DOMMountPointServiceImpl implements DOMMountPointService { } @Override - public void close() throws Exception { + public void close() { unregisterMountPoint(mountPoint.getIdentifier()); } } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/ProxySchemaContext.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/ProxySchemaContext.java index b1c5a915bd..2a614c7d00 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/ProxySchemaContext.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/ProxySchemaContext.java @@ -8,21 +8,19 @@ package org.opendaylight.controller.sal.dom.broker.util; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import java.net.URI; import java.util.Collection; -import java.util.Date; import java.util.List; +import java.util.Optional; import java.util.Set; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; -import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition; +import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition; import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier; import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; @@ -75,31 +73,6 @@ public class ProxySchemaContext implements SchemaContext { return getCurrentSchema().getExtensions(); } - @Override - public Module findModuleByName(final String string, final Date date) { - return getCurrentSchema().findModuleByName(string, date); - } - - @Override - public Set findModuleByNamespace(final URI uri) { - return getCurrentSchema().findModuleByNamespace(uri); - } - - @Override - public Module findModuleByNamespaceAndRevision(final URI uri, final Date date) { - return getCurrentSchema().findModuleByNamespaceAndRevision(uri, date); - } - - @Override - public Optional getModuleSource(final ModuleIdentifier moduleIdentifier) { - return getCurrentSchema().getModuleSource(moduleIdentifier); - } - - @Override - public Set getAllModuleIdentifiers() { - return getCurrentSchema().getAllModuleIdentifiers(); - } - @Override public boolean isPresenceContainer() { return getCurrentSchema().isPresenceContainer(); @@ -121,8 +94,8 @@ public class ProxySchemaContext implements SchemaContext { } @Override - public DataSchemaNode getDataChildByName(final QName name) { - return getCurrentSchema().getDataChildByName(name); + public Optional findDataChildByName(final QName name) { + return getCurrentSchema().findDataChildByName(name); } @Override @@ -131,7 +104,7 @@ public class ProxySchemaContext implements SchemaContext { } @Override - public Set getAvailableAugmentations() { + public Set getAvailableAugmentations() { return getCurrentSchema().getAvailableAugmentations(); } @@ -150,11 +123,6 @@ public class ProxySchemaContext implements SchemaContext { return getCurrentSchema().isConfiguration(); } - @Override - public ConstraintDefinition getConstraints() { - return getCurrentSchema().getConstraints(); - } - @Override public QName getQName() { return getCurrentSchema().getQName(); @@ -171,12 +139,12 @@ public class ProxySchemaContext implements SchemaContext { } @Override - public String getDescription() { + public Optional getDescription() { return getCurrentSchema().getDescription(); } @Override - public String getReference() { + public Optional getReference() { return getCurrentSchema().getReference(); } @@ -184,4 +152,14 @@ public class ProxySchemaContext implements SchemaContext { public Status getStatus() { return getCurrentSchema().getStatus(); } + + @Override + public Optional findModule(final String name, final Optional revision) { + return getCurrentSchema().findModule(name, revision); + } + + @Override + public Optional findModule(final QNameModule qnameModule) { + return getCurrentSchema().findModule(qnameModule); + } } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/YangSchemaUtils.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/YangSchemaUtils.java index 248a294aff..7aa67a1116 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/YangSchemaUtils.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/YangSchemaUtils.java @@ -11,22 +11,27 @@ import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkState; import com.google.common.collect.Lists; +import java.util.Collection; import java.util.Iterator; import java.util.List; +import java.util.Optional; import java.util.Set; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; -import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; -import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; +import org.opendaylight.yangtools.yang.model.api.ActionDefinition; +import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; +import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode; import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; -import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.GroupingDefinition; import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; +import org.opendaylight.yangtools.yang.model.api.MustDefinition; +import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; +import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.Status; @@ -53,8 +58,7 @@ public final class YangSchemaUtils { } QName firstNode = path.iterator().next(); - DataNodeContainer previous = schema.findModuleByNamespaceAndRevision(firstNode.getNamespace(), - firstNode.getRevision()); + DataNodeContainer previous = schema.findModule(firstNode.getModule()).orElse(null); Iterator iterator = path.iterator(); while (iterator.hasNext()) { @@ -91,8 +95,7 @@ public final class YangSchemaUtils { } private static DataSchemaNode searchInCases(final ChoiceSchemaNode choiceNode, final QName arg) { - Set cases = choiceNode.getCases(); - for (ChoiceCaseNode caseNode : cases) { + for (CaseSchemaNode caseNode : choiceNode.getCases().values()) { DataSchemaNode node = caseNode.getDataChildByName(arg); if (node != null) { return node; @@ -130,7 +133,7 @@ public final class YangSchemaUtils { } @Override - public DataSchemaNode getDataChildByName(final QName name) { + public Optional findDataChildByName(final QName name) { // TODO Auto-generated method stub return null; } @@ -142,7 +145,7 @@ public final class YangSchemaUtils { } @Override - public Set getAvailableAugmentations() { + public Set getAvailableAugmentations() { // TODO Auto-generated method stub return null; } @@ -166,53 +169,68 @@ public final class YangSchemaUtils { } @Override - public ConstraintDefinition getConstraints() { + public QName getQName() { // TODO Auto-generated method stub return null; } @Override - public QName getQName() { + public SchemaPath getPath() { // TODO Auto-generated method stub return null; } @Override - public SchemaPath getPath() { + public Optional getDescription() { + return Optional.empty(); + } + + @Override + public Optional getReference() { + return Optional.empty(); + } + + @Override + public Status getStatus() { // TODO Auto-generated method stub return null; } @Override - public String getDescription() { + public List getUnknownSchemaNodes() { // TODO Auto-generated method stub return null; } @Override - public String getReference() { + public boolean isPresenceContainer() { // TODO Auto-generated method stub - return null; + return false; } @Override - public Status getStatus() { + public Set getNotifications() { // TODO Auto-generated method stub return null; } @Override - public List getUnknownSchemaNodes() { + public Set getActions() { // TODO Auto-generated method stub return null; } @Override - public boolean isPresenceContainer() { + public Optional getWhenCondition() { // TODO Auto-generated method stub - return false; + return null; } + @Override + public Collection getMustConstraints() { + // TODO Auto-generated method stub + return null; + } } } diff --git a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerTest.java b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerTest.java index e2baf3ecbf..07ca5450fe 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerTest.java +++ b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMBrokerTest.java @@ -79,7 +79,7 @@ public class DOMBrokerTest { .build(); commitExecutor = new CommitExecutorService(Executors.newSingleThreadExecutor()); - futureExecutor = SpecialExecutors.newBlockingBoundedCachedThreadPool(1, 5, "FCB"); + futureExecutor = SpecialExecutors.newBlockingBoundedCachedThreadPool(1, 5, "FCB", DOMBrokerTest.class); executor = new DeadlockDetectingListeningExecutorService(commitExecutor, TransactionCommitDeadlockException .DEADLOCK_EXCEPTION_SUPPLIER, diff --git a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataTreeListenerTest.java b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataTreeListenerTest.java index a6cd351f12..bad492769f 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataTreeListenerTest.java +++ b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/broker/impl/DOMDataTreeListenerTest.java @@ -100,7 +100,8 @@ public class DOMDataTreeListenerTest { .build(); commitExecutor = new CommitExecutorService(Executors.newSingleThreadExecutor()); - futureExecutor = SpecialExecutors.newBlockingBoundedCachedThreadPool(1, 5, "FCB"); + futureExecutor = SpecialExecutors.newBlockingBoundedCachedThreadPool(1, 5, "FCB", + DOMDataTreeListenerTest.class); executor = new DeadlockDetectingListeningExecutorService(commitExecutor, TransactionCommitDeadlockException .DEADLOCK_EXCEPTION_SUPPLIER, diff --git a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/TestModel.java b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/TestModel.java index 7500173fe7..53096daccf 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/TestModel.java +++ b/opendaylight/md-sal/sal-dom-broker/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/TestModel.java @@ -7,13 +7,9 @@ */ package org.opendaylight.controller.md.sal.dom.store.impl; -import java.io.InputStream; -import java.util.Collections; -import java.util.List; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; public final class TestModel { @@ -39,17 +35,7 @@ public final class TestModel { YangInstanceIdentifier.builder(TEST_PATH).node(OUTER_LIST_QNAME).build(); private static final String DATASTORE_TEST_YANG = "/odl-datastore-test.yang"; - private static InputStream getInputStream() { - return TestModel.class.getResourceAsStream(DATASTORE_TEST_YANG); - } - public static SchemaContext createTestContext() { - final List streams = Collections.singletonList(getInputStream()); - - try { - return YangParserTestUtils.parseYangStreams(streams); - } catch (ReactorException e) { - throw new RuntimeException("Unable to build schema context from " + streams, e); - } + return YangParserTestUtils.parseYangResource(DATASTORE_TEST_YANG); } } diff --git a/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/SnapshotBackedReadTransaction.java b/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/SnapshotBackedReadTransaction.java index 1e68c61319..8a59149a02 100644 --- a/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/SnapshotBackedReadTransaction.java +++ b/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/SnapshotBackedReadTransaction.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.sal.core.spi.data; import static com.google.common.base.Preconditions.checkNotNull; + import com.google.common.annotations.Beta; import com.google.common.base.Optional; import com.google.common.base.Preconditions; @@ -64,7 +65,7 @@ public final class SnapshotBackedReadTransaction extends AbstractDOMStoreTran } try { - return Futures.immediateCheckedFuture(snapshot.readNode(path)); + return Futures.immediateCheckedFuture(Optional.fromJavaUtil(snapshot.readNode(path))); } catch (Exception e) { LOG.error("Tx: {} Failed Read of {}", getIdentifier(), path, e); return Futures.immediateFailedCheckedFuture(new ReadFailedException("Read failed",e)); diff --git a/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/SnapshotBackedWriteTransaction.java b/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/SnapshotBackedWriteTransaction.java index dc600dd130..a5b7ea6253 100644 --- a/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/SnapshotBackedWriteTransaction.java +++ b/opendaylight/md-sal/sal-dom-spi/src/main/java/org/opendaylight/controller/sal/core/spi/data/SnapshotBackedWriteTransaction.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.sal.core.spi.data; import static com.google.common.base.Preconditions.checkState; + import com.google.common.annotations.Beta; import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.Optional; @@ -119,11 +120,12 @@ public class SnapshotBackedWriteTransaction extends AbstractDOMStoreTransacti * @return null if the the transaction has been closed; */ final Optional> readSnapshotNode(final YangInstanceIdentifier path) { - return readyImpl == null ? null : mutableTree.readNode(path); + return readyImpl == null ? null : Optional.fromJavaUtil(mutableTree.readNode(path)); } private final void checkNotReady() { - checkState(readyImpl != null, "Transaction %s is no longer open. No further modifications allowed.", getIdentifier()); + checkState(readyImpl != null, "Transaction %s is no longer open. No further modifications allowed.", + getIdentifier()); } @Override diff --git a/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMDataStore.java b/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMDataStore.java index 61ecf93732..b5e5e8331e 100644 --- a/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMDataStore.java +++ b/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMDataStore.java @@ -7,8 +7,8 @@ */ package org.opendaylight.controller.md.sal.dom.store.impl; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; +import java.util.Optional; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; @@ -37,10 +37,10 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; -import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; @@ -99,10 +99,10 @@ public class InMemoryDOMDataStore extends TransactionReadyPrototype impl switch (type) { case CONFIGURATION: - dataTree = InMemoryDataTreeFactory.getInstance().create(TreeType.CONFIGURATION); + dataTree = new InMemoryDataTreeFactory().create(DataTreeConfiguration.DEFAULT_CONFIGURATION); break; case OPERATIONAL: - dataTree = InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL); + dataTree = new InMemoryDataTreeFactory().create(DataTreeConfiguration.DEFAULT_OPERATIONAL); break; default: throw new IllegalArgumentException("Data store " + type + " not supported"); diff --git a/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMDataStoreFactory.java b/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMDataStoreFactory.java index d2297f28c9..dde694207c 100644 --- a/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMDataStoreFactory.java +++ b/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMDataStoreFactory.java @@ -140,7 +140,7 @@ public final class InMemoryDOMDataStoreFactory { int dclExecutorMaxPoolSize = actualProperties.getMaxDataChangeExecutorPoolSize(); ExecutorService dataChangeListenerExecutor = SpecialExecutors.newBlockingBoundedFastThreadPool( - dclExecutorMaxPoolSize, dclExecutorMaxQueueSize, name + "-DCL" ); + dclExecutorMaxPoolSize, dclExecutorMaxQueueSize, name + "-DCL", InMemoryDOMDataStore.class); final InMemoryDOMDataStore dataStore = new InMemoryDOMDataStore(name, type, dataChangeListenerExecutor, actualProperties.getMaxDataChangeListenerQueueSize(), debugTransactions); diff --git a/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMStoreTreeChangePublisher.java b/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMStoreTreeChangePublisher.java index 22e4c4d8a3..e469a15958 100644 --- a/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMStoreTreeChangePublisher.java +++ b/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMStoreTreeChangePublisher.java @@ -7,9 +7,9 @@ */ package org.opendaylight.controller.md.sal.dom.store.impl; -import com.google.common.base.Optional; import java.util.Collection; import java.util.Collections; +import java.util.Optional; import java.util.concurrent.ExecutorService; import javax.annotation.Nonnull; import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeListener; diff --git a/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/ResolveDataChangeEventsTask.java b/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/ResolveDataChangeEventsTask.java index fac78e7dbb..6b2e4d51c5 100644 --- a/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/ResolveDataChangeEventsTask.java +++ b/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/ResolveDataChangeEventsTask.java @@ -8,12 +8,12 @@ package org.opendaylight.controller.md.sal.dom.store.impl; import com.google.common.annotations.Beta; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; import java.util.Collection; import java.util.Map.Entry; +import java.util.Optional; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; import org.opendaylight.controller.md.sal.dom.store.impl.DOMImmutableDataChangeEvent.Builder; import org.opendaylight.controller.md.sal.dom.store.impl.DOMImmutableDataChangeEvent.SimpleEventFactory; diff --git a/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/ListenerNode.java b/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/ListenerNode.java index 578320ea90..1928ec9670 100644 --- a/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/ListenerNode.java +++ b/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/ListenerNode.java @@ -7,9 +7,9 @@ */ package org.opendaylight.controller.md.sal.dom.store.impl.tree; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import java.util.Collection; +import java.util.Optional; import org.opendaylight.controller.md.sal.dom.spi.RegistrationTreeNode; import org.opendaylight.controller.md.sal.dom.store.impl.DataChangeListenerRegistration; import org.opendaylight.yangtools.concepts.Identifiable; @@ -43,7 +43,7 @@ public class ListenerNode implements StoreTreeNode, Identifiable

getChild(final PathArgument child) { final RegistrationTreeNode> c = delegate.getExactChild(child); if (c == null) { - return Optional.absent(); + return Optional.empty(); } return Optional.of(new ListenerNode(c)); diff --git a/opendaylight/md-sal/sal-inmemory-datastore/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/AbstractDataChangeListenerTest.java b/opendaylight/md-sal/sal-inmemory-datastore/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/AbstractDataChangeListenerTest.java index 3be301a32f..a500f257d6 100644 --- a/opendaylight/md-sal/sal-inmemory-datastore/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/AbstractDataChangeListenerTest.java +++ b/opendaylight/md-sal/sal-inmemory-datastore/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/AbstractDataChangeListenerTest.java @@ -58,7 +58,8 @@ public abstract class AbstractDataChangeListenerTest { this.schemaContext = context.tryToCreateSchemaContext().get(); this.dclExecutorService = new TestDCLExecutorService( - SpecialExecutors.newBlockingBoundedFastThreadPool(1, 10, "DCL" )); + SpecialExecutors.newBlockingBoundedFastThreadPool(1, 10, "DCL", + AbstractDataChangeListenerTest.class)); this.datastore = new InMemoryDOMDataStore("TEST", this.dclExecutorService); this.datastore.onGlobalContextUpdated(this.schemaContext); diff --git a/opendaylight/md-sal/sal-inmemory-datastore/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/TestModel.java b/opendaylight/md-sal/sal-inmemory-datastore/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/TestModel.java index e3aea1c6e0..72ecf3e6a5 100644 --- a/opendaylight/md-sal/sal-inmemory-datastore/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/TestModel.java +++ b/opendaylight/md-sal/sal-inmemory-datastore/src/test/java/org/opendaylight/controller/md/sal/dom/store/impl/TestModel.java @@ -7,13 +7,9 @@ */ package org.opendaylight.controller.md.sal.dom.store.impl; -import java.io.InputStream; -import java.util.Collections; -import java.util.List; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; public class TestModel { @@ -33,17 +29,7 @@ public class TestModel { YangInstanceIdentifier.builder(TEST_PATH).node(OUTER_LIST_QNAME).build(); private static final String DATASTORE_TEST_YANG = "/odl-datastore-test.yang"; - private static InputStream getInputStream() { - return TestModel.class.getResourceAsStream(DATASTORE_TEST_YANG); - } - public static SchemaContext createTestContext() { - final List streams = Collections.singletonList(getInputStream()); - - try { - return YangParserTestUtils.parseYangStreams(streams); - } catch (ReactorException e) { - throw new RuntimeException("Unable to build schema context from " + streams, e); - } + return YangParserTestUtils.parseYangResource(DATASTORE_TEST_YANG); } } diff --git a/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/AbstractRpcTest.java b/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/AbstractRpcTest.java index 32b54c4a8c..6557934475 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/AbstractRpcTest.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/AbstractRpcTest.java @@ -54,7 +54,7 @@ public class AbstractRpcTest { static final QName TEST_RPC_INPUT = QName.create(TEST_NS, TEST_REV, "input"); static final QName TEST_RPC_INPUT_DATA = QName.create(TEST_NS, TEST_REV, "input-data"); static final QName TEST_RPC_OUTPUT = QName.create(TEST_NS, TEST_REV, "output"); - static final QName TEST_RPC_OUTPUT_DATA = new QName(TEST_URI, "output-data"); + static final QName TEST_RPC_OUTPUT_DATA = QName.create(TEST_URI, "output-data"); static final SchemaPath TEST_RPC_TYPE = SchemaPath.create(true, TEST_RPC); diff --git a/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/registry/RpcRegistryTest.java b/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/registry/RpcRegistryTest.java index 84062735c2..807480b1b3 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/registry/RpcRegistryTest.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/registry/RpcRegistryTest.java @@ -26,7 +26,6 @@ import com.google.common.collect.Sets; import com.google.common.util.concurrent.Uninterruptibles; import com.typesafe.config.ConfigFactory; import java.net.URI; -import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -368,14 +367,14 @@ public class RpcRegistryTest { } @Test - public void testAddRoutesConcurrency() throws Exception { + public void testAddRoutesConcurrency() { final JavaTestKit testKit = new JavaTestKit(node1); final int nRoutes = 500; final Collection added = new ArrayList<>(nRoutes); for (int i = 0; i < nRoutes; i++) { final DOMRpcIdentifier routeId = DOMRpcIdentifier.create(SchemaPath.create(true, - new QName(new URI("/mockrpc"), "type" + i))); + QName.create(URI.create("/mockrpc"), "type" + i))); added.add(routeId); //Uninterruptibles.sleepUninterruptibly(50, TimeUnit.MILLISECONDS); @@ -408,8 +407,8 @@ public class RpcRegistryTest { } } - private List createRouteIds() throws URISyntaxException { - QName type = new QName(new URI("/mockrpc"), "mockrpc" + routeIdCounter++); + private List createRouteIds() { + QName type = QName.create(URI.create("/mockrpc"), "mockrpc" + routeIdCounter++); List routeIds = new ArrayList<>(1); routeIds.add(DOMRpcIdentifier.create(SchemaPath.create(true, type))); return routeIds; diff --git a/opendaylight/md-sal/sal-schema-service/src/main/java/org/opendaylight/controller/sal/schema/service/impl/GlobalBundleScanningSchemaServiceImpl.java b/opendaylight/md-sal/sal-schema-service/src/main/java/org/opendaylight/controller/sal/schema/service/impl/GlobalBundleScanningSchemaServiceImpl.java index 3e55d796c1..6d2eacbaf5 100644 --- a/opendaylight/md-sal/sal-schema-service/src/main/java/org/opendaylight/controller/sal/schema/service/impl/GlobalBundleScanningSchemaServiceImpl.java +++ b/opendaylight/md-sal/sal-schema-service/src/main/java/org/opendaylight/controller/sal/schema/service/impl/GlobalBundleScanningSchemaServiceImpl.java @@ -10,6 +10,7 @@ package org.opendaylight.controller.sal.schema.service.impl; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; import java.util.HashSet; import java.util.Set; import javax.annotation.concurrent.GuardedBy; @@ -115,6 +116,7 @@ public final class GlobalBundleScanningSchemaServiceImpl implements SchemaContex "Source provider is not available", sourceIdentifier)); } - return (CheckedFuture) yangProvider.getSource(sourceIdentifier); + return Futures.makeChecked((ListenableFuture) yangProvider.getSource(sourceIdentifier), + e -> new SchemaSourceException("Error retrieving source", e)); } } diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarEntryDataTreeCommitCohort.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarEntryDataTreeCommitCohort.java index 2700159562..00ae5f48b3 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarEntryDataTreeCommitCohort.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarEntryDataTreeCommitCohort.java @@ -7,10 +7,10 @@ */ package org.opendaylight.controller.clustering.it.provider; -import com.google.common.base.Optional; import com.google.common.base.Verify; import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.Futures; +import java.util.Optional; import org.opendaylight.mdsal.common.api.DataValidationFailedException; import org.opendaylight.mdsal.common.api.PostCanCommitStep; import org.opendaylight.mdsal.dom.api.DOMDataTreeCandidate;