X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frestconf%2Fimpl%2FRestconfImpl.java;h=c0006377231a4b4e3dd261c0419c1b5d7248ba24;hp=8856cce7df6968df413076a924a01ccc2f090e00;hb=33c9769f6dd0dadd68e460c8f6d76a06b43bf146;hpb=4fc158fdb5e38ad492c1bccc6b1e70f0c0255560 diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java index 8856cce7df..c000637723 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java @@ -18,6 +18,7 @@ import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.Futures; import java.math.BigInteger; @@ -74,6 +75,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceI 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.PathArgument; +import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; 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; @@ -168,8 +170,6 @@ public class RestconfImpl implements RestconfService { private static final URI NAMESPACE_EVENT_SUBSCRIPTION_AUGMENT = URI.create("urn:sal:restconf:event:subscription"); - private static final Date EVENT_SUBSCRIPTION_AUGMENT_REVISION; - private static final String DATASTORE_PARAM_NAME = "datastore"; private static final String SCOPE_PARAM_NAME = "scope"; @@ -180,10 +180,18 @@ public class RestconfImpl implements RestconfService { private static final QName NETCONF_BASE_QNAME; + private static final QNameModule SAL_REMOTE_AUGMENT; + + private static final YangInstanceIdentifier.AugmentationIdentifier SAL_REMOTE_AUG_IDENTIFIER; + static { try { - EVENT_SUBSCRIPTION_AUGMENT_REVISION = new SimpleDateFormat("yyyy-MM-dd").parse("2014-07-08"); + final Date eventSubscriptionAugRevision = new SimpleDateFormat("yyyy-MM-dd").parse("2014-07-08"); NETCONF_BASE_QNAME = QName.create(QNameModule.create(new URI(NETCONF_BASE), null), NETCONF_BASE_PAYLOAD_NAME ); + SAL_REMOTE_AUGMENT = QNameModule.create(NAMESPACE_EVENT_SUBSCRIPTION_AUGMENT, + eventSubscriptionAugRevision); + SAL_REMOTE_AUG_IDENTIFIER = new YangInstanceIdentifier.AugmentationIdentifier(Sets.newHashSet(QName.create(SAL_REMOTE_AUGMENT, "scope"), + QName.create(SAL_REMOTE_AUGMENT, "datastore"))); } catch (final ParseException e) { throw new RestconfDocumentedException( "It wasn't possible to convert revision date of sal-remote-augment to date", ErrorType.APPLICATION, @@ -258,7 +266,7 @@ public class RestconfImpl implements RestconfService { moduleContainerBuilder.withChild(mountPointModulesMap); return new NormalizedNodeContext(new InstanceIdentifierContext(null, modulesSchemaNode, - mountPoint, schemaContext), moduleContainerBuilder.build()); + mountPoint, controllerContext.getGlobalSchema()), moduleContainerBuilder.build()); } @Override @@ -549,15 +557,14 @@ public class RestconfImpl implements RestconfService { final DOMRpcResult result = checkRpcResponse(response); - DataSchemaNode resultNodeSchema = null; + RpcDefinition resultNodeSchema = null; final NormalizedNode resultData = result.getResult(); if (result != null && result.getResult() != null) { - final RpcDefinition rpcDef = (RpcDefinition) payload.getInstanceIdentifierContext().getSchemaNode(); - resultNodeSchema = rpcDef.getOutput(); + resultNodeSchema = (RpcDefinition) payload.getInstanceIdentifierContext().getSchemaNode(); } - return new NormalizedNodeContext(new InstanceIdentifierContext(null, resultNodeSchema, mountPoint, - schemaContext), resultData); + return new NormalizedNodeContext(new InstanceIdentifierContext(null, + resultNodeSchema, mountPoint, schemaContext), resultData); } private DOMRpcResult checkRpcResponse(final CheckedFuture response) { @@ -732,7 +739,7 @@ public class RestconfImpl implements RestconfService { if (rpc.getInput() != null) { // FIXME : find a correct Error from specification - throw new IllegalStateException("RPC " + rpc + " needs input value!"); + throw new IllegalStateException("RPC " + rpc + " does'n need input value!"); } final CheckedFuture response; @@ -1213,10 +1220,9 @@ public class RestconfImpl implements RestconfService { final YangInstanceIdentifier resultII; try { if (mountPoint != null) { - broker.commitConfigurationDataPost(mountPoint, normalizedII, payload.getData()); - + broker.commitConfigurationDataPost(mountPoint, normalizedII, payload.getData()).checkedGet(); } else { - broker.commitConfigurationDataPost(normalizedII, payload.getData()); + broker.commitConfigurationDataPost(normalizedII, payload.getData()).checkedGet(); } } catch(final RestconfDocumentedException e) { throw e; @@ -1327,10 +1333,12 @@ public class RestconfImpl implements RestconfService { */ private T parseEnumTypeParameter(final ContainerNode value, final Class classDescriptor, final String paramName) { - final QNameModule salRemoteAugment = QNameModule.create(NAMESPACE_EVENT_SUBSCRIPTION_AUGMENT, - EVENT_SUBSCRIPTION_AUGMENT_REVISION); - final Optional> enumNode = value.getChild(new NodeIdentifier( - QName.create(salRemoteAugment, paramName))); + final Optional> augNode = value.getChild(SAL_REMOTE_AUG_IDENTIFIER); + if (!augNode.isPresent() && !(augNode instanceof AugmentationNode)) { + return null; + } + final Optional> enumNode = + ((AugmentationNode) augNode.get()).getChild(new NodeIdentifier(QName.create(SAL_REMOTE_AUGMENT, paramName))); if (!enumNode.isPresent()) { return null; }