From: Tony Tkacik Date: Mon, 28 Jul 2014 12:24:45 +0000 (+0000) Subject: Merge "BUG-432: migrate users of Registration as appropriate" X-Git-Tag: release/helium~421 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=73bda4f755598599f45cc46cd51c652c0a36e532;hp=fc5234235d2eec5d79fff466fe0c07a8259e1c3f Merge "BUG-432: migrate users of Registration as appropriate" --- 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 d8c5a56fb7..518a11540e 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 @@ -130,7 +130,7 @@ final class ModuleMXBeanEntryBuilder { Map result = new HashMap<>(); for (AugmentationSchema augmentation : currentModule.getAugmentations()) { - Set childNodes = augmentation.getChildNodes(); + Collection childNodes = augmentation.getChildNodes(); if (areAllChildrenChoiceCaseNodes(childNodes)) { for (ChoiceCaseNode childCase : castChildNodesToChoiceCases(childNodes)) { // TODO refactor, extract to standalone builder class @@ -215,7 +215,7 @@ final class ModuleMXBeanEntryBuilder { return moduleIdentities; } - private Collection castChildNodesToChoiceCases(final Set childNodes) { + private Collection castChildNodesToChoiceCases(final Collection childNodes) { return Collections2.transform(childNodes, new Function() { @Nullable @Override @@ -225,7 +225,7 @@ final class ModuleMXBeanEntryBuilder { }); } - private boolean areAllChildrenChoiceCaseNodes(final Set childNodes) { + private boolean areAllChildrenChoiceCaseNodes(final Iterable childNodes) { for (DataSchemaNode childNode : childNodes) { if (childNode instanceof ChoiceCaseNode == false) { return false; @@ -388,7 +388,7 @@ final class ModuleMXBeanEntryBuilder { * @return either choiceCaseNode or its only child container */ private HAS_CHILDREN_AND_QNAME getDataNodeContainer(final ChoiceCaseNode choiceCaseNode) { - Set childNodes = choiceCaseNode.getChildNodes(); + Collection childNodes = choiceCaseNode.getChildNodes(); if (childNodes.size() == 1) { DataSchemaNode onlyChild = childNodes.iterator().next(); if (onlyChild instanceof ContainerSchemaNode) { @@ -406,8 +406,7 @@ final class ModuleMXBeanEntryBuilder { final TypeProviderWrapper typeProviderWrapper, final Map qNamesToSIEs, final SchemaContext schemaContext, final String packageName) { Map yangToAttributes = new HashMap<>(); - Set childNodes = dataNodeContainer.getChildNodes(); - for (DataSchemaNode attrNode : childNodes) { + for (DataSchemaNode attrNode : dataNodeContainer.getChildNodes()) { AttributeIfc attributeValue = getAttributeValue(attrNode, currentModule, qNamesToSIEs, typeProviderWrapper, schemaContext, packageName); yangToAttributes.put(attributeValue.getAttributeYangName(), attributeValue); diff --git a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/RuntimeBeanEntry.java b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/RuntimeBeanEntry.java index 23b071c817..67f624175b 100644 --- a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/RuntimeBeanEntry.java +++ b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/RuntimeBeanEntry.java @@ -332,7 +332,7 @@ public class RuntimeBeanEntry { } } - private static Collection sortAttributes(final Set childNodes) { + private static Collection sortAttributes(final Collection childNodes) { final TreeSet dataSchemaNodes = new TreeSet<>(new Comparator() { @Override public int compare(final DataSchemaNode o1, final DataSchemaNode o2) { 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 f8c1cf6b99..b4b9e314be 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 @@ -9,6 +9,7 @@ package org.opendaylight.controller.md.sal.binding.impl; import java.lang.reflect.Method; import java.util.AbstractMap.SimpleEntry; +import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.Map.Entry; @@ -406,9 +407,8 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener { return Iterables.filter(augmentations, new Predicate() { @Override public boolean apply(final AugmentationSchema schema) { - final Set childNodes = schema.getChildNodes(); - return !schema.getChildNodes().isEmpty() - && module.equals(Iterables.get(childNodes, 0).getQName().getModule()); + final Collection childNodes = schema.getChildNodes(); + return !childNodes.isEmpty() && module.equals(Iterables.get(childNodes, 0).getQName().getModule()); } }); } diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/AbstractRuntimeCodeGenerator.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/AbstractRuntimeCodeGenerator.java index 86003b2aed..1fa54be200 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/AbstractRuntimeCodeGenerator.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/impl/AbstractRuntimeCodeGenerator.java @@ -136,22 +136,17 @@ abstract class AbstractRuntimeCodeGenerator implements org.opendaylight.controll return invoker; } - utils.getLock().lock(); - try { - synchronized (utils) { - invoker = ClassLoaderUtils.withClassLoader(cls.getClassLoader(), new Supplier() { - @Override - public RuntimeGeneratedInvokerPrototype get() { - return generateListenerInvoker(cls); - } - }); - } - - invokerClasses.put(cls, invoker); - return invoker; - } finally { - utils.getLock().unlock(); + synchronized (utils) { + invoker = ClassLoaderUtils.withClassLoader(cls.getClassLoader(), new Supplier() { + @Override + public RuntimeGeneratedInvokerPrototype get() { + return generateListenerInvoker(cls); + } + }); } + + invokerClasses.put(cls, invoker); + return invoker; } @Override @@ -161,13 +156,8 @@ abstract class AbstractRuntimeCodeGenerator implements org.opendaylight.controll @Override public final T getDirectProxyFor(final Class serviceType) { - utils.getLock().lock(); - try { - synchronized (utils) { - return ClassLoaderUtils.withClassLoader(serviceType.getClassLoader(), directProxySupplier(serviceType)); - } - } finally { - utils.getLock().unlock(); + synchronized (utils) { + return ClassLoaderUtils.withClassLoader(serviceType.getClassLoader(), directProxySupplier(serviceType)); } } @@ -184,14 +174,9 @@ abstract class AbstractRuntimeCodeGenerator implements org.opendaylight.controll } }); - utils.getLock().lock(); - try { - synchronized (utils) { - final T instance = ClassLoaderUtils.withClassLoader(serviceType.getClassLoader(), routerSupplier(serviceType, metadata)); - return new RpcRouterCodegenInstance(name, serviceType, instance, metadata.getContexts()); - } - } finally { - utils.getLock().unlock(); + synchronized (utils) { + final T instance = ClassLoaderUtils.withClassLoader(serviceType.getClassLoader(), routerSupplier(serviceType, metadata)); + return new RpcRouterCodegenInstance(name, serviceType, instance, metadata.getContexts()); } } diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/Broker.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/Broker.java index 724cbe75f4..b48f6cb61a 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/Broker.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/Broker.java @@ -78,13 +78,18 @@ public interface Broker { * * @param cons * Consumer to be registered. - * @param context * @return a session specific to consumer registration * @throws IllegalArgumentException * If the consumer is null. * @throws IllegalStateException * If the consumer is already registered. */ + ConsumerSession registerConsumer(Consumer cons); + + /* + * @deprecated Use registerConsumer(Consumer cons) instead (BundleContext is no longer used) + */ + @Deprecated ConsumerSession registerConsumer(Consumer cons, BundleContext context); /** @@ -110,13 +115,18 @@ public interface Broker { * * @param prov * Provider to be registered. - * @param context * @return a session unique to the provider registration. * @throws IllegalArgumentException * If the provider is null. * @throws IllegalStateException * If the consumer is already registered. */ + ProviderSession registerProvider(Provider prov); + + /* + * @deprecated Use registerProvider(Provider cons) instead (BundleContext is no longer used) + */ + @Deprecated ProviderSession registerProvider(Provider prov, BundleContext context); /** diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/Consumer.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/Consumer.java index a693cd6c49..a5ab8ac911 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/Consumer.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/Consumer.java @@ -38,21 +38,22 @@ public interface Consumer { public void onSessionInitiated(ConsumerSession session); /** - * Get a set of implementations of consumer functionality to be registered - * into system during the consumer registration to the SAL. - * - * This method is invoked by {@link Broker#registerConsumer(Consumer)}. - * - * @return Set of consumer functionality. + * @deprecated - no longer used or needed + * * + * Suggested implementation until removed: + * @code { + * public Collection getConsumerFunctionality() { + * return Collections.emptySet(); + * } + * } */ + @Deprecated public Collection getConsumerFunctionality(); /** - * The marker interface for the interfaces describing the consumer - * functionality contracts. - * - * + * @deprecated - no longer used or needed */ + @Deprecated public interface ConsumerFunctionality { } diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/Provider.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/Provider.java index 0a57d12579..4f32983f84 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/Provider.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/Provider.java @@ -42,27 +42,22 @@ public interface Provider { public void onSessionInitiated(ProviderSession session); /** - * Gets a set of implementations of provider functionality to be registered - * into system during the provider registration to the SAL. + * @deprecated - No longer used or needed * - *

- * This method is invoked by {@link Broker#registerProvider(Provider)} to - * learn the initial provided functionality - * - * @return Set of provider's functionality. + * Suggested implementation until removed: + * @code { + * public Collection getProviderFunctionality() { + * return Collections.emptySet(); + * } + * } */ + @Deprecated public Collection getProviderFunctionality(); /** - * Functionality provided by the {@link Provider} - * - *

- * Marker interface used to mark the interfaces describing specific - * functionality which could be exposed by providers to other components. - * - - * + * @deprecated - no longer used or needed */ + @Deprecated public interface ProviderFunctionality { } diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.java index 1af03e5046..68066778db 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.java @@ -62,22 +62,13 @@ public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable { @Override public ConsumerSession registerConsumer(final Consumer consumer, final BundleContext ctx) { - checkPredicates(consumer); - log.trace("Registering consumer {}", consumer); - final ConsumerContextImpl session = newSessionFor(consumer, ctx); - consumer.onSessionInitiated(session); - sessions.add(session); - return session; + return registerConsumer(consumer); } @Override public ProviderSession registerProvider(final Provider provider, final BundleContext ctx) { - checkPredicates(provider); - final ProviderContextImpl session = newSessionFor(provider, ctx); - provider.onSessionInitiated(session); - providerSessions.add(session); - return session; + return registerProvider(provider); } protected Future> invokeRpcAsync(final QName rpc, @@ -106,14 +97,12 @@ public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable { } // Private Factory methods - private ConsumerContextImpl newSessionFor(final Consumer provider, - final BundleContext ctx) { + private ConsumerContextImpl newSessionFor(final Consumer provider) { ConsumerContextImpl ret = new ConsumerContextImpl(provider, this); return ret; } - private ProviderContextImpl newSessionFor(final Provider provider, - final BundleContext ctx) { + private ProviderContextImpl newSessionFor(final Provider provider) { ProviderContextImpl ret = new ProviderContextImpl(provider, this); return ret; } @@ -208,4 +197,25 @@ public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable { return Optional.fromNullable(services.getInstance(service)); } + + @Override + public ConsumerSession registerConsumer(Consumer consumer) { + checkPredicates(consumer); + log.trace("Registering consumer {}", consumer); + final ConsumerContextImpl session = newSessionFor(consumer); + consumer.onSessionInitiated(session); + sessions.add(session); + return session; + } + + + @Override + public ProviderSession registerProvider(Provider provider) { + checkPredicates(provider); + final ProviderContextImpl session = newSessionFor(provider); + provider.onSessionInitiated(session); + providerSessions.add(session); + return session; + } + } 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 29392dc7b3..cd1a792d67 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 @@ -92,8 +92,7 @@ public final class YangSchemaUtils { } private static DataSchemaNode searchInChoices(final DataNodeContainer node, final QName arg) { - Set children = node.getChildNodes(); - for (DataSchemaNode child : children) { + for (DataSchemaNode child : node.getChildNodes()) { if (child instanceof ChoiceNode) { ChoiceNode choiceNode = (ChoiceNode) child; DataSchemaNode potential = searchInCases(choiceNode, arg); diff --git a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/util/NodeContainerProxy.java b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/util/NodeContainerProxy.java index bd075d0606..1896e69f32 100644 --- a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/util/NodeContainerProxy.java +++ b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/util/NodeContainerProxy.java @@ -10,6 +10,7 @@ package org.opendaylight.controller.sal.connect.netconf.util; import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -36,11 +37,11 @@ class NodeContainerProxy implements ContainerSchemaNode { this.qName = Preconditions.checkNotNull(qName, "qName"); } - public NodeContainerProxy(final QName qName, final Set childNodes) { + public NodeContainerProxy(final QName qName, final Collection childNodes) { this(qName, asMap(childNodes)); } - private static Map asMap(final Set childNodes) { + private static Map asMap(final Collection childNodes) { final Map mapped = Maps.newHashMap(); for (final DataSchemaNode childNode : childNodes) { mapped.put(childNode.getQName(), childNode); diff --git a/opendaylight/md-sal/sal-protocolbuffer-encoding/src/main/java/org/opendaylight/controller/cluster/datastore/util/EncoderDecoderUtil.java b/opendaylight/md-sal/sal-protocolbuffer-encoding/src/main/java/org/opendaylight/controller/cluster/datastore/util/EncoderDecoderUtil.java index 41eb2e6f92..8e0e85cabb 100644 --- a/opendaylight/md-sal/sal-protocolbuffer-encoding/src/main/java/org/opendaylight/controller/cluster/datastore/util/EncoderDecoderUtil.java +++ b/opendaylight/md-sal/sal-protocolbuffer-encoding/src/main/java/org/opendaylight/controller/cluster/datastore/util/EncoderDecoderUtil.java @@ -31,7 +31,6 @@ import java.io.ByteArrayInputStream; import java.io.StringWriter; import java.util.Collections; import java.util.List; -import java.util.Set; /* * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. @@ -57,7 +56,7 @@ public class EncoderDecoderUtil { factory.setIgnoringComments(true); } - private static DataSchemaNode findChildNode(Set children, + private static DataSchemaNode findChildNode(Iterable children, String name) { List containers = Lists.newArrayList(); diff --git a/opendaylight/md-sal/sal-protocolbuffer-encoding/src/test/java/org/opendaylight/controller/cluster/datastore/util/NormalizedNodeXmlConverterTest.java b/opendaylight/md-sal/sal-protocolbuffer-encoding/src/test/java/org/opendaylight/controller/cluster/datastore/util/NormalizedNodeXmlConverterTest.java index 28e358a06a..8d609823a7 100644 --- a/opendaylight/md-sal/sal-protocolbuffer-encoding/src/test/java/org/opendaylight/controller/cluster/datastore/util/NormalizedNodeXmlConverterTest.java +++ b/opendaylight/md-sal/sal-protocolbuffer-encoding/src/test/java/org/opendaylight/controller/cluster/datastore/util/NormalizedNodeXmlConverterTest.java @@ -113,7 +113,7 @@ public class NormalizedNodeXmlConverterTest { + childNodeName); } - static DataSchemaNode findChildNode(final Set children, final String name) { + static DataSchemaNode findChildNode(final Iterable children, final String name) { List containers = Lists.newArrayList(); for (DataSchemaNode dataSchemaNode : children) { diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonMapper.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonMapper.java index 4b4cef9f70..cd2d91559b 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonMapper.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonMapper.java @@ -13,6 +13,7 @@ import com.google.common.base.Preconditions; import com.google.gson.stream.JsonWriter; import java.io.IOException; import java.net.URI; +import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; @@ -83,7 +84,7 @@ class JsonMapper { final Set foundLists = new HashSet<>(); - Set parentSchemaChildNodes = parentSchema == null ? Collections. emptySet() + Collection parentSchemaChildNodes = parentSchema == null ? Collections. emptySet() : parentSchema.getChildNodes(); for (Node child : parent.getValue()) { @@ -170,7 +171,7 @@ class JsonMapper { } } - private static DataSchemaNode findFirstSchemaForNode(final Node node, final Set dataSchemaNode) { + private static DataSchemaNode findFirstSchemaForNode(final Node node, final Iterable dataSchemaNode) { for (DataSchemaNode dsn : dataSchemaNode) { if (node.getNodeType().equals(dsn.getQName())) { return dsn; diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java index 29672f39d4..0a67c84d8b 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java @@ -17,21 +17,26 @@ import com.google.common.base.Strings; import com.google.common.collect.BiMap; import com.google.common.collect.FluentIterable; import com.google.common.collect.HashBiMap; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; + import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicReference; + import javax.ws.rs.core.Response.Status; + import org.opendaylight.controller.sal.core.api.mount.MountInstance; import org.opendaylight.controller.sal.core.api.mount.MountService; import org.opendaylight.controller.sal.rest.api.Draft02; @@ -81,13 +86,12 @@ public class ControllerContext implements SchemaContextListener { private static final Splitter SLASH_SPLITTER = Splitter.on('/'); - private static final Splitter COLON_SPLITTER = Splitter.on(':'); - private final BiMap uriToModuleName = HashBiMap. create(); private final Map moduleNameToUri = uriToModuleName.inverse(); - private final Map qnameToRpc = new ConcurrentHashMap<>(); + private final AtomicReference> qnameToRpc = + new AtomicReference<>(Collections.emptyMap()); private volatile SchemaContext globalSchema; private volatile MountService mountService; @@ -721,8 +725,6 @@ public class ControllerContext implements SchemaContextListener { private void collectInstanceDataNodeContainers(final List potentialSchemaNodes, final DataNodeContainer container, final String name) { - Set childNodes = container.getChildNodes(); - Predicate filter = new Predicate() { @Override public boolean apply(final DataSchemaNode node) { @@ -730,7 +732,7 @@ public class ControllerContext implements SchemaContextListener { } }; - Iterable nodes = Iterables.filter(childNodes, filter); + Iterable nodes = Iterables.filter(container.getChildNodes(), filter); // Can't combine this loop with the filter above because the filter is // lazily-applied by Iterables.filter. @@ -792,24 +794,31 @@ public class ControllerContext implements SchemaContextListener { } private static String toModuleName(final String str) { - Preconditions. checkNotNull(str); - if (str.indexOf(':') != -1) { - final Iterable args = COLON_SPLITTER.split(str); - if (Iterables.size(args) == 2) { - return args.iterator().next(); - } + final int idx = str.indexOf(':'); + if (idx == -1) { + return null; } - return null; + + // Make sure there is only one occurrence + if (str.indexOf(':', idx + 1) != -1) { + return null; + } + + return str.substring(0, idx); } private static String toNodeName(final String str) { - if (str.indexOf(':') != -1) { - final Iterable args = COLON_SPLITTER.split(str); - if (Iterables.size(args) == 2) { - return Iterables.get(args, 1); - } + final int idx = str.indexOf(':'); + if (idx == -1) { + return str; + } + + // Make sure there is only one occurrence + if (str.indexOf(':', idx + 1) != -1) { + return str; } - return str; + + return str.substring(idx + 1); } private QName toQName(final String name) { @@ -845,26 +854,28 @@ public class ControllerContext implements SchemaContextListener { return namespace.isPresent() ? QName.create(namespace.get(), node) : null; } - private boolean isListOrContainer(final DataSchemaNode node) { + private static boolean isListOrContainer(final DataSchemaNode node) { return node instanceof ListSchemaNode || node instanceof ContainerSchemaNode; } public RpcDefinition getRpcDefinition(final String name) { final QName validName = this.toQName(name); - return validName == null ? null : this.qnameToRpc.get(validName); + return validName == null ? null : this.qnameToRpc.get().get(validName); } @Override public void onGlobalContextUpdated(final SchemaContext context) { if (context != null) { - this.qnameToRpc.clear(); - this.setGlobalSchema(context); - Set _operations = context.getOperations(); - for (final RpcDefinition operation : _operations) { - { - this.qnameToRpc.put(operation.getQName(), operation); - } + final Collection defs = context.getOperations(); + final Map newMap = new HashMap<>(defs.size()); + + for (final RpcDefinition operation : defs) { + newMap.put(operation.getQName(), operation); } + + // FIXME: still not completely atomic + this.qnameToRpc.set(ImmutableMap.copyOf(newMap)); + this.setGlobalSchema(context); } } diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/BaseYangSwaggerGenerator.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/BaseYangSwaggerGenerator.java index 68d31de8da..5ba8b26bc1 100644 --- a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/BaseYangSwaggerGenerator.java +++ b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/BaseYangSwaggerGenerator.java @@ -14,6 +14,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Date; @@ -161,7 +162,7 @@ public class BaseYangSwaggerGenerator { List apis = new ArrayList(); - Set dataSchemaNodes = m.getChildNodes(); + Collection dataSchemaNodes = m.getChildNodes(); _logger.debug("child nodes size [{}]", dataSchemaNodes.size()); for (DataSchemaNode node : dataSchemaNodes) { if ((node instanceof ListSchemaNode) || (node instanceof ContainerSchemaNode)) { @@ -240,9 +241,8 @@ public class BaseYangSwaggerGenerator { apis.add(api); if ((node instanceof ListSchemaNode) || (node instanceof ContainerSchemaNode)) { DataNodeContainer schemaNode = (DataNodeContainer) node; - Set dataSchemaNodes = schemaNode.getChildNodes(); - for (DataSchemaNode childNode : dataSchemaNodes) { + for (DataSchemaNode childNode : schemaNode.getChildNodes()) { // We don't support going to leaf nodes today. Only lists and // containers. if (childNode instanceof ListSchemaNode || childNode instanceof ContainerSchemaNode) { diff --git a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ModelGenerator.java b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ModelGenerator.java index 8bac0d211e..95bb1a0943 100644 --- a/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ModelGenerator.java +++ b/opendaylight/md-sal/sal-rest-docgen/src/main/java/org/opendaylight/controller/sal/rest/doc/impl/ModelGenerator.java @@ -126,9 +126,8 @@ public class ModelGenerator { JSONException { String moduleName = module.getName(); - Set childNodes = module.getChildNodes(); - for (DataSchemaNode childNode : childNodes) { + for (DataSchemaNode childNode : module.getChildNodes()) { JSONObject configModuleJSON = null; JSONObject operationalModuleJSON = null; @@ -271,13 +270,12 @@ public class ModelGenerator { String containerDescription = container.getDescription(); moduleJSON.put(DESCRIPTION_KEY, containerDescription); - Set containerChildren = container.getChildNodes(); - JSONObject properties = processChildren(containerChildren, moduleName, models, isConfig); + JSONObject properties = processChildren(container.getChildNodes(), moduleName, models, isConfig); moduleJSON.put(PROPERTIES_KEY, properties); return moduleJSON; } - private JSONObject processChildren(Set nodes, String moduleName, + private JSONObject processChildren(Iterable nodes, String moduleName, JSONObject models) throws JSONException, IOException { return processChildren(nodes, moduleName, models, null); } @@ -292,7 +290,7 @@ public class ModelGenerator { * @throws JSONException * @throws IOException */ - private JSONObject processChildren(Set nodes, String moduleName, + private JSONObject processChildren(Iterable nodes, String moduleName, JSONObject models, Boolean isConfig) throws JSONException, IOException { JSONObject properties = new JSONObject(); @@ -418,11 +416,10 @@ public class ModelGenerator { private JSONObject processListSchemaNode(ListSchemaNode listNode, String moduleName, JSONObject models, Boolean isConfig) throws JSONException, IOException { - Set listChildren = listNode.getChildNodes(); String fileName = (BooleanUtils.isNotFalse(isConfig)?OperationBuilder.CONFIG:OperationBuilder.OPERATIONAL) + listNode.getQName().getLocalName(); - JSONObject childSchemaProperties = processChildren(listChildren, moduleName, models); + JSONObject childSchemaProperties = processChildren(listNode.getChildNodes(), moduleName, models); JSONObject childSchema = getSchemaTemplate(); childSchema.put(TYPE_KEY, OBJECT_TYPE); childSchema.put(PROPERTIES_KEY, childSchemaProperties); diff --git a/opendaylight/netconf/netconf-cli/src/main/java/org/opendaylight/controller/netconf/cli/commands/output/OutputDefinition.java b/opendaylight/netconf/netconf-cli/src/main/java/org/opendaylight/controller/netconf/cli/commands/output/OutputDefinition.java index 66d0d4da46..42afb160a8 100644 --- a/opendaylight/netconf/netconf-cli/src/main/java/org/opendaylight/controller/netconf/cli/commands/output/OutputDefinition.java +++ b/opendaylight/netconf/netconf-cli/src/main/java/org/opendaylight/controller/netconf/cli/commands/output/OutputDefinition.java @@ -10,7 +10,6 @@ package org.opendaylight.controller.netconf.cli.commands.output; import com.google.common.base.Preconditions; import java.util.Collections; import java.util.Iterator; -import java.util.Set; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -20,9 +19,9 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; public class OutputDefinition implements Iterable { public static final OutputDefinition EMPTY_OUTPUT = new OutputDefinition(Collections.emptySet()); - private final Set childNodes; + private final Iterable childNodes; - public OutputDefinition(final Set childNodes) { + public OutputDefinition(final Iterable childNodes) { this.childNodes = childNodes; }