@SuppressWarnings("deprecation")
public abstract class AbstractDataServiceTest {
- protected org.opendaylight.controller.sal.core.api.data.DataProviderService biDataService;
protected DataProviderService baDataService;
protected BindingTestContext testContext;
testContext.start();
baDataService = testContext.getBindingDataBroker();
- biDataService = testContext.getDomDataBroker();
}
protected boolean getStartWithSchema() {
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.binding.test.compat;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
-import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
-import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
-import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
-import org.opendaylight.controller.sal.binding.test.AbstractDataServiceTest;
-import org.opendaylight.controller.sal.binding.test.AugmentationVerifier;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.augment.rev140709.TreeComplexUsesAugment;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.augment.rev140709.TreeComplexUsesAugmentBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.augment.rev140709.TreeLeafOnlyAugment;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.augment.rev140709.TreeLeafOnlyAugmentBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.augment.rev140709.complex.from.grouping.ContainerWithUsesBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.augment.rev140709.complex.from.grouping.ListViaUses;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.augment.rev140709.complex.from.grouping.ListViaUsesBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.augment.rev140709.complex.from.grouping.ListViaUsesKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.Top;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.two.level.list.TopLevelList;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.two.level.list.TopLevelListBuilder;
-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.Augmentation;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-
-@Deprecated
-public class MultipleAugmentationPutsTest extends AbstractDataServiceTest implements DataChangeListener {
-
- private static final QName NODE_ID_QNAME = QName.create(TopLevelList.QNAME, "name");
- private static final String NODE_ID = "openflow:1";
-
- private static final TopLevelListKey NODE_KEY = new TopLevelListKey(NODE_ID);
-
- private static final Map<QName, Object> NODE_KEY_BI = Collections.<QName, Object> singletonMap(NODE_ID_QNAME,
- NODE_ID);
-
- private static final InstanceIdentifier<Top> NODES_INSTANCE_ID_BA = InstanceIdentifier.builder(Top.class) //
- .toInstance();
-
- private static final InstanceIdentifier<TopLevelList> NODE_INSTANCE_ID_BA =
- NODES_INSTANCE_ID_BA.child(TopLevelList.class, NODE_KEY);
-
- private static final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier NODE_INSTANCE_ID_BI = //
- org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.builder() //
- .node(Top.QNAME) //
- .nodeWithKey(TopLevelList.QNAME, NODE_KEY_BI) //
- .toInstance();
- private DataChangeEvent<InstanceIdentifier<?>, DataObject> receivedChangeEvent;
-
- /**
- * Test for Bug 148
- *
- * @throws Exception
- */
- @Test()
- public void testAugmentSerialization() throws Exception {
-
- baDataService.registerDataChangeListener(NODES_INSTANCE_ID_BA, this);
-
- TopLevelList flowCapableNode = createTestNode(TreeLeafOnlyAugment.class, createTreeLeafOnlyAugmentation());
- commitNodeAndVerifyTransaction(flowCapableNode);
-
- assertNotNull(receivedChangeEvent);
- verifyNode((Top) receivedChangeEvent.getUpdatedOperationalSubtree(), flowCapableNode);
-
- Top nodes = checkForNodes();
- verifyNode(nodes, flowCapableNode).assertHasAugmentation(TreeLeafOnlyAugment.class);
- assertBindingIndependentVersion(NODE_INSTANCE_ID_BI);
- TopLevelList meterStatsNode = createTestNode(TreeComplexUsesAugment.class, createTreeComplexUsesAugment());
- commitNodeAndVerifyTransaction(meterStatsNode);
-
- assertNotNull(receivedChangeEvent);
- verifyNode((Top) receivedChangeEvent.getUpdatedOperationalSubtree(), meterStatsNode);
-
- assertBindingIndependentVersion(NODE_INSTANCE_ID_BI);
-
- TopLevelList mergedNode = (TopLevelList) baDataService.readOperationalData(NODE_INSTANCE_ID_BA);
-
- AugmentationVerifier.from(mergedNode) //
- .assertHasAugmentation(TreeLeafOnlyAugment.class) //
- .assertHasAugmentation(TreeComplexUsesAugment.class);
-
- assertBindingIndependentVersion(NODE_INSTANCE_ID_BI);
-
- TopLevelList meterStatsNodeWithDuration = createTestNode(TreeComplexUsesAugment.class, createTreeComplexUsesAugment(5));
- commitNodeAndVerifyTransaction(meterStatsNodeWithDuration);
-
-
- TopLevelList nodeWithUpdatedList = (TopLevelList) baDataService.readOperationalData(NODE_INSTANCE_ID_BA);
- AugmentationVerifier.from(nodeWithUpdatedList) //
- .assertHasAugmentation(TreeLeafOnlyAugment.class) //
- .assertHasAugmentation(TreeComplexUsesAugment.class);
-
- List<ListViaUses> meterStats = nodeWithUpdatedList.getAugmentation(TreeComplexUsesAugment.class).getListViaUses();
- assertNotNull(meterStats);
- Assert.assertFalse(meterStats.isEmpty());
- assertBindingIndependentVersion(NODE_INSTANCE_ID_BI);
- testNodeRemove();
- }
-
- private static <T extends Augmentation<TopLevelList>> TopLevelList createTestNode(final Class<T> augmentationClass, final T augmentation) {
- TopLevelListBuilder nodeBuilder = new TopLevelListBuilder();
- nodeBuilder.setKey(NODE_KEY);
- nodeBuilder.setName(NODE_KEY.getName());
- nodeBuilder.addAugmentation(augmentationClass, augmentation);
- return nodeBuilder.build();
- }
-
- private DataModificationTransaction commitNodeAndVerifyTransaction(final TopLevelList original) throws Exception {
- DataModificationTransaction transaction = baDataService.beginTransaction();
- transaction.putOperationalData(NODE_INSTANCE_ID_BA, original);
- RpcResult<TransactionStatus> result = transaction.commit().get();
- assertEquals(TransactionStatus.COMMITED, result.getResult());
- return transaction;
- }
-
- private void testNodeRemove() throws Exception {
- DataModificationTransaction transaction = baDataService.beginTransaction();
- transaction.removeOperationalData(NODE_INSTANCE_ID_BA);
- RpcResult<TransactionStatus> result = transaction.commit().get();
- assertEquals(TransactionStatus.COMMITED, result.getResult());
-
- TopLevelList node = (TopLevelList) baDataService.readOperationalData(NODE_INSTANCE_ID_BA);
- assertNull(node);
- }
-
- private static AugmentationVerifier<TopLevelList> verifyNode(final Top nodes, final TopLevelList original) {
- assertNotNull(nodes);
- assertNotNull(nodes.getTopLevelList());
- assertEquals(1, nodes.getTopLevelList().size());
- TopLevelList readedNode = nodes.getTopLevelList().get(0);
- assertEquals(original.getName(), readedNode.getName());
- assertEquals(original.getKey(), readedNode.getKey());
- return new AugmentationVerifier<>(readedNode);
- }
-
- private void assertBindingIndependentVersion(final org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier nodeId) {
- CompositeNode node = biDataService.readOperationalData(nodeId);
- assertNotNull(node);
- }
-
- private Top checkForNodes() {
- return (Top) baDataService.readOperationalData(NODES_INSTANCE_ID_BA);
- }
-
- private static TreeComplexUsesAugment createTreeComplexUsesAugment() {
- return createTreeComplexUsesAugment(10);
- }
-
- private static TreeComplexUsesAugment createTreeComplexUsesAugment(final int count) {
- TreeComplexUsesAugmentBuilder tcuaBld = new TreeComplexUsesAugmentBuilder();
- ContainerWithUsesBuilder cwuBld = new ContainerWithUsesBuilder();
- cwuBld.setLeafFromGrouping("lfg1");
-
- List<ListViaUses> lvuBag = new ArrayList<>(count);
- for (int i = 0; i <= count; i++) {
- ListViaUsesBuilder statistic = new ListViaUsesBuilder();
- String name = String.valueOf(i);
- statistic.setKey(new ListViaUsesKey(name));
- statistic.setName(name);
- lvuBag.add(statistic.build());
- }
- tcuaBld.setContainerWithUses(cwuBld.build());
- tcuaBld.setListViaUses(lvuBag);
- return tcuaBld.build();
- }
-
- private static TreeLeafOnlyAugment createTreeLeafOnlyAugmentation() {
- TreeLeafOnlyAugmentBuilder fnub = new TreeLeafOnlyAugmentBuilder();
- fnub.setSimpleValue("meVerySimpleIs");
- TreeLeafOnlyAugment fnu = fnub.build();
- return fnu;
- }
-
- @Override
- public void onDataChanged(final DataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
- receivedChangeEvent = change;
- }
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-/**
- *
- * Test suite targeting legacy Data APIs
- *
- */
-package org.opendaylight.controller.sal.binding.test.compat;
\ No newline at end of file
import com.google.common.collect.MutableClassToInstanceMap;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
-import java.util.Set;
-import java.util.concurrent.Future;
import javassist.ClassPool;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.MountPointService;
import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
import org.opendaylight.controller.md.sal.dom.broker.impl.DOMRpcRouter;
import org.opendaylight.controller.md.sal.dom.broker.impl.SerializedDOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.broker.impl.compat.BackwardsCompatibleDataBroker;
import org.opendaylight.controller.md.sal.dom.broker.impl.mount.DOMMountPointServiceImpl;
import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore;
import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry;
import org.opendaylight.controller.sal.binding.impl.NotificationBrokerImpl;
import org.opendaylight.controller.sal.binding.impl.RootBindingAwareBroker;
import org.opendaylight.controller.sal.core.api.Broker.ProviderSession;
-import org.opendaylight.controller.sal.core.api.Broker.RoutedRpcRegistration;
-import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration;
import org.opendaylight.controller.sal.core.api.BrokerService;
-import org.opendaylight.controller.sal.core.api.RpcImplementation;
-import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry;
-import org.opendaylight.controller.sal.core.api.RpcRegistrationListener;
import org.opendaylight.controller.sal.core.spi.data.DOMStore;
import org.opendaylight.controller.sal.dom.broker.BrokerImpl;
-import org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareRpcBroker;
import org.opendaylight.yangtools.binding.data.codec.gen.impl.DataObjectSerializerGenerator;
import org.opendaylight.yangtools.binding.data.codec.gen.impl.StreamWriterGenerator;
import org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.sal.binding.generator.impl.GeneratedClassLoadingStrategy;
import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleInfoBackedContext;
import org.opendaylight.yangtools.sal.binding.generator.util.JavassistUtils;
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.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
@Beta
private NotificationBrokerImpl baNotifyImpl;
- @Deprecated
- private org.opendaylight.controller.sal.core.api.data.DataProviderService biDataLegacyBroker;
private BrokerImpl biBrokerImpl;
private final ListeningExecutorService executor;
private ImmutableMap<LogicalDatastoreType, DOMStore> newDatastores;
- @Deprecated
- private BackwardsCompatibleDataBroker biCompatibleBroker;
-
@Deprecated
private DataProviderService baData;
newDOMDataBroker = new SerializedDOMDataBroker(newDatastores, executor);
- biCompatibleBroker = new BackwardsCompatibleDataBroker(newDOMDataBroker,mockSchemaService);
-
mockSchemaService.registerSchemaContextListener(configStore);
mockSchemaService.registerSchemaContextListener(operStore);
- biDataLegacyBroker = biCompatibleBroker;
}
public void startBindingDataBroker() {
final MountPointService mountService = new BindingDOMMountPointServiceAdapter(biMountImpl, codec);
baBrokerImpl.setMountService(mountService);
baBrokerImpl.setLegacyMountManager(new HydrogenMountProvisionServiceAdapter(mountService));
- baBrokerImpl.setRpcBroker(new HeliumRpcProviderRegistry(baConsumerRpc,baProviderRpc));
+ baBrokerImpl.setRpcBroker(new HeliumRpcProviderRegistry(baConsumerRpc, baProviderRpc));
baBrokerImpl.setLegacyDataBroker(baData);
baBrokerImpl.setNotificationBroker(baNotifyImpl);
baBrokerImpl.start();
final ClassToInstanceMap<BrokerService> domBrokerServices = ImmutableClassToInstanceMap
.<BrokerService> builder()
//
- .put(org.opendaylight.controller.sal.core.api.data.DataProviderService.class, biDataLegacyBroker) //
- .put(RpcProvisionRegistry.class, biBrokerImpl.getRouter()) //
+ .put(DOMRpcRouter.class, biBrokerImpl.getRouter()) //
.put(DOMMountPointService.class, biMountImpl)
.build();
return new ProviderSession() {
- @Override
- public Future<RpcResult<CompositeNode>> rpc(final QName rpc, final CompositeNode input) {
- throw new UnsupportedOperationException();
- }
-
@Override
public <T extends BrokerService> T getService(final Class<T> service) {
return domBrokerServices.getInstance(service);
return false;
}
- @Override
- public Set<QName> getSupportedRpcs() {
- return null;
- }
-
@Override
public void close() {
}
-
- @Override
- public ListenerRegistration<RpcRegistrationListener> addRpcRegistrationListener(
- final RpcRegistrationListener listener) {
- return null;
- }
-
- @Override
- public RpcRegistration addRpcImplementation(final QName rpcType, final RpcImplementation implementation)
- throws IllegalArgumentException {
- return null;
- }
-
- @Override
- public RoutedRpcRegistration addRoutedRpcImplementation(final QName rpcType, final RpcImplementation implementation) {
- return null;
- }
-
- @Override
- public RoutedRpcRegistration addMountedRpcImplementation(final QName rpcType, final RpcImplementation implementation) {
- return null;
- }
};
}
private void startDomBroker() {
checkState(executor != null);
- final SchemaAwareRpcBroker router = new SchemaAwareRpcBroker("/", mockSchemaService);
-
domRouter = new DOMRpcRouter();
mockSchemaService.registerSchemaContextListener(domRouter);
final ClassToInstanceMap<BrokerService> services = MutableClassToInstanceMap.create();
services.put(DOMRpcService.class, domRouter);
- biBrokerImpl = new BrokerImpl(router,services);
+ biBrokerImpl = new BrokerImpl(domRouter,services);
}
return baData;
}
- @Deprecated
- public org.opendaylight.controller.sal.core.api.data.DataProviderService getDomDataBroker() {
- return biDataLegacyBroker;
- }
-
public RpcProviderRegistry getBindingRpcRegistry() {
return baBrokerImpl.getRoot();
}
*/
package org.opendaylight.controller.md.sal.common.impl.util.compat;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
+import com.google.common.base.Optional;
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-
-import javax.xml.transform.dom.DOMSource;
import org.opendaylight.yangtools.concepts.Identifiable;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-import org.opendaylight.yangtools.yang.data.api.Node;
-import org.opendaylight.yangtools.yang.data.api.SimpleNode;
-import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
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.ImmutableNodes;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeAttrBuilder;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
import org.opendaylight.yangtools.yang.model.api.AugmentationTarget;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.SchemaNode;
-import com.google.common.base.Optional;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-
-/**
- * @deprecated This class provides compatibility between {@link CompositeNode} and {@link NormalizedNode}.
- * Users of this class should use {@link NormalizedNode}s directly.
- */
@Deprecated
public abstract class DataNormalizationOperation<T extends PathArgument> implements Identifiable<T> {
public abstract DataNormalizationOperation<?> getChild(QName child) throws DataNormalizationException;
- public abstract NormalizedNode<?, ?> normalize(Node<?> legacyData);
public abstract boolean isLeaf();
super(identifier,potential);
}
- @Override
- public NormalizedNode<?, ?> normalize(final Node<?> legacyData) {
- checkArgument(legacyData != null);
- checkArgument(legacyData instanceof SimpleNode<?>);
- return normalizeImpl((SimpleNode<?>) legacyData);
- }
-
- protected abstract NormalizedNode<?, ?> normalizeImpl(SimpleNode<?> node);
-
@Override
public DataNormalizationOperation<?> getChild(final PathArgument child) {
return null;
super(new NodeIdentifier(potential.getQName()),potential);
}
- @Override
- protected NormalizedNode<?, ?> normalizeImpl(final SimpleNode<?> node) {
- return ImmutableNodes.leafNode(node.getNodeType(), node.getValue());
- }
-
}
private static final class LeafListEntryNormalization extends SimpleTypeNormalization<NodeWithValue> {
super(new NodeWithValue(potential.getQName(), null),potential);
}
- @Override
- protected NormalizedNode<?, ?> normalizeImpl(final SimpleNode<?> node) {
- NodeWithValue nodeId = new NodeWithValue(node.getNodeType(), node.getValue());
- return Builders.leafSetEntryBuilder().withNodeIdentifier(nodeId).withValue(node.getValue()).build();
- }
-
-
@Override
public boolean isKeyedEntry() {
return true;
super(identifier,schema);
}
- @SuppressWarnings({ "rawtypes", "unchecked" })
- @Override
- public final NormalizedNode<?, ?> normalize(final Node<?> legacyData) {
- checkArgument(legacyData != null);
- if (!isMixin() && getIdentifier().getNodeType() != null) {
- checkArgument(getIdentifier().getNodeType().equals(legacyData.getNodeType()),
- "Node QName must be %s was %s", getIdentifier().getNodeType(), legacyData.getNodeType());
- }
- checkArgument(legacyData instanceof CompositeNode, "Node %s should be composite", legacyData);
- CompositeNode compositeNode = (CompositeNode) legacyData;
- NormalizedNodeContainerBuilder builder = createBuilder(compositeNode);
-
- Set<DataNormalizationOperation<?>> usedMixins = new HashSet<>();
- for (Node<?> childLegacy : compositeNode.getValue()) {
- final DataNormalizationOperation childOp;
-
- try {
- childOp = getChild(childLegacy.getNodeType());
- } catch (DataNormalizationException e) {
- throw new IllegalArgumentException(String.format("Failed to normalize data %s", compositeNode.getValue()), e);
- }
-
- // We skip unknown nodes if this node is mixin since
- // it's nodes and parent nodes are interleaved
- if (childOp == null && isMixin()) {
- continue;
- }
-
- checkArgument(childOp != null, "Node %s is not allowed inside %s", childLegacy.getNodeType(),
- getIdentifier());
- if (childOp.isMixin()) {
- if (usedMixins.contains(childOp)) {
- // We already run / processed that mixin, so to avoid
- // duplicity we are skipping next nodes.
- continue;
- }
- builder.addChild(childOp.normalize(compositeNode));
- usedMixins.add(childOp);
- } else {
- builder.addChild(childOp.normalize(childLegacy));
- }
- }
- return builder.build();
- }
-
@Override
public boolean isLeaf() {
return false;
}
- @SuppressWarnings("rawtypes")
- protected abstract NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode);
}
keyDefinition = schema.getKeyDefinition();
}
- @Override
- protected NormalizedNodeContainerBuilder<?, ?, ?, ?> createBuilder(final CompositeNode compositeNode) {
- ImmutableMap.Builder<QName, Object> keys = ImmutableMap.builder();
- for (QName key : keyDefinition) {
-
- SimpleNode<?> valueNode = checkNotNull(compositeNode.getFirstSimpleByName(key),
- "List node %s MUST contain leaf %s with value.", getIdentifier().getNodeType(), key);
- keys.put(key, valueNode.getValue());
- }
-
- return Builders.mapEntryBuilder().withNodeIdentifier(
- new NodeIdentifierWithPredicates(getIdentifier().getNodeType(), keys.build()));
- }
-
@Override
public NormalizedNode<?, ?> createDefault(final PathArgument currentArg) {
DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> builder = Builders
super(new NodeIdentifier(schema.getQName()), schema,schema);
}
- @Override
- protected NormalizedNodeContainerBuilder<?, ?, ?, ?> createBuilder(final CompositeNode compositeNode) {
- return Builders.unkeyedListEntryBuilder().withNodeIdentifier(getIdentifier());
- }
-
@Override
public NormalizedNode<?, ?> createDefault(final PathArgument currentArg) {
return Builders.unkeyedListEntryBuilder().withNodeIdentifier((NodeIdentifier) currentArg).build();
super(new NodeIdentifier(schema.getQName()),schema, schema);
}
- @Override
- protected NormalizedNodeContainerBuilder<?, ?, ?, ?> createBuilder(final CompositeNode compositeNode) {
- return Builders.containerBuilder().withNodeIdentifier(getIdentifier());
- }
-
@Override
public NormalizedNode<?, ?> createDefault(final PathArgument currentArg) {
return Builders.containerBuilder().withNodeIdentifier((NodeIdentifier) currentArg).build();
super(potential);
}
- @Override
- protected NormalizedNodeContainerBuilder<?, ?, ?, ?> createBuilder(final CompositeNode compositeNode) {
- return Builders.orderedLeafSetBuilder().withNodeIdentifier(getIdentifier());
- }
-
@Override
public NormalizedNode<?, ?> createDefault(final PathArgument currentArg) {
return Builders.orderedLeafSetBuilder().withNodeIdentifier(getIdentifier()).build();
super(new NodeIdentifier(potential.getQName()),potential);
innerOp = new LeafListEntryNormalization(potential);
}
-
- @Override
- protected NormalizedNodeContainerBuilder<?, ?, ?, ?> createBuilder(final CompositeNode compositeNode) {
- return Builders.leafSetBuilder().withNodeIdentifier(getIdentifier());
- }
-
@Override
public NormalizedNode<?, ?> createDefault(final PathArgument currentArg) {
return Builders.leafSetBuilder().withNodeIdentifier(getIdentifier()).build();
return getIdentifier().getPossibleChildNames();
}
- @SuppressWarnings("rawtypes")
- @Override
- protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) {
- return Builders.augmentationBuilder().withNodeIdentifier(getIdentifier());
- }
-
@Override
public NormalizedNode<?, ?> createDefault(final PathArgument currentArg) {
return Builders.augmentationBuilder().withNodeIdentifier(getIdentifier()).build();
Collections.<QName, Object> emptyMap()), list);
}
- @SuppressWarnings("rawtypes")
- @Override
- protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) {
- return Builders.mapBuilder().withNodeIdentifier(getIdentifier());
- }
-
@Override
public NormalizedNode<?, ?> createDefault(final PathArgument currentArg) {
return Builders.mapBuilder().withNodeIdentifier(getIdentifier()).build();
this.innerNode = new UnkeyedListItemNormalization(list);
}
- @SuppressWarnings("rawtypes")
- @Override
- protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) {
- return Builders.unkeyedListBuilder().withNodeIdentifier(getIdentifier());
- }
-
@Override
public NormalizedNode<?, ?> createDefault(final PathArgument currentArg) {
return Builders.unkeyedListBuilder().withNodeIdentifier(getIdentifier()).build();
super(list);
}
- @SuppressWarnings("rawtypes")
- @Override
- protected NormalizedNodeContainerBuilder createBuilder(final CompositeNode compositeNode) {
- return Builders.orderedMapBuilder().withNodeIdentifier(getIdentifier());
- }
-
@Override
public NormalizedNode<?, ?> createDefault(final PathArgument currentArg) {
return Builders.orderedMapBuilder().withNodeIdentifier(getIdentifier()).build();
return byQName.get(child);
}
- @Override
- protected NormalizedNodeContainerBuilder<?, ?, ?, ?> createBuilder(final CompositeNode compositeNode) {
- return Builders.choiceBuilder().withNodeIdentifier(getIdentifier());
- }
-
@Override
public NormalizedNode<?, ?> createDefault(final PathArgument currentArg) {
return Builders.choiceBuilder().withNodeIdentifier(getIdentifier()).build();
return null;
}
- @Override
- public NormalizedNode<?, ?> normalize( final Node<?> legacyData ) {
- NormalizedNodeAttrBuilder<NodeIdentifier, DOMSource, AnyXmlNode> builder =
- Builders.anyXmlBuilder().withNodeIdentifier(
- new NodeIdentifier( legacyData.getNodeType() ) );
- // Will be removed
-// builder.withValue(legacyData);
- return builder.build();
- }
-
@Override
public boolean isLeaf() {
return false;
import static com.google.common.base.Preconditions.checkArgument;
-import java.util.AbstractMap;
-import java.util.ArrayList;
+import com.google.common.collect.ImmutableList;
import java.util.Iterator;
-import java.util.Map;
-
-import javax.xml.transform.dom.DOMSource;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-import org.opendaylight.yangtools.yang.data.api.Node;
-import org.opendaylight.yangtools.yang.data.api.SimpleNode;
-import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
-import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode;
-import org.opendaylight.yangtools.yang.data.api.schema.MixinNode;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer;
-import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
-import org.opendaylight.yangtools.yang.data.impl.ImmutableCompositeNode;
-import org.opendaylight.yangtools.yang.data.impl.SimpleNodeTOImpl;
-import org.opendaylight.yangtools.yang.data.impl.util.CompositeNodeBuilder;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicates;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-
/**
- * @deprecated This class provides compatibility between {@link CompositeNode} and {@link NormalizedNode}.
- * Users of this class should use {@link NormalizedNode}s directly.
+ * @deprecated This class provides compatibility between XML semantics
+ * and {@link org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree}
*/
@Deprecated
public class DataNormalizer {
return currentOp;
}
- public Map.Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> toNormalized(
- final Map.Entry<YangInstanceIdentifier, CompositeNode> legacy) {
- return toNormalized(legacy.getKey(), legacy.getValue());
- }
-
- public Map.Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> toNormalized(final YangInstanceIdentifier legacyPath,
- final CompositeNode legacyData) {
-
- YangInstanceIdentifier normalizedPath = toNormalized(legacyPath);
-
- DataNormalizationOperation<?> currentOp = operation;
- for (PathArgument arg : normalizedPath.getPathArguments()) {
- try {
- currentOp = currentOp.getChild(arg);
- } catch (DataNormalizationException e) {
- throw new IllegalArgumentException(String.format("Failed to validate normalized path %s",
- normalizedPath), e);
- }
- }
- Preconditions.checkArgument(currentOp != null,
- "Instance Identifier %s does not reference correct schema Node.", normalizedPath);
- return new AbstractMap.SimpleEntry<YangInstanceIdentifier, NormalizedNode<?, ?>>(normalizedPath,
- currentOp.normalize(legacyData));
- }
-
public YangInstanceIdentifier toLegacy(final YangInstanceIdentifier normalized) throws DataNormalizationException {
ImmutableList.Builder<PathArgument> legacyArgs = ImmutableList.builder();
DataNormalizationOperation<?> currentOp = operation;
return YangInstanceIdentifier.create(legacyArgs.build());
}
- public CompositeNode toLegacy(final YangInstanceIdentifier normalizedPath, final NormalizedNode<?, ?> normalizedData) {
- // Preconditions.checkArgument(normalizedData instanceof
- // DataContainerNode<?>,"Node object %s, %s should be of type DataContainerNode",normalizedPath,normalizedData);
- if (normalizedData instanceof DataContainerNode<?>) {
- return toLegacyFromDataContainer((DataContainerNode<?>) normalizedData);
- } else if (normalizedData instanceof AnyXmlNode) {
- DOMSource value = ((AnyXmlNode) normalizedData).getValue();
- return value instanceof CompositeNode ? (CompositeNode) value : null;
- }
- return null;
- }
-
- public static Node<?> toLegacy(final NormalizedNode<?, ?> node) {
- if (node instanceof MixinNode) {
- /**
- * Direct reading of MixinNodes is not supported, since it is not
- * possible in legacy APIs create pointer to Mixin Nodes.
- *
- */
- return null;
- }
-
- if (node instanceof DataContainerNode<?>) {
- return toLegacyFromDataContainer((DataContainerNode<?>) node);
- } else if (node instanceof AnyXmlNode) {
- return null;
- }
- return toLegacySimple(node);
-
- }
-
- private static SimpleNode<?> toLegacySimple(final NormalizedNode<?, ?> node) {
- return new SimpleNodeTOImpl<Object>(node.getNodeType(), null, node.getValue());
- }
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private static CompositeNode toLegacyFromDataContainer(final DataContainerNode<?> node) {
- CompositeNodeBuilder<ImmutableCompositeNode> builder = ImmutableCompositeNode.builder();
- builder.setQName(node.getNodeType());
- for (NormalizedNode<?, ?> child : node.getValue()) {
- if (child instanceof MixinNode && child instanceof NormalizedNodeContainer<?, ?, ?>) {
- builder.addAll(toLegacyNodesFromMixin((NormalizedNodeContainer) child));
- } else if (child instanceof UnkeyedListNode) {
- builder.addAll(toLegacyNodesFromUnkeyedList((UnkeyedListNode) child));
- } else {
- addToBuilder(builder, toLegacy(child));
- }
- }
- return builder.toInstance();
- }
-
- private static Iterable<? extends Node<?>> toLegacyNodesFromUnkeyedList(final UnkeyedListNode mixin) {
- ArrayList<Node<?>> ret = new ArrayList<>();
- for (NormalizedNode<?, ?> child : mixin.getValue()) {
- ret.add(toLegacy(child));
- }
- return FluentIterable.from(ret).filter(Predicates.notNull());
- }
-
- private static void addToBuilder(final CompositeNodeBuilder<ImmutableCompositeNode> builder, final Node<?> legacy) {
- if (legacy != null) {
- builder.add(legacy);
- }
- }
-
- @SuppressWarnings({ "rawtypes", "unchecked" })
- private static Iterable<Node<?>> toLegacyNodesFromMixin(
- final NormalizedNodeContainer<?, ?, NormalizedNode<?, ?>> mixin) {
- ArrayList<Node<?>> ret = new ArrayList<>();
- for (NormalizedNode<?, ?> child : mixin.getValue()) {
- if (child instanceof MixinNode && child instanceof NormalizedNodeContainer<?, ?, ?>) {
- Iterables.addAll(ret, toLegacyNodesFromMixin((NormalizedNodeContainer) child));
- } else {
- ret.add(toLegacy(child));
- }
- }
- return FluentIterable.from(ret).filter(Predicates.notNull());
- }
-
public DataNormalizationOperation<?> getRootOperation() {
return operation;
}
+++ /dev/null
-/*
- * Copyright (c) 2014 Brocade Communications Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.md.sal.common.impl.util.compat;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import java.util.AbstractMap;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.Node;
-import org.opendaylight.yangtools.yang.data.api.SimpleNode;
-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.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
-import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
-import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
-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.LeafSetNode;
-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.OrderedLeafSetNode;
-import org.opendaylight.yangtools.yang.data.api.schema.OrderedMapNode;
-import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
-import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
-import org.opendaylight.yangtools.yang.data.impl.ImmutableCompositeNode;
-import org.opendaylight.yangtools.yang.data.impl.NodeFactory;
-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.api.ListNodeBuilder;
-import org.opendaylight.yangtools.yang.data.impl.util.CompositeNodeBuilder;
-import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
-
-@Deprecated
-public class DataNormalizerTest {
-
- static class NormalizedNodeData {
- PathArgument nodeID;
- Class<?> nodeClass;
- Object nodeData; // List for a container, value Object for a leaf
-
- NormalizedNodeData(final PathArgument nodeID, final Class<?> nodeClass, final Object nodeData) {
- this.nodeID = nodeID;
- this.nodeClass = nodeClass;
- this.nodeData = nodeData;
- }
- }
-
- static class LegacyNodeData {
- QName nodeKey;
- Object nodeData; // List for a CompositeNode, value Object for a
- // SimpeNode
-
- LegacyNodeData(final QName nodeKey, final Object nodeData) {
- this.nodeKey = nodeKey;
- this.nodeData = nodeData;
- }
-
- @Override
- public String toString() {
- return nodeKey.toString();
- }
- }
-
- static final QName TEST_QNAME = QName.create(
- "urn:opendaylight:params:xml:ns:yang:controller:md:sal:normalization:test", "2014-03-13", "test");
- static final QName OUTER_LIST_QNAME = QName.create(TEST_QNAME, "outer-list");
- static final QName INNER_LIST_QNAME = QName.create(TEST_QNAME, "inner-list");
- static final QName OUTER_CHOICE_QNAME = QName.create(TEST_QNAME, "outer-choice");
- static final QName ID_QNAME = QName.create(TEST_QNAME, "id");
- static final QName NAME_QNAME = QName.create(TEST_QNAME, "name");
- static final QName VALUE_QNAME = QName.create(TEST_QNAME, "value");
-
- static final YangInstanceIdentifier TEST_PATH = YangInstanceIdentifier.of(TEST_QNAME);
- static final YangInstanceIdentifier OUTER_LIST_PATH = YangInstanceIdentifier.builder(TEST_PATH).node(OUTER_LIST_QNAME)
- .build();
- static final QName ONE_QNAME = QName.create(TEST_QNAME, "one");
- static final QName TWO_QNAME = QName.create(TEST_QNAME, "two");
- static final QName THREE_QNAME = QName.create(TEST_QNAME, "three");
-
- static final QName ANY_XML_DATA_QNAME = QName.create(TEST_QNAME, "any-xml-data");
- static final QName OUTER_CONTAINER_QNAME = QName.create(TEST_QNAME, "outer-container");
- static final QName AUGMENTED_LEAF_QNAME = QName.create(TEST_QNAME, "augmented-leaf");
- static final QName UNKEYED_LIST_QNAME = QName.create(TEST_QNAME, "unkeyed-list");
- static final QName UNORDERED_LEAF_LIST_QNAME = QName.create(TEST_QNAME, "unordered-leaf-list");
- static final QName ORDERED_LEAF_LIST_QNAME = QName.create(TEST_QNAME, "ordered-leaf-list");
-
- static final Short OUTER_LIST_ID = (short) 10;
-
- static final YangInstanceIdentifier OUTER_LIST_PATH_LEGACY = YangInstanceIdentifier.builder(TEST_PATH)
- .nodeWithKey(OUTER_LIST_QNAME, ID_QNAME, OUTER_LIST_ID).build();
-
- static final YangInstanceIdentifier LEAF_TWO_PATH_LEGACY = YangInstanceIdentifier.builder(OUTER_LIST_PATH_LEGACY)
- .node(TWO_QNAME).build();
-
- static final QName ANY_XML_LEAF_QNAME = QName.create(TEST_QNAME, "leaf");;
- static final QName ANY_XML_INNER_QNAME = QName.create(TEST_QNAME, "inner");
- static final QName ANY_XML_INNER_LEAF_QNAME = QName.create(TEST_QNAME, "inner-leaf");
-
- SchemaContext createTestContext() {
- YangParserImpl parser = new YangParserImpl();
- Set<Module> modules = parser.parseYangModelsFromStreams(Collections.singletonList(DataNormalizerTest.class
- .getResourceAsStream("/normalization-test.yang")));
- return parser.resolveSchemaContext(modules);
- }
-
- @Test
- public void testToNormalizedInstanceIdentifier() {
- SchemaContext testCtx = createTestContext();
- DataNormalizer normalizer = new DataNormalizer(testCtx);
-
- YangInstanceIdentifier normalizedPath = normalizer.toNormalized(LEAF_TWO_PATH_LEGACY);
-
- verifyNormalizedInstanceIdentifier(normalizedPath, TEST_QNAME, OUTER_LIST_QNAME, new Object[] {
- OUTER_LIST_QNAME, ID_QNAME, OUTER_LIST_ID }, OUTER_CHOICE_QNAME, TWO_QNAME);
- }
-
- private void verifyNormalizedInstanceIdentifier(final YangInstanceIdentifier actual, final Object... expPath) {
-
- assertNotNull("Actual InstanceIdentifier is null", actual);
- assertEquals("InstanceIdentifier path length", expPath.length, Iterables.size(actual.getPathArguments()));
-
- for (int i = 0; i < expPath.length; i++) {
- PathArgument actualArg = Iterables.get(actual.getPathArguments(), i);
- if (expPath[i] instanceof Object[]) { // NodeIdentifierWithPredicates
- Object[] exp = (Object[]) expPath[i];
- assertEquals("Actual path arg " + (i + 1) + " class", NodeIdentifierWithPredicates.class,
- actualArg.getClass());
- NodeIdentifierWithPredicates actualNode = (NodeIdentifierWithPredicates) actualArg;
- assertEquals("Actual path arg " + (i + 1) + " node type", exp[0], actualNode.getNodeType());
- assertEquals("Actual path arg " + (i + 1) + " key values map size", 1, actualNode.getKeyValues().size());
- Entry<QName, Object> keyValuesEntry = actualNode.getKeyValues().entrySet().iterator().next();
- assertEquals("Actual path arg " + (i + 1) + " key values map key", exp[1], keyValuesEntry.getKey());
- assertEquals("Actual path arg " + (i + 1) + " key values map value", exp[2], keyValuesEntry.getValue());
- } else if (expPath[i] instanceof Set) { // AugmentationIdentifier
- assertEquals("Actual path arg " + (i + 1) + " class", AugmentationIdentifier.class,
- actualArg.getClass());
- AugmentationIdentifier actualNode = (AugmentationIdentifier) actualArg;
- assertEquals("Actual path arg " + (i + 1) + " PossibleChildNames", expPath[i],
- actualNode.getPossibleChildNames());
- } else {
- assertEquals("Actual path arg " + (i + 1) + " node type", expPath[i], actualArg.getNodeType());
- }
- }
- }
-
- @Test
- public void testToLegacyInstanceIdentifier() throws DataNormalizationException {
-
- DataNormalizer normalizer = new DataNormalizer(createTestContext());
-
- YangInstanceIdentifier normalized = YangInstanceIdentifier.builder().node(TEST_QNAME).node(OUTER_LIST_QNAME)
- .nodeWithKey(OUTER_LIST_QNAME, ID_QNAME, OUTER_LIST_ID).node(OUTER_CHOICE_QNAME).node(TWO_QNAME)
- .build();
-
- YangInstanceIdentifier legacy = normalizer.toLegacy(normalized);
-
- assertEquals("Legacy InstanceIdentifier", LEAF_TWO_PATH_LEGACY, legacy);
- }
-
- @Test
- public void testToLegacyNormalizedNode() {
-
- ChoiceNode choiceNode1 = Builders.choiceBuilder().withNodeIdentifier(new NodeIdentifier(OUTER_CHOICE_QNAME))
- .withChild(ImmutableNodes.leafNode(TWO_QNAME, "two"))
- .withChild(ImmutableNodes.leafNode(THREE_QNAME, "three")).build();
-
- MapEntryNode innerListEntryNode1 = Builders.mapEntryBuilder()
- .withNodeIdentifier(new NodeIdentifierWithPredicates(INNER_LIST_QNAME, NAME_QNAME, "inner-name1"))
- .withChild(ImmutableNodes.leafNode(NAME_QNAME, "inner-name1"))
- .withChild(ImmutableNodes.leafNode(VALUE_QNAME, "inner-value1")).build();
-
- MapEntryNode innerListEntryNode2 = Builders.mapEntryBuilder()
- .withNodeIdentifier(new NodeIdentifierWithPredicates(INNER_LIST_QNAME, NAME_QNAME, "inner-name2"))
- .withChild(ImmutableNodes.leafNode(NAME_QNAME, "inner-name2"))
- .withChild(ImmutableNodes.leafNode(VALUE_QNAME, "inner-value2")).build();
-
- OrderedMapNode innerListNode = Builders.orderedMapBuilder()
- .withNodeIdentifier(new NodeIdentifier(INNER_LIST_QNAME)).withChild(innerListEntryNode1)
- .withChild(innerListEntryNode2).build();
-
- Short outerListID1 = Short.valueOf((short) 10);
- MapEntryNode outerListEntryNode1 = Builders.mapEntryBuilder()
- .withNodeIdentifier(new NodeIdentifierWithPredicates(OUTER_LIST_QNAME, ID_QNAME, outerListID1))
- .withChild(ImmutableNodes.leafNode(ID_QNAME, outerListID1)).withChild(choiceNode1)
- .withChild(innerListNode).build();
-
- ChoiceNode choiceNode2 = Builders.choiceBuilder().withNodeIdentifier(new NodeIdentifier(OUTER_CHOICE_QNAME))
- .withChild(ImmutableNodes.leafNode(ONE_QNAME, "one")).build();
-
- Short outerListID2 = Short.valueOf((short) 20);
- MapEntryNode outerListEntryNode2 = Builders.mapEntryBuilder()
- .withNodeIdentifier(new NodeIdentifierWithPredicates(OUTER_LIST_QNAME, ID_QNAME, outerListID2))
- .withChild(ImmutableNodes.leafNode(ID_QNAME, outerListID2)).withChild(choiceNode2).build();
-
- MapNode outerListNode = Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(OUTER_LIST_QNAME))
- .withChild(outerListEntryNode1).withChild(outerListEntryNode2).build();
-
- UnkeyedListEntryNode unkeyedListEntryNode1 = Builders.unkeyedListEntryBuilder()
- .withNodeIdentifier(new NodeIdentifier(UNKEYED_LIST_QNAME))
- .withChild(ImmutableNodes.leafNode(NAME_QNAME, "unkeyed1")).build();
-
- UnkeyedListEntryNode unkeyedListEntryNode2 = Builders.unkeyedListEntryBuilder()
- .withNodeIdentifier(new NodeIdentifier(UNKEYED_LIST_QNAME))
- .withChild(ImmutableNodes.leafNode(NAME_QNAME, "unkeyed2")).build();
-
- UnkeyedListNode unkeyedListNode = Builders.unkeyedListBuilder()
- .withNodeIdentifier(new NodeIdentifier(UNKEYED_LIST_QNAME)).withChild(unkeyedListEntryNode1)
- .withChild(unkeyedListEntryNode2).build();
-
- ContainerNode testContainerNode = Builders.containerBuilder()
- .withNodeIdentifier(new NodeIdentifier(TEST_QNAME)).withChild(outerListNode).withChild(unkeyedListNode)
- .build();
-
- Node<?> legacyNode = DataNormalizer.toLegacy(testContainerNode);
-
- verifyLegacyNode(
- legacyNode,
- expectCompositeNode(
- TEST_QNAME,
- expectCompositeNode(
- OUTER_LIST_QNAME,
- expectSimpleNode(ID_QNAME, outerListID1),
- expectSimpleNode(TWO_QNAME, "two"),
- expectSimpleNode(THREE_QNAME, "three"),
-
- expectCompositeNode(INNER_LIST_QNAME, expectSimpleNode(NAME_QNAME, "inner-name1"),
- expectSimpleNode(VALUE_QNAME, "inner-value1")),
-
- expectCompositeNode(INNER_LIST_QNAME, expectSimpleNode(NAME_QNAME, "inner-name2"),
- expectSimpleNode(VALUE_QNAME, "inner-value2"))),
- expectCompositeNode(OUTER_LIST_QNAME, expectSimpleNode(ID_QNAME, outerListID2),
- expectSimpleNode(ONE_QNAME, "one")),
- expectCompositeNode(UNKEYED_LIST_QNAME, expectSimpleNode(NAME_QNAME, "unkeyed1")),
- expectCompositeNode(UNKEYED_LIST_QNAME, expectSimpleNode(NAME_QNAME, "unkeyed2"))));
-
- // Conversion of Mixin type nodes is not supported.
-
- assertNull("Expected null returned for Mixin type node", DataNormalizer.toLegacy(outerListNode));
- }
-
- /**
- * Following data are constructed: <any-xml-data> <inner>
- * <inner-leaf>inner-leaf-value</inner-leaf> </inner>
- * <leaf>leaf-value</leaf> <any-xml-data>
- */
- @Ignore
- @Test
- public void testToLegacyNormalizedNodeWithAnyXml() {
-
- Node<?> innerLeafChild = NodeFactory.createImmutableSimpleNode(ANY_XML_INNER_LEAF_QNAME, null,
- "inner-leaf-value");
- CompositeNode innerContainer = NodeFactory.createImmutableCompositeNode(ANY_XML_INNER_QNAME, null,
- Collections.<Node<?>> singletonList(innerLeafChild));
-
- Node<?> leafChild = NodeFactory.createImmutableSimpleNode(ANY_XML_LEAF_QNAME, null, "leaf-value");
- CompositeNode anyXmlNodeValue = NodeFactory.createImmutableCompositeNode(ANY_XML_DATA_QNAME, null,
- Arrays.asList(leafChild, innerContainer));
-
- AnyXmlNode testAnyXmlNode = Builders.anyXmlBuilder().withNodeIdentifier(new NodeIdentifier(TEST_QNAME)).build();
-
- ContainerNode testContainerNode = Builders.containerBuilder()
- .withNodeIdentifier(new NodeIdentifier(TEST_QNAME)).withChild(testAnyXmlNode).build();
-
- DataNormalizer normalizer = new DataNormalizer(createTestContext());
- Node<?> legacyNode = normalizer.toLegacy(YangInstanceIdentifier.builder().node(TEST_QNAME).build(), testContainerNode);
-
- verifyLegacyNode(
- legacyNode,
- expectCompositeNode(
- TEST_QNAME,
- expectCompositeNode(
- ANY_XML_DATA_QNAME,
- expectSimpleNode(ANY_XML_LEAF_QNAME, "leaf-value"),
- expectCompositeNode(ANY_XML_INNER_QNAME,
- expectSimpleNode(ANY_XML_INNER_LEAF_QNAME, "inner-leaf-value")))));
- }
-
- @Test
- public void testToLegacyNormalizedNodeWithLeafLists() {
-
- CompositeNodeBuilder<ImmutableCompositeNode> testBuilder = ImmutableCompositeNode.builder();
- testBuilder.setQName(TEST_QNAME);
-
- ListNodeBuilder<Object, LeafSetEntryNode<Object>> leafSetBuilder = Builders.leafSetBuilder()
- .withNodeIdentifier(new NodeIdentifier(UNORDERED_LEAF_LIST_QNAME));
- for (int i = 1; i <= 3; i++) {
- leafSetBuilder.withChildValue("unordered-value" + i);
- }
-
- ListNodeBuilder<Object, LeafSetEntryNode<Object>> orderedLeafSetBuilder = Builders.orderedLeafSetBuilder()
- .withNodeIdentifier(new NodeIdentifier(ORDERED_LEAF_LIST_QNAME));
- for (int i = 3; i > 0; i--) {
- orderedLeafSetBuilder.withChildValue("ordered-value" + i);
- }
-
- ContainerNode testContainerNode = Builders.containerBuilder()
- .withNodeIdentifier(new NodeIdentifier(TEST_QNAME)).withChild(leafSetBuilder.build())
- .withChild(orderedLeafSetBuilder.build()).build();
-
- DataNormalizer normalizer = new DataNormalizer(createTestContext());
-
- Node<?> legacyNode = normalizer.toLegacy(YangInstanceIdentifier.builder().node(TEST_QNAME).build(), testContainerNode);
-
- verifyLegacyNode(
- legacyNode,
- expectCompositeNode(TEST_QNAME, expectSimpleNode(UNORDERED_LEAF_LIST_QNAME, "unordered-value1"),
- expectSimpleNode(UNORDERED_LEAF_LIST_QNAME, "unordered-value2"),
- expectSimpleNode(UNORDERED_LEAF_LIST_QNAME, "unordered-value3"),
- expectSimpleNode(ORDERED_LEAF_LIST_QNAME, "ordered-value3"),
- expectSimpleNode(ORDERED_LEAF_LIST_QNAME, "ordered-value2"),
- expectSimpleNode(ORDERED_LEAF_LIST_QNAME, "ordered-value1")));
- }
-
- @Test
- public void testToLegacyNormalizedNodeWithAugmentation() {
-
- AugmentationNode augmentationNode = Builders.augmentationBuilder()
- .withNodeIdentifier(new AugmentationIdentifier(Sets.newHashSet(AUGMENTED_LEAF_QNAME)))
- .withChild(ImmutableNodes.leafNode(AUGMENTED_LEAF_QNAME, "augmented-value")).build();
-
- ContainerNode outerContainerNode = Builders.containerBuilder()
- .withNodeIdentifier(new NodeIdentifier(OUTER_CONTAINER_QNAME)).withChild(augmentationNode).build();
-
- ContainerNode testContainerNode = Builders.containerBuilder()
- .withNodeIdentifier(new NodeIdentifier(TEST_QNAME)).withChild(outerContainerNode).build();
-
- DataNormalizer normalizer = new DataNormalizer(createTestContext());
-
- Node<?> legacyNode = normalizer.toLegacy(YangInstanceIdentifier.builder().node(TEST_QNAME).build(), testContainerNode);
-
- verifyLegacyNode(
- legacyNode,
- expectCompositeNode(
- TEST_QNAME,
- expectCompositeNode(OUTER_CONTAINER_QNAME,
- expectSimpleNode(AUGMENTED_LEAF_QNAME, "augmented-value"))));
- }
-
- private boolean isOrdered(final QName nodeName) {
- return ORDERED_LEAF_LIST_QNAME.equals(nodeName) || INNER_LIST_QNAME.equals(nodeName);
- }
-
- @SuppressWarnings("unchecked")
- private void verifyLegacyNode(final Node<?> actual, final LegacyNodeData expNodeData) {
-
- assertNotNull("Actual Node is null", actual);
- assertTrue("Expected CompositeNode instance", actual instanceof CompositeNode);
- CompositeNode actualCN = (CompositeNode) actual;
- assertEquals("Node key", expNodeData.nodeKey, actualCN.getKey());
-
- List<LegacyNodeData> expChildData = Lists.newArrayList();
- List<LegacyNodeData> unorderdChildData = Lists.newArrayList();
- for (LegacyNodeData data : (List<LegacyNodeData>) expNodeData.nodeData) {
- if (isOrdered(data.nodeKey)) {
- expChildData.add(data);
- } else {
- unorderdChildData.add(data);
- }
- }
-
- Collections.sort(unorderdChildData, new Comparator<LegacyNodeData>() {
- @Override
- public int compare(final LegacyNodeData arg1, final LegacyNodeData arg2) {
- if (!(arg1.nodeData instanceof List) && !(arg2.nodeData instanceof List)) {
- // if neither is a list, just compare them
- String str1 = arg1.nodeKey.getLocalName() + arg1.nodeData;
- String str2 = arg2.nodeKey.getLocalName() + arg2.nodeData;
- return str1.compareTo(str2);
- } else if (arg1.nodeData instanceof List && arg2.nodeData instanceof List) {
- // if both are lists, first check their local name
- String str1 = arg1.nodeKey.getLocalName();
- String str2 = arg2.nodeKey.getLocalName();
- if (!str1.equals(str2)) {
- return str1.compareTo(str2);
- } else {
- // if local names are the same, then look at the list contents
- List<LegacyNodeData> l1 = (List<LegacyNodeData>) arg1.nodeData;
- List<LegacyNodeData> l2 = (List<LegacyNodeData>) arg2.nodeData;
-
- if (l1.size() != l2.size()) {
- // if the sizes are different, use that
- return l2.size() - l1.size();
- } else {
- // lastly sort and recursively check the list contents
- Collections.sort(l1, this);
- Collections.sort(l2, this);
-
- for (int i = 0 ; i < l1.size() ; i++) {
- int diff = this.compare(l1.get(i), l2.get(i));
- if (diff != 0) {
- return diff;
- }
- }
- return 0;
- }
- }
- } else if( arg1.nodeData instanceof List ) {
- return -1;
- } else{
- return 1;
- }
- }
- });
-
- expChildData.addAll(unorderdChildData);
-
- List<Node<?>> actualChildNodes = Lists.newArrayList();
- List<Node<?>> unorderedChildNodes = Lists.newArrayList();
- for (Node<?> node : actualCN.getValue()) {
- if (isOrdered(node.getKey())) {
- actualChildNodes.add(node);
- } else {
- unorderedChildNodes.add(node);
- }
- }
-
- Collections.sort(unorderedChildNodes, new Comparator<Node<?>>() {
- @Override
- public int compare(final Node<?> n1, final Node<?> n2) {
- if (n1 instanceof SimpleNode && n2 instanceof SimpleNode) {
- // if they're SimpleNodes just compare their strings
- String str1 = n1.getKey().getLocalName() + ((SimpleNode<?>)n1).getValue();
- String str2 = n2.getKey().getLocalName() + ((SimpleNode<?>)n2).getValue();
- return str1.compareTo(str2);
- } else if (n1 instanceof CompositeNode && n2 instanceof CompositeNode) {
- // if they're CompositeNodes, things are more interesting
- String str1 = n1.getKey().getLocalName();
- String str2 = n2.getKey().getLocalName();
- if (!str1.equals(str2)) {
- // if their local names differ, return that difference
- return str1.compareTo(str2);
- } else {
- // otherwise, we need to look at their contents
- ArrayList<Node<?>> l1 = new ArrayList<Node<?>>( ((CompositeNode)n1).getValue() );
- ArrayList<Node<?>> l2 = new ArrayList<Node<?>>( ((CompositeNode)n2).getValue() );
-
- if (l1.size() != l2.size()) {
- // if they have different numbers of things in them return that
- return l2.size() - l1.size();
- } else {
- // otherwise, compare the individual elements, first sort them
- Collections.sort(l1, this);
- Collections.sort(l2, this);
-
- // then compare them individually
- for(int i = 0 ; i < l2.size() ; i++) {
- int diff = this.compare(l1.get(i), l2.get(i));
- if(diff != 0){
- return diff;
- }
- }
- return 0;
- }
- }
- } else if (n1 instanceof CompositeNode && n2 instanceof SimpleNode) {
- return -1;
- } else if (n2 instanceof CompositeNode && n1 instanceof SimpleNode) {
- return 1;
- } else {
- assertTrue("Expected either SimpleNodes CompositeNodes", false);
- return 0;
- }
- }
- });
-
- actualChildNodes.addAll(unorderedChildNodes);
-
- for (Node<?> actualChild : actualChildNodes) {
- LegacyNodeData expData = expChildData.isEmpty() ? null : expChildData.remove(0);
- assertNotNull("Unexpected child node with key " + actualChild.getKey(), expData);
- assertEquals("Child node QName", expData.nodeKey, actualChild.getKey());
-
- if (expData.nodeData instanceof List) { // List represents a
- // composite node
- verifyLegacyNode(actualChild, expData);
- } else { // else a simple node
- assertTrue("Expected SimpleNode instance", actualChild instanceof SimpleNode);
- assertEquals("Child node value with key " + actualChild.getKey(), expData.nodeData,
- ((SimpleNode<?>) actualChild).getValue());
- }
- }
-
- if (!expChildData.isEmpty()) {
- fail("Missing child nodes: " + expChildData);
- }
- }
-
- private LegacyNodeData expectCompositeNode(final QName key, final LegacyNodeData... childData) {
- return new LegacyNodeData(key, Lists.newArrayList(childData));
- }
-
- private LegacyNodeData expectSimpleNode(final QName key, final Object value) {
- return new LegacyNodeData(key, value);
- }
-
- @Test
- public void testToNormalizedCompositeNode() {
- SchemaContext testCtx = createTestContext();
- DataNormalizer normalizer = new DataNormalizer(testCtx);
-
- CompositeNodeBuilder<ImmutableCompositeNode> testBuilder = ImmutableCompositeNode.builder();
- testBuilder.setQName(TEST_QNAME);
-
- CompositeNodeBuilder<ImmutableCompositeNode> outerListBuilder = ImmutableCompositeNode.builder();
- outerListBuilder.setQName(OUTER_LIST_QNAME);
- outerListBuilder.addLeaf(ID_QNAME, 10);
- outerListBuilder.addLeaf(ONE_QNAME, "one");
-
- for (int i = 3; i > 0; i--) {
- CompositeNodeBuilder<ImmutableCompositeNode> innerListBuilder = ImmutableCompositeNode.builder();
- innerListBuilder.setQName(INNER_LIST_QNAME);
- innerListBuilder.addLeaf(NAME_QNAME, "inner-name" + i);
- innerListBuilder.addLeaf(VALUE_QNAME, "inner-value" + i);
- outerListBuilder.add(innerListBuilder.toInstance());
- }
-
- testBuilder.add(outerListBuilder.toInstance());
-
- outerListBuilder = ImmutableCompositeNode.builder();
- outerListBuilder.setQName(OUTER_LIST_QNAME);
- outerListBuilder.addLeaf(ID_QNAME, 20);
- outerListBuilder.addLeaf(TWO_QNAME, "two");
- outerListBuilder.addLeaf(THREE_QNAME, "three");
- testBuilder.add(outerListBuilder.toInstance());
-
- for (int i = 1; i <= 2; i++) {
- CompositeNodeBuilder<ImmutableCompositeNode> unkeyedListBuilder = ImmutableCompositeNode.builder();
- unkeyedListBuilder.setQName(UNKEYED_LIST_QNAME);
- unkeyedListBuilder.addLeaf(NAME_QNAME, "unkeyed-name" + i);
- testBuilder.add(unkeyedListBuilder.toInstance());
- }
-
- Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> normalizedNodeEntry = normalizer
- .toNormalized(new AbstractMap.SimpleEntry<YangInstanceIdentifier, CompositeNode>(YangInstanceIdentifier.create(
- ImmutableList.<PathArgument> of(new NodeIdentifier(TEST_QNAME))), testBuilder.toInstance()));
-
- verifyNormalizedInstanceIdentifier(normalizedNodeEntry.getKey(), TEST_QNAME);
-
- verifyNormalizedNode(
- normalizedNodeEntry.getValue(),
- expectContainerNode(
- TEST_QNAME,
- expectMapNode(
- OUTER_LIST_QNAME,
- expectMapEntryNode(
- OUTER_LIST_QNAME,
- ID_QNAME,
- 10,
- expectLeafNode(ID_QNAME, 10),
- expectChoiceNode(OUTER_CHOICE_QNAME, expectLeafNode(ONE_QNAME, "one")),
- expectOrderedMapNode(
- INNER_LIST_QNAME,
- expectMapEntryNode(INNER_LIST_QNAME, NAME_QNAME, "inner-name3",
- expectLeafNode(NAME_QNAME, "inner-name3"),
- expectLeafNode(VALUE_QNAME, "inner-value3")),
- expectMapEntryNode(INNER_LIST_QNAME, NAME_QNAME, "inner-name2",
- expectLeafNode(NAME_QNAME, "inner-name2"),
- expectLeafNode(VALUE_QNAME, "inner-value2")),
- expectMapEntryNode(INNER_LIST_QNAME, NAME_QNAME, "inner-name1",
- expectLeafNode(NAME_QNAME, "inner-name1"),
- expectLeafNode(VALUE_QNAME, "inner-value1")))),
- expectMapEntryNode(
- OUTER_LIST_QNAME,
- ID_QNAME,
- 20,
- expectLeafNode(ID_QNAME, 20),
- expectChoiceNode(OUTER_CHOICE_QNAME, expectLeafNode(TWO_QNAME, "two"),
- expectLeafNode(THREE_QNAME, "three")))),
- expectUnkeyedListNode(
- UNKEYED_LIST_QNAME,
- expectUnkeyedListEntryNode(UNKEYED_LIST_QNAME,
- expectLeafNode(NAME_QNAME, "unkeyed-name1")),
- expectUnkeyedListEntryNode(UNKEYED_LIST_QNAME,
- expectLeafNode(NAME_QNAME, "unkeyed-name2")))));
- }
-
- @Ignore
- @Test
- public void testToNormalizedCompositeNodeWithAnyXml() {
- SchemaContext testCtx = createTestContext();
- DataNormalizer normalizer = new DataNormalizer(testCtx);
-
- CompositeNodeBuilder<ImmutableCompositeNode> testBuilder = ImmutableCompositeNode.builder();
- testBuilder.setQName(TEST_QNAME);
-
- CompositeNodeBuilder<ImmutableCompositeNode> anyXmlBuilder = ImmutableCompositeNode.builder();
- anyXmlBuilder.setQName(ANY_XML_DATA_QNAME);
- anyXmlBuilder.addLeaf(ANY_XML_LEAF_QNAME, "leaf-value");
-
- CompositeNodeBuilder<ImmutableCompositeNode> innerBuilder = ImmutableCompositeNode.builder();
- innerBuilder.setQName(ANY_XML_INNER_QNAME);
- innerBuilder.addLeaf(ANY_XML_INNER_LEAF_QNAME, "inner-leaf-value");
-
- anyXmlBuilder.add(innerBuilder.toInstance());
- CompositeNode anyXmlLegacy = anyXmlBuilder.toInstance();
- testBuilder.add(anyXmlLegacy);
-
- Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> normalizedNodeEntry = normalizer
- .toNormalized(new AbstractMap.SimpleEntry<YangInstanceIdentifier, CompositeNode>(YangInstanceIdentifier.create(
- ImmutableList.<PathArgument> of(new NodeIdentifier(TEST_QNAME))), testBuilder.toInstance()));
-
- verifyNormalizedInstanceIdentifier(normalizedNodeEntry.getKey(), TEST_QNAME);
-
- verifyNormalizedNode(normalizedNodeEntry.getValue(),
- expectContainerNode(TEST_QNAME, expectAnyXmlNode(ANY_XML_DATA_QNAME, anyXmlLegacy)));
- }
-
- @Test
- public void testToNormalizedCompositeNodeWithAugmentation() {
- SchemaContext testCtx = createTestContext();
- DataNormalizer normalizer = new DataNormalizer(testCtx);
-
- CompositeNodeBuilder<ImmutableCompositeNode> testBuilder = ImmutableCompositeNode.builder();
- testBuilder.setQName(TEST_QNAME);
-
- CompositeNodeBuilder<ImmutableCompositeNode> outerContBuilder = ImmutableCompositeNode.builder();
- outerContBuilder.setQName(OUTER_CONTAINER_QNAME);
- outerContBuilder.addLeaf(AUGMENTED_LEAF_QNAME, "augmented-value");
-
- testBuilder.add(outerContBuilder.toInstance());
-
- Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> normalizedNodeEntry = normalizer
- .toNormalized(new AbstractMap.SimpleEntry<YangInstanceIdentifier, CompositeNode>(YangInstanceIdentifier.create(
- ImmutableList.<PathArgument> of(new NodeIdentifier(TEST_QNAME))), testBuilder.toInstance()));
-
- verifyNormalizedInstanceIdentifier(normalizedNodeEntry.getKey(), TEST_QNAME);
-
- NormalizedNodeData expAugmentation = expectAugmentation(AUGMENTED_LEAF_QNAME,
- expectLeafNode(AUGMENTED_LEAF_QNAME, "augmented-value"));
-
- verifyNormalizedNode(normalizedNodeEntry.getValue(),
- expectContainerNode(TEST_QNAME, expectContainerNode(OUTER_CONTAINER_QNAME, expAugmentation)));
-
- normalizedNodeEntry = normalizer.toNormalized(new AbstractMap.SimpleEntry<YangInstanceIdentifier, CompositeNode>(
- YangInstanceIdentifier.create(Lists.newArrayList(new NodeIdentifier(TEST_QNAME), new NodeIdentifier(
- OUTER_CONTAINER_QNAME))), outerContBuilder.toInstance()));
-
- }
-
- @Test
- public void testToNormalizedCompositeNodeWithLeafLists() {
- SchemaContext testCtx = createTestContext();
- DataNormalizer normalizer = new DataNormalizer(testCtx);
-
- CompositeNodeBuilder<ImmutableCompositeNode> testBuilder = ImmutableCompositeNode.builder();
- testBuilder.setQName(TEST_QNAME);
-
- for (int i = 1; i <= 3; i++) {
- testBuilder.addLeaf(UNORDERED_LEAF_LIST_QNAME, "unordered-value" + i);
- }
-
- for (int i = 3; i > 0; i--) {
- testBuilder.addLeaf(ORDERED_LEAF_LIST_QNAME, "ordered-value" + i);
- }
-
- Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> normalizedNodeEntry = normalizer
- .toNormalized(new AbstractMap.SimpleEntry<YangInstanceIdentifier, CompositeNode>(YangInstanceIdentifier.create(
- ImmutableList.<PathArgument> of(new NodeIdentifier(TEST_QNAME))), testBuilder.toInstance()));
-
- verifyNormalizedInstanceIdentifier(normalizedNodeEntry.getKey(), TEST_QNAME);
-
- verifyNormalizedNode(
- normalizedNodeEntry.getValue(),
- expectContainerNode(
- TEST_QNAME,
- expectLeafSetNode(UNORDERED_LEAF_LIST_QNAME,
- expectLeafSetEntryNode(UNORDERED_LEAF_LIST_QNAME, "unordered-value1"),
- expectLeafSetEntryNode(UNORDERED_LEAF_LIST_QNAME, "unordered-value2"),
- expectLeafSetEntryNode(UNORDERED_LEAF_LIST_QNAME, "unordered-value3")),
- expectOrderedLeafSetNode(ORDERED_LEAF_LIST_QNAME,
- expectLeafSetEntryNode(ORDERED_LEAF_LIST_QNAME, "ordered-value3"),
- expectLeafSetEntryNode(ORDERED_LEAF_LIST_QNAME, "ordered-value2"),
- expectLeafSetEntryNode(ORDERED_LEAF_LIST_QNAME, "ordered-value1"))));
- }
-
- @SuppressWarnings("unchecked")
- private void verifyNormalizedNode(final NormalizedNode<?, ?> actual, final NormalizedNodeData expNodeData) {
-
- Class<?> expNodeClass = expNodeData.nodeClass;
- PathArgument expNodeID = expNodeData.nodeID;
-
- assertNotNull("Actual NormalizedNode is null", actual);
- assertTrue("NormalizedNode instance " + actual.getClass() + " is not derived from " + expNodeClass,
- expNodeClass.isAssignableFrom(actual.getClass()));
- assertEquals("NormalizedNode identifier", expNodeID, actual.getIdentifier());
-
- if (expNodeData.nodeData instanceof List) {
- Map<PathArgument, Integer> orderingMap = null;
- if (expNodeClass.equals(OrderedMapNode.class) || expNodeClass.equals(OrderedLeafSetNode.class)) {
- orderingMap = Maps.newHashMap();
- }
-
- int i = 1;
- Map<PathArgument, NormalizedNodeData> expChildDataMap = Maps.newHashMap();
- List<NormalizedNodeData> expChildDataList = (List<NormalizedNodeData>) expNodeData.nodeData;
- for (NormalizedNodeData data : expChildDataList) {
- expChildDataMap.put(data.nodeID, data);
-
- if (orderingMap != null) {
- orderingMap.put(data.nodeID, i++);
- }
- }
-
- assertNotNull("Actual value is null for node " + actual.getIdentifier(), actual.getValue());
- assertTrue("Expected value instance Iterable for node " + actual.getIdentifier(),
- Iterable.class.isAssignableFrom(actual.getValue().getClass()));
-
- i = 1;
- for (NormalizedNode<?, ?> actualChild : (Iterable<NormalizedNode<?, ?>>) actual.getValue()) {
- NormalizedNodeData expChildData = expNodeClass.equals(UnkeyedListNode.class) ? expChildDataList
- .remove(0) : expChildDataMap.remove(actualChild.getIdentifier());
-
- assertNotNull(
- "Unexpected child node " + actualChild.getClass() + " with identifier "
- + actualChild.getIdentifier() + " for parent node " + actual.getClass()
- + " with identifier " + actual.getIdentifier(), expChildData);
-
- if (orderingMap != null) {
- assertEquals("Order index for child node " + actualChild.getIdentifier(),
- orderingMap.get(actualChild.getIdentifier()), Integer.valueOf(i));
- }
-
- verifyNormalizedNode(actualChild, expChildData);
- i++;
- }
-
- if (expNodeClass.equals(UnkeyedListNode.class)) {
- if (expChildDataList.size() > 0) {
- fail("Missing " + expChildDataList.size() + " child nodes for parent " + actual.getIdentifier());
- }
- } else {
- if (!expChildDataMap.isEmpty()) {
- fail("Missing child nodes for parent " + actual.getIdentifier() + ": " + expChildDataMap.keySet());
- }
- }
- } else {
- assertEquals("Leaf value for node " + actual.getIdentifier(), expNodeData.nodeData, actual.getValue());
- }
- }
-
- private NormalizedNodeData expectOrderedLeafSetNode(final QName nodeName, final NormalizedNodeData... childData) {
- return new NormalizedNodeData(new NodeIdentifier(nodeName), OrderedLeafSetNode.class,
- Lists.newArrayList(childData));
- }
-
- private NormalizedNodeData expectLeafSetNode(final QName nodeName, final NormalizedNodeData... childData) {
- return new NormalizedNodeData(new NodeIdentifier(nodeName), LeafSetNode.class, Lists.newArrayList(childData));
- }
-
- private NormalizedNodeData expectLeafSetEntryNode(final QName nodeName, final Object value) {
- return new NormalizedNodeData(new NodeWithValue(nodeName, value), LeafSetEntryNode.class, value);
- }
-
- private NormalizedNodeData expectUnkeyedListNode(final QName nodeName, final NormalizedNodeData... childData) {
- return new NormalizedNodeData(new NodeIdentifier(nodeName), UnkeyedListNode.class,
- Lists.newArrayList(childData));
- }
-
- private NormalizedNodeData expectUnkeyedListEntryNode(final QName nodeName, final NormalizedNodeData... childData) {
- return new NormalizedNodeData(new NodeIdentifier(nodeName), UnkeyedListEntryNode.class,
- Lists.newArrayList(childData));
- }
-
- private NormalizedNodeData expectAugmentation(final QName augmentedNodeName, final NormalizedNodeData... childData) {
- return new NormalizedNodeData(new AugmentationIdentifier(Sets.newHashSet(augmentedNodeName)),
- AugmentationNode.class, Lists.newArrayList(childData));
- }
-
- private NormalizedNodeData expectAnyXmlNode(final QName nodeName, final Object value) {
- return new NormalizedNodeData(new NodeIdentifier(nodeName), AnyXmlNode.class, value);
- }
-
- private NormalizedNodeData expectContainerNode(final QName nodeName, final NormalizedNodeData... childData) {
- return new NormalizedNodeData(new NodeIdentifier(nodeName), ContainerNode.class, Lists.newArrayList(childData));
- }
-
- private NormalizedNodeData expectChoiceNode(final QName nodeName, final NormalizedNodeData... childData) {
- return new NormalizedNodeData(new NodeIdentifier(nodeName), ChoiceNode.class, Lists.newArrayList(childData));
- }
-
- private NormalizedNodeData expectLeafNode(final QName nodeName, final Object value) {
- return new NormalizedNodeData(new NodeIdentifier(nodeName), LeafNode.class, value);
-
- }
-
- private NormalizedNodeData expectMapEntryNode(final QName nodeName, final QName key, final Object value,
- final NormalizedNodeData... childData) {
- return new NormalizedNodeData(new NodeIdentifierWithPredicates(nodeName, key, value), MapEntryNode.class,
- Lists.newArrayList(childData));
- }
-
- private NormalizedNodeData expectMapNode(final QName key, final NormalizedNodeData... childData) {
- return new NormalizedNodeData(new NodeIdentifier(key), MapNode.class, Lists.newArrayList(childData));
- }
-
- private NormalizedNodeData expectOrderedMapNode(final QName key, final NormalizedNodeData... childData) {
- return new NormalizedNodeData(new NodeIdentifier(key), OrderedMapNode.class, Lists.newArrayList(childData));
- }
-}
*/
package org.opendaylight.controller.sal.core.api;
-import java.util.Set;
-import java.util.concurrent.Future;
-
-import org.opendaylight.controller.md.sal.common.api.routing.RoutedRegistration;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.osgi.framework.BundleContext;
/**
* removes direct dependencies between providers and consumers.
*
*
- * <h3>Infrastructure services</h3> Some examples of infrastructure services:
- *
- * <ul>
- * <li>RPC Invocation - see {@link ConsumerSession#rpc(QName, CompositeNode)},
- * {@link ProviderSession#addRpcImplementation(QName, RpcImplementation)} and
- * {@link RpcImplementation}
- * <li>Notification Service - see {@link org.opendaylight.controller.sal.core.api.notify.NotificationService} and
- * {@link org.opendaylight.controller.sal.core.api.notify.NotificationPublishService}
- * <li>Functionality and Data model
- * <li>Data Store access and modification - see {@link org.opendaylight.controller.sal.core.api.data.DataBrokerService} and
- * {@link org.opendaylight.controller.sal.core.api.data.DataProviderService}
- * </ul>
- *
* The services are exposed via session.
*
* <h3>Session-based access</h3>
* from consumer, using the {@link Provider#getProviderFunctionality()}, and
* register that functionality into system and concrete infrastructure
* services.
- *
- * <p>
- * Note that consumer could register additional functionality at later point
- * by using service and functionality specific APIs (e.g.
- * {@link ProviderSession#addRpcImplementation(QName, RpcImplementation)}
- *
* <p>
* The consumer is <b>required to use</b> returned session for all
* communication with broker or one of the broker services. The session is
*/
public interface ConsumerSession {
- /**
- * Sends an RPC to other components registered to the broker.
- *
- * @see RpcImplementation
- * @param rpc
- * Name of RPC
- * @param input
- * Input data to the RPC
- * @return Result of the RPC call
- */
- Future<RpcResult<CompositeNode>> rpc(QName rpc, CompositeNode input);
-
boolean isClosed();
/**
*
*/
public interface ProviderSession extends ConsumerSession {
- /**
- * Registers an implementation of the rpc.
- *
- * <p>
- * The registered rpc functionality will be available to all other
- * consumers and providers registered to the broker, which are aware of
- * the {@link QName} assigned to the rpc.
- *
- * <p>
- * There is no assumption that rpc type is in the set returned by
- * invoking {@link RpcImplementation#getSupportedRpcs()}. This allows
- * for dynamic rpc implementations.
- *
- * @param rpcType
- * Name of Rpc
- * @param implementation
- * Provider's Implementation of the RPC functionality
- * @throws IllegalArgumentException
- * If the name of RPC is invalid
- */
- RpcRegistration addRpcImplementation(QName rpcType, RpcImplementation implementation)
- throws IllegalArgumentException;
-
- RoutedRpcRegistration addRoutedRpcImplementation(QName rpcType, RpcImplementation implementation);
-
- RoutedRpcRegistration addMountedRpcImplementation(QName rpcType, RpcImplementation implementation);
-
/**
* Closes a session between provider and SAL.
*
@Override
boolean isClosed();
-
- Set<QName> getSupportedRpcs();
-
- ListenerRegistration<RpcRegistrationListener> addRpcRegistrationListener(RpcRegistrationListener listener);
- }
-
- public interface RpcRegistration extends ObjectRegistration<RpcImplementation> {
- QName getType();
-
- @Override
- void close();
- }
-
- public interface RoutedRpcRegistration extends RpcRegistration, RoutedRegistration<QName, YangInstanceIdentifier, RpcImplementation> {
}
}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api;
-
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-public interface RoutedRpcDefaultImplementation {
-
- ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, YangInstanceIdentifier identifier, CompositeNode input);
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api;
-
-import java.util.concurrent.Future;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-
-/**
- * @deprecated Use {@link org.opendaylight.controller.md.sal.dom.api.DOMRpcService} instead.
- */
-@Deprecated
-public interface RpcConsumptionRegistry {
- /**
- * Sends an RPC to other components registered to the broker.
- *
- * @see RpcImplementation
- * @param rpc
- * Name of RPC
- * @param input
- * Input data to the RPC
- * @return Result of the RPC call
- */
- Future<RpcResult<CompositeNode>> rpc(QName rpc, CompositeNode input);
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api;
-
-import com.google.common.util.concurrent.ListenableFuture;
-import java.util.Set;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-
-/**
- * {@link Provider}'s implementation of an RPC.
- *
- * In order to expose an RPC to other components, the provider MUST register
- * a concrete implementation of this interface.
- *
- * The registration could be done by :
- * <ul>
- * <li>returning an instance of implementation in the return value of
- * {@link Provider#getProviderFunctionality()}
- * <li>passing an instance of implementation and {@link QName} of rpc as
- * arguments to the
- * {@link org.opendaylight.controller.sal.core.api.Broker.ProviderSession#addRpcImplementation(QName, RpcImplementation)}
- * </ul>
- *
- * The simplified process of the invocation of rpc is following:
- *
- * <ol>
- * <li> {@link Consumer} invokes
- * {@link org.opendaylight.controller.sal.core.api.Broker.ConsumerSession#rpc(QName, CompositeNode)}
- * <li> {@link Broker} finds registered {@link RpcImplementation}s
- * <li> {@link Broker} invokes
- * {@link RpcImplementation#invokeRpc(QName, CompositeNode)}
- * <li> {@link RpcImplementation} processes the data and returns a
- * {@link RpcResult}
- * <li> {@link Broker} returns the {@link RpcResult} to {@link Consumer}
- * </ol>
- *
- * @deprecated Use {@link org.opendaylight.controller.md.sal.dom.api.DOMRpcImplementation} instead.
- */
-@Deprecated
-public interface RpcImplementation extends Provider.ProviderFunctionality {
-
- /**
- * A set of rpc types supported by implementation.
- *
- * The set of rpc {@link QName}s which are supported by this implementation.
- * This set is used, when {@link Provider} is registered to the SAL, to
- * register and expose the implementation of the returned rpcs.
- *
- * @return Set of QNames identifying supported RPCs
- */
- Set<QName> getSupportedRpcs();
-
- /**
- * Invokes a implementation of specified RPC asynchronously.
- *
- * @param rpc
- * RPC to be invoked
- * @param input
- * Input data for the RPC.
- *
- * @throws IllegalArgumentException
- * <ul>
- * <li>If rpc is null.
- * <li>If input is not <code>null</code> and
- * <code>false == rpc.equals(input.getNodeType)</code>
- * </ul>
- * @return Future promising an RpcResult containing the output of
- * the RPC if was executed successfully, the list of errors
- * otherwise.
- */
- ListenableFuture<RpcResult<CompositeNode>> invokeRpc(QName rpc, CompositeNode input);
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api;
-
-import org.opendaylight.controller.md.sal.common.api.routing.RouteChangePublisher;
-import org.opendaylight.controller.md.sal.dom.api.DOMService;
-import org.opendaylight.controller.sal.core.api.Broker.RoutedRpcRegistration;
-import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-/**
- * @deprecated Use {@link org.opendaylight.controller.md.sal.dom.api.DOMRpcProviderService} and {@link org.opendaylight.controller.md.sal.dom.api.DOMRpcService} instead.
- */
-@Deprecated
-public interface RpcProvisionRegistry extends RpcImplementation, BrokerService, RouteChangePublisher<RpcRoutingContext, YangInstanceIdentifier>, DOMService {
-
- /**
- * Registers an implementation of the rpc.
- *
- * <p>
- * The registered rpc functionality will be available to all other
- * consumers and providers registered to the broker, which are aware of
- * the {@link QName} assigned to the rpc.
- *
- * <p>
- * There is no assumption that rpc type is in the set returned by
- * invoking {@link RpcImplementation#getSupportedRpcs()}. This allows
- * for dynamic rpc implementations.
- *
- * @param rpcType
- * Name of Rpc
- * @param implementation
- * Provider's Implementation of the RPC functionality
- * @throws IllegalArgumentException
- * If the name of RPC is invalid
- */
- RpcRegistration addRpcImplementation(QName rpcType, RpcImplementation implementation)
- throws IllegalArgumentException;
-
- ListenerRegistration<RpcRegistrationListener> addRpcRegistrationListener(RpcRegistrationListener listener);
-
- RoutedRpcRegistration addRoutedRpcImplementation(QName rpcType, RpcImplementation implementation);
-
- /**
- * Sets this RoutedRpc Implementation as a delegate rpc provider and will be asked to invoke rpc if the
- * current provider can't service the rpc request
- *
- * @param defaultImplementation
- * Provider's implementation of RPC functionality
- */
- public void setRoutedRpcDefaultDelegate(RoutedRpcDefaultImplementation defaultImplementation);
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api;
-
-import java.util.EventListener;
-import org.opendaylight.yangtools.yang.common.QName;
-
-/**
- * @deprecated Use {@link org.opendaylight.controller.md.sal.dom.api.DOMRpcAvailabilityListener} instead.
- */
-@Deprecated
-public interface RpcRegistrationListener extends EventListener {
-
- public void onRpcImplementationAdded(QName name);
-
- public void onRpcImplementationRemoved(QName name);
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api.data;
-
-import org.opendaylight.controller.md.sal.common.api.data.DataChangePublisher;
-import org.opendaylight.controller.md.sal.common.api.data.DataModificationTransactionFactory;
-import org.opendaylight.controller.md.sal.common.api.data.DataReader;
-import org.opendaylight.controller.sal.core.api.BrokerService;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-
-/**
- * DataBrokerService provides unified access to the data stores available in the
- * system.
- *
- *
- * @see DataProviderService
- * @deprecated Replaced by {@link org.opendaylight.controller.md.sal.dom.api.DOMDataBroker}
- *
- */
-@Deprecated
-public interface DataBrokerService extends
- BrokerService, //
- DataReader<YangInstanceIdentifier, CompositeNode>, //
- DataModificationTransactionFactory<YangInstanceIdentifier, CompositeNode>, //
- DataChangePublisher<YangInstanceIdentifier, CompositeNode, DataChangeListener> {
-
-
- @Override
- public CompositeNode readConfigurationData(YangInstanceIdentifier path);
-
- @Override
- public CompositeNode readOperationalData(YangInstanceIdentifier path);
-
- @Override
- DataModificationTransaction beginTransaction();
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api.data;
-
-import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-/**
- *
- * @deprecated Replaced by {@link org.opendaylight.controller.md.sal.dom.api.DOMDataChangeListener}
- */
-@Deprecated
-public interface DataChangeListener
- extends
- org.opendaylight.controller.md.sal.common.api.data.DataChangeListener<YangInstanceIdentifier, CompositeNode> {
-
- @Override
- public void onDataChanged(DataChangeEvent<YangInstanceIdentifier, CompositeNode> change);
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api.data;
-
-import java.util.EventListener;
-import java.util.concurrent.Future;
-
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
-import org.opendaylight.controller.md.sal.common.api.data.DataModification;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-/**
- *
- * @deprecated Replaced by more specific
- * {@link org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction}
- * ,
- * {@link org.opendaylight.controller.md.sal.dom.api.DOMDataReadTransaction}
- * or {@link org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction}
- *
- */
-@Deprecated
-public interface DataModificationTransaction extends DataModification<YangInstanceIdentifier, CompositeNode> {
-
- /**
- * Returns transaction identifier
- *
- * @return Transaction identifier
- */
- @Override
- Object getIdentifier();
-
- @Override
- TransactionStatus getStatus();
-
- /**
- * Commits transaction to be stored in global data repository.
- *
- *
- * @return Future object which returns RpcResult with TransactionStatus when
- * transaction is processed by store.
- */
- @Override
- Future<RpcResult<TransactionStatus>> commit();
-
- ListenerRegistration<DataTransactionListener> registerListener(DataTransactionListener listener);
-
- public interface DataTransactionListener extends EventListener {
- void onStatusUpdated(DataModificationTransaction transaction, TransactionStatus status);
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api.data;
-
-import org.opendaylight.controller.md.sal.common.api.data.DataProvisionService;
-import org.opendaylight.controller.md.sal.common.api.data.DataReader;
-import org.opendaylight.controller.sal.common.DataStoreIdentifier;
-import org.opendaylight.controller.sal.core.api.Provider;
-import org.opendaylight.yangtools.concepts.Registration;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-/**
- *
- * @deprecated Replaced by {@link org.opendaylight.controller.md.sal.dom.api.DOMDataBroker}
- *
- */
-@Deprecated
-public interface DataProviderService extends
- DataBrokerService, //
- DataProvisionService<YangInstanceIdentifier, CompositeNode>
- {
-
- /**
- * Adds {@link DataValidator} for specified Data Store
- *
- * @param store
- * Data Store
- * @param validator
- * Validator
- */
- public void addValidator(DataStoreIdentifier store, DataValidator validator);
-
- /**
- * Removes {@link DataValidator} from specified Data Store
- *
- * @param store
- * @param validator
- * Validator
- */
- public void removeValidator(DataStoreIdentifier store,
- DataValidator validator);
-
- /**
- * Adds {@link DataRefresher} for specified data store
- *
- * @param store
- * @param refresher
- */
- void addRefresher(DataStoreIdentifier store, DataRefresher refresher);
-
- /**
- * Removes {@link DataRefresher} from specified data store
- *
- * @param store
- * @param refresher
- */
- void removeRefresher(DataStoreIdentifier store, DataRefresher refresher);
-
-
- Registration registerConfigurationReader(YangInstanceIdentifier path, DataReader<YangInstanceIdentifier, CompositeNode> reader);
-
- Registration registerOperationalReader(YangInstanceIdentifier path, DataReader<YangInstanceIdentifier, CompositeNode> reader);
-
- public interface DataRefresher extends Provider.ProviderFunctionality {
-
- /**
- * Fired when some component explicitly requested the data refresh.
- *
- * The provider which exposed the {@link DataRefresher} should republish
- * its provided data by editing the data in all affected data stores.
- */
- void refreshData();
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api.data;
-
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler;
-import org.opendaylight.controller.md.sal.common.api.data.DataReader;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-/**
- *
- * @deprecated Replaced by org.opendaylight.controller.sal.core.spi.data.DOMStore.
- *
- */
-@Deprecated
-public interface DataStore extends //
- DataReader<YangInstanceIdentifier, CompositeNode>,
- DataCommitHandler<YangInstanceIdentifier, CompositeNode> {
-
-
- Iterable<YangInstanceIdentifier> getStoredConfigurationPaths();
- Iterable<YangInstanceIdentifier> getStoredOperationalPaths();
-
- boolean containsConfigurationPath(YangInstanceIdentifier path);
- boolean containsOperationalPath(YangInstanceIdentifier path);
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api.data;
-
-import java.util.Set;
-
-import org.opendaylight.controller.sal.common.DataStoreIdentifier;
-import org.opendaylight.controller.sal.core.api.Provider;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-
-
-/**
- * {@link Provider}-supplied Validator of the data.
- *
- * <p>
- * The registration could be done by :
- * <ul>
- * <li>returning an instance of implementation in the return value of
- * {@link Provider#getProviderFunctionality()}
- * <li>passing an instance of implementation and {@link DataStoreIdentifier} rpc
- * as arguments to the
- * {@link DataProviderService#addValidator(DataStoreIdentifier, DataValidator)}
- * </ul>
- *
- * @deprecated Replaced by {@link org.opendaylight.controller.md.sal.common.api.data.AsyncConfigurationCommitHandler}
- *
- **/
-@Deprecated
-public interface DataValidator extends Provider.ProviderFunctionality {
-
- /**
- * A set of Data Stores supported by implementation.
- *
- * The set of {@link DataStoreIdentifier}s which identifies target data
- * stores which are supported by this implementation. This set is used, when
- * {@link Provider} is registered to the SAL, to register and expose the
- * validation functionality to affected data stores.
- *
- * @return Set of Data Store identifiers
- */
- Set<DataStoreIdentifier> getSupportedDataStores();
-
- /**
- * Performs validation on supplied data.
- *
- * @param toValidate
- * Data to validate
- * @return Validation result. The
- * <code>{@link RpcResult#isSuccessful()} == true</code> if the data
- * passed validation, otherwise contains list of errors.
- */
- RpcResult<Void> validate(CompositeNode toValidate);
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api.data;
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.sal.core.api.mount;
-
-import org.opendaylight.controller.sal.core.api.data.DataBrokerService;
-import org.opendaylight.controller.sal.core.api.notify.NotificationService;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Interface representing a single mount instance and represents a way for
- * clients to access underlying data, RPCs and notifications.
- */
-@Deprecated
-public interface MountInstance extends //
- NotificationService, //
- DataBrokerService {
-
- /**
- * Invoke an RPC on the system underlying the mount instance.
- *
- * @param type RPC type
- * @param input RPC input arguments
- * @return Future representing execution of the RPC.
- */
- ListenableFuture<RpcResult<CompositeNode>> rpc(QName type, CompositeNode input);
-
- /**
- * Get {@link SchemaContext} of the system underlying the mount instance.
- *
- * @return A schema context.
- */
- SchemaContext getSchemaContext();
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api.mount;
-
-import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry;
-import org.opendaylight.controller.sal.core.api.data.DataProviderService;
-import org.opendaylight.controller.sal.core.api.notify.NotificationPublishService;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-
-@Deprecated
-public interface MountProvisionInstance extends //
- MountInstance,//
- NotificationPublishService, //
- RpcProvisionRegistry,//
- DataProviderService {
-
- void setSchemaContext(SchemaContext optional);
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api.mount;
-
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-/**
- * @deprecated Use org.opendaylight.controller.md.sal.dom.api.DOMMountPointService instead
- */
-@Deprecated
-public interface MountProvisionService extends MountService {
-
- @Override
- public MountProvisionInstance getMountPoint(YangInstanceIdentifier path);
-
- MountProvisionInstance createMountPoint(YangInstanceIdentifier path);
-
- MountProvisionInstance createOrGetMountPoint(YangInstanceIdentifier path);
-
- ListenerRegistration<MountProvisionListener> registerProvisionListener(MountProvisionListener listener);
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api.mount;
-
-import org.opendaylight.controller.sal.core.api.BrokerService;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-/**
- * Client-level interface for interacting with mount points. It provides access
- * to {@link MountInstance} instances based on their path.
- *
- * @deprecated Use org.opendaylight.controller.md.sal.dom.api.DOMMountPointService instead
- */
-@Deprecated
-public interface MountService extends BrokerService {
- /**
- * Obtain access to a mount instance registered at the specified path.
- *
- * @param path Path at which the instance is registered
- * @return Reference to the instance, or null if no such instance exists.
- */
- MountInstance getMountPoint(YangInstanceIdentifier path);
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api.notify;
-
-import java.util.EventListener;
-import java.util.Set;
-
-import org.opendaylight.controller.sal.core.api.Consumer;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-
-
-/**
- * Notification listener for SAL notifications.
- */
-public interface NotificationListener extends Consumer.ConsumerFunctionality, EventListener {
- /**
- * A set of notification types supported by listeners.
- *
- * The set of notification {@link QName}s which are supported by this
- * listener. This set is used, when {@link Consumer} is registered to the
- * SAL, to automatically register the listener.
- *
- * @return Set of QNames identifying supported notifications.
- */
- Set<QName> getSupportedNotifications();
-
- /**
- * Fired when the notification occurs.
- *
- * The type of the notification could be learned by
- * <code>QName type = notification.getNodeType();</code>
- *
- * @param notification
- * Notification content
- */
- void onNotification(CompositeNode notification);
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api.notify;
-
-import org.opendaylight.controller.md.sal.dom.api.DOMService;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-
-/**
- * Notification Publishing Service
- *
- * The simplified process of the notification publishing is following:
- *
- * <ol>
- * <li> {@link org.opendaylight.controller.sal.core.api.Provider} invokes {@link #sendNotification(CompositeNode)}
- * <li> {@link org.opendaylight.controller.sal.core.api.Broker} finds {@link NotificationListener}s which subscribed for
- * the notification type.
- *
- * <li>For each subscriber {@link org.opendaylight.controller.sal.core.api.Broker} invokes
- * {@link NotificationListener#onNotification(CompositeNode)}
- * </ol>
- */
-public interface NotificationPublishService extends NotificationService, DOMService {
- /**
- * Publishes a notification.
- *
- * Notification type is determined by the
- * {@link CompositeNode#getNodeType()} of the
- * <code>notification<code> parameter.
- *
- * @param notification
- * Notification to publish
- */
- void publish(CompositeNode notification);
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.core.api.notify;
-
-import org.opendaylight.controller.sal.core.api.BrokerService;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.common.QName;
-
-
-/**
- * NotificationService provides access to the notification functionality of the
- * SAL.
- *
- * NotificationService allows for consumption of notifications by registering
- * implementations of NotificationListener.
- *
- * The registration of notification listeners could be done by:
- * <ul>
- * <li>returning an instance of implementation in the return value of
- * {@link org.opendaylight.controller.sal.core.api.Provider#getProviderFunctionality()}
- * <li>passing an instance of implementation and {@link QName} of an RPC as an
- * argument to
- * {@link org.opendaylight.controller.sal.core.api.Broker.ProviderSession#addRpcImplementation(QName, org.opendaylight.controller.sal.core.api.RpcImplementation)}
- * </ul>
- *
- *
- */
-public interface NotificationService extends BrokerService {
-
- /**
- * Registers a notification listener for supplied notification type.
- *
- * @param notification
- * @param listener
- */
- ListenerRegistration<NotificationListener> addNotificationListener(QName notification,
- NotificationListener listener);
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-/**
- * SAL Notification functionality
- */
-package org.opendaylight.controller.sal.core.api.notify;
\ No newline at end of file
}\r
}\r
}\r
- \r
+\r
grouping rpc-state {\r
list rpc-router {\r
uses rpc-router;\r
config:java-class "org.opendaylight.controller.sal.core.api.Broker";
}
- identity dom-data-broker {
- base "config:service-type";
- config:java-class "org.opendaylight.controller.sal.core.api.data.DataProviderService";
- }
-
identity dom-async-data-broker {
base "config:service-type";
config:java-class "org.opendaylight.controller.md.sal.dom.api.DOMDataBroker";
}
- identity dom-data-store {
- base "config:service-type";
- config:java-class "org.opendaylight.controller.sal.core.api.data.DataStore";
- }
-
identity schema-service {
base "config:service-type";
config:java-class "org.opendaylight.controller.sal.core.api.model.SchemaService";
import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
import org.opendaylight.controller.md.sal.dom.broker.impl.DOMNotificationRouter;
import org.opendaylight.controller.md.sal.dom.broker.impl.DOMRpcRouter;
-import org.opendaylight.controller.md.sal.dom.broker.impl.compat.BackwardsCompatibleDataBroker;
import org.opendaylight.controller.md.sal.dom.broker.impl.mount.DOMMountPointServiceImpl;
import org.opendaylight.controller.sal.core.api.BrokerService;
-import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry;
-import org.opendaylight.controller.sal.core.api.data.DataBrokerService;
-import org.opendaylight.controller.sal.core.api.data.DataProviderService;
import org.opendaylight.controller.sal.core.api.model.SchemaService;
-import org.opendaylight.controller.sal.core.api.mount.MountProvisionService;
-import org.opendaylight.controller.sal.core.api.mount.MountService;
-import org.opendaylight.controller.sal.dom.broker.BackwardsCompatibleMountPointManager;
import org.opendaylight.controller.sal.dom.broker.BrokerImpl;
import org.opendaylight.controller.sal.dom.broker.GlobalBundleScanningSchemaServiceImpl;
-import org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareRpcBroker;
-import org.opendaylight.controller.sal.dom.broker.impl.SchemaContextProviders;
/**
*
final SchemaService schemaService = getSchemaServiceImpl();
services.putInstance(SchemaService.class, schemaService);
- final SchemaAwareRpcBroker router = new SchemaAwareRpcBroker("/", SchemaContextProviders
- .fromSchemaService(schemaService));
- services.putInstance(RpcProvisionRegistry.class, router);
services.putInstance(DOMDataBroker.class, asyncBroker);
- final DataProviderService legacyData = new BackwardsCompatibleDataBroker(asyncBroker,schemaService);
- services.putInstance(DataProviderService.class,legacyData);
- services.putInstance(DataBrokerService.class, legacyData);
final DOMRpcRouter rpcRouter = new DOMRpcRouter();
schemaService.registerSchemaContextListener(rpcRouter);
final DOMMountPointService mountService = new DOMMountPointServiceImpl();
services.putInstance(DOMMountPointService.class, mountService);
- // TODO remove backwards service, use only new DOMMountPointService
- final MountProvisionService backwardsMountService = new BackwardsCompatibleMountPointManager(mountService);
- services.putInstance(MountService.class, backwardsMountService);
- services.putInstance(MountProvisionService.class, backwardsMountService);
-
- return new BrokerImpl(router, services);
+ return new BrokerImpl(rpcRouter, services);
}
private SchemaService getSchemaServiceImpl() {
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.yang.md.sal.dom.statistics;
-
-import org.opendaylight.controller.config.yang.md.sal.dom.impl.Data;
-import org.opendaylight.controller.config.yang.md.sal.dom.impl.DomBrokerImplRuntimeMXBean;
-import org.opendaylight.controller.config.yang.md.sal.dom.impl.Transactions;
-import org.opendaylight.controller.sal.dom.broker.DataBrokerImpl;
-
-@Deprecated
-public class DomBrokerRuntimeMXBeanImpl implements
- DomBrokerImplRuntimeMXBean {
-
- private final DataBrokerImpl dataService;
- private final Transactions transactions = new Transactions();
- private final Data data = new Data();
-
- public DomBrokerRuntimeMXBeanImpl(DataBrokerImpl dataService) {
- this.dataService = dataService;
- }
-
- public Transactions getTransactions() {
- transactions.setCreated(dataService.getCreatedTransactionsCount().get());
- transactions.setSubmitted(dataService.getSubmittedTransactionsCount().get());
- transactions.setSuccessful(dataService.getFinishedTransactionsCount().get());
- transactions.setFailed(dataService.getFailedTransactionsCount().get());
- return transactions;
- }
-
- @Override
- public Data getData() {
- transactions.setCreated(dataService.getCreatedTransactionsCount().get());
- transactions.setSubmitted(dataService.getSubmittedTransactionsCount().get());
- transactions.setSuccessful(dataService.getFinishedTransactionsCount().get());
- transactions.setFailed(dataService.getFailedTransactionsCount().get());
- data.setTransactions(transactions);
- return data;
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.md.sal.dom.broker.impl;
-
-import com.google.common.util.concurrent.ListeningExecutorService;
-import java.util.Map;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.sal.core.spi.data.DOMStore;
-
-/**
- * @deprecated Compatibility wrapper around {@link SerializedDOMDataBroker}.
- */
-@Deprecated
-public final class DOMDataBrokerImpl extends SerializedDOMDataBroker {
- public DOMDataBrokerImpl(final Map<LogicalDatastoreType, DOMStore> datastores, final ListeningExecutorService executor) {
- super(datastores, executor);
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html.
- */
-package org.opendaylight.controller.md.sal.dom.broker.impl.compat;
-
-import javax.annotation.concurrent.ThreadSafe;
-import org.opendaylight.controller.md.sal.common.api.RegistrationListener;
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler;
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandlerRegistration;
-import org.opendaylight.controller.md.sal.common.api.data.DataReader;
-import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.sal.common.DataStoreIdentifier;
-import org.opendaylight.controller.sal.core.api.data.DataChangeListener;
-import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction;
-import org.opendaylight.controller.sal.core.api.data.DataProviderService;
-import org.opendaylight.controller.sal.core.api.data.DataValidator;
-import org.opendaylight.controller.sal.core.api.model.SchemaService;
-import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.concepts.Registration;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
-
-@Deprecated
-@ThreadSafe
-public class BackwardsCompatibleDataBroker implements DataProviderService {
-
- private final DOMDataBroker backingBroker;
- private volatile DataNormalizer normalizer;
- private final ListenerRegistration<SchemaContextListener> schemaReg;
-
- public BackwardsCompatibleDataBroker(final DOMDataBroker newBiDataImpl, final SchemaService schemaService) {
- backingBroker = newBiDataImpl;
- schemaReg = schemaService.registerSchemaContextListener(new SchemaListener());
- }
-
- @Override
- public CompositeNode readConfigurationData(final YangInstanceIdentifier legacyPath) {
- final BackwardsCompatibleTransaction<?> tx = BackwardsCompatibleTransaction.readOnlyTransaction(backingBroker.newReadOnlyTransaction(),normalizer);
- try {
- return tx.readConfigurationData(legacyPath);
- } finally {
- tx.commit();
- }
- }
-
- @Override
- public CompositeNode readOperationalData(final YangInstanceIdentifier legacyPath) {
- final BackwardsCompatibleTransaction<?> tx = BackwardsCompatibleTransaction.readOnlyTransaction(backingBroker.newReadOnlyTransaction(),normalizer);
- try {
- return tx.readOperationalData(legacyPath);
- } finally {
- tx.commit();
- }
- }
-
- @Override
- public DataModificationTransaction beginTransaction() {
- return BackwardsCompatibleTransaction.readWriteTransaction(backingBroker.newReadWriteTransaction(), normalizer);
- }
-
- @Override
- public ListenerRegistration<DataChangeListener> registerDataChangeListener(final YangInstanceIdentifier legacyPath,
- final DataChangeListener listener) {
- final YangInstanceIdentifier normalizedPath = normalizer.toNormalized(legacyPath);
-
- final TranslatingListenerInvoker translatingCfgListener =
- TranslatingListenerInvoker.createConfig(listener, normalizer);
- translatingCfgListener.register(backingBroker, normalizedPath);
-
- final TranslatingListenerInvoker translatingOpListener =
- TranslatingListenerInvoker.createOperational(listener, normalizer);
- translatingOpListener.register(backingBroker, normalizedPath);
-
- return new DelegateListenerRegistration(translatingCfgListener, translatingOpListener, listener);
- }
-
- @Override
- public Registration registerCommitHandler(
- final YangInstanceIdentifier path, final DataCommitHandler<YangInstanceIdentifier, CompositeNode> commitHandler) {
- // FIXME Do real forwarding
- return new AbstractObjectRegistration<DataCommitHandler<YangInstanceIdentifier,CompositeNode>>(commitHandler) {
- @Override
- protected void removeRegistration() {
- // NOOP
- }
- };
- }
-
- @Override
- public ListenerRegistration<RegistrationListener<DataCommitHandlerRegistration<YangInstanceIdentifier, CompositeNode>>> registerCommitHandlerListener(
- final RegistrationListener<DataCommitHandlerRegistration<YangInstanceIdentifier, CompositeNode>> commitHandlerListener) {
- return null;
- }
-
- // Obsolete functionality
-
- @Override
- public void addValidator(final DataStoreIdentifier store, final DataValidator validator) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void removeValidator(final DataStoreIdentifier store, final DataValidator validator) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void addRefresher(final DataStoreIdentifier store, final DataRefresher refresher) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void removeRefresher(final DataStoreIdentifier store, final DataRefresher refresher) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Registration registerConfigurationReader(
- final YangInstanceIdentifier path, final DataReader<YangInstanceIdentifier, CompositeNode> reader) {
- throw new UnsupportedOperationException("Data Reader contract is not supported.");
- }
-
- @Override
- public Registration registerOperationalReader(
- final YangInstanceIdentifier path, final DataReader<YangInstanceIdentifier, CompositeNode> reader) {
- throw new UnsupportedOperationException("Data Reader contract is not supported.");
- }
-
- private static class DelegateListenerRegistration implements ListenerRegistration<DataChangeListener> {
- private final TranslatingListenerInvoker translatingCfgListener;
- private final TranslatingListenerInvoker translatingOpListener;
- private final DataChangeListener listener;
-
- public DelegateListenerRegistration(final TranslatingListenerInvoker translatingCfgListener, final TranslatingListenerInvoker translatingOpListener, final DataChangeListener listener) {
- this.translatingCfgListener = translatingCfgListener;
- this.translatingOpListener = translatingOpListener;
- this.listener = listener;
- }
-
- @Override
- public void close() {
- translatingCfgListener.close();
- translatingOpListener.close();
- }
-
- @Override
- public DataChangeListener getInstance() {
- return listener;
- }
- }
-
- private class SchemaListener implements SchemaContextListener {
-
- @Override
- public void onGlobalContextUpdated(final SchemaContext ctx) {
- normalizer = new DataNormalizer(ctx);
- }
-
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.md.sal.dom.broker.impl.compat;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.ListenableFuture;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.impl.service.AbstractDataTransaction;
-import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationException;
-import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationOperation;
-import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction;
-import org.opendaylight.yangtools.concepts.Delegator;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Deprecated
-public abstract class BackwardsCompatibleTransaction<T extends DOMDataReadTransaction> implements DataModificationTransaction, Delegator<T> {
-
- private static final Logger LOG = LoggerFactory.getLogger(BackwardsCompatibleTransaction.class);
-
- private final T asyncTx;
- private final DataNormalizer normalizer;
-
- protected BackwardsCompatibleTransaction(final T asyncTx, final DataNormalizer normalizer) {
- super();
- this.asyncTx = asyncTx;
- this.normalizer = normalizer;
- }
-
- public static BackwardsCompatibleTransaction<?> readOnlyTransaction(final DOMDataReadOnlyTransaction readTx,
- final DataNormalizer normalizer) {
-
- return new BackwardsCompatibleTransaction<DOMDataReadOnlyTransaction>(readTx, normalizer) {
-
- @Override
- public TransactionStatus getStatus() {
- return TransactionStatus.NEW;
- }
-
- @Override
- public Future<RpcResult<TransactionStatus>> commit() {
- getDelegate().close();
- return null;
- }
- };
- }
-
- public static BackwardsCompatibleTransaction<?> readWriteTransaction(final DOMDataReadWriteTransaction rwTx,
- final DataNormalizer normalizer) {
- return new ReadWriteTransaction(rwTx, normalizer);
- }
-
- protected DataNormalizer getNormalizer() {
- return normalizer;
- }
-
- @Override
- public T getDelegate() {
- return asyncTx;
- };
-
- @Override
- public CompositeNode readConfigurationData(final YangInstanceIdentifier legacyPath) {
-
- YangInstanceIdentifier normalizedPath = normalizer.toNormalized(legacyPath);
-
- ListenableFuture<Optional<NormalizedNode<?, ?>>> normalizedData = asyncTx.read(
- LogicalDatastoreType.CONFIGURATION, normalizedPath);
-
- try {
- return normalizer.toLegacy(normalizedPath, normalizedData.get().orNull());
- } catch (InterruptedException | ExecutionException e) {
- return null;
- }
- }
-
- @Override
- public CompositeNode readOperationalData(final YangInstanceIdentifier legacyPath) {
- YangInstanceIdentifier normalizedPath = normalizer.toNormalized(legacyPath);
-
- ListenableFuture<Optional<NormalizedNode<?, ?>>> normalizedData = asyncTx.read(
- LogicalDatastoreType.OPERATIONAL, normalizedPath);
-
- try {
- return normalizer.toLegacy(normalizedPath, normalizedData.get().orNull());
- } catch (InterruptedException | ExecutionException e) {
- return null;
- }
- }
-
- @Override
- public ListenerRegistration<DataTransactionListener> registerListener(final DataTransactionListener listener) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Map<YangInstanceIdentifier, CompositeNode> getCreatedConfigurationData() {
- return Collections.emptyMap();
- }
-
- @Override
- public Map<YangInstanceIdentifier, CompositeNode> getCreatedOperationalData() {
- return Collections.emptyMap();
- }
-
- @Override
- public Map<YangInstanceIdentifier, CompositeNode> getOriginalConfigurationData() {
- return Collections.emptyMap();
- }
-
- @Override
- public Map<YangInstanceIdentifier, CompositeNode> getOriginalOperationalData() {
- return Collections.emptyMap();
- }
-
- @Override
- public Set<YangInstanceIdentifier> getRemovedConfigurationData() {
- return Collections.emptySet();
- }
-
- @Override
- public Set<YangInstanceIdentifier> getRemovedOperationalData() {
- return Collections.emptySet();
- }
-
- @Override
- public Map<YangInstanceIdentifier, CompositeNode> getUpdatedConfigurationData() {
- return Collections.emptyMap();
- }
-
- @Override
- public Map<YangInstanceIdentifier, CompositeNode> getUpdatedOperationalData() {
- return Collections.emptyMap();
- }
-
- @Override
- public void putConfigurationData(final YangInstanceIdentifier path, final CompositeNode data) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void putOperationalData(final YangInstanceIdentifier path, final CompositeNode data) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void removeConfigurationData(final YangInstanceIdentifier path) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void removeOperationalData(final YangInstanceIdentifier path) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Object getIdentifier() {
- return asyncTx.getIdentifier();
- }
-
- private static final class ReadWriteTransaction extends BackwardsCompatibleTransaction<DOMDataReadWriteTransaction> {
-
- private TransactionStatus status = TransactionStatus.NEW;
-
- protected ReadWriteTransaction(final DOMDataReadWriteTransaction asyncTx, final DataNormalizer normalizer) {
- super(asyncTx, normalizer);
- }
-
- @Override
- public TransactionStatus getStatus() {
- return status;
- }
-
- @Override
- public Future<RpcResult<TransactionStatus>> commit() {
- Preconditions.checkState(status == TransactionStatus.NEW);
- status = TransactionStatus.SUBMITED;
- return AbstractDataTransaction.convertToLegacyCommitFuture(getDelegate().submit());
- }
-
- @Override
- public void putConfigurationData(final YangInstanceIdentifier legacyPath, final CompositeNode legacyData) {
- checkNotNull(legacyPath, "Path MUST NOT be null.");
- checkNotNull(legacyData, "Data for path %s MUST NOT be null",legacyData);
- Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> normalizedData = getNormalizer().toNormalized(legacyPath, legacyData);
- putWithEnsuredParents(LogicalDatastoreType.CONFIGURATION, normalizedData.getKey(), normalizedData.getValue());
- }
-
- @Override
- public void putOperationalData(final YangInstanceIdentifier legacyPath, final CompositeNode legacyData) {
- checkNotNull(legacyPath, "Path MUST NOT be null.");
- checkNotNull(legacyData, "Data for path %s MUST NOT be null",legacyData);
- Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> normalizedData = getNormalizer().toNormalized(legacyPath, legacyData);
- putWithEnsuredParents(LogicalDatastoreType.OPERATIONAL, normalizedData.getKey(), normalizedData.getValue());
- }
-
- private void putWithEnsuredParents(final LogicalDatastoreType store, final YangInstanceIdentifier normalizedPath,
- final NormalizedNode<?, ?> normalizedData) {
-
- LOG.trace("write {}:{} ",store,normalizedPath);
- try {
- List<PathArgument> currentArguments = new ArrayList<>();
- DataNormalizationOperation<?> currentOp = getNormalizer().getRootOperation();
- Iterator<PathArgument> iterator = normalizedPath.getPathArguments().iterator();
- while(iterator.hasNext()) {
- PathArgument currentArg = iterator.next();
- try {
- currentOp = currentOp.getChild(currentArg);
- } catch (DataNormalizationException e) {
- throw new IllegalArgumentException(String.format("Invalid child encountered in path %s", normalizedPath), e);
- }
- currentArguments.add(currentArg);
- YangInstanceIdentifier currentPath = YangInstanceIdentifier.create(currentArguments);
- boolean isPresent = getDelegate().read(store, currentPath).get().isPresent();
- if(isPresent == false && iterator.hasNext()) {
- getDelegate().merge(store, currentPath, currentOp.createDefault(currentArg));
- }
- }
- } catch (InterruptedException | ExecutionException e) {
- LOG.error("Exception durring read.",e);
- }
-
- getDelegate().put(store, normalizedPath, normalizedData);
- }
-
- @Override
- public void removeConfigurationData(final YangInstanceIdentifier legacyPath) {
- checkNotNull(legacyPath, "Path MUST NOT be null.");
- getDelegate().delete(LogicalDatastoreType.CONFIGURATION, getNormalizer().toNormalized(legacyPath));
- }
-
- @Override
- public void removeOperationalData(final YangInstanceIdentifier legacyPath) {
- checkNotNull(legacyPath, "Path MUST NOT be null.");
- getDelegate().delete(LogicalDatastoreType.OPERATIONAL, getNormalizer().toNormalized(legacyPath));
- }
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.md.sal.dom.broker.impl.compat;
-
-import com.google.common.collect.Maps;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
-import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
-import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationException;
-import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-
-@Deprecated
-public abstract class TranslatingDataChangeEvent implements DataChangeEvent<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> {
-
- private TranslatingDataChangeEvent() {
- }
-
- public static DataChangeEvent<YangInstanceIdentifier, CompositeNode> createOperational(
- final AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> change, final DataNormalizer normalizer) {
- return new OperationalChangeEvent(change, normalizer);
- }
-
- public static DataChangeEvent<YangInstanceIdentifier, CompositeNode> createConfiguration(
- final AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> change, final DataNormalizer normalizer) {
- return new ConfigurationChangeEvent(change, normalizer);
- }
-
- @Override
- public Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> getCreatedOperationalData() {
- return Collections.emptyMap();
- }
-
- @Override
- public Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> getCreatedConfigurationData() {
- return Collections.emptyMap();
- }
-
- @Override
- public Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> getUpdatedOperationalData() {
- return Collections.emptyMap();
- }
-
- @Override
- public Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> getUpdatedConfigurationData() {
- return Collections.emptyMap();
- }
-
- @Override
- public Set<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier> getRemovedConfigurationData() {
- return Collections.emptySet();
- }
-
- @Override
- public Set<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier> getRemovedOperationalData() {
- return Collections.emptySet();
- }
-
- @Override
- public Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> getOriginalConfigurationData() {
- return Collections.emptyMap();
- }
-
- @Override
- public Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> getOriginalOperationalData() {
- return Collections.emptyMap();
- }
-
- @Override
- public CompositeNode getOriginalConfigurationSubtree() {
- return null;
- }
-
- @Override
- public CompositeNode getOriginalOperationalSubtree() {
- return null;
- }
-
- @Override
- public CompositeNode getUpdatedConfigurationSubtree() {
- return null;
- }
-
- @Override
- public CompositeNode getUpdatedOperationalSubtree() {
- return null;
- }
-
- private final static class OperationalChangeEvent extends TranslatingDataChangeEvent {
-
- private final AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> delegate;
- private final DataNormalizer normalizer;
- private Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> updatedCache;
-
- public OperationalChangeEvent(final AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> change,
- final DataNormalizer normalizer) {
- this.delegate = change;
- this.normalizer = normalizer;
- }
-
- @Override
- public Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> getCreatedOperationalData() {
- return transformToLegacy(normalizer, delegate.getCreatedData());
- }
-
-
- @Override
- public Set<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier> getRemovedOperationalData() {
- return delegate.getRemovedPaths();
- }
-
- @Override
- public CompositeNode getOriginalOperationalSubtree() {
- // first argument is unused
- return normalizer.toLegacy(null, delegate.getOriginalSubtree());
- }
-
- @Override
- public CompositeNode getUpdatedOperationalSubtree() {
- // first argument is unused
- return normalizer.toLegacy(null, delegate.getUpdatedSubtree());
- }
-
- @Override
- public Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> getOriginalOperationalData() {
- return transformToLegacy(normalizer, delegate.getOriginalData());
- }
-
- @Override
- public Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> getUpdatedOperationalData() {
- if(updatedCache == null) {
- final Map<YangInstanceIdentifier, CompositeNode> updated = transformToLegacy(normalizer, delegate.getUpdatedData());
- final Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> created = getCreatedConfigurationData();
- final HashMap<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> updatedComposite = new HashMap<>(created.size() + updated.size());
- updatedComposite.putAll(created);
- updatedComposite.putAll(updated);
- updatedCache = Collections.unmodifiableMap(updatedComposite);
- }
- return updatedCache;
- }
-
- @Override
- public String toString() {
- return "OperationalChangeEvent [delegate=" + delegate + "]";
- }
-
- }
-
- private static Map<YangInstanceIdentifier, CompositeNode> transformToLegacy(final DataNormalizer normalizer, final Map<YangInstanceIdentifier, ? extends NormalizedNode<?, ?>> nodes) {
- final Map<YangInstanceIdentifier, CompositeNode> legacy = Maps.newHashMap();
-
- for (final Map.Entry<YangInstanceIdentifier, ? extends NormalizedNode<?, ?>> entry : nodes.entrySet()) {
- try {
- legacy.put(normalizer.toLegacy(entry.getKey()), normalizer.toLegacy(entry.getKey(), entry.getValue()));
- } catch (final DataNormalizationException e) {
- throw new IllegalStateException("Unable to transform data change event to legacy format", e);
- }
- }
- return legacy;
- }
-
- private final static class ConfigurationChangeEvent extends TranslatingDataChangeEvent {
-
- private final AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> delegate;
- private final DataNormalizer normalizer;
- private Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> updatedCache;
-
- public ConfigurationChangeEvent(final AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> change,
- final DataNormalizer normalizer) {
- this.delegate = change;
- this.normalizer = normalizer;
- }
-
- @Override
- public Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> getCreatedConfigurationData() {
- return transformToLegacy(normalizer, delegate.getCreatedData());
- }
-
-
- @Override
- public Set<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier> getRemovedConfigurationData() {
- return delegate.getRemovedPaths();
- }
-
- @Override
- public CompositeNode getOriginalConfigurationSubtree() {
- // first argument is unused
- return normalizer.toLegacy(null, delegate.getOriginalSubtree());
- }
-
- @Override
- public CompositeNode getUpdatedConfigurationSubtree() {
- // first argument is unused
- return normalizer.toLegacy(null, delegate.getUpdatedSubtree());
- }
-
- @Override
- public Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> getOriginalConfigurationData() {
- return transformToLegacy(normalizer, delegate.getOriginalData());
- }
-
- @Override
- public Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> getUpdatedConfigurationData() {
- if(updatedCache == null) {
- final Map<YangInstanceIdentifier, CompositeNode> updated = transformToLegacy(normalizer, delegate.getUpdatedData());
- final Map<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> created = getCreatedConfigurationData();
- final HashMap<org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier, CompositeNode> updatedComposite = new HashMap<>(created.size() + updated.size());
- updatedComposite.putAll(created);
- updatedComposite.putAll(updated);
- updatedCache = Collections.unmodifiableMap(updatedComposite);
- }
- return updatedCache;
- }
-
- @Override
- public String toString() {
- return "ConfigurationChangeEvent [delegate=" + delegate + "]";
- }
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.md.sal.dom.broker.impl.compat;
-
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
-import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataChangeListener;
-import org.opendaylight.controller.sal.core.api.data.DataChangeListener;
-import org.opendaylight.yangtools.concepts.Delegator;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-
-@Deprecated
-abstract class TranslatingListenerInvoker implements AutoCloseable, DOMDataChangeListener, Delegator<DataChangeListener> {
-
- private final DataChangeListener delegate;
- private final DataNormalizer normalizer;
- protected ListenerRegistration<DOMDataChangeListener> reg;
-
- protected TranslatingListenerInvoker(final DataChangeListener listener, final DataNormalizer normalizer) {
- this.delegate = listener;
- this.normalizer = normalizer;
- }
-
- static TranslatingListenerInvoker createConfig(final DataChangeListener listener, final DataNormalizer normalizer) {
- return new TranslatingConfigListenerInvoker(listener, normalizer);
- }
-
- static TranslatingListenerInvoker createOperational(final DataChangeListener listener, final DataNormalizer normalizer) {
- return new TranslatingOperationalListenerInvoker(listener, normalizer);
- }
-
- @Override
- public void onDataChanged(final AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> normalizedChange) {
- delegate.onDataChanged(getLegacyEvent(normalizer, normalizedChange));
- }
-
- abstract DataChangeEvent<YangInstanceIdentifier, CompositeNode> getLegacyEvent(final DataNormalizer normalizer,
- final AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> normalizedChange);
-
- @Override
- public DataChangeListener getDelegate() {
- return delegate;
- }
-
- abstract void register(final DOMDataBroker backingBroker, final YangInstanceIdentifier normalizedPath);
-
- @Override
- public void close() {
- if (reg != null) {
- reg.close();
- }
- }
-
- @Override
- public String toString() {
- return getDelegate().getClass().getName();
- }
-
- static final class TranslatingConfigListenerInvoker extends TranslatingListenerInvoker {
-
- public TranslatingConfigListenerInvoker(final DataChangeListener listener, final DataNormalizer normalizer) {
- super(listener, normalizer);
- }
-
- @Override
- DataChangeEvent<YangInstanceIdentifier, CompositeNode> getLegacyEvent(final DataNormalizer normalizer, final AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> normalizedChange) {
- return TranslatingDataChangeEvent.createConfiguration(normalizedChange, normalizer);
- }
-
- @Override
- void register(final DOMDataBroker backingBroker, final YangInstanceIdentifier normalizedPath) {
- reg = backingBroker.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, normalizedPath, this,
- AsyncDataBroker.DataChangeScope.SUBTREE);
- }
- }
-
- static final class TranslatingOperationalListenerInvoker extends TranslatingListenerInvoker {
-
- public TranslatingOperationalListenerInvoker(final DataChangeListener listener, final DataNormalizer normalizer) {
- super(listener, normalizer);
- }
-
- @Override
- DataChangeEvent<YangInstanceIdentifier, CompositeNode> getLegacyEvent(final DataNormalizer normalizer, final AsyncDataChangeEvent<YangInstanceIdentifier, NormalizedNode<?, ?>> normalizedChange) {
- return TranslatingDataChangeEvent.createOperational(normalizedChange, normalizer);
- }
-
- @Override
- void register(final DOMDataBroker backingBroker, final YangInstanceIdentifier normalizedPath) {
- reg = backingBroker.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, normalizedPath, this,
- AsyncDataBroker.DataChangeScope.SUBTREE);
- }
- }
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html.
- */
-package org.opendaylight.controller.sal.dom.broker;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Iterables;
-import com.google.common.util.concurrent.CheckedFuture;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.JdkFutureAdapters;
-import com.google.common.util.concurrent.ListenableFuture;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ExecutionException;
-import javax.annotation.Nullable;
-import org.opendaylight.controller.md.sal.common.api.RegistrationListener;
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler;
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandlerRegistration;
-import org.opendaylight.controller.md.sal.common.api.data.DataReader;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener;
-import org.opendaylight.controller.md.sal.common.impl.ListenerRegistry;
-import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationException;
-import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataChangeListener;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
-import org.opendaylight.controller.md.sal.dom.api.DOMService;
-import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
-import org.opendaylight.controller.md.sal.dom.broker.impl.compat.BackwardsCompatibleDataBroker;
-import org.opendaylight.controller.sal.common.DataStoreIdentifier;
-import org.opendaylight.controller.sal.core.api.Broker.RoutedRpcRegistration;
-import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration;
-import org.opendaylight.controller.sal.core.api.RoutedRpcDefaultImplementation;
-import org.opendaylight.controller.sal.core.api.RpcImplementation;
-import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry;
-import org.opendaylight.controller.sal.core.api.RpcRegistrationListener;
-import org.opendaylight.controller.sal.core.api.RpcRoutingContext;
-import org.opendaylight.controller.sal.core.api.data.DataChangeListener;
-import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction;
-import org.opendaylight.controller.sal.core.api.data.DataProviderService;
-import org.opendaylight.controller.sal.core.api.data.DataValidator;
-import org.opendaylight.controller.sal.core.api.model.SchemaService;
-import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance;
-import org.opendaylight.controller.sal.core.api.notify.NotificationListener;
-import org.opendaylight.controller.sal.core.api.notify.NotificationPublishService;
-import org.opendaylight.controller.sal.dom.broker.impl.NotificationRouterImpl;
-import org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareRpcBroker;
-import org.opendaylight.controller.sal.dom.broker.spi.NotificationRouter;
-import org.opendaylight.controller.sal.dom.broker.util.ProxySchemaContext;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.concepts.Registration;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-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.api.SchemaContextProvider;
-
-@Deprecated
-public class BackwardsCompatibleMountPoint implements MountProvisionInstance, SchemaContextProvider, SchemaService {
-
- private final DataProviderService dataReader;
- private final DataReader<YangInstanceIdentifier,CompositeNode> readWrapper;
-
- private final YangInstanceIdentifier mountPath;
- private final NotificationPublishService notificationPublishService;
- private final RpcProvisionRegistry rpcs;
-
- private final ListenerRegistry<SchemaContextListener> schemaListenerRegistry = new ListenerRegistry<>();
-
- private SchemaContext schemaContext;
-
- public BackwardsCompatibleMountPoint(final YangInstanceIdentifier path, final DOMMountPointService.DOMMountPointBuilder mountPointBuilder) {
- this.mountPath = Preconditions.checkNotNull(path);
- Preconditions.checkNotNull(mountPointBuilder);
-
- dataReader = new DataBrokerImpl();
- readWrapper = new ReadWrapper();
- notificationPublishService = new DelgatingNotificationPublishService();
- rpcs = new SchemaAwareRpcBroker(path.toString(), this);
-
- mountPointBuilder.addService(DOMDataBroker.class, new BackwardsCompatibleDomStore(dataReader, this));
- mountPointBuilder.addService(NotificationPublishService.class, notificationPublishService);
- mountPointBuilder.addService(RpcProvisionRegistry.class, rpcs);
-
- mountPointBuilder.addInitialSchemaContext(new ProxySchemaContext(this));
-
- mountPointBuilder.register();
- }
-
- public BackwardsCompatibleMountPoint(final YangInstanceIdentifier path, final DOMMountPoint mount) {
- this.mountPath = Preconditions.checkNotNull(path);
- Preconditions.checkNotNull(mount);
-
- final DOMDataBroker domBroker = getServiceWithCheck(mount, DOMDataBroker.class);
-
- this.schemaContext = mount.getSchemaContext();
-
- dataReader = new BackwardsCompatibleDataBroker(domBroker, this);
-
- // Set schema context to provide it for BackwardsCompatibleDataBroker
- if(schemaContext != null) {
- setSchemaContext(schemaContext);
- }
-
- readWrapper = new ReadWrapper();
-
- notificationPublishService = getServiceWithCheck(mount, NotificationPublishService.class);
- rpcs = getServiceWithCheck(mount, RpcProvisionRegistry.class);
- }
-
- private <T extends DOMService> T getServiceWithCheck(final DOMMountPoint mount, final Class<T> type) {
- final Optional<T> serviceOptional = mount.getService(type);
- Preconditions.checkArgument(serviceOptional.isPresent(), "Service {} has to be set in {}. " +
- "Cannot construct backwards compatible mount wrapper without it", type, mount);
- return serviceOptional.get();
- }
-
- @Override
- public void addModule(final Module module) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void removeModule(final Module module) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public SchemaContext getSessionContext() {
- return getSchemaContext();
- }
-
- @Override
- public SchemaContext getGlobalContext() {
- return getSchemaContext();
- }
-
- @Override
- public ListenerRegistration<SchemaContextListener> registerSchemaContextListener(final SchemaContextListener listener) {
- return schemaListenerRegistry.register(listener);
- }
-
- @Override
- public void publish(final CompositeNode notification) {
- notificationPublishService.publish(notification);
- }
-
- @Override
- public ListenerRegistration<NotificationListener> addNotificationListener(final QName notification, final NotificationListener listener) {
- return notificationPublishService.addNotificationListener(notification, listener);
- }
-
- // TODO Read wrapper is never used ... same in org.opendaylight.controller.sal.dom.broker.MountPointImpl
- public DataReader<YangInstanceIdentifier, CompositeNode> getReadWrapper() {
- return readWrapper;
- }
-
- @Override
- public CompositeNode readConfigurationData(final YangInstanceIdentifier path) {
- return dataReader.readConfigurationData(path);
- }
-
- @Override
- public CompositeNode readOperationalData(final YangInstanceIdentifier path) {
- return dataReader.readOperationalData(path);
- }
-
- @Override
- public Registration registerOperationalReader(
- final YangInstanceIdentifier path, final DataReader<YangInstanceIdentifier, CompositeNode> reader) {
- return dataReader.registerOperationalReader(path, reader);
- }
-
- @Override
- public Registration registerConfigurationReader(
- final YangInstanceIdentifier path, final DataReader<YangInstanceIdentifier, CompositeNode> reader) {
- return dataReader.registerConfigurationReader(path, reader);
- }
-
- @Override
- public RoutedRpcRegistration addRoutedRpcImplementation(final QName rpcType, final RpcImplementation implementation) {
- return rpcs.addRoutedRpcImplementation(rpcType, implementation);
- }
-
- @Override
- public void setRoutedRpcDefaultDelegate(final RoutedRpcDefaultImplementation defaultImplementation) {
- rpcs.setRoutedRpcDefaultDelegate(defaultImplementation);
- }
-
- @Override
- public RpcRegistration addRpcImplementation(final QName rpcType, final RpcImplementation implementation)
- throws IllegalArgumentException {
- return rpcs.addRpcImplementation(rpcType, implementation);
- }
-
- @Override
- public Set<QName> getSupportedRpcs() {
- return rpcs.getSupportedRpcs();
- }
-
- @Override
- public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(final QName rpc, final CompositeNode input) {
- return rpcs.invokeRpc(rpc, input);
- }
-
- @Override
- public ListenerRegistration<RpcRegistrationListener> addRpcRegistrationListener(final RpcRegistrationListener listener) {
- return rpcs.addRpcRegistrationListener(listener);
- }
-
- @Override
- public ListenableFuture<RpcResult<CompositeNode>> rpc(final QName type, final CompositeNode input) {
- return rpcs.invokeRpc(type, input);
- }
-
- @Override
- public DataModificationTransaction beginTransaction() {
- return dataReader.beginTransaction();
- }
-
- @Override
- public ListenerRegistration<DataChangeListener> registerDataChangeListener(final YangInstanceIdentifier path,
- final DataChangeListener listener) {
- return dataReader.registerDataChangeListener(path, listener);
- }
-
- @Override
- public Registration registerCommitHandler(
- final YangInstanceIdentifier path, final DataCommitHandler<YangInstanceIdentifier, CompositeNode> commitHandler) {
- return dataReader.registerCommitHandler(path, commitHandler);
- }
-
- @Override
- public void removeRefresher(final DataStoreIdentifier store, final DataRefresher refresher) {
- // NOOP
- }
-
- @Override
- public void addRefresher(final DataStoreIdentifier store, final DataRefresher refresher) {
- // NOOP
- }
-
- @Override
- public void addValidator(final DataStoreIdentifier store, final DataValidator validator) {
- // NOOP
- }
- @Override
- public void removeValidator(final DataStoreIdentifier store, final DataValidator validator) {
- // NOOP
- }
-
- @Override
- public SchemaContext getSchemaContext() {
- return schemaContext;
- }
-
- @Override
- public void setSchemaContext(final SchemaContext schemaContext) {
- this.schemaContext = schemaContext;
- for (ListenerRegistration<SchemaContextListener> schemaServiceListenerListenerRegistration : schemaListenerRegistry.getListeners()) {
- schemaServiceListenerListenerRegistration.getInstance().onGlobalContextUpdated(schemaContext);
- }
- }
-
- class ReadWrapper implements DataReader<YangInstanceIdentifier, CompositeNode> {
- private YangInstanceIdentifier shortenPath(final YangInstanceIdentifier path) {
- if (!mountPath.contains(path)) {
- return null;
- }
- return YangInstanceIdentifier.create(Iterables.skip(path.getPathArguments(), Iterables.size(mountPath.getPathArguments())));
- }
-
- @Override
- public CompositeNode readConfigurationData(final YangInstanceIdentifier path) {
- final YangInstanceIdentifier newPath = shortenPath(path);
- if(newPath == null) {
- return null;
- }
- return BackwardsCompatibleMountPoint.this.readConfigurationData(newPath);
- }
-
- @Override
- public CompositeNode readOperationalData(final YangInstanceIdentifier path) {
- final YangInstanceIdentifier newPath = shortenPath(path);
- if(newPath == null) {
- return null;
- }
- return BackwardsCompatibleMountPoint.this.readOperationalData(newPath);
- }
- }
-
- @Override
- public ListenerRegistration<RegistrationListener<DataCommitHandlerRegistration<YangInstanceIdentifier, CompositeNode>>> registerCommitHandlerListener(
- final RegistrationListener<DataCommitHandlerRegistration<YangInstanceIdentifier, CompositeNode>> commitHandlerListener) {
- return dataReader.registerCommitHandlerListener(commitHandlerListener);
- }
-
- @Override
- public <L extends RouteChangeListener<RpcRoutingContext, YangInstanceIdentifier>> ListenerRegistration<L> registerRouteChangeListener(
- final L listener) {
- return rpcs.registerRouteChangeListener(listener);
- }
-
- @VisibleForTesting
- static final class BackwardsCompatibleDomStore implements DOMDataBroker {
- private final DataProviderService dataReader;
- private final SchemaContextProvider schemaContextProvider;
-
- public BackwardsCompatibleDomStore(final DataProviderService dataReader, final SchemaContextProvider schemaContextProvider) {
- this.dataReader = dataReader;
- this.schemaContextProvider = schemaContextProvider;
- }
-
- @Override
- public DOMDataReadOnlyTransaction newReadOnlyTransaction() {
- final DataNormalizer dataNormalizer = new DataNormalizer(schemaContextProvider.getSchemaContext());
- return new BackwardsCompatibleReadTransaction(dataReader, dataNormalizer);
- }
-
- @Override
- public DOMDataWriteTransaction newWriteOnlyTransaction() {
- final DataNormalizer dataNormalizer = new DataNormalizer(schemaContextProvider.getSchemaContext());
- return new BackwardsCompatibleWriteTransaction(dataReader, dataNormalizer);
- }
-
- @Override
- public ListenerRegistration<DOMDataChangeListener> registerDataChangeListener(final LogicalDatastoreType store, final YangInstanceIdentifier path, final DOMDataChangeListener listener, final DataChangeScope triggeringScope) {
- throw new UnsupportedOperationException("Register data listener not supported for mount point");
- }
-
- @Override
- public DOMTransactionChain createTransactionChain(final TransactionChainListener listener) {
- throw new UnsupportedOperationException("Transaction chain not supported for mount point");
- }
-
- @Override
- public DOMDataReadWriteTransaction newReadWriteTransaction() {
- final DataNormalizer dataNormalizer = new DataNormalizer(schemaContextProvider.getSchemaContext());
- return new BackwardsCompatibleReadWriteTransaction(dataReader, dataNormalizer);
- }
-
- @VisibleForTesting
- static final class BackwardsCompatibleReadTransaction implements DOMDataReadOnlyTransaction {
- private final DataProviderService dataReader;
- private final DataNormalizer normalizer;
-
- public BackwardsCompatibleReadTransaction(final DataProviderService dataReader, final DataNormalizer normalizer) {
- this.dataReader = dataReader;
- this.normalizer = normalizer;
- }
-
- @Override
- public Object getIdentifier() {
- return this;
- }
-
- @Override
- public void close() {
- // NOOP
- }
-
- @Override
- public CheckedFuture<Optional<NormalizedNode<?, ?>>, ReadFailedException> read(
- final LogicalDatastoreType store, final YangInstanceIdentifier path) {
-
- CompositeNode rawData = null;
-
- switch (store) {
- case CONFIGURATION: {
- rawData = dataReader.readConfigurationData(path);
- break;
- }
- case OPERATIONAL: {
- rawData = dataReader.readOperationalData(path);
- break;
- }
- }
- Preconditions.checkNotNull(rawData, "Unable to read %s data on path %s", store, path);
-
- final Map.Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> normalized = normalizer.toNormalized(path, rawData);
- final Optional<NormalizedNode<?, ?>> normalizedNodeOptional = Optional.<NormalizedNode<?, ?>>fromNullable(normalized.getValue());
- return Futures.immediateCheckedFuture(normalizedNodeOptional);
- }
-
- @Override public CheckedFuture<Boolean, ReadFailedException> exists(final LogicalDatastoreType store,
- final YangInstanceIdentifier path) {
-
- try {
- return Futures.immediateCheckedFuture(read(store, path).get().isPresent());
- } catch (InterruptedException | ExecutionException e) {
- return Futures.immediateFailedCheckedFuture(new ReadFailedException("Exists failed",e));
- }
- }
- }
-
- @VisibleForTesting
- static final class BackwardsCompatibleWriteTransaction implements DOMDataWriteTransaction {
- private DataModificationTransaction oldTx;
- private final DataNormalizer dataNormalizer;
-
- public BackwardsCompatibleWriteTransaction(final DataProviderService dataReader, final DataNormalizer dataNormalizer) {
- this.oldTx = dataReader.beginTransaction();
- this.dataNormalizer = dataNormalizer;
- }
-
- @Override
- public Object getIdentifier() {
- return this;
- }
-
- @Override
- public boolean cancel() {
- oldTx = null;
- return true;
- }
-
- @Override
- public void put(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode<?, ?> data) {
- final CompositeNode legacyData = dataNormalizer.toLegacy(path, data);
- try {
- final YangInstanceIdentifier legacyPath = dataNormalizer.toLegacy(path);
-
- switch (store) {
- case CONFIGURATION: {
- oldTx.putConfigurationData(legacyPath, legacyData);
- return;
- }
- }
-
- throw new IllegalArgumentException("Cannot put data " + path + " to datastore " + store);
- } catch (final DataNormalizationException e) {
- throw new IllegalArgumentException(String.format("Cannot transform path %s to legacy format", path), e);
- }
- }
-
- @Override
- public void merge(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode<?, ?> data) {
- // TODO not supported
- throw new UnsupportedOperationException("Merge not supported for mount point");
- }
-
- @Override
- public void delete(final LogicalDatastoreType store, final YangInstanceIdentifier path) {
- try {
- final YangInstanceIdentifier legacyPath = dataNormalizer.toLegacy(path);
-
- switch (store) {
- case CONFIGURATION: {
- oldTx.removeConfigurationData(legacyPath);
- return;
- }
- }
- throw new IllegalArgumentException("Cannot delete data " + path + " from datastore " + store);
- } catch (final DataNormalizationException e) {
- throw new IllegalArgumentException(String.format("Cannot transform path %s to legacy format", path), e);
- }
- }
-
- @Override
- public CheckedFuture<Void, TransactionCommitFailedException> submit() {
- final ListenableFuture<Void> commitAsVoid = Futures.transform(commit(), new Function<RpcResult<TransactionStatus>, Void>() {
- @Override
- public Void apply(@Nullable final RpcResult<TransactionStatus> input) {
- return null;
- }
- });
-
- return Futures.makeChecked(commitAsVoid, new Function<Exception, TransactionCommitFailedException>() {
- @Override
- public TransactionCommitFailedException apply(@Nullable final Exception input) {
- return new TransactionCommitFailedException("Commit failed", input);
- }
- });
- }
-
- @Override
- public ListenableFuture<RpcResult<TransactionStatus>> commit() {
- return JdkFutureAdapters.listenInPoolThread(oldTx.commit());
- }
- }
-
-
- @VisibleForTesting
- static class BackwardsCompatibleReadWriteTransaction implements DOMDataReadWriteTransaction {
-
- private final DataProviderService dataReader;
- private final DataNormalizer dataNormalizer;
- private final BackwardsCompatibleWriteTransaction delegateWriteTx;
-
- public BackwardsCompatibleReadWriteTransaction(final DataProviderService dataReader, final DataNormalizer dataNormalizer) {
- this.dataReader = dataReader;
- this.dataNormalizer = dataNormalizer;
- this.delegateWriteTx = new BackwardsCompatibleWriteTransaction(dataReader, dataNormalizer);
- }
-
- @Override
- public Object getIdentifier() {
- return this;
- }
-
- @Override
- public CheckedFuture<Optional<NormalizedNode<?, ?>>, ReadFailedException> read(
- final LogicalDatastoreType store, final YangInstanceIdentifier path) {
- return new BackwardsCompatibleReadTransaction(dataReader, dataNormalizer).read(store, path);
- }
-
- @Override public CheckedFuture<Boolean, ReadFailedException> exists(final LogicalDatastoreType store,
- final YangInstanceIdentifier path) {
-
- try {
- return Futures.immediateCheckedFuture(read(store, path).get().isPresent());
- } catch (InterruptedException | ExecutionException e) {
- return Futures.immediateFailedCheckedFuture(new ReadFailedException("Exists failed",e));
- }
- }
-
- @Override
- public boolean cancel() {
- return delegateWriteTx.cancel();
- }
-
- @Override
- public void put(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode<?, ?> data) {
- delegateWriteTx.put(store, path, data);
- }
-
- @Override
- public void merge(final LogicalDatastoreType store, final YangInstanceIdentifier path, final NormalizedNode<?, ?> data) {
- delegateWriteTx.merge(store, path, data);
- }
-
- @Override
- public void delete(final LogicalDatastoreType store, final YangInstanceIdentifier path) {
- delegateWriteTx.delete(store, path);
- }
-
- @Override
- public CheckedFuture<Void, TransactionCommitFailedException> submit() {
- return delegateWriteTx.submit();
- }
-
- @Override
- public ListenableFuture<RpcResult<TransactionStatus>> commit() {
- return delegateWriteTx.commit();
- }
- }
- }
-
- private class DelgatingNotificationPublishService implements NotificationPublishService {
- private final NotificationRouter notificationRouter;
-
- public DelgatingNotificationPublishService(final NotificationRouter notificationRouter) {
- this.notificationRouter = notificationRouter;
- }
-
- private DelgatingNotificationPublishService() {
- this(new NotificationRouterImpl());
- }
-
- @Override
- public void publish(final CompositeNode notification) {
- notificationRouter.publish(notification);
- }
-
- @Override
- public ListenerRegistration<NotificationListener> addNotificationListener(final QName notification, final NotificationListener listener) {
- return notificationRouter.addNotificationListener(notification, listener);
- }
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html.
- */
-package org.opendaylight.controller.sal.dom.broker;
-
-import static com.google.common.base.Preconditions.checkState;
-
-import com.google.common.base.Optional;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
-import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance;
-import org.opendaylight.controller.sal.core.api.mount.MountProvisionListener;
-import org.opendaylight.controller.sal.core.api.mount.MountProvisionService;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.util.ListenerRegistry;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-@Deprecated
-public class BackwardsCompatibleMountPointManager implements MountProvisionService, MountProvisionListener {
-
- private final ListenerRegistry<MountProvisionListener> listeners = ListenerRegistry.create();
- private final ConcurrentMap<YangInstanceIdentifier, MountProvisionInstance> mounts = new ConcurrentHashMap<>();
-
- private final DOMMountPointService domMountPointService;
-
- public BackwardsCompatibleMountPointManager(final DOMMountPointService domMountPointService) {
- this.domMountPointService = domMountPointService;
- }
-
- @Override
- public MountProvisionInstance createMountPoint(final YangInstanceIdentifier path) {
- checkState(!mounts.containsKey(path), "Mount already created");
- // Create mount point instance, wrap instance of new API with BackwardsCompatibleMountPoint to preserve backwards comatibility
- final BackwardsCompatibleMountPoint mount = new BackwardsCompatibleMountPoint(path, domMountPointService.createMountPoint(path));
- mounts.put(path, mount);
- return mount;
- }
-
- public void notifyMountCreated(final YangInstanceIdentifier identifier) {
- for (final ListenerRegistration<MountProvisionListener> listener : listeners.getListeners()) {
- listener.getInstance().onMountPointCreated(identifier);
- }
- }
-
- public void notifyMountRemoved(final YangInstanceIdentifier identifier) {
- for (final ListenerRegistration<MountProvisionListener> listener : listeners.getListeners()) {
- listener.getInstance().onMountPointRemoved(identifier);
- }
- }
-
- @Override
- public MountProvisionInstance createOrGetMountPoint(
- final YangInstanceIdentifier path) {
- final MountProvisionInstance mount = getMountPoint(path);
- if (mount == null) {
- return createMountPoint(path);
- }
- return mount;
- }
-
- @Override
- public MountProvisionInstance getMountPoint(final YangInstanceIdentifier path) {
- // If the mount point was created here, return directly
- if(mounts.containsKey(path)) {
- return mounts.get(path);
- }
-
- // If mount was created in underlying DOMMountService, wrap as MountProvisionInstance
- final Optional<DOMMountPoint> mount = domMountPointService.getMountPoint(path);
- if(mount.isPresent()) {
- return new BackwardsCompatibleMountPoint(path, mount.get());
- } else {
- return null;
- }
- }
-
- @Override
- public ListenerRegistration<MountProvisionListener> registerProvisionListener(
- final MountProvisionListener listener) {
- return domMountPointService.registerProvisionListener(listener);
- }
-
- @Override
- public void onMountPointCreated(final YangInstanceIdentifier path) {
- notifyMountCreated(path);
- }
-
- @Override
- public void onMountPointRemoved(final YangInstanceIdentifier path) {
- notifyMountRemoved(path);
- }
-}
*/
package org.opendaylight.controller.sal.dom.broker;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.Future;
-
-import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.ImmutableClassToInstanceMap;
+import com.google.common.util.concurrent.CheckedFuture;
+import org.opendaylight.controller.md.sal.dom.api.DOMRpcAvailabilityListener;
+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;
+import org.opendaylight.controller.md.sal.dom.api.DOMRpcImplementationRegistration;
+import org.opendaylight.controller.md.sal.dom.api.DOMRpcProviderService;
+import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult;
+import org.opendaylight.controller.md.sal.dom.api.DOMRpcService;
+import org.opendaylight.controller.md.sal.dom.broker.impl.DOMRpcRouter;
import org.opendaylight.controller.sal.core.api.Broker;
import org.opendaylight.controller.sal.core.api.BrokerService;
import org.opendaylight.controller.sal.core.api.Consumer;
import org.opendaylight.controller.sal.core.api.Provider;
-import org.opendaylight.controller.sal.core.api.RoutedRpcDefaultImplementation;
-import org.opendaylight.controller.sal.core.api.RpcImplementation;
-import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry;
-import org.opendaylight.controller.sal.core.api.RpcRegistrationListener;
-import org.opendaylight.controller.sal.core.api.RpcRoutingContext;
-import org.opendaylight.controller.sal.dom.broker.spi.RpcRouter;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ClassToInstanceMap;
-import com.google.common.collect.ImmutableClassToInstanceMap;
-import com.google.common.util.concurrent.ListenableFuture;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
-public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable {
+public class BrokerImpl implements Broker, DOMRpcProviderService, DOMRpcService, AutoCloseable {
private final static Logger log = LoggerFactory.getLogger(BrokerImpl.class);
// Broker Generic Context
private AutoCloseable deactivator = null;
- private RpcRouter router = null;
+ private DOMRpcRouter router = null;
private final ClassToInstanceMap<BrokerService> services;
- public BrokerImpl(final RpcRouter router,final ClassToInstanceMap<BrokerService> services) {
+ public BrokerImpl(final DOMRpcRouter router,final ClassToInstanceMap<BrokerService> services) {
this.router = Preconditions.checkNotNull(router, "RPC Router must not be null");
this.services = ImmutableClassToInstanceMap.copyOf(services);
}
return registerProvider(provider);
}
- protected Future<RpcResult<CompositeNode>> invokeRpcAsync(final QName rpc,
- final CompositeNode input) {
- return router.invokeRpc(rpc, input);
- }
-
// Validation
private void checkPredicates(final Provider prov) {
Preconditions.checkNotNull(prov, "Provider should not be null.");
}
}
- @Override
- public RpcRegistration addRpcImplementation(final QName rpcType,
- final RpcImplementation implementation)
- throws IllegalArgumentException {
- return router.addRpcImplementation(rpcType, implementation);
- }
-
- @Override
- public RoutedRpcRegistration addRoutedRpcImplementation(
- final QName rpcType, final RpcImplementation implementation) {
- return router.addRoutedRpcImplementation(rpcType, implementation);
- }
-
- @Override
- public void setRoutedRpcDefaultDelegate(
- final RoutedRpcDefaultImplementation defaultImplementation) {
- router.setRoutedRpcDefaultDelegate(defaultImplementation);
- }
-
- @Override
- public ListenerRegistration<RpcRegistrationListener> addRpcRegistrationListener(
- final RpcRegistrationListener listener) {
- return router.addRpcRegistrationListener(listener);
- }
-
- @Override
- public <L extends RouteChangeListener<RpcRoutingContext, YangInstanceIdentifier>> ListenerRegistration<L> registerRouteChangeListener(
- final L listener) {
- return router.registerRouteChangeListener(listener);
- }
-
- @Override
- public Set<QName> getSupportedRpcs() {
- return router.getSupportedRpcs();
- }
-
- @Override
- public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(
- final QName rpc, final CompositeNode input) {
- return router.invokeRpc(rpc, input);
- }
-
/**
* @return the deactivator
*/
/**
* @return the router
*/
- public RpcRouter getRouter() {
+ public DOMRpcRouter getRouter() {
return router;
}
* @param router
* the router to set
*/
- public void setRouter(final RpcRouter router) {
+ public void setRouter(final DOMRpcRouter router) {
this.router = router;
}
return session;
}
+
+ @Nonnull
+ @Override
+ public <T extends DOMRpcImplementation> DOMRpcImplementationRegistration<T> registerRpcImplementation(@Nonnull final T implementation, @Nonnull final DOMRpcIdentifier... rpcs) {
+ return router.registerRpcImplementation(implementation, rpcs);
+ }
+
+ @Nonnull
+ @Override
+ public <T extends DOMRpcImplementation> DOMRpcImplementationRegistration<T> registerRpcImplementation(@Nonnull final T implementation, @Nonnull final Set<DOMRpcIdentifier> rpcs) {
+ return router.registerRpcImplementation(implementation, rpcs);
+ }
+
+ @Nonnull
+ @Override
+ public CheckedFuture<DOMRpcResult, DOMRpcException> invokeRpc(@Nonnull final SchemaPath type, @Nullable final NormalizedNode<?, ?> input) {
+ return router.invokeRpc(type, input);
+ }
+
+ @Nonnull
+ @Override
+ public <T extends DOMRpcAvailabilityListener> ListenerRegistration<T> registerRpcListener(@Nonnull final T listener) {
+ return router.registerRpcListener(listener);
+ }
}
*/
package org.opendaylight.controller.sal.dom.broker;
-import java.util.Collection;
-import java.util.concurrent.Future;
-
-import javax.annotation.concurrent.GuardedBy;
-
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.MutableClassToInstanceMap;
import org.opendaylight.controller.sal.core.api.Broker.ConsumerSession;
import org.opendaylight.controller.sal.core.api.BrokerService;
import org.opendaylight.controller.sal.core.api.Consumer;
import org.opendaylight.controller.sal.dom.broker.osgi.AbstractBrokerServiceProxy;
import org.opendaylight.controller.sal.dom.broker.osgi.ProxyFactory;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ClassToInstanceMap;
-import com.google.common.collect.MutableClassToInstanceMap;
+import javax.annotation.concurrent.GuardedBy;
+import java.util.Collection;
class ConsumerContextImpl implements ConsumerSession {
consumer = provider;
}
- @Override
- public Future<RpcResult<CompositeNode>> rpc(final QName rpc,
- final CompositeNode input) {
- checkNotClosed();
- return broker.invokeRpcAsync(rpc, input);
- }
-
@Override
public <T extends BrokerService> T getService(final Class<T> service) {
checkNotClosed();
broker = null;
}
+
@Override
public synchronized boolean isClosed() {
return closed;
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker;
-
-import java.util.concurrent.atomic.AtomicLong;
-
-import org.opendaylight.controller.md.sal.common.api.data.DataReader;
-import org.opendaylight.controller.md.sal.common.impl.service.AbstractDataBroker;
-import org.opendaylight.controller.sal.common.DataStoreIdentifier;
-import org.opendaylight.controller.sal.core.api.data.DataChangeListener;
-import org.opendaylight.controller.sal.core.api.data.DataProviderService;
-import org.opendaylight.controller.sal.core.api.data.DataValidator;
-import org.opendaylight.controller.sal.dom.broker.impl.DataReaderRouter;
-import org.opendaylight.yangtools.concepts.Registration;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-import com.google.common.util.concurrent.MoreExecutors;
-
-@Deprecated
-public class DataBrokerImpl extends AbstractDataBroker<YangInstanceIdentifier, CompositeNode, DataChangeListener> implements
- DataProviderService, AutoCloseable {
-
- private AtomicLong nextTransaction = new AtomicLong();
- private final AtomicLong createdTransactionsCount = new AtomicLong();
-
- public DataBrokerImpl() {
- setDataReadRouter(new DataReaderRouter());
- setExecutor(MoreExecutors.sameThreadExecutor());
- }
-
- public AtomicLong getCreatedTransactionsCount() {
- return createdTransactionsCount;
- }
-
- @Override
- public DataTransactionImpl beginTransaction() {
- String transactionId = "DOM-" + nextTransaction.getAndIncrement();
- createdTransactionsCount.getAndIncrement();
- return new DataTransactionImpl(transactionId,this);
- }
-
- @Override
- public Registration registerConfigurationReader(
- YangInstanceIdentifier path, DataReader<YangInstanceIdentifier, CompositeNode> reader) {
- return getDataReadRouter().registerConfigurationReader(path, reader);
- }
-
- @Override
- public Registration registerOperationalReader(
- YangInstanceIdentifier path, DataReader<YangInstanceIdentifier, CompositeNode> reader) {
- return getDataReadRouter().registerOperationalReader(path, reader);
- }
-
- @Deprecated
- @Override
- public void addValidator(DataStoreIdentifier store, DataValidator validator) {
- throw new UnsupportedOperationException("Deprecated");
-
- }
-
- @Deprecated
- @Override
- public void removeValidator(DataStoreIdentifier store, DataValidator validator) {
- throw new UnsupportedOperationException("Deprecated");
- }
-
- @Deprecated
- @Override
- public void addRefresher(DataStoreIdentifier store, DataRefresher refresher) {
- throw new UnsupportedOperationException("Deprecated");
- }
-
- @Deprecated
- @Override
- public void removeRefresher(DataStoreIdentifier store, DataRefresher refresher) {
- throw new UnsupportedOperationException("Deprecated");
- }
-
- @Override
- public void close() throws Exception {
-
- }
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker;
-
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
-import org.opendaylight.controller.md.sal.common.impl.service.AbstractDataTransaction;
-import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.util.ListenerRegistry;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-@Deprecated
-public class DataTransactionImpl extends AbstractDataTransaction<YangInstanceIdentifier, CompositeNode>
- implements DataModificationTransaction {
- private final ListenerRegistry<DataTransactionListener> listeners = new ListenerRegistry<DataTransactionListener>();
-
-
-
- public DataTransactionImpl(Object identifier,DataBrokerImpl dataBroker) {
- super(identifier,dataBroker);
- }
-
- @Override
- public ListenerRegistration<DataTransactionListener> registerListener(DataTransactionListener listener) {
- return listeners.register(listener);
- }
-
- protected void onStatusChange(TransactionStatus status) {
- for (ListenerRegistration<DataTransactionListener> listenerRegistration : listeners) {
- listenerRegistration.getInstance().onStatusUpdated(this, status);
- }
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker;
-
-import com.google.common.collect.Iterables;
-import com.google.common.util.concurrent.ListenableFuture;
-import java.util.Set;
-import org.opendaylight.controller.md.sal.common.api.RegistrationListener;
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler;
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandlerRegistration;
-import org.opendaylight.controller.md.sal.common.api.data.DataReader;
-import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener;
-import org.opendaylight.controller.sal.common.DataStoreIdentifier;
-import org.opendaylight.controller.sal.core.api.Broker.RoutedRpcRegistration;
-import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration;
-import org.opendaylight.controller.sal.core.api.RoutedRpcDefaultImplementation;
-import org.opendaylight.controller.sal.core.api.RpcImplementation;
-import org.opendaylight.controller.sal.core.api.RpcRegistrationListener;
-import org.opendaylight.controller.sal.core.api.RpcRoutingContext;
-import org.opendaylight.controller.sal.core.api.data.DataChangeListener;
-import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction;
-import org.opendaylight.controller.sal.core.api.data.DataValidator;
-import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance;
-import org.opendaylight.controller.sal.core.api.notify.NotificationListener;
-import org.opendaylight.controller.sal.dom.broker.impl.NotificationRouterImpl;
-import org.opendaylight.controller.sal.dom.broker.impl.SchemaAwareRpcBroker;
-import org.opendaylight.controller.sal.dom.broker.spi.NotificationRouter;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.concepts.Registration;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
-
-@Deprecated
-public class MountPointImpl implements MountProvisionInstance, SchemaContextProvider {
-
- private final SchemaAwareRpcBroker rpcs;
- private final DataBrokerImpl dataReader;
- private final NotificationRouter notificationRouter;
- private final DataReader<YangInstanceIdentifier,CompositeNode> readWrapper;
-
-
- private final YangInstanceIdentifier mountPath;
-
- private SchemaContext schemaContext;
-
- public MountPointImpl(final YangInstanceIdentifier path) {
- this.mountPath = path;
- rpcs = new SchemaAwareRpcBroker(path.toString(),this);
- dataReader = new DataBrokerImpl();
- notificationRouter = new NotificationRouterImpl();
- readWrapper = new ReadWrapper();
- }
-
- public YangInstanceIdentifier getMountPath() {
- return mountPath;
- }
-
- public DataReader<YangInstanceIdentifier, CompositeNode> getReadWrapper() {
- return readWrapper;
- }
-
- @Override
- public void publish(final CompositeNode notification) {
- notificationRouter.publish(notification);
- }
-
- @Override
- public ListenerRegistration<NotificationListener> addNotificationListener(final QName notification, final NotificationListener listener) {
- return notificationRouter.addNotificationListener(notification, listener);
- }
-
- @Override
- public CompositeNode readConfigurationData(final YangInstanceIdentifier path) {
- return dataReader.readConfigurationData(path);
- }
-
- @Override
- public CompositeNode readOperationalData(final YangInstanceIdentifier path) {
- return dataReader.readOperationalData(path);
- }
-
- @Override
- public Registration registerOperationalReader(
- final YangInstanceIdentifier path, final DataReader<YangInstanceIdentifier, CompositeNode> reader) {
- return dataReader.registerOperationalReader(path, reader);
- }
-
- @Override
- public Registration registerConfigurationReader(
- final YangInstanceIdentifier path, final DataReader<YangInstanceIdentifier, CompositeNode> reader) {
- return dataReader.registerConfigurationReader(path, reader);
- }
-
- @Override
- public RoutedRpcRegistration addRoutedRpcImplementation(final QName rpcType, final RpcImplementation implementation) {
- return rpcs.addRoutedRpcImplementation(rpcType, implementation);
- }
-
- @Override
- public void setRoutedRpcDefaultDelegate(final RoutedRpcDefaultImplementation defaultImplementation) {
- rpcs.setRoutedRpcDefaultDelegate(defaultImplementation);
- }
-
- @Override
- public RpcRegistration addRpcImplementation(final QName rpcType, final RpcImplementation implementation)
- throws IllegalArgumentException {
- return rpcs.addRpcImplementation(rpcType, implementation);
- }
-
- @Override
- public Set<QName> getSupportedRpcs() {
- return rpcs.getSupportedRpcs();
- }
-
- @Override
- public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(final QName rpc, final CompositeNode input) {
- return rpcs.invokeRpc(rpc, input);
- }
-
- @Override
- public ListenerRegistration<RpcRegistrationListener> addRpcRegistrationListener(final RpcRegistrationListener listener) {
- return rpcs.addRpcRegistrationListener(listener);
- }
-
- @Override
- public ListenableFuture<RpcResult<CompositeNode>> rpc(final QName type, final CompositeNode input) {
- return rpcs.invokeRpc( type, input );
- }
-
- @Override
- public DataModificationTransaction beginTransaction() {
- return dataReader.beginTransaction();
- }
-
- @Override
- public ListenerRegistration<DataChangeListener> registerDataChangeListener(final YangInstanceIdentifier path,
- final DataChangeListener listener) {
- return dataReader.registerDataChangeListener(path, listener);
- }
-
- @Override
- public Registration registerCommitHandler(
- final YangInstanceIdentifier path, final DataCommitHandler<YangInstanceIdentifier, CompositeNode> commitHandler) {
- return dataReader.registerCommitHandler(path, commitHandler);
- }
-
- @Override
- public void removeRefresher(final DataStoreIdentifier store, final DataRefresher refresher) {
- // NOOP
- }
-
- @Override
- public void addRefresher(final DataStoreIdentifier store, final DataRefresher refresher) {
- // NOOP
- }
-
- @Override
- public void addValidator(final DataStoreIdentifier store, final DataValidator validator) {
- // NOOP
- }
- @Override
- public void removeValidator(final DataStoreIdentifier store, final DataValidator validator) {
- // NOOP
- }
-
- @Override
- public SchemaContext getSchemaContext() {
- return schemaContext;
- }
-
- @Override
- public void setSchemaContext(final SchemaContext schemaContext) {
- this.schemaContext = schemaContext;
- }
-
- class ReadWrapper implements DataReader<YangInstanceIdentifier, CompositeNode> {
- private YangInstanceIdentifier shortenPath(final YangInstanceIdentifier path) {
- if (!mountPath.contains(path)) {
- return null;
- }
-
- return YangInstanceIdentifier.create(Iterables.skip(path.getPathArguments(), Iterables.size(mountPath.getPathArguments())));
- }
-
- @Override
- public CompositeNode readConfigurationData(final YangInstanceIdentifier path) {
- YangInstanceIdentifier newPath = shortenPath(path);
- if(newPath == null) {
- return null;
- }
- return MountPointImpl.this.readConfigurationData(newPath);
- }
-
- @Override
- public CompositeNode readOperationalData(final YangInstanceIdentifier path) {
- YangInstanceIdentifier newPath = shortenPath(path);
- if(newPath == null) {
- return null;
- }
- return MountPointImpl.this.readOperationalData(newPath);
- }
- }
-
- @Override
- public ListenerRegistration<RegistrationListener<DataCommitHandlerRegistration<YangInstanceIdentifier, CompositeNode>>> registerCommitHandlerListener(
- final RegistrationListener<DataCommitHandlerRegistration<YangInstanceIdentifier, CompositeNode>> commitHandlerListener) {
- return dataReader.registerCommitHandlerListener(commitHandlerListener);
- }
-
- @Override
- public <L extends RouteChangeListener<RpcRoutingContext, YangInstanceIdentifier>> ListenerRegistration<L> registerRouteChangeListener(
- final L listener) {
- return rpcs.registerRouteChangeListener(listener);
- }
-}
+++ /dev/null
-/**
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker;
-
-import static com.google.common.base.Preconditions.checkState;
-
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-import org.opendaylight.controller.sal.core.api.data.DataProviderService;
-import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance;
-import org.opendaylight.controller.sal.core.api.mount.MountProvisionListener;
-import org.opendaylight.controller.sal.core.api.mount.MountProvisionService;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.util.ListenerRegistry;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-@Deprecated
-public class MountPointManagerImpl implements MountProvisionService {
-
- private final ListenerRegistry<MountProvisionListener> listeners =
- ListenerRegistry.create();
- private final ConcurrentMap<YangInstanceIdentifier, MountPointImpl> mounts =
- new ConcurrentHashMap<>();
- private DataProviderService dataBroker = null;
-
- @Override
- public MountProvisionInstance createMountPoint(final YangInstanceIdentifier path) {
- checkState(!mounts.containsKey(path), "Mount already created");
- final MountPointImpl mount = new MountPointImpl(path);
- registerMountPoint(mount);
- mounts.put(path, mount);
- notifyMountCreated(path);
- return mount;
- }
-
- public void notifyMountCreated(final YangInstanceIdentifier identifier) {
- for (final ListenerRegistration<MountProvisionListener> listener : listeners
- .getListeners()) {
- listener.getInstance().onMountPointCreated(identifier);
- }
- }
-
- public Object registerMountPoint(final MountPointImpl impl) {
- // FIXME: Why is thie commented out? Either we need it or we don't
- // dataBroker?.registerConfigurationReader(impl.mountPath,impl.readWrapper);
- // dataBroker?.registerOperationalReader(impl.mountPath,impl.readWrapper);
- return null;
- }
-
- @Override
- public MountProvisionInstance createOrGetMountPoint(
- final YangInstanceIdentifier path) {
- final MountPointImpl mount = mounts.get(path);
- if (mount == null) {
- return createMountPoint(path);
- }
- return mount;
- }
-
- @Override
- public MountProvisionInstance getMountPoint(final YangInstanceIdentifier path) {
- return mounts.get(path);
- }
-
- /**
- * @return the dataBroker
- */
- public DataProviderService getDataBroker() {
- return dataBroker;
- }
-
- /**
- * @param dataBroker
- * the dataBroker to set
- */
- public void setDataBroker(final DataProviderService dataBroker) {
- this.dataBroker = dataBroker;
- }
-
- @Override
- public ListenerRegistration<MountProvisionListener> registerProvisionListener(
- final MountProvisionListener listener) {
- return listeners.register(listener);
- }
-}
*/
package org.opendaylight.controller.sal.dom.broker;
-import java.util.HashSet;
-import java.util.Set;
-
import org.opendaylight.controller.sal.core.api.Broker.ProviderSession;
-import org.opendaylight.controller.sal.core.api.Broker.RoutedRpcRegistration;
-import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration;
import org.opendaylight.controller.sal.core.api.Provider;
-import org.opendaylight.controller.sal.core.api.RpcImplementation;
-import org.opendaylight.controller.sal.core.api.RpcRegistrationListener;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.common.QName;
class ProviderContextImpl extends ConsumerContextImpl implements ProviderSession {
- private final Set<RpcRegistrationWrapper> registrations = new HashSet<>();
private final Provider provider;
public ProviderContextImpl(final Provider provider, final BrokerImpl broker) {
this.provider = provider;
}
- @Override
- public RpcRegistrationWrapper addRpcImplementation(final QName rpcType,
- final RpcImplementation implementation) throws IllegalArgumentException {
- final RpcRegistration origReg = getBrokerChecked().getRouter()
- .addRpcImplementation(rpcType, implementation);
- final RpcRegistrationWrapper newReg = new RpcRegistrationWrapper(
- origReg);
- registrations.add(newReg);
- return newReg;
- }
-
- protected boolean removeRpcImplementation(final RpcRegistrationWrapper implToRemove) {
- return registrations.remove(implToRemove);
- }
-
@Override
public void close() {
- for (final RpcRegistrationWrapper reg : registrations) {
- reg.close();
- }
- }
-
- @Override
- public RoutedRpcRegistration addMountedRpcImplementation(
- final QName rpcType, final RpcImplementation implementation) {
- throw new UnsupportedOperationException(
- "TODO: auto-generated method stub");
-
- }
-
- @Override
- public RoutedRpcRegistration addRoutedRpcImplementation(
- final QName rpcType, final RpcImplementation implementation) {
- return getBrokerChecked().getRouter().addRoutedRpcImplementation(rpcType, implementation);
- }
-
- @Override
- public Set<QName> getSupportedRpcs() {
- return getBrokerChecked().getRouter().getSupportedRpcs();
- }
-
- @Override
- public ListenerRegistration<RpcRegistrationListener> addRpcRegistrationListener(
- final RpcRegistrationListener listener) {
- return getBrokerChecked().getRouter().addRpcRegistrationListener(listener);
}
/**
+++ /dev/null
-/**
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker;
-
-import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration;
-import org.opendaylight.controller.sal.core.api.RpcImplementation;
-import org.opendaylight.yangtools.yang.common.QName;
-
-import com.google.common.base.Preconditions;
-
-public class RpcRegistrationWrapper implements RpcRegistration {
-
- private final RpcRegistration delegate;
-
- public RpcRegistrationWrapper(final RpcRegistration delegate) {
- this.delegate = Preconditions.checkNotNull(delegate);
- }
-
- @Override
- public RpcImplementation getInstance() {
- return delegate.getInstance();
- }
-
- @Override
- public void close() {
- delegate.close();
- }
-
- @Override
- public QName getType() {
- return delegate.getType();
- }
-
- /**
- * @return the delegate
- */
- public RpcRegistration getDelegate() {
- return delegate;
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker.impl;
-
-import static com.google.common.base.Preconditions.checkState;
-
-import com.google.common.collect.Iterables;
-
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import org.opendaylight.controller.md.sal.common.impl.routing.AbstractDataReadRouter;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-import org.opendaylight.yangtools.yang.data.api.Node;
-import org.opendaylight.yangtools.yang.data.api.SimpleNode;
-import org.opendaylight.yangtools.yang.data.impl.CompositeNodeTOImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Deprecated
-public class DataReaderRouter extends AbstractDataReadRouter<YangInstanceIdentifier, CompositeNode> {
- private final static Logger LOG = LoggerFactory
- .getLogger(DataReaderRouter.class);
- private final static URI NETCONF_NAMESPACE = URI
- .create("urn:ietf:params:xml:ns:netconf:base:1.0");
- private final static QName NETCONF_DATA = new QName(NETCONF_NAMESPACE,
- "data");
-
- @Override
- protected CompositeNodeTOImpl merge(final YangInstanceIdentifier path,
- final Iterable<CompositeNode> data) {
- PathArgument pathArgument = Iterables.getLast(path.getPathArguments(), null);
- boolean empty = true;
- QName name = (pathArgument == null ? null : pathArgument.getNodeType());
- final ArrayList<Node<?>> nodes = new ArrayList<Node<?>>();
- final HashMap<QName, SimpleNode<?>> keyNodes = new HashMap<QName, SimpleNode<?>>();
- for (final CompositeNode dataBit : data) {
- try {
- if (pathArgument != null && dataBit != null) {
- empty = false;
- final Map<QName, SimpleNode<?>> keyNodesLocal = getKeyNodes(
- pathArgument, dataBit);
- nodes.addAll(this.childrenWithout(dataBit,
- keyNodesLocal.entrySet()));
- } else if (dataBit != null) {
- empty = false;
- nodes.addAll(dataBit.getValue());
- }
- } catch (IllegalStateException e) {
- LOG.error("BUG: Readed data for path {} was invalid", path, e);
- }
- }
- if (empty) {
- return null;
- }
- /**
- * Reading from Root
- *
- */
- if (pathArgument == null) {
- return new CompositeNodeTOImpl(NETCONF_DATA, null, nodes);
- }
- final ArrayList<Node<?>> finalNodes = new ArrayList<Node<?>>(
- nodes.size() + keyNodes.size());
- finalNodes.addAll(keyNodes.values());
- finalNodes.addAll(nodes);
- return new CompositeNodeTOImpl(name, null, finalNodes);
- }
-
- protected Map<QName, SimpleNode<?>> _getKeyNodes(
- final PathArgument argument, final CompositeNode node) {
- return Collections.emptyMap();
- }
-
- protected Map<QName, SimpleNode<?>> _getKeyNodes(
- final NodeIdentifierWithPredicates argument,
- final CompositeNode node) {
- final HashMap<QName, SimpleNode<?>> ret = new HashMap<QName, SimpleNode<?>>();
- for (final Entry<QName, Object> keyValue : argument.getKeyValues()
- .entrySet()) {
- final List<SimpleNode<?>> simpleNode = node
- .getSimpleNodesByName(keyValue.getKey());
- if (simpleNode != null && !simpleNode.isEmpty()) {
- checkState(
- simpleNode.size() <= 1,
- "Only one simple node for key $s is allowed in node $s",
- keyValue.getKey(), node);
- checkState(
- simpleNode.get(0).getValue().equals(keyValue.getValue()),
- "Key node must equal to instance identifier value in node $s",
- node);
- ret.put(keyValue.getKey(), simpleNode.get(0));
- }
- final List<CompositeNode> compositeNode = node
- .getCompositesByName(keyValue.getKey());
- checkState(compositeNode == null || compositeNode.isEmpty(),
- "Key node must be Simple Node, not composite node.");
- }
- return ret;
- }
-
- public Map<QName, SimpleNode<?>> getKeyNodes(
- final YangInstanceIdentifier.PathArgument argument,
- final CompositeNode node) {
- if (argument instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates) {
- return _getKeyNodes(
- (YangInstanceIdentifier.NodeIdentifierWithPredicates) argument,
- node);
- } else if (argument != null) {
- return _getKeyNodes(argument, node);
- } else {
- throw new IllegalArgumentException("Unhandled parameter types: "
- + Arrays.<Object> asList(argument, node).toString());
- }
- }
-
- private Collection<? extends Node<?>> childrenWithout(
- final CompositeNode node,
- final Set<Entry<QName, SimpleNode<?>>> entries) {
- if (entries.isEmpty()) {
- return node.getValue();
- }
- final List<Node<?>> filteredNodes = new ArrayList<Node<?>>();
- for (final Node<?> scannedNode : node.getValue()) {
- if (!entries.contains(scannedNode.getNodeType())) {
- filteredNodes.add(scannedNode);
- }
- }
- return filteredNodes;
- }
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker.impl;
-
-import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration;
-import org.opendaylight.controller.sal.core.api.RpcImplementation;
-import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
-import org.opendaylight.yangtools.yang.common.QName;
-
-class GlobalRpcRegistration extends AbstractObjectRegistration<RpcImplementation> implements
- RpcRegistration {
- private final QName type;
- private SchemaAwareRpcBroker router;
-
- public GlobalRpcRegistration(final QName type, final RpcImplementation instance, final SchemaAwareRpcBroker router) {
- super(instance);
- this.type = type;
- this.router = router;
- }
-
- @Override
- public QName getType() {
- return type;
- }
-
- @Override
- protected void removeRegistration() {
- if (router != null) {
- router.remove(this);
- router = null;
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker.impl;
-
-import java.util.Collection;
-
-import org.opendaylight.controller.sal.core.api.notify.NotificationListener;
-import org.opendaylight.controller.sal.dom.broker.spi.NotificationRouter;
-import org.opendaylight.yangtools.concepts.AbstractListenerRegistration;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.Multimap;
-import com.google.common.collect.Multimaps;
-
-public class NotificationRouterImpl implements NotificationRouter {
- private static Logger log = LoggerFactory.getLogger(NotificationRouterImpl.class);
-
- private final Multimap<QName, MyListenerRegistration> listeners = Multimaps.synchronizedSetMultimap(HashMultimap.<QName, MyListenerRegistration>create());
-// private Registration<NotificationListener> defaultListener;
-
- private void sendNotification(CompositeNode notification) {
- final QName type = notification.getNodeType();
- final Collection<MyListenerRegistration> toNotify = listeners.get(type);
- log.trace("Publishing notification " + type);
-
- if ((toNotify == null) || toNotify.isEmpty()) {
- log.debug("No listener registered for handling of notification {}", type);
- return;
- }
-
- for (MyListenerRegistration listener : toNotify) {
- try {
- // FIXME: ensure that notification is immutable
- listener.getInstance().onNotification(notification);
- } catch (Exception e) {
- log.error("Uncaught exception in NotificationListener", e);
- }
- }
- }
-
- @Override
- public void publish(CompositeNode notification) {
- sendNotification(notification);
- }
-
- @Override
- public ListenerRegistration<NotificationListener> addNotificationListener(QName notification, NotificationListener listener) {
- MyListenerRegistration ret = new MyListenerRegistration(notification, listener);
- listeners.put(notification, ret);
- return ret;
- }
-
- private class MyListenerRegistration extends AbstractListenerRegistration<NotificationListener> {
-
- final QName type;
-
- public MyListenerRegistration(QName type, NotificationListener instance) {
- super(instance);
- this.type = type;
- }
-
- @Override
- protected void removeRegistration() {
- listeners.remove(type, this);
- }
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker.impl;
-
-import org.opendaylight.controller.sal.core.api.Broker.RoutedRpcRegistration;
-import org.opendaylight.controller.sal.core.api.RpcImplementation;
-import org.opendaylight.yangtools.concepts.AbstractObjectRegistration;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-class RoutedRpcRegImpl extends AbstractObjectRegistration<RpcImplementation> implements
- RoutedRpcRegistration {
-
- private final QName type;
- private final RoutedRpcSelector router;
-
- public RoutedRpcRegImpl(final QName rpcType, final RpcImplementation implementation, final RoutedRpcSelector routedRpcSelector) {
- super(implementation);
- this.type = rpcType;
- router = routedRpcSelector;
- }
-
- @Override
- public void registerPath(final QName context, final YangInstanceIdentifier path) {
- router.addPath(context, path, this);
- }
-
- @Override
- public void unregisterPath(final QName context, final YangInstanceIdentifier path) {
- router.removePath(context, path, this);
- }
-
- @Override
- protected void removeRegistration() {
-
- }
-
- @Override
- public QName getType() {
- return type;
- }
-
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker.impl;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-import com.google.common.collect.ImmutableSet;
-import com.google.common.util.concurrent.ListenableFuture;
-
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-import org.opendaylight.controller.md.sal.dom.broker.spi.rpc.RpcRoutingStrategy;
-import org.opendaylight.controller.sal.core.api.Broker.RoutedRpcRegistration;
-import org.opendaylight.controller.sal.core.api.RpcImplementation;
-import org.opendaylight.controller.sal.core.api.RpcRoutingContext;
-import org.opendaylight.yangtools.concepts.Identifiable;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.SimpleNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-class RoutedRpcSelector implements RpcImplementation, AutoCloseable, Identifiable<RpcRoutingContext> {
-
- private final RpcRoutingStrategy strategy;
- private final Set<QName> supportedRpcs;
- private final RpcRoutingContext identifier;
- final ConcurrentMap<YangInstanceIdentifier, RoutedRpcRegImpl> implementations = new ConcurrentHashMap<>();
- private final SchemaAwareRpcBroker router;
-
- public RoutedRpcSelector(final RpcRoutingStrategy strategy, final SchemaAwareRpcBroker router) {
- super();
- this.strategy = strategy;
- supportedRpcs = ImmutableSet.of(strategy.getIdentifier());
- identifier = RpcRoutingContext.create(strategy.getContext(), strategy.getIdentifier());
- this.router = router;
- }
-
- @Override
- public RpcRoutingContext getIdentifier() {
- return identifier;
- }
-
- @Override
- public void close() throws Exception {
-
- }
-
- @Override
- public Set<QName> getSupportedRpcs() {
- return supportedRpcs;
- }
-
- public RoutedRpcRegistration addRoutedRpcImplementation(final QName rpcType, final RpcImplementation implementation) {
- return new RoutedRpcRegImpl(rpcType, implementation, this);
- }
-
- @Override
- public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(final QName rpc, final CompositeNode input) {
- CompositeNode inputContainer = input.getFirstCompositeByName(QName.create(rpc,"input"));
- checkArgument(inputContainer != null, "Rpc payload must contain input element");
- SimpleNode<?> routeContainer = inputContainer.getFirstSimpleByName(strategy.getLeaf());
- checkArgument(routeContainer != null, "Leaf %s must be set with value", strategy.getLeaf());
- Object route = routeContainer.getValue();
- checkArgument(route instanceof YangInstanceIdentifier,
- "The routed node %s is not an instance identifier", route);
- RpcImplementation potential = null;
- if (route != null) {
- RoutedRpcRegImpl potentialReg = implementations.get(route);
- if (potentialReg != null) {
- potential = potentialReg.getInstance();
- }
- }
- if (potential == null) {
- return router.invokeRpc(rpc, (YangInstanceIdentifier) route, input);
- } else {
- return potential.invokeRpc(rpc, input);
- }
- }
-
- public void addPath(final QName context, final YangInstanceIdentifier path, final RoutedRpcRegImpl routedRpcRegImpl) {
- //checkArgument(strategy.getContext().equals(context),"Supplied context is not supported.");
- RoutedRpcRegImpl previous = implementations.put(path, routedRpcRegImpl);
- if (previous == null) {
- router.notifyPathAnnouncement(context,strategy.getIdentifier(), path);
- }
-
- }
-
- public void removePath(final QName context, final YangInstanceIdentifier path, final RoutedRpcRegImpl routedRpcRegImpl) {
- boolean removed = implementations.remove(path, routedRpcRegImpl);
- if (removed) {
- router.notifyPathWithdrawal(context, strategy.getIdentifier(), path);
- }
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker.impl;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkState;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import org.opendaylight.controller.md.sal.common.api.routing.RouteChange;
-import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener;
-import org.opendaylight.controller.md.sal.common.impl.routing.RoutingUtils;
-import org.opendaylight.controller.md.sal.dom.broker.spi.rpc.RpcRoutingStrategy;
-import org.opendaylight.controller.sal.core.api.Broker.RoutedRpcRegistration;
-import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration;
-import org.opendaylight.controller.sal.core.api.RoutedRpcDefaultImplementation;
-import org.opendaylight.controller.sal.core.api.RpcImplementation;
-import org.opendaylight.controller.sal.core.api.RpcImplementationUnavailableException;
-import org.opendaylight.controller.sal.core.api.RpcRegistrationListener;
-import org.opendaylight.controller.sal.core.api.RpcRoutingContext;
-import org.opendaylight.controller.sal.dom.broker.spi.RpcRouter;
-import org.opendaylight.yangtools.concepts.Identifiable;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.util.ListenerRegistry;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * RPC broker responsible for routing requests to remote systems.
- */
-public class SchemaAwareRpcBroker implements RpcRouter, Identifiable<String>, RoutedRpcDefaultImplementation {
-
- private static final Logger LOG = LoggerFactory.getLogger(SchemaAwareRpcBroker.class);
-
-
- private final ListenerRegistry<RpcRegistrationListener> rpcRegistrationListeners = new ListenerRegistry<>();
- private final ListenerRegistry<RouteChangeListener<RpcRoutingContext, YangInstanceIdentifier>> routeChangeListeners = new ListenerRegistry<>();
-
-
- private final String identifier;
- private final ConcurrentMap<QName, RpcImplementation> implementations = new ConcurrentHashMap<>();
- private RpcImplementation defaultImplementation;
- private SchemaContextProvider schemaProvider;
- private RoutedRpcDefaultImplementation defaultDelegate;
-
- public SchemaAwareRpcBroker(final String identifier, final SchemaContextProvider schemaProvider) {
- super();
- this.identifier = identifier;
- this.schemaProvider = schemaProvider;
- }
-
- public RpcImplementation getDefaultImplementation() {
- return defaultImplementation;
- }
-
- public void setDefaultImplementation(final RpcImplementation defaultImplementation) {
- this.defaultImplementation = defaultImplementation;
- }
-
- public SchemaContextProvider getSchemaProvider() {
- return schemaProvider;
- }
-
- public void setSchemaProvider(final SchemaContextProvider schemaProvider) {
- this.schemaProvider = schemaProvider;
- }
-
- public RoutedRpcDefaultImplementation getRoutedRpcDefaultDelegate() {
- return defaultDelegate;
- }
-
- @Override
- public void setRoutedRpcDefaultDelegate(final RoutedRpcDefaultImplementation defaultDelegate) {
- this.defaultDelegate = defaultDelegate;
- }
-
- @Override
- public RoutedRpcRegistration addRoutedRpcImplementation(final QName rpcType, final RpcImplementation implementation) {
- checkArgument(rpcType != null, "RPC Type should not be null");
- checkArgument(implementation != null, "RPC Implementatoin should not be null");
- return getOrCreateRoutedRpcRouter(rpcType).addRoutedRpcImplementation(rpcType, implementation);
- }
-
- private RoutedRpcSelector getOrCreateRoutedRpcRouter(final QName rpcType) {
- RoutedRpcSelector potential = getRoutedRpcRouter(rpcType);
- if (potential != null) {
- return potential;
- }
- synchronized (implementations) {
- potential = getRoutedRpcRouter(rpcType);
- if (potential != null) {
- return potential;
- }
- RpcDefinition definition = findRpcDefinition(rpcType);
- RpcRoutingStrategy strategy = RpcRoutingStrategy.from(definition);
- checkState(strategy.isContextBasedRouted(), "Rpc %s is not routed.", rpcType);
- potential = new RoutedRpcSelector( strategy, this);
- implementations.put(rpcType, potential);
- return potential;
- }
- }
-
- private RoutedRpcSelector getRoutedRpcRouter(final QName rpcType) {
- RpcImplementation potential = implementations.get(rpcType);
- if (potential != null) {
- checkState(potential instanceof RoutedRpcSelector, "Rpc %s is not routed.", rpcType);
- return (RoutedRpcSelector) potential;
- }
- return null;
-
- }
-
- @Override
- public RpcRegistration addRpcImplementation(final QName rpcType, final RpcImplementation implementation)
- throws IllegalArgumentException {
- checkArgument(rpcType != null, "RPC Type should not be null");
- checkArgument(implementation != null, "RPC Implementatoin should not be null");
- checkState(!hasRpcImplementation(rpcType), "Implementation already registered");
- RpcDefinition definition = findRpcDefinition(rpcType);
- checkArgument(!RpcRoutingStrategy.from(definition).isContextBasedRouted(), "RPC Type must not be content routed.");
- GlobalRpcRegistration reg = new GlobalRpcRegistration(rpcType, implementation, this);
- final RpcImplementation previous = implementations.putIfAbsent(rpcType, implementation);
- Preconditions.checkState(previous == null, "Rpc %s is already registered.",rpcType);
- notifyRpcAdded(rpcType);
- return reg;
- }
-
- private void notifyRpcAdded(final QName rpcType) {
- for (ListenerRegistration<RpcRegistrationListener> listener : rpcRegistrationListeners) {
- try {
- listener.getInstance().onRpcImplementationAdded(rpcType);
- } catch (Exception ex) {
- LOG.error("Unhandled exception during invoking listener {}", listener.getInstance(), ex);
- }
-
- }
- }
-
- @Override
- public ListenerRegistration<RpcRegistrationListener> addRpcRegistrationListener(final RpcRegistrationListener listener) {
- ListenerRegistration<RpcRegistrationListener> reg = rpcRegistrationListeners.register(listener);
- for (QName impl : implementations.keySet()) {
- listener.onRpcImplementationAdded(impl);
- }
- return reg;
- }
-
- @Override
- public String getIdentifier() {
- return identifier;
- }
-
- @Override
- public Set<QName> getSupportedRpcs() {
- return ImmutableSet.copyOf(implementations.keySet());
- }
-
- @Override
- public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(final QName rpc, final CompositeNode input) {
- return findRpcImplemention(rpc).invokeRpc(rpc, input);
- }
-
- private RpcImplementation findRpcImplemention(final QName rpc) {
- checkArgument(rpc != null, "Rpc name should not be null");
- RpcImplementation potentialImpl = implementations.get(rpc);
- if (potentialImpl != null) {
- return potentialImpl;
- }
-
- potentialImpl = defaultImplementation;
- if( potentialImpl == null ) {
- throw new UnsupportedOperationException( "No implementation for this operation is available." );
- }
-
- return potentialImpl;
- }
-
- private boolean hasRpcImplementation(final QName rpc) {
- return implementations.containsKey(rpc);
- }
-
- private RpcDefinition findRpcDefinition(final QName rpcType) {
- checkArgument(rpcType != null, "Rpc name must be supplied.");
- checkState(schemaProvider != null, "Schema Provider is not available.");
- SchemaContext ctx = schemaProvider.getSchemaContext();
- checkState(ctx != null, "YANG Schema Context is not available.");
- Module module = ctx.findModuleByNamespaceAndRevision(rpcType.getNamespace(), rpcType.getRevision());
- checkState(module != null, "YANG Module is not available.");
- return findRpcDefinition(rpcType, module.getRpcs());
- }
-
- static private RpcDefinition findRpcDefinition(final QName rpcType, final Set<RpcDefinition> rpcs) {
- checkState(rpcs != null, "Rpc schema is not available.");
- for (RpcDefinition rpc : rpcs) {
- if (rpcType.equals(rpc.getQName())) {
- return rpc;
- }
- }
- throw new IllegalArgumentException("Supplied Rpc Type is not defined.");
- }
-
- @Override
- public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(final QName rpc, final YangInstanceIdentifier route, final CompositeNode input) {
- if (defaultDelegate == null) {
- return Futures.immediateFailedCheckedFuture(new RpcImplementationUnavailableException("No RPC implementation found"));
- }
-
- LOG.debug("Forwarding RPC {} path {} to delegate {}", rpc, route);
- return defaultDelegate.invokeRpc(rpc, route, input);
- }
-
- void remove(final GlobalRpcRegistration registration) {
- implementations.remove(registration.getType(), registration);
- }
-
- void notifyPathAnnouncement(final QName context, final QName identifier, final YangInstanceIdentifier path) {
- RpcRoutingContext contextWrapped = RpcRoutingContext.create(context, identifier);
- RouteChange<RpcRoutingContext, YangInstanceIdentifier> change = RoutingUtils.announcementChange(contextWrapped , path);
- for(ListenerRegistration<RouteChangeListener<RpcRoutingContext, YangInstanceIdentifier>> routeListener : routeChangeListeners) {
- try {
- routeListener.getInstance().onRouteChange(change);
- } catch (Exception e) {
- LOG.error("Unhandled exception during invoking onRouteChange for {}",routeListener.getInstance(),e);
- }
- }
-
- }
-
- void notifyPathWithdrawal(final QName context,final QName identifier, final YangInstanceIdentifier path) {
- RpcRoutingContext contextWrapped = RpcRoutingContext.create(context, identifier);
- RouteChange<RpcRoutingContext, YangInstanceIdentifier> change = RoutingUtils.removalChange(contextWrapped , path);
- for(ListenerRegistration<RouteChangeListener<RpcRoutingContext, YangInstanceIdentifier>> routeListener : routeChangeListeners) {
- try {
- routeListener.getInstance().onRouteChange(change);
- } catch (Exception e) {
- LOG.error("Unhandled exception during invoking onRouteChange for {}",routeListener.getInstance(),e);
- }
- }
- }
-
- @Override
- public <L extends RouteChangeListener<RpcRoutingContext, YangInstanceIdentifier>> ListenerRegistration<L> registerRouteChangeListener(
- final L listener) {
- ListenerRegistration<L> reg = routeChangeListeners.registerWithType(listener);
- RouteChange<RpcRoutingContext, YangInstanceIdentifier> initial = createInitialRouteChange();
- try {
- listener.onRouteChange(initial);
- } catch (Exception e) {
- LOG.error("Unhandled exception during sending initial route change event {} to {}",initial,listener, e);
- }
- return reg;
- }
-
- private RouteChange<RpcRoutingContext, YangInstanceIdentifier> createInitialRouteChange() {
- FluentIterable<RoutedRpcSelector> rpcSelectors = FluentIterable.from(implementations.values()).filter(RoutedRpcSelector.class);
-
-
- ImmutableMap.Builder<RpcRoutingContext, Set<YangInstanceIdentifier>> announcements = ImmutableMap.builder();
- ImmutableMap.Builder<RpcRoutingContext, Set<YangInstanceIdentifier>> removals = ImmutableMap.builder();
- for (RoutedRpcSelector routedRpcSelector : rpcSelectors) {
- final RpcRoutingContext context = routedRpcSelector.getIdentifier();
- final Set<YangInstanceIdentifier> paths = ImmutableSet.copyOf(routedRpcSelector.implementations.keySet());
- announcements.put(context, paths);
- }
- return RoutingUtils.change(announcements.build(), removals.build());
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker.osgi;
-
-import org.opendaylight.controller.sal.core.api.data.DataBrokerService;
-import org.opendaylight.controller.sal.core.api.data.DataChangeListener;
-import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.osgi.framework.ServiceReference;
-
-@Deprecated
-public class DataBrokerServiceProxy extends AbstractBrokerServiceProxy<DataBrokerService> implements DataBrokerService {
-
- public DataBrokerServiceProxy(ServiceReference<DataBrokerService> ref, DataBrokerService delegate) {
- super(ref, delegate);
- }
-
- public ListenerRegistration<DataChangeListener> registerDataChangeListener(YangInstanceIdentifier path,
- DataChangeListener listener) {
- return addRegistration(getDelegate().registerDataChangeListener(path, listener));
- }
-
- public CompositeNode readConfigurationData(YangInstanceIdentifier path) {
- return getDelegate().readConfigurationData(path);
- }
-
- public CompositeNode readOperationalData(YangInstanceIdentifier path) {
- return getDelegate().readOperationalData(path);
- }
-
- public DataModificationTransaction beginTransaction() {
- return getDelegate().beginTransaction();
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker.osgi;
-
-import org.opendaylight.controller.md.sal.common.api.RegistrationListener;
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler;
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandlerRegistration;
-import org.opendaylight.controller.md.sal.common.api.data.DataReader;
-import org.opendaylight.controller.sal.common.DataStoreIdentifier;
-import org.opendaylight.controller.sal.core.api.data.DataChangeListener;
-import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction;
-import org.opendaylight.controller.sal.core.api.data.DataProviderService;
-import org.opendaylight.controller.sal.core.api.data.DataValidator;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.concepts.Registration;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.osgi.framework.ServiceReference;
-
-@Deprecated
-public class DataProviderServiceProxy extends AbstractBrokerServiceProxy<DataProviderService> implements DataProviderService {
-
- public DataProviderServiceProxy(final ServiceReference<DataProviderService> ref, final DataProviderService delegate) {
- super(ref, delegate);
- }
-
- @Override
- public ListenerRegistration<DataChangeListener> registerDataChangeListener(final YangInstanceIdentifier path,
- final DataChangeListener listener) {
- return addRegistration(getDelegate().registerDataChangeListener(path, listener));
- }
-
- @Override
- public CompositeNode readConfigurationData(final YangInstanceIdentifier path) {
- return getDelegate().readConfigurationData(path);
- }
-
- @Override
- public CompositeNode readOperationalData(final YangInstanceIdentifier path) {
- return getDelegate().readOperationalData(path);
- }
-
- @Override
- public DataModificationTransaction beginTransaction() {
- return getDelegate().beginTransaction();
- }
-
- @Override
- public void addRefresher(final DataStoreIdentifier store, final DataRefresher refresher) {
- getDelegate().addRefresher(store, refresher);
- }
-
- @Override
- public void addValidator(final DataStoreIdentifier store, final DataValidator validator) {
- getDelegate().addValidator(store, validator);
- }
-
- @Override
- public Registration registerCommitHandler(
- final YangInstanceIdentifier path, final DataCommitHandler<YangInstanceIdentifier, CompositeNode> commitHandler) {
- return addRegistration(getDelegate().registerCommitHandler(path, commitHandler));
- }
-
- @Override
- public Registration registerConfigurationReader(
- final YangInstanceIdentifier path, final DataReader<YangInstanceIdentifier, CompositeNode> reader) {
- return addRegistration(getDelegate().registerConfigurationReader(path, reader));
- }
-
- @Override
- public Registration registerOperationalReader(
- final YangInstanceIdentifier path, final DataReader<YangInstanceIdentifier, CompositeNode> reader) {
- return addRegistration(getDelegate().registerOperationalReader(path, reader));
- }
-
- @Override
- public void removeRefresher(final DataStoreIdentifier store, final DataRefresher refresher) {
- getDelegate().removeRefresher(store, refresher);
- }
-
- @Override
- public void removeValidator(final DataStoreIdentifier store, final DataValidator validator) {
- getDelegate().removeValidator(store, validator);
- }
-
- @Override
- public ListenerRegistration<RegistrationListener<DataCommitHandlerRegistration<YangInstanceIdentifier, CompositeNode>>> registerCommitHandlerListener(
- final RegistrationListener<DataCommitHandlerRegistration<YangInstanceIdentifier, CompositeNode>> commitHandlerListener) {
- return addRegistration(getDelegate().registerCommitHandlerListener(commitHandlerListener));
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker.osgi;
-
-import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance;
-import org.opendaylight.controller.sal.core.api.mount.MountProvisionListener;
-import org.opendaylight.controller.sal.core.api.mount.MountProvisionService;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.osgi.framework.ServiceReference;
-
-@Deprecated
-public class MountProviderServiceProxy extends AbstractBrokerServiceProxy<MountProvisionService> implements MountProvisionService{
-
-
- public MountProviderServiceProxy(ServiceReference<MountProvisionService> ref, MountProvisionService delegate) {
- super(ref, delegate);
- }
-
- @Override
- public MountProvisionInstance getMountPoint(YangInstanceIdentifier path) {
- return getDelegate().getMountPoint(path);
- }
-
- @Override
- public MountProvisionInstance createMountPoint(YangInstanceIdentifier path) {
- return getDelegate().createMountPoint(path);
- }
-
- @Override
- public MountProvisionInstance createOrGetMountPoint(YangInstanceIdentifier path) {
- return getDelegate().createOrGetMountPoint(path);
- }
-
- @Override
- public ListenerRegistration<MountProvisionListener> registerProvisionListener(MountProvisionListener listener) {
- return getDelegate().registerProvisionListener(listener);
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker.osgi;
-
-import org.opendaylight.controller.sal.core.api.notify.NotificationListener;
-import org.opendaylight.controller.sal.core.api.notify.NotificationPublishService;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.osgi.framework.ServiceReference;
-
-public class NotificationPublishServiceProxy extends AbstractBrokerServiceProxy<NotificationPublishService> implements NotificationPublishService {
-
- public NotificationPublishServiceProxy(ServiceReference<NotificationPublishService> ref,
- NotificationPublishService delegate) {
- super(ref, delegate);
- }
-
- @Override
- public ListenerRegistration<NotificationListener> addNotificationListener(QName notification, NotificationListener listener) {
- return addRegistration(getDelegate().addNotificationListener(notification, listener));
-
- }
-
- @Override
- public void publish(CompositeNode notification) {
- getDelegate().publish(notification);
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker.osgi;
-
-import org.opendaylight.controller.sal.core.api.notify.NotificationListener;
-import org.opendaylight.controller.sal.core.api.notify.NotificationService;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.osgi.framework.ServiceReference;
-
-public class NotificationServiceProxy extends AbstractBrokerServiceProxy<NotificationService> implements
- NotificationService {
-
- public NotificationServiceProxy(ServiceReference<NotificationService> ref, NotificationService delegate) {
- super(ref, delegate);
- }
-
- @Override
- public ListenerRegistration<NotificationListener> addNotificationListener(QName notification, NotificationListener listener) {
- return addRegistration(getDelegate().addNotificationListener(notification, listener));
- }
-}
*/
package org.opendaylight.controller.sal.dom.broker.osgi;
-import java.util.Arrays;
import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
import org.opendaylight.controller.sal.core.api.BrokerService;
-import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry;
-import org.opendaylight.controller.sal.core.api.data.DataBrokerService;
-import org.opendaylight.controller.sal.core.api.data.DataProviderService;
import org.opendaylight.controller.sal.core.api.model.SchemaService;
-import org.opendaylight.controller.sal.core.api.mount.MountProvisionService;
-import org.opendaylight.controller.sal.core.api.notify.NotificationPublishService;
-import org.opendaylight.controller.sal.core.api.notify.NotificationService;
import org.osgi.framework.ServiceReference;
+import java.util.Arrays;
+
@SuppressWarnings("unchecked")
public class ProxyFactory {
return ((T) _createProxyImpl);
}
- @Deprecated
- private static Object _createProxyImpl(final ServiceReference<?> ref,
- final DataBrokerService service) {
-
- return new DataBrokerServiceProxy(
- ((ServiceReference<DataBrokerService>) ref), service);
- }
-
- @Deprecated
- private static Object _createProxyImpl(final ServiceReference<?> ref,
- final DataProviderService service) {
-
- return new DataProviderServiceProxy(
- ((ServiceReference<DataProviderService>) ref), service);
- }
-
- private static Object _createProxyImpl(final ServiceReference<?> ref,
- final NotificationPublishService service) {
-
- return new NotificationPublishServiceProxy(
- ((ServiceReference<NotificationPublishService>) ref), service);
- }
-
- private static Object _createProxyImpl(final ServiceReference<?> ref,
- final NotificationService service) {
-
- return new NotificationServiceProxy(
- ((ServiceReference<NotificationService>) ref), service);
- }
-
- @Deprecated
- private static Object _createProxyImpl(final ServiceReference<?> ref,
- final MountProvisionService service) {
-
- return new MountProviderServiceProxy(
- ((ServiceReference<MountProvisionService>) ref), service);
- }
-
private static Object _createProxyImpl(final ServiceReference<?> ref,
final DOMMountPointService service) {
service);
}
- private static Object _createProxyImpl(final ServiceReference<?> ref,
- final RpcProvisionRegistry service) {
-
- return new RpcProvisionRegistryProxy(
- ((ServiceReference<RpcProvisionRegistry>) ref), service);
- }
-
private static DOMDataBrokerProxy _createProxyImpl(
final ServiceReference<?> ref, final DOMDataBroker service) {
if (service instanceof DOMDataBroker) {
return _createProxyImpl(ref, (DOMDataBroker) service);
- } else if (service instanceof RpcProvisionRegistry) {
- return _createProxyImpl(ref, (RpcProvisionRegistry) service);
- } else if (service instanceof DataProviderService) {
- return _createProxyImpl(ref, (DataProviderService) service);
- } else if (service instanceof MountProvisionService) {
- return _createProxyImpl(ref, (MountProvisionService) service);
- } else if (service instanceof NotificationPublishService) {
- return _createProxyImpl(ref, (NotificationPublishService) service);
- } else if (service instanceof DataBrokerService) {
- return _createProxyImpl(ref, (DataBrokerService) service);
} else if (service instanceof SchemaService) {
return _createProxyImpl(ref, (SchemaService) service);
- } else if (service instanceof NotificationService) {
- return _createProxyImpl(ref, (NotificationService) service);
} else if (service instanceof DOMMountPointService) {
return _createProxyImpl(ref, (DOMMountPointService) service);
} else if (service != null) {
+++ /dev/null
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.sal.dom.broker.osgi;
-
-import java.util.Set;
-
-import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener;
-import org.opendaylight.controller.sal.core.api.Broker;
-import org.opendaylight.controller.sal.core.api.RoutedRpcDefaultImplementation;
-import org.opendaylight.controller.sal.core.api.RpcImplementation;
-import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry;
-import org.opendaylight.controller.sal.core.api.RpcRegistrationListener;
-import org.opendaylight.controller.sal.core.api.RpcRoutingContext;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.osgi.framework.ServiceReference;
-
-import com.google.common.util.concurrent.ListenableFuture;
-
-public class RpcProvisionRegistryProxy extends AbstractBrokerServiceProxy<RpcProvisionRegistry> implements RpcProvisionRegistry {
-
- public RpcProvisionRegistryProxy(final ServiceReference<RpcProvisionRegistry> ref, final RpcProvisionRegistry delegate) {
- super(ref, delegate);
- }
-
- @Override
- public Broker.RpcRegistration addRpcImplementation(final QName rpcType, final RpcImplementation implementation) throws IllegalArgumentException {
- return getDelegate().addRpcImplementation(rpcType, implementation);
- }
-
- @Override
- public ListenerRegistration<RpcRegistrationListener> addRpcRegistrationListener(final RpcRegistrationListener listener) {
- return getDelegate().addRpcRegistrationListener(listener);
- }
-
- @Override
- public Broker.RoutedRpcRegistration addRoutedRpcImplementation(final QName rpcType, final RpcImplementation implementation) {
- return getDelegate().addRoutedRpcImplementation(rpcType, implementation);
- }
-
- @Override
- public void setRoutedRpcDefaultDelegate(final RoutedRpcDefaultImplementation defaultImplementation) {
- getDelegate().setRoutedRpcDefaultDelegate(defaultImplementation);
- }
-
- @Override
- public <L extends RouteChangeListener<RpcRoutingContext, YangInstanceIdentifier>> ListenerRegistration<L> registerRouteChangeListener(final L listener) {
- return getDelegate().registerRouteChangeListener(listener);
- }
-
- @Override
- public Set<QName> getSupportedRpcs() {
- return getDelegate().getSupportedRpcs();
- }
-
- @Override
- public ListenableFuture<RpcResult<CompositeNode>> invokeRpc(final QName rpc, final CompositeNode input) {
- return getDelegate().invokeRpc(rpc, input);
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker.spi;
-
-import org.opendaylight.controller.sal.core.api.notify.NotificationListener;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-
-public interface NotificationRouter {
-
- void publish(CompositeNode notification);
-
- /**
- * Registers a notification listener for supplied notification type.
- *
- * @param notification
- * @param listener
- */
- ListenerRegistration<NotificationListener> addNotificationListener(QName notification,
- NotificationListener listener);
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker.spi;
-
-import java.util.Map;
-
-import org.opendaylight.controller.sal.core.api.Broker.RoutedRpcRegistration;
-import org.opendaylight.controller.sal.core.api.RpcImplementation;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-
-public interface RoutedRpcProcessor extends RpcImplementation {
-
- RoutedRpcRegistration addRoutedRpcImplementation(QName rpcType, RpcImplementation implementation);
-
- QName getRpcType();
-
- Map<YangInstanceIdentifier,RpcImplementation> getRoutes();
-
- RpcImplementation getDefaultRoute();
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.sal.dom.broker.spi;
-
-import java.util.Set;
-
-import org.opendaylight.controller.sal.core.api.Broker.RoutedRpcRegistration;
-import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration;
-import org.opendaylight.controller.sal.core.api.RpcImplementation;
-import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry;
-import org.opendaylight.yangtools.yang.common.QName;
-
-public interface RpcRouter extends RpcProvisionRegistry, RpcImplementation {
-
- @Override
- public RoutedRpcRegistration addRoutedRpcImplementation(QName rpcType, RpcImplementation implementation);
-
- @Override
- public RpcRegistration addRpcImplementation(QName rpcType, RpcImplementation implementation)
- throws IllegalArgumentException;
-
- @Override
- public Set<QName> getSupportedRpcs();
-}
augment "/config:modules/config:module/config:configuration" {
case dom-broker-impl {
when "/config:modules/config:module/config:type = 'dom-broker-impl'";
- container data-store {
- uses config:service-ref {
- refine type {
- mandatory false;
- config:required-identity sal:dom-data-store;
- }
- }
- }
container async-data-broker {
uses config:service-ref {
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html.
- */
-
-package org.opendaylight.controller.sal.dom.broker;
-
-import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import com.google.common.base.Optional;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
-import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
-import org.opendaylight.controller.md.sal.dom.api.DOMService;
-import org.opendaylight.controller.md.sal.dom.broker.impl.mount.DOMMountPointServiceImpl;
-import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance;
-import org.opendaylight.controller.sal.core.api.mount.MountProvisionListener;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Deprecated
-public class BackwardsCompatibleMountPointManagerTest {
- private static final Logger log = LoggerFactory.getLogger(BackwardsCompatibleMountPointManagerTest.class);
-
- @Mock
- private DOMMountPointServiceImpl domMountPointService;
- @Mock
- private DOMMountPointService.DOMMountPointBuilder mountBuilder;
-
- private BackwardsCompatibleMountPointManager compatibleMountPointManager;
- static final QName qName = QName.create("namespace", "12-12-1212", "mount");
- static final YangInstanceIdentifier id = YangInstanceIdentifier.of(qName);
-
- @Before
- public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
- stubMountService();
- compatibleMountPointManager = new BackwardsCompatibleMountPointManager(domMountPointService);
- }
-
- @Test
- public void testCreateMountpointAlreadyCreated() throws Exception {
- compatibleMountPointManager.createMountPoint(id);
- verify(domMountPointService).createMountPoint(id);
- verify(mountBuilder, times(3)).addService(any(Class.class), any(DOMService.class));
- verify(mountBuilder).addInitialSchemaContext(any(SchemaContext.class));
-
- try {
- compatibleMountPointManager.createMountPoint(id);
- } catch (final IllegalStateException e) {
- log.debug("", e);
- return;
- }
- fail("Should fail to create duplicate mount");
- }
-
- @Test
- public void testCreateMountpointGetOrCreate() throws Exception {
- compatibleMountPointManager = new BackwardsCompatibleMountPointManager(new DOMMountPointServiceImpl());
-
- final MountProvisionListener listener = new MountProvisionListener() {
- public int createdMounts = 0;
-
- @Override
- public void onMountPointCreated(final YangInstanceIdentifier path) {
- if(createdMounts++ > 1 ) {
- fail("Only one mount point should have been created");
- }
- }
-
- @Override
- public void onMountPointRemoved(final YangInstanceIdentifier path) {}
- };
-
- compatibleMountPointManager.registerProvisionListener(listener);
-
- final MountProvisionInstance m1 = compatibleMountPointManager.createOrGetMountPoint(id);
- m1.setSchemaContext(mockSchemaContext());
- compatibleMountPointManager.createOrGetMountPoint(id);
- compatibleMountPointManager.createOrGetMountPoint(id);
- }
-
- private void stubMountService() {
- doReturn(mockMountPointBuilder()).when(domMountPointService).createMountPoint(any(YangInstanceIdentifier.class));
- doReturn(Optional.of(mockMountPoint())).when(domMountPointService).getMountPoint(any(YangInstanceIdentifier.class));
- }
-
- private DOMMountPoint mockMountPoint() {
- final DOMMountPoint mock = mock(DOMMountPoint.class);
- doAnswer(new Answer<Object>() {
- @Override
- public Object answer(final InvocationOnMock invocation) throws Throwable {
- return Optional.of(mock(((Class<?>) invocation.getArguments()[0])));
- }
- }).when(mock).getService(any(Class.class));
- doReturn(mockSchemaContext()).when(mock).getSchemaContext();
- return mock;
- }
-
- static SchemaContext mockSchemaContext() {
- final SchemaContext mock = mock(SchemaContext.class);
- doReturn(qName).when(mock).getQName();
- doReturn("schema").when(mock).toString();
- doReturn(mock(DataSchemaNode.class)).when(mock).getDataChildByName(any(QName.class));
- return mock;
- }
-
- private DOMMountPointService.DOMMountPointBuilder mockMountPointBuilder() {
- doReturn(mountBuilder).when(mountBuilder).addService(any(Class.class), any(DOMService.class));
- doReturn(mockObjectRegistration()).when(mountBuilder).register();
- doReturn(mountBuilder).when(mountBuilder).addInitialSchemaContext(any(SchemaContext.class));
- return mountBuilder;
- }
-
- private ObjectRegistration<?> mockObjectRegistration() {
- return mock(ObjectRegistration.class);
- }
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html.
- */
-
-package org.opendaylight.controller.sal.dom.broker;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import com.google.common.base.Optional;
-import com.google.common.util.concurrent.ListenableFuture;
-import java.util.AbstractMap;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationException;
-import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer;
-import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction;
-import org.opendaylight.controller.sal.core.api.data.DataProviderService;
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Deprecated
-public class BackwardsCompatibleMountPointTest {
- private static final Logger log = LoggerFactory.getLogger(BackwardsCompatibleMountPointManagerTest.class);
-
- private static final YangInstanceIdentifier id = BackwardsCompatibleMountPointManagerTest.id;
- private final NormalizedNode<?, ?> normalizedNode = mockNormalizedNode();
- private final CompositeNode compositeNode = mockCompositeNode();
-
- @Mock
- private DataProviderService oldBroker;
- @Mock
- private SchemaContextProvider schemaContextProvider;
- @Mock
- private DataModificationTransaction mockTx;
-
- private BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore backwardsCompatibleDomStore;
-
- @Before
- public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
- stubSchemaProvider();
- stubOldBroker();
- backwardsCompatibleDomStore = new BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore(oldBroker, schemaContextProvider);
- }
-
- private void stubOldBroker() {
- doReturn(compositeNode).when(oldBroker).readConfigurationData(id);
- doReturn(compositeNode).when(oldBroker).readOperationalData(id);
- doReturn(mockTx).when(oldBroker).beginTransaction();
- doNothing().when(mockTx).putConfigurationData(id, compositeNode);
- doNothing().when(mockTx).putOperationalData(id, compositeNode);
- doReturn(com.google.common.util.concurrent.Futures.immediateFuture(RpcResultBuilder.success(TransactionStatus.COMMITED))).when(mockTx).commit();
- }
-
- private CompositeNode mockCompositeNode() {
- final CompositeNode mock = mock(CompositeNode.class);
- doReturn("node").when(mock).toString();
- return mock;
- }
-
- private void stubSchemaProvider() {
- doReturn(BackwardsCompatibleMountPointManagerTest.mockSchemaContext()).when(schemaContextProvider).getSchemaContext();
- }
-
- @Test
- public void testBackwardsCompatibleBroker() throws Exception {
- backwardsCompatibleDomStore.newReadOnlyTransaction();
- backwardsCompatibleDomStore.newWriteOnlyTransaction();
- backwardsCompatibleDomStore.newReadWriteTransaction();
- }
-
- @Test
- public void testReadTransaction() throws Exception {
- final BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore.BackwardsCompatibleReadTransaction tx =
- new BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore.BackwardsCompatibleReadTransaction(oldBroker, mockNormalizer());
-
- ListenableFuture<Optional<NormalizedNode<?, ?>>> read = tx.read(LogicalDatastoreType.CONFIGURATION, id);
- assertEquals(normalizedNode, read.get().get());
- verify(oldBroker).readConfigurationData(id);
-
- read = tx.read(LogicalDatastoreType.OPERATIONAL, id);
- assertEquals(normalizedNode, read.get().get());
-
- verify(oldBroker).readOperationalData(id);
- }
-
- @Test
- public void testReadWriteTransactionOperational() throws Exception {
- final BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore.BackwardsCompatibleWriteTransaction tx =
- new BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore.BackwardsCompatibleWriteTransaction(oldBroker, mockNormalizer());
-
- verify(oldBroker).beginTransaction();
-
- tx.put(LogicalDatastoreType.CONFIGURATION, id, normalizedNode);
- verify(mockTx).putConfigurationData(id, compositeNode);
-
- tx.put(LogicalDatastoreType.CONFIGURATION, id, normalizedNode);
- verify(mockTx, times(2)).putConfigurationData(id, compositeNode);
-
- tx.commit();
- verify(mockTx).commit();
- }
-
-
- @Test
- public void testCannotPutOperational() throws Exception {
- final BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore.BackwardsCompatibleWriteTransaction tx =
- new BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore.BackwardsCompatibleWriteTransaction(oldBroker, mockNormalizer());
-
- try {
- tx.put(LogicalDatastoreType.OPERATIONAL, id, normalizedNode);
- } catch (IllegalArgumentException e) {
- // Cannot put operational data
- log.debug("", e);
- return;
- }
-
- fail("Should fail when putting operational data");
- }
-
- private DataNormalizer mockNormalizer() throws DataNormalizationException {
- final DataNormalizer mock = mock(DataNormalizer.class);
- doReturn(new AbstractMap.SimpleEntry<YangInstanceIdentifier, NormalizedNode<?, ?>>(id, normalizedNode))
- .when(mock).toNormalized(any(YangInstanceIdentifier.class), any(CompositeNode.class));
- doReturn(compositeNode).when(mock).toLegacy(any(YangInstanceIdentifier.class), any(NormalizedNode.class));
- doReturn(id).when(mock).toLegacy(any(YangInstanceIdentifier.class));
- return mock;
- }
-
- private NormalizedNode<?, ?> mockNormalizedNode() {
- final NormalizedNode<?, ?> mock = mock(NormalizedNode.class);
- doReturn("mockNormalizedNode").when(mock).toString();
- return mock;
- }
-}
*/
package org.opendaylight.controller.sal.core.spi;
-import java.util.concurrent.Future;
import org.opendaylight.controller.sal.core.api.Broker.ConsumerSession;
import org.opendaylight.controller.sal.core.api.BrokerService;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
public abstract class ForwardingConsumerSession implements ConsumerSession {
return delegate().isClosed();
}
- @Override
- @Deprecated
- public Future<RpcResult<CompositeNode>> rpc(QName arg0, CompositeNode arg1) {
- return delegate().rpc(arg0, arg1);
- }
-
-
}
package org.opendaylight.controller.sal.core.spi;
-import java.util.Set;
-import java.util.concurrent.Future;
import org.opendaylight.controller.sal.core.api.Broker.ProviderSession;
-import org.opendaylight.controller.sal.core.api.Broker.RoutedRpcRegistration;
-import org.opendaylight.controller.sal.core.api.Broker.RpcRegistration;
import org.opendaylight.controller.sal.core.api.BrokerService;
-import org.opendaylight.controller.sal.core.api.RpcImplementation;
-import org.opendaylight.controller.sal.core.api.RpcRegistrationListener;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
public abstract class ForwardingProviderSession implements ProviderSession {
-
protected abstract ProviderSession delegate();
- @Override
- @Deprecated
- public RoutedRpcRegistration addMountedRpcImplementation(QName arg0, RpcImplementation arg1) {
- return delegate().addMountedRpcImplementation(arg0, arg1);
- }
-
- @Override
- @Deprecated
- public RoutedRpcRegistration addRoutedRpcImplementation(QName arg0, RpcImplementation arg1) {
- return delegate().addRoutedRpcImplementation(arg0, arg1);
- }
-
- @Override
- @Deprecated
- public RpcRegistration addRpcImplementation(QName arg0, RpcImplementation arg1)
- throws IllegalArgumentException {
- return delegate().addRpcImplementation(arg0, arg1);
- }
-
- @Deprecated
- @Override
- public ListenerRegistration<RpcRegistrationListener> addRpcRegistrationListener(
- RpcRegistrationListener arg0) {
- return delegate().addRpcRegistrationListener(arg0);
- }
-
@Override
public void close() {
delegate().close();
return delegate().getService(arg0);
}
- @Override
- public Set<QName> getSupportedRpcs() {
- return delegate().getSupportedRpcs();
- }
-
@Override
public boolean isClosed() {
return delegate().isClosed();
}
- @Override
- public Future<RpcResult<CompositeNode>> rpc(QName arg0, CompositeNode arg1) {
- return delegate().rpc(arg0, arg1);
- }
-
}