X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fsal-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Fsal%2Fconnect%2Fnetconf%2Fschema%2FNetconfRemoteSchemaYangSourceProvider.java;h=0ba6cead958387ab434fd5bd40cbfc03b2cd1411;hb=2c5eea937aa51612acd6e444b3e3359598781b38;hp=8f2728b9e1c55c26b19c7e2550351d91999bc15e;hpb=a942d22ab8fd0d4db74a44b47db852d0938339da;p=netconf.git diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/NetconfRemoteSchemaYangSourceProvider.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/NetconfRemoteSchemaYangSourceProvider.java index 8f2728b9e1..0ba6cead95 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/NetconfRemoteSchemaYangSourceProvider.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/NetconfRemoteSchemaYangSourceProvider.java @@ -15,21 +15,22 @@ import com.google.common.base.Function; import com.google.common.base.MoreObjects; import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.MoreExecutors; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; +import javax.annotation.Nonnull; import javax.xml.transform.dom.DOMSource; import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.Yang; -import org.opendaylight.yangtools.util.concurrent.ExceptionMapper; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode; @@ -40,7 +41,6 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder; import org.opendaylight.yangtools.yang.model.api.SchemaPath; -import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; @@ -52,14 +52,6 @@ public final class NetconfRemoteSchemaYangSourceProvider implements SchemaSource private static final Logger LOG = LoggerFactory.getLogger(NetconfRemoteSchemaYangSourceProvider.class); - private static final ExceptionMapper MAPPER = new ExceptionMapper( - "schemaDownload", SchemaSourceException.class) { - @Override - protected SchemaSourceException newWithCause(final String s, final Throwable throwable) { - return new SchemaSourceException(s, throwable); - } - }; - private final DOMRpcService rpc; private final RemoteDeviceId id; @@ -68,23 +60,31 @@ public final class NetconfRemoteSchemaYangSourceProvider implements SchemaSource this.rpc = Preconditions.checkNotNull(rpc); } - private static final NodeIdentifier FORMAT_PATHARG = new NodeIdentifier(QName.create(NetconfMessageTransformUtil.GET_SCHEMA_QNAME, "format").intern()); - private static final NodeIdentifier GET_SCHEMA_PATHARG = new NodeIdentifier(NetconfMessageTransformUtil.GET_SCHEMA_QNAME); - private static final NodeIdentifier IDENTIFIER_PATHARG = new NodeIdentifier(QName.create(NetconfMessageTransformUtil.GET_SCHEMA_QNAME, "identifier").intern()); - private static final NodeIdentifier VERSION_PATHARG = new NodeIdentifier(QName.create(NetconfMessageTransformUtil.GET_SCHEMA_QNAME, "version").intern()); + private static final NodeIdentifier FORMAT_PATHARG = + new NodeIdentifier(QName.create(NetconfMessageTransformUtil.GET_SCHEMA_QNAME, "format").intern()); + private static final NodeIdentifier GET_SCHEMA_PATHARG = + new NodeIdentifier(NetconfMessageTransformUtil.GET_SCHEMA_QNAME); + private static final NodeIdentifier IDENTIFIER_PATHARG = + new NodeIdentifier(QName.create(NetconfMessageTransformUtil.GET_SCHEMA_QNAME, "identifier").intern()); + private static final NodeIdentifier VERSION_PATHARG = + new NodeIdentifier(QName.create(NetconfMessageTransformUtil.GET_SCHEMA_QNAME, "version").intern()); - private static final LeafNode FORMAT_LEAF = Builders.leafBuilder().withNodeIdentifier(FORMAT_PATHARG).withValue(Yang.QNAME).build(); + private static final LeafNode FORMAT_LEAF = + Builders.leafBuilder().withNodeIdentifier(FORMAT_PATHARG).withValue(Yang.QNAME).build(); - private static final QName NETCONF_DATA = QName.create(GET_SCHEMA_QNAME, NETCONF_DATA_QNAME.getLocalName()).intern(); + private static final QName NETCONF_DATA = + QName.create(GET_SCHEMA_QNAME, NETCONF_DATA_QNAME.getLocalName()).intern(); private static final NodeIdentifier NETCONF_DATA_PATHARG = toId(NETCONF_DATA); public static ContainerNode createGetSchemaRequest(final String moduleName, final Optional revision) { - final LeafNode identifier = Builders.leafBuilder().withNodeIdentifier(IDENTIFIER_PATHARG).withValue(moduleName).build(); + final LeafNode identifier = + Builders.leafBuilder().withNodeIdentifier(IDENTIFIER_PATHARG).withValue(moduleName).build(); final DataContainerNodeAttrBuilder builder = Builders.containerBuilder() .withNodeIdentifier(GET_SCHEMA_PATHARG).withChild(identifier).withChild(FORMAT_LEAF); if (revision.isPresent()) { - builder.withChild(Builders.leafBuilder().withNodeIdentifier(VERSION_PATHARG).withValue(revision.get()).build()); + builder.withChild(Builders.leafBuilder() + .withNodeIdentifier(VERSION_PATHARG).withValue(revision.get()).build()); } return builder.build(); @@ -95,7 +95,8 @@ public final class NetconfRemoteSchemaYangSourceProvider implements SchemaSource return Optional.absent(); } - final Optional> child = ((ContainerNode) result).getChild(NETCONF_DATA_PATHARG); + final java.util.Optional> child = + ((ContainerNode) result).getChild(NETCONF_DATA_PATHARG); Preconditions.checkState(child.isPresent() && child.get() instanceof AnyXmlNode, "%s Unexpected response to get-schema, expected response with one child %s, but was %s", id, @@ -109,28 +110,23 @@ public final class NetconfRemoteSchemaYangSourceProvider implements SchemaSource } @Override - public CheckedFuture getSource(final SourceIdentifier sourceIdentifier) { + public ListenableFuture getSource(final SourceIdentifier sourceIdentifier) { final String moduleName = sourceIdentifier.getName(); - // If formatted revision is SourceIdentifier.NOT_PRESENT_FORMATTED_REVISION, we have to omit it from request - final String formattedRevision = sourceIdentifier.getRevision().equals(SourceIdentifier.NOT_PRESENT_FORMATTED_REVISION) ? null : sourceIdentifier.getRevision(); - final Optional revision = Optional.fromNullable(formattedRevision); + final Optional revision = Optional.fromJavaUtil(sourceIdentifier.getRevision().map(Revision::toString)); final NormalizedNode getSchemaRequest = createGetSchemaRequest(moduleName, revision); LOG.trace("{}: Loading YANG schema source for {}:{}", id, moduleName, revision); - final ListenableFuture transformed = Futures.transform( - rpc.invokeRpc(SchemaPath.create(true, NetconfMessageTransformUtil.GET_SCHEMA_QNAME), getSchemaRequest), - new ResultToYangSourceTransformer(id, sourceIdentifier, moduleName, revision)); - - final CheckedFuture checked = Futures.makeChecked(transformed, MAPPER); - - return checked; + return Futures.transform( + rpc.invokeRpc(SchemaPath.create(true, NetconfMessageTransformUtil.GET_SCHEMA_QNAME), getSchemaRequest), + new ResultToYangSourceTransformer(id, sourceIdentifier, moduleName, revision), + MoreExecutors.directExecutor()); } /** - * Transform composite node to string schema representation and then to ASTSchemaSource + * Transform composite node to string schema representation and then to ASTSchemaSource. */ private static final class ResultToYangSourceTransformer implements Function { @@ -140,7 +136,7 @@ public final class NetconfRemoteSchemaYangSourceProvider implements SchemaSource private final String moduleName; private final Optional revision; - public ResultToYangSourceTransformer(final RemoteDeviceId id, final SourceIdentifier sourceIdentifier, + ResultToYangSourceTransformer(final RemoteDeviceId id, final SourceIdentifier sourceIdentifier, final String moduleName, final Optional revision) { this.id = id; this.sourceIdentifier = sourceIdentifier; @@ -149,14 +145,15 @@ public final class NetconfRemoteSchemaYangSourceProvider implements SchemaSource } @Override - public YangTextSchemaSource apply(final DOMRpcResult input) { + public YangTextSchemaSource apply(@Nonnull final DOMRpcResult input) { if (input.getErrors().isEmpty()) { final Optional schemaString = getSchemaFromRpc(id, input.getResult()); Preconditions.checkState(schemaString.isPresent(), - "%s: Unexpected response to get-schema, schema not present in message for: %s", id, sourceIdentifier); + "%s: Unexpected response to get-schema, schema not present in message for: %s", + id, sourceIdentifier); LOG.debug("{}: YANG Schema successfully retrieved for {}:{}", id, moduleName, revision); @@ -178,8 +175,9 @@ public final class NetconfRemoteSchemaYangSourceProvider implements SchemaSource private final RemoteDeviceId id; private final Optional schemaString; - public NetconfYangTextSchemaSource(final RemoteDeviceId id, final SourceIdentifier sId, final Optional schemaString) { - super(sId); + NetconfYangTextSchemaSource(final RemoteDeviceId id, final SourceIdentifier sourceIdentifier, + final Optional schemaString) { + super(sourceIdentifier); this.id = id; this.schemaString = schemaString; }