X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fmessagebus-netconf%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Fmessagebus%2Feventsources%2Fnetconf%2FNetconfEventSourceMount.java;h=5f99d1e370e06fb078617b49275a1c11186646e3;hb=e6de448d56108f88bb05d346b1dd225d273563c5;hp=bd1f3450617ffc6d7d47439856b37794499d9fde;hpb=07332923b85725c03472c49a4a2b4e6ee98b74fa;p=netconf.git diff --git a/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceMount.java b/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceMount.java index bd1f345061..5f99d1e370 100644 --- a/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceMount.java +++ b/netconf/messagebus-netconf/src/main/java/org/opendaylight/netconf/messagebus/eventsources/netconf/NetconfEventSourceMount.java @@ -7,86 +7,73 @@ */ package org.opendaylight.netconf.messagebus.eventsources.netconf; -import com.google.common.base.Optional; +import static java.util.Objects.requireNonNull; + import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.ListenableFuture; +import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; +import java.util.Collection; import java.util.Collections; -import java.util.Date; -import java.util.List; -import javassist.ClassPool; -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.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint; -import org.opendaylight.controller.md.sal.dom.api.DOMNotificationListener; -import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcException; -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.api.DOMService; +import java.util.Optional; +import java.util.concurrent.ExecutionException; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.dom.api.DOMDataBroker; +import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction; +import org.opendaylight.mdsal.dom.api.DOMMountPoint; +import org.opendaylight.mdsal.dom.api.DOMNotificationListener; +import org.opendaylight.mdsal.dom.api.DOMNotificationService; +import org.opendaylight.mdsal.dom.api.DOMRpcResult; +import org.opendaylight.mdsal.dom.api.DOMRpcService; +import org.opendaylight.mdsal.dom.api.DOMSchemaService; +import org.opendaylight.mdsal.dom.api.DOMService; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionInput; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.CreateSubscriptionInputBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.Netconf; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.netconf.Streams; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.netconf.streams.Stream; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.DateAndTime; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; -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.ModuleInfoBackedContext; -import org.opendaylight.yangtools.sal.binding.generator.util.BindingRuntimeContext; -import org.opendaylight.yangtools.sal.binding.generator.util.JavassistUtils; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; /** - * Facade of mounted netconf device + * Facade of mounted netconf device. */ +@Deprecated(forRemoval = true) class NetconfEventSourceMount { + private static final YangInstanceIdentifier STREAMS_PATH = YangInstanceIdentifier.builder().node(Netconf.QNAME) + .node(Streams.QNAME).build(); + private static final QName CREATE_SUBSCRIPTION = QName.create(CreateSubscriptionInput.QNAME, "create-subscription"); - private static final BindingNormalizedNodeCodecRegistry CODEC_REGISTRY; - private static final YangInstanceIdentifier STREAMS_PATH = YangInstanceIdentifier.builder().node(Netconf.QNAME).node(Streams.QNAME).build(); - private static final SchemaPath CREATE_SUBSCRIPTION = SchemaPath - .create(true, QName.create(CreateSubscriptionInput.QNAME, "create-subscription")); - - static{ - final ModuleInfoBackedContext moduleInfoBackedContext = ModuleInfoBackedContext.create(); - moduleInfoBackedContext.addModuleInfos(Collections.singletonList(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.$YangModuleInfoImpl.getInstance())); - final Optional schemaContextOptional = moduleInfoBackedContext.tryToCreateSchemaContext(); - Preconditions.checkState(schemaContextOptional.isPresent()); - SchemaContext NOTIFICATIONS_SCHEMA_CTX = schemaContextOptional.get(); - - final JavassistUtils javassist = JavassistUtils.forClassPool(ClassPool.getDefault()); - CODEC_REGISTRY = new BindingNormalizedNodeCodecRegistry(StreamWriterGenerator.create(javassist)); - CODEC_REGISTRY.onBindingRuntimeContextUpdated(BindingRuntimeContext.create(moduleInfoBackedContext, NOTIFICATIONS_SCHEMA_CTX)); - } - - private final DOMMountPoint mountPoint; private final DOMRpcService rpcService; private final DOMNotificationService notificationService; private final DOMDataBroker dataBroker; private final Node node; private final String nodeId; + private final BindingNormalizedNodeSerializer serializer; + private final DOMSchemaService schemaService; - public NetconfEventSourceMount(final Node node, final DOMMountPoint mountPoint) { - this.mountPoint = mountPoint; + NetconfEventSourceMount(final BindingNormalizedNodeSerializer serializer, final Node node, + final DOMMountPoint mountPoint) { + this.serializer = requireNonNull(serializer); this.node = node; this.nodeId = node.getNodeId().getValue(); this.rpcService = getService(mountPoint, DOMRpcService.class); this.notificationService = getService(mountPoint, DOMNotificationService.class); this.dataBroker = getService(mountPoint, DOMDataBroker.class); + this.schemaService = getService(mountPoint, DOMSchemaService.class); } - private static T getService(DOMMountPoint mountPoint, Class service) { + private static T getService(final DOMMountPoint mountPoint, final Class service) { final Optional optional = mountPoint.getService(service); Preconditions.checkState(optional.isPresent(), "Service not present on mount point: %s", service.getName()); return optional.get(); @@ -101,64 +88,72 @@ class NetconfEventSourceMount { } /** - * Invokes create-subscription rpc on mounted device stream. If lastEventTime is provided and stream supports replay, + * Invokes create-subscription rpc on mounted device stream. If lastEventTime is provided and stream supports + * replay, * rpc will be invoked with start time parameter. - * @param stream stream + * + * @param stream stream * @param lastEventTime last event time * @return rpc result */ - CheckedFuture invokeCreateSubscription(final Stream stream, final Optional lastEventTime) { + ListenableFuture invokeCreateSubscription(final Stream stream, + final Optional lastEventTime) { final CreateSubscriptionInputBuilder inputBuilder = new CreateSubscriptionInputBuilder() .setStream(stream.getName()); - if(lastEventTime.isPresent() && stream.isReplaySupport()) { - final ZonedDateTime dateTime = lastEventTime.get().toInstant().atZone(ZoneId.systemDefault()); + if (lastEventTime.isPresent() && stream.getReplaySupport()) { + final ZonedDateTime dateTime = lastEventTime.get().atZone(ZoneId.systemDefault()); final String formattedDate = DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(dateTime); inputBuilder.setStartTime(new DateAndTime(formattedDate)); } final CreateSubscriptionInput input = inputBuilder.build(); - final ContainerNode nnInput = CODEC_REGISTRY.toNormalizedNodeRpcData(input); + final ContainerNode nnInput = serializer.toNormalizedNodeRpcData(input); return rpcService.invokeRpc(CREATE_SUBSCRIPTION, nnInput); } /** * Invokes create-subscription rpc on mounted device stream. + * * @param stream stream * @return rpc result */ - CheckedFuture invokeCreateSubscription(final Stream stream) { - return invokeCreateSubscription(stream, Optional.absent()); + ListenableFuture invokeCreateSubscription(final Stream stream) { + return invokeCreateSubscription(stream, Optional.empty()); } /** - * Returns list of streams avaliable on device + * Returns list of streams available on device. + * * @return list of streams - * @throws ReadFailedException if data read fails + * @throws ExecutionException if data read fails + * @throws InterruptedException if data read fails */ - List getAvailableStreams() throws ReadFailedException { - DOMDataReadOnlyTransaction tx = dataBroker.newReadOnlyTransaction(); - CheckedFuture>, ReadFailedException> checkFeature = tx - .read(LogicalDatastoreType.OPERATIONAL, STREAMS_PATH); - Optional> streams = checkFeature.checkedGet(); + Collection getAvailableStreams() throws InterruptedException, ExecutionException { + final Optional> streams; + try (DOMDataTreeReadTransaction tx = dataBroker.newReadOnlyTransaction()) { + streams = tx.read(LogicalDatastoreType.OPERATIONAL, STREAMS_PATH).get(); + } if (streams.isPresent()) { - Streams s = (Streams) CODEC_REGISTRY.fromNormalizedNode(STREAMS_PATH, streams.get()).getValue(); - return s.getStream(); + Streams streams1 = (Streams) serializer.fromNormalizedNode(STREAMS_PATH, streams.get()).getValue(); + return streams1.nonnullStream().values(); } return Collections.emptyList(); } - SchemaContext getSchemaContext() { - return mountPoint.getSchemaContext(); + EffectiveModelContext getSchemaContext() { + return schemaService.getGlobalContext(); } /** * Registers notification listener to receive a set of notifications. - * @see DOMNotificationService#registerNotificationListener(DOMNotificationListener, SchemaPath...) - * @param listener listener + * + * @param listener listener * @param notificationPath notification path - * @return + * @return ListenerRegistration + * @see DOMNotificationService#registerNotificationListener(DOMNotificationListener, SchemaPath...) */ - ListenerRegistration registerNotificationListener(DOMNotificationListener listener, SchemaPath notificationPath) { - return notificationService.registerNotificationListener(listener, notificationPath); + ListenerRegistration registerNotificationListener(final DOMNotificationListener listener, + final SchemaPath notificationPath) { + return notificationService.registerNotificationListener(listener, notificationPath.asAbsolute()); } }