X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Ftools%2Fnetconf-testtool%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Ftest%2Ftool%2FMdsalOperationProvider.java;h=c1b89739315ada97a411c3edad2b18c295951fc7;hb=aafa2fb9d206df54b7088f449f6e3cfc7bcae50d;hp=5a27953a0599aad0fca1570fb42fd2f806080ab1;hpb=c894986ef8b0b40d7457c8c0c54a656ea0e9a521;p=netconf.git diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/MdsalOperationProvider.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/MdsalOperationProvider.java index 5a27953a05..c1b8973931 100644 --- a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/MdsalOperationProvider.java +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/MdsalOperationProvider.java @@ -7,9 +7,7 @@ */ package org.opendaylight.netconf.test.tool; -import com.google.common.collect.Sets; import com.google.common.util.concurrent.MoreExecutors; -import java.util.Collections; import java.util.EnumMap; import java.util.HashMap; import java.util.Map; @@ -25,10 +23,6 @@ import org.opendaylight.mdsal.dom.spi.store.DOMStore; import org.opendaylight.mdsal.dom.store.inmemory.InMemoryDOMDataStoreFactory; import org.opendaylight.netconf.api.capability.Capability; import org.opendaylight.netconf.api.monitoring.CapabilityListener; -import org.opendaylight.netconf.impl.SessionIdProvider; -import org.opendaylight.netconf.mapping.api.NetconfOperation; -import org.opendaylight.netconf.mapping.api.NetconfOperationService; -import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactory; import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext; import org.opendaylight.netconf.mdsal.connector.TransactionProvider; import org.opendaylight.netconf.mdsal.connector.ops.Commit; @@ -38,12 +32,17 @@ import org.opendaylight.netconf.mdsal.connector.ops.Lock; import org.opendaylight.netconf.mdsal.connector.ops.Unlock; import org.opendaylight.netconf.mdsal.connector.ops.get.Get; import org.opendaylight.netconf.mdsal.connector.ops.get.GetConfig; +import org.opendaylight.netconf.server.api.SessionIdProvider; +import org.opendaylight.netconf.server.api.operations.NetconfOperation; +import org.opendaylight.netconf.server.api.operations.NetconfOperationService; +import org.opendaylight.netconf.server.api.operations.NetconfOperationServiceFactory; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.Yang; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Schemas; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.Schema; import org.opendaylight.yangtools.concepts.AbstractListenerRegistration; import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.util.concurrent.SpecialExecutors; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; @@ -51,12 +50,12 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent 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.schema.ContainerNode; -import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; -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.SystemMapNode; +import org.opendaylight.yangtools.yang.data.api.schema.builder.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; @@ -65,9 +64,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; class MdsalOperationProvider implements NetconfOperationServiceFactory { - - private static final Logger LOG = LoggerFactory - .getLogger(MdsalOperationProvider.class); + private static final Logger LOG = LoggerFactory.getLogger(MdsalOperationProvider.class); private final Set caps; private final EffectiveModelContext schemaContext; @@ -88,54 +85,44 @@ class MdsalOperationProvider implements NetconfOperationServiceFactory { } @Override - public AutoCloseable registerCapabilityListener( - final CapabilityListener listener) { - listener.onCapabilitiesChanged(caps, Collections.emptySet()); - return () -> { - }; + public Registration registerCapabilityListener(final CapabilityListener listener) { + listener.onCapabilitiesChanged(caps, Set.of()); + return () -> { }; } @Override public NetconfOperationService createService(final String netconfSessionIdForReporting) { - return new MdsalOperationService(Long.parseLong(netconfSessionIdForReporting), schemaContext, - caps, sourceProvider); + return new MdsalOperationService(Long.parseLong(netconfSessionIdForReporting), schemaContext, caps, + sourceProvider); } static class MdsalOperationService implements NetconfOperationService { - private final long currentSessionId; + private final String currentSessionId; private final EffectiveModelContext schemaContext; private final Set caps; private final DOMSchemaService schemaService; private final DOMDataBroker dataBroker; private final SchemaSourceProvider sourceProvider; - MdsalOperationService(final long currentSessionId, - final EffectiveModelContext schemaContext, + MdsalOperationService(final long currentSessionId, final EffectiveModelContext schemaContext, final Set caps, final SchemaSourceProvider sourceProvider) { - this.currentSessionId = currentSessionId; + this.currentSessionId = String.valueOf(currentSessionId); this.schemaContext = schemaContext; this.caps = caps; this.sourceProvider = sourceProvider; - this.schemaService = createSchemaService(); + schemaService = createSchemaService(); - this.dataBroker = createDataStore(schemaService, currentSessionId); + dataBroker = createDataStore(schemaService, currentSessionId); } @Override public Set getNetconfOperations() { - TransactionProvider transactionProvider = new TransactionProvider( - dataBroker, String.valueOf(currentSessionId)); - CurrentSchemaContext currentSchemaContext = new CurrentSchemaContext(schemaService, sourceProvider); - ContainerNode netconf = createNetconfState(); - YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.builder().node(NetconfState.QNAME) - .build(); - final DOMDataTreeWriteTransaction tx = dataBroker.newWriteOnlyTransaction(); - tx.put(LogicalDatastoreType.OPERATIONAL, yangInstanceIdentifier, netconf); + tx.put(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of(NetconfState.QNAME), netconf); try { tx.commit().get(); @@ -144,70 +131,66 @@ class MdsalOperationProvider implements NetconfOperationServiceFactory { LOG.warn("Unable to update netconf state", e); } - final Get get = new Get(String.valueOf(currentSessionId), currentSchemaContext, transactionProvider); - final EditConfig editConfig = new EditConfig(String.valueOf(currentSessionId), currentSchemaContext, - transactionProvider); - final GetConfig getConfig = new GetConfig(String.valueOf(currentSessionId), currentSchemaContext, - transactionProvider); - final Commit commit = new Commit(String.valueOf(currentSessionId), transactionProvider); - final Lock lock = new Lock(String.valueOf(currentSessionId)); - final Unlock unLock = new Unlock(String.valueOf(currentSessionId)); - final DiscardChanges discardChanges = new DiscardChanges( - String.valueOf(currentSessionId), transactionProvider); - - return Sets.newHashSet(get, getConfig, - editConfig, commit, lock, unLock, discardChanges); + TransactionProvider transactionProvider = new TransactionProvider(dataBroker, currentSessionId); + CurrentSchemaContext currentSchemaContext = CurrentSchemaContext.create(schemaService, sourceProvider); + + final Get get = new Get(currentSessionId, currentSchemaContext, transactionProvider); + final EditConfig editConfig = new EditConfig(currentSessionId, currentSchemaContext, transactionProvider); + final GetConfig getConfig = new GetConfig(currentSessionId, currentSchemaContext, transactionProvider); + final Commit commit = new Commit(currentSessionId, transactionProvider); + final Lock lock = new Lock(currentSessionId); + final Unlock unLock = new Unlock(currentSessionId); + final DiscardChanges discardChanges = new DiscardChanges(currentSessionId, transactionProvider); + + return Set.of(get, getConfig, editConfig, commit, lock, unLock, discardChanges); } @Override public void close() { + // No-op } private ContainerNode createNetconfState() { - DummyMonitoringService monitor = new DummyMonitoringService( - caps); - + final DummyMonitoringService monitor = new DummyMonitoringService(caps); final QName identifier = QName.create(Schema.QNAME, "identifier"); final QName version = QName.create(Schema.QNAME, "version"); final QName format = QName.create(Schema.QNAME, "format"); final QName location = QName.create(Schema.QNAME, "location"); final QName namespace = QName.create(Schema.QNAME, "namespace"); - CollectionNodeBuilder schemaMapEntryNodeMapNodeCollectionNodeBuilder = Builders - .mapBuilder().withNodeIdentifier(new NodeIdentifier(Schema.QNAME)); - LeafSetEntryNode locationLeafSetEntryNode = Builders.leafSetEntryBuilder().withNodeIdentifier( - new NodeWithValue<>(location, "NETCONF")).withValue("NETCONF").build(); + CollectionNodeBuilder schemaMapEntryNodeMapNodeCollectionNodeBuilder = + Builders.mapBuilder().withNodeIdentifier(new NodeIdentifier(Schema.QNAME)); + LeafSetNode locationLeafSet = Builders.leafSetBuilder() + .withNodeIdentifier(new NodeIdentifier(location)) + .withChild(Builders.leafSetEntryBuilder() + .withNodeIdentifier(new NodeWithValue<>(location, "NETCONF")) + .withValue("NETCONF") + .build()) + .build(); Map keyValues = new HashMap<>(); - for (final Schema schema : monitor.getSchemas().getSchema().values()) { + for (final Schema schema : monitor.getSchemas().nonnullSchema().values()) { keyValues.put(identifier, schema.getIdentifier()); keyValues.put(version, schema.getVersion()); keyValues.put(format, Yang.QNAME); - MapEntryNode schemaMapEntryNode = Builders.mapEntryBuilder() - .withNodeIdentifier(NodeIdentifierWithPredicates.of(Schema.QNAME, keyValues)) - .withChild(Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(identifier)) - .withValue(schema.getIdentifier()).build()) - .withChild(Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(version)) - .withValue(schema.getVersion()).build()) - .withChild(Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(format)) - .withValue(Yang.QNAME).build()) - .withChild(Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(namespace)) - .withValue(schema.getNamespace().getValue()).build()) - .withChild((DataContainerChild) Builders.leafSetBuilder().withNodeIdentifier( - new NodeIdentifier(location)) - .withChild(locationLeafSetEntryNode).build()) - .build(); - - schemaMapEntryNodeMapNodeCollectionNodeBuilder.withChild(schemaMapEntryNode); + schemaMapEntryNodeMapNodeCollectionNodeBuilder.withChild(Builders.mapEntryBuilder() + .withNodeIdentifier(NodeIdentifierWithPredicates.of(Schema.QNAME, keyValues)) + .withChild(ImmutableNodes.leafNode(identifier, schema.getIdentifier())) + .withChild(ImmutableNodes.leafNode(version, schema.getVersion())) + .withChild(ImmutableNodes.leafNode(format, Yang.QNAME)) + .withChild(ImmutableNodes.leafNode(namespace, schema.getNamespace().getValue())) + .withChild(locationLeafSet) + .build()); } - DataContainerChild schemaList = schemaMapEntryNodeMapNodeCollectionNodeBuilder.build(); - - ContainerNode schemasContainer = Builders.containerBuilder().withNodeIdentifier( - new NodeIdentifier(Schemas.QNAME)).withChild(schemaList).build(); - return Builders.containerBuilder().withNodeIdentifier( - new NodeIdentifier(NetconfState.QNAME)).withChild(schemasContainer).build(); + return Builders.containerBuilder() + .withNodeIdentifier(new NodeIdentifier(NetconfState.QNAME)) + .withChild(Builders.containerBuilder() + .withNodeIdentifier(new NodeIdentifier(Schemas.QNAME)) + .withChild(schemaMapEntryNodeMapNodeCollectionNodeBuilder.build()) + .build()) + .build(); } private static DOMDataBroker createDataStore(final DOMSchemaService schemaService, final long sessionId) { @@ -215,8 +198,8 @@ class MdsalOperationProvider implements NetconfOperationServiceFactory { final DOMStore operStore = InMemoryDOMDataStoreFactory.create("DOM-OPER", schemaService); final DOMStore configStore = InMemoryDOMDataStoreFactory.create("DOM-CFG", schemaService); - ExecutorService listenableFutureExecutor = SpecialExecutors.newBlockingBoundedCachedThreadPool( - 16, 16, "CommitFutures", MdsalOperationProvider.class); + ExecutorService listenableFutureExecutor = SpecialExecutors.newBlockingBoundedCachedThreadPool(16, 16, + "CommitFutures", MdsalOperationProvider.class); final EnumMap datastores = new EnumMap<>(LogicalDatastoreType.class); datastores.put(LogicalDatastoreType.CONFIGURATION, configStore); @@ -246,5 +229,4 @@ class MdsalOperationProvider implements NetconfOperationServiceFactory { }; } } - }