From: Jakub Toth Date: Sat, 29 Oct 2016 01:38:39 +0000 (+0200) Subject: Bug 6995 - Change event notification subscription usability PART2 X-Git-Tag: release/carbon~129 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=2781b3622622720d067829d22e21ada1a2a5b251;p=netconf.git Bug 6995 - Change event notification subscription usability PART2 * added new yang for leaf with location for subscribing on stream * changed return type of subscribing stream request from Response to NormalizedNodeContext * implemented leaf with location of stream * implemented support of adding new headers on data return * added new statement 'headers' to NormalizedNodeContext Change-Id: I2da57c8b1e22368345ca2dac9ae1a8924f2ecea2 Signed-off-by: Jakub Toth --- diff --git a/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/api/RestconfService.java b/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/api/RestconfService.java index ade5a41d58..88dd38df52 100644 --- a/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/api/RestconfService.java +++ b/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/api/RestconfService.java @@ -212,7 +212,8 @@ public interface RestconfService { @GET @Path("/streams/stream/{identifier:.+}") - public Response subscribeToStream(@Encoded @PathParam("identifier") String identifier, @Context UriInfo uriInfo); + public NormalizedNodeContext subscribeToStream(@Encoded @PathParam("identifier") String identifier, + @Context UriInfo uriInfo); /** * @deprecated do not use this method. It will be replaced by diff --git a/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/impl/NormalizedNodeJsonBodyWriter.java b/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/impl/NormalizedNodeJsonBodyWriter.java index e48afa695d..462c1001cd 100644 --- a/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/impl/NormalizedNodeJsonBodyWriter.java +++ b/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/impl/NormalizedNodeJsonBodyWriter.java @@ -16,6 +16,7 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; import java.net.URI; import java.nio.charset.StandardCharsets; +import java.util.Map.Entry; import javax.ws.rs.Produces; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; @@ -56,26 +57,32 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter type, final Type genericType, final Annotation[] annotations, final MediaType mediaType) { + public boolean isWriteable(final Class type, final Type genericType, final Annotation[] annotations, + final MediaType mediaType) { return type.equals(NormalizedNodeContext.class); } @Override - public long getSize(final NormalizedNodeContext t, final Class type, final Type genericType, final Annotation[] annotations, final MediaType mediaType) { + public long getSize(final NormalizedNodeContext t, final Class type, final Type genericType, + final Annotation[] annotations, final MediaType mediaType) { return -1; } @Override - public void writeTo(final NormalizedNodeContext t, final Class type, final Type genericType, final Annotation[] annotations, - final MediaType mediaType, final MultivaluedMap httpHeaders, final OutputStream entityStream) - throws IOException, WebApplicationException { + public void writeTo(final NormalizedNodeContext t, final Class type, final Type genericType, + final Annotation[] annotations, final MediaType mediaType, final MultivaluedMap httpHeaders, + final OutputStream entityStream) throws IOException, WebApplicationException { + for (final Entry entry : t.getNewHeaders().entrySet()) { + httpHeaders.add(entry.getKey(), entry.getValue()); + } final NormalizedNode data = t.getData(); if (data == null) { return; } @SuppressWarnings("unchecked") - final InstanceIdentifierContext context = (InstanceIdentifierContext) t.getInstanceIdentifierContext(); + final InstanceIdentifierContext context = + (InstanceIdentifierContext) t.getInstanceIdentifierContext(); final SchemaPath path = context.getSchemaNode().getPath(); final JsonWriter jsonWriter = createJsonWriter(entityStream, t.getWriterParameters().isPrettyPrint()); @@ -86,8 +93,8 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter context, NormalizedNode data, final Optional depth) throws - IOException { + final InstanceIdentifierContext context, NormalizedNode data, + final Optional depth) throws IOException { final RestconfNormalizedNodeWriter nnWriter; if (SchemaPath.ROOT.equals(path)) { /* @@ -141,7 +148,8 @@ public class NormalizedNodeJsonBodyWriter implements MessageBodyWriter httpHeaders, final OutputStream entityStream) throws IOException, WebApplicationException { + for (final Entry entry : t.getNewHeaders().entrySet()) { + httpHeaders.add(entry.getKey(), entry.getValue()); + } final InstanceIdentifierContext pathContext = t.getInstanceIdentifierContext(); if (t.getData() == null) { return; @@ -97,8 +101,9 @@ public class NormalizedNodeXmlBodyWriter implements MessageBodyWriter - pathContext, NormalizedNode data, final Optional depth) throws IOException { + private void writeNormalizedNode(final XMLStreamWriter xmlWriter, final SchemaPath schemaPath, + final InstanceIdentifierContext pathContext, NormalizedNode data, final Optional depth) + throws IOException { final RestconfNormalizedNodeWriter nnWriter; final SchemaContext schemaCtx = pathContext.getSchemaContext(); if (SchemaPath.ROOT.equals(schemaPath)) { @@ -121,8 +126,9 @@ public class NormalizedNodeXmlBodyWriter implements MessageBodyWriter depth) { - final NormalizedNodeStreamWriter xmlStreamWriter = XMLStreamNormalizedNodeStreamWriter.create(xmlWriter, schemaContext, schemaPath); + final SchemaContext schemaContext, final SchemaPath schemaPath, final Optional depth) { + final NormalizedNodeStreamWriter xmlStreamWriter = + XMLStreamNormalizedNodeStreamWriter.create(xmlWriter, schemaContext, schemaPath); if (depth.isPresent()) { return DepthAwareNormalizedNodeWriter.forStreamWriter(xmlStreamWriter, depth.get()); } else { @@ -135,7 +141,8 @@ public class NormalizedNodeXmlBodyWriter implements MessageBodyWriter child : data.getValue()) { nnWriter.write(child); diff --git a/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfCompositeWrapper.java b/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfCompositeWrapper.java index 49e7965120..c7ae242603 100644 --- a/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfCompositeWrapper.java +++ b/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/rest/impl/RestconfCompositeWrapper.java @@ -102,7 +102,7 @@ public class RestconfCompositeWrapper implements RestconfService, SchemaRetrieva } @Override - public Response subscribeToStream(final String identifier, final UriInfo uriInfo) { + public NormalizedNodeContext subscribeToStream(final String identifier, final UriInfo uriInfo) { return this.restconf.subscribeToStream(identifier, uriInfo); } diff --git a/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/restconf/impl/NormalizedNodeContext.java b/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/restconf/impl/NormalizedNodeContext.java index 3bed8d1ad0..6fc830cd83 100644 --- a/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/restconf/impl/NormalizedNodeContext.java +++ b/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/restconf/impl/NormalizedNodeContext.java @@ -7,6 +7,8 @@ */ package org.opendaylight.netconf.sal.restconf.impl; +import java.util.HashMap; +import java.util.Map; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.model.api.SchemaNode; @@ -15,14 +17,24 @@ public class NormalizedNodeContext { private final InstanceIdentifierContext context; private final NormalizedNode data; private final WriterParameters writerParameters; + private Map headers = new HashMap<>(); public NormalizedNodeContext(final InstanceIdentifierContext context, - final NormalizedNode data, WriterParameters writerParameters) { + final NormalizedNode data, final WriterParameters writerParameters) { this.context = context; this.data = data; this.writerParameters = writerParameters; } + public NormalizedNodeContext(final InstanceIdentifierContext context, + final NormalizedNode data, final WriterParameters writerParameters, + final Map headers) { + this.context = context; + this.data = data; + this.writerParameters = writerParameters; + this.headers = headers; + } + public NormalizedNodeContext(final InstanceIdentifierContext context, final NormalizedNode data) { this.context = context; @@ -31,15 +43,32 @@ public class NormalizedNodeContext { this.writerParameters = new WriterParameters.WriterParametersBuilder().build(); } + public NormalizedNodeContext(final InstanceIdentifierContext context, + final NormalizedNode data, final Map headers) { + this.context = context; + this.data = data; + // default writer parameters + this.writerParameters = new WriterParameters.WriterParametersBuilder().build(); + this.headers = headers; + } + + public InstanceIdentifierContext getInstanceIdentifierContext() { - return context; + return this.context; } public NormalizedNode getData() { - return data; + return this.data; } public WriterParameters getWriterParameters() { - return writerParameters; + return this.writerParameters; + } + + /** + * @return + */ + public Map getNewHeaders() { + return this.headers; } } diff --git a/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java b/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java index 25d081d73c..7a5d521331 100644 --- a/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java +++ b/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/restconf/impl/RestconfImpl.java @@ -83,7 +83,9 @@ import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeAttrBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafNodeBuilder; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; @@ -1043,17 +1045,52 @@ public class RestconfImpl implements RestconfService { * */ @Override - public Response subscribeToStream(final String identifier, final UriInfo uriInfo) { + public NormalizedNodeContext subscribeToStream(final String identifier, final UriInfo uriInfo) { + URI response = null; if (identifier.contains(DATA_SUBSCR)) { - return dataSubs(identifier, uriInfo); + response = dataSubs(identifier, uriInfo); } else if (identifier.contains(NOTIFICATION_STREAM)) { - return notifStream(identifier, uriInfo); + response = notifStream(identifier, uriInfo); } + + if(response != null){ + // prepare node with value of location + final InstanceIdentifierContext iid = prepareIIDSubsStreamOutput(); + final NormalizedNodeAttrBuilder> builder = ImmutableLeafNodeBuilder + .create().withValue(response.toString()); + builder.withNodeIdentifier( + NodeIdentifier.create(QName.create("subscribe:to:notification", "2016-10-28", "location"))); + + // prepare new header with location + final Map headers = new HashMap<>(); + headers.put("Location", response); + + return new NormalizedNodeContext(iid, builder.build(), headers); + } + final String msg = "Bad type of notification of sal-remote"; LOG.warn(msg); throw new RestconfDocumentedException(msg); } + /** + * @return {@link InstanceIdentifierContext} of location leaf for + * notification + */ + private InstanceIdentifierContext prepareIIDSubsStreamOutput() { + final QName qnameBase = QName.create("subscribe:to:notification", "2016-10-28", "notifi"); + final SchemaContext schemaCtx = ControllerContext.getInstance().getGlobalSchema(); + final DataSchemaNode location = ((ContainerSchemaNode) schemaCtx + .findModuleByNamespaceAndRevision(qnameBase.getNamespace(), qnameBase.getRevision()) + .getDataChildByName(qnameBase)).getDataChildByName(QName.create(qnameBase, "location")); + final List path = new ArrayList<>(); + path.add(NodeIdentifier.create(qnameBase)); + path.add(NodeIdentifier.create(QName.create(qnameBase, "location"))); + + return new InstanceIdentifierContext(YangInstanceIdentifier.create(path), location, null, + schemaCtx); + } + /** * Register notification listener by stream name * @@ -1063,7 +1100,7 @@ public class RestconfImpl implements RestconfService { * - uriInfo * @return {@link Response} */ - private Response notifStream(final String identifier, final UriInfo uriInfo) { + private URI notifStream(final String identifier, final UriInfo uriInfo) { final String streamName = Notificator.createStreamNameFromUri(identifier); if (Strings.isNullOrEmpty(streamName)) { throw new RestconfDocumentedException("Stream name is empty.", ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE); @@ -1089,7 +1126,7 @@ public class RestconfImpl implements RestconfService { final UriBuilder uriToWebsocketServerBuilder = uriBuilder.port(notificationPort).scheme("ws"); final URI uriToWebsocketServer = uriToWebsocketServerBuilder.replacePath(streamName).build(); - return Response.status(Status.OK).location(uriToWebsocketServer).build(); + return uriToWebsocketServer; } /** @@ -1101,7 +1138,7 @@ public class RestconfImpl implements RestconfService { * - uri info * @return {@link Response} */ - private Response dataSubs(final String identifier, final UriInfo uriInfo) { + private URI dataSubs(final String identifier, final UriInfo uriInfo) { final String streamName = Notificator.createStreamNameFromUri(identifier); if (Strings.isNullOrEmpty(streamName)) { throw new RestconfDocumentedException("Stream name is empty.", ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE); @@ -1138,7 +1175,7 @@ public class RestconfImpl implements RestconfService { final UriBuilder uriToWebsocketServerBuilder = uriBuilder.port(notificationPort).scheme("ws"); final URI uriToWebsocketServer = uriToWebsocketServerBuilder.replacePath(streamName).build(); - return Response.status(Status.OK).location(uriToWebsocketServer).build(); + return uriToWebsocketServer; } @Override diff --git a/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/restconf/impl/StatisticsRestconfServiceWrapper.java b/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/restconf/impl/StatisticsRestconfServiceWrapper.java index 75af8fe320..163887870a 100644 --- a/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/restconf/impl/StatisticsRestconfServiceWrapper.java +++ b/restconf/sal-rest-connector/src/main/java/org/opendaylight/netconf/sal/restconf/impl/StatisticsRestconfServiceWrapper.java @@ -9,7 +9,6 @@ package org.opendaylight.netconf.sal.restconf.impl; import java.math.BigInteger; import java.util.concurrent.atomic.AtomicLong; -import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.UriInfo; @@ -34,7 +33,8 @@ public class StatisticsRestconfServiceWrapper implements RestconfService { AtomicLong failurePut = new AtomicLong(); AtomicLong failureDelete = new AtomicLong(); - private static final StatisticsRestconfServiceWrapper INSTANCE = new StatisticsRestconfServiceWrapper(RestconfImpl.getInstance()); + private static final StatisticsRestconfServiceWrapper INSTANCE = + new StatisticsRestconfServiceWrapper(RestconfImpl.getInstance()); final RestconfService delegate; @@ -48,60 +48,61 @@ public class StatisticsRestconfServiceWrapper implements RestconfService { @Override public Object getRoot() { - return delegate.getRoot(); + return this.delegate.getRoot(); } @Override public NormalizedNodeContext getModules(final UriInfo uriInfo) { - return delegate.getModules(uriInfo); + return this.delegate.getModules(uriInfo); } @Override public NormalizedNodeContext getModules(final String identifier, final UriInfo uriInfo) { - return delegate.getModules(identifier, uriInfo); + return this.delegate.getModules(identifier, uriInfo); } @Override public NormalizedNodeContext getModule(final String identifier, final UriInfo uriInfo) { - return delegate.getModule(identifier, uriInfo); + return this.delegate.getModule(identifier, uriInfo); } @Override public NormalizedNodeContext getOperations(final UriInfo uriInfo) { - return delegate.getOperations(uriInfo); + return this.delegate.getOperations(uriInfo); } @Override public NormalizedNodeContext getOperations(final String identifier, final UriInfo uriInfo) { - return delegate.getOperations(identifier, uriInfo); + return this.delegate.getOperations(identifier, uriInfo); } @Override - public NormalizedNodeContext invokeRpc(final String identifier, final NormalizedNodeContext payload, final UriInfo uriInfo) { - rpc.incrementAndGet(); - return delegate.invokeRpc(identifier, payload, uriInfo); + public NormalizedNodeContext invokeRpc(final String identifier, final NormalizedNodeContext payload, + final UriInfo uriInfo) { + this.rpc.incrementAndGet(); + return this.delegate.invokeRpc(identifier, payload, uriInfo); } @Override public NormalizedNodeContext invokeRpc(final String identifier, final String noPayload, final UriInfo uriInfo) { - rpc.incrementAndGet(); - return delegate.invokeRpc(identifier, noPayload, uriInfo); + this.rpc.incrementAndGet(); + return this.delegate.invokeRpc(identifier, noPayload, uriInfo); } @Override public NormalizedNodeContext readConfigurationData(final String identifier, final UriInfo uriInfo) { - configGet.incrementAndGet(); + this.configGet.incrementAndGet(); NormalizedNodeContext normalizedNodeContext = null; try { - normalizedNodeContext = delegate.readConfigurationData(identifier, uriInfo); + normalizedNodeContext = this.delegate.readConfigurationData(identifier, uriInfo); if (normalizedNodeContext.getData() != null) { - successGetConfig.incrementAndGet(); + this.successGetConfig.incrementAndGet(); } else { - failureGetConfig.incrementAndGet(); + this.failureGetConfig.incrementAndGet(); } - } catch (Exception e) { - failureGetConfig.incrementAndGet(); + } catch (final Exception e) { + this.failureGetConfig.incrementAndGet(); throw e; } return normalizedNodeContext; @@ -109,18 +110,18 @@ public class StatisticsRestconfServiceWrapper implements RestconfService { @Override public NormalizedNodeContext readOperationalData(final String identifier, final UriInfo uriInfo) { - operationalGet.incrementAndGet(); + this.operationalGet.incrementAndGet(); NormalizedNodeContext normalizedNodeContext = null; try { - normalizedNodeContext = delegate.readOperationalData(identifier, uriInfo); + normalizedNodeContext = this.delegate.readOperationalData(identifier, uriInfo); if (normalizedNodeContext.getData() != null) { - successGetOperational.incrementAndGet(); + this.successGetOperational.incrementAndGet(); } else { - failureGetOperational.incrementAndGet(); + this.failureGetOperational.incrementAndGet(); } - } catch (Exception e) { - failureGetOperational.incrementAndGet(); + } catch (final Exception e) { + this.failureGetOperational.incrementAndGet(); throw e; } return normalizedNodeContext; @@ -128,37 +129,38 @@ public class StatisticsRestconfServiceWrapper implements RestconfService { @Override public Response updateConfigurationData(final String identifier, final NormalizedNodeContext payload) { - configPut.incrementAndGet(); + this.configPut.incrementAndGet(); Response response = null; try { - response = delegate.updateConfigurationData(identifier, payload); + response = this.delegate.updateConfigurationData(identifier, payload); if (response.getStatus() == Status.OK.getStatusCode()) { - successPut.incrementAndGet(); + this.successPut.incrementAndGet(); } else { - failurePut.incrementAndGet(); + this.failurePut.incrementAndGet(); } - } catch (Exception e) { - failurePut.incrementAndGet(); + } catch (final Exception e) { + this.failurePut.incrementAndGet(); throw e; } return response; } @Override - public Response createConfigurationData(final String identifier, final NormalizedNodeContext payload, final UriInfo uriInfo) { - configPost.incrementAndGet(); + public Response createConfigurationData(final String identifier, final NormalizedNodeContext payload, + final UriInfo uriInfo) { + this.configPost.incrementAndGet(); Response response = null; try { - response = delegate.createConfigurationData(identifier, payload, uriInfo); + response = this.delegate.createConfigurationData(identifier, payload, uriInfo); if (response.getStatus() == Status.OK.getStatusCode()) { - successPost.incrementAndGet(); + this.successPost.incrementAndGet(); } else { - failurePost.incrementAndGet(); + this.failurePost.incrementAndGet(); } - } catch (Exception e) { - failurePost.incrementAndGet(); + } catch (final Exception e) { + this.failurePost.incrementAndGet(); throw e; } return response; @@ -166,18 +168,18 @@ public class StatisticsRestconfServiceWrapper implements RestconfService { @Override public Response createConfigurationData(final NormalizedNodeContext payload, final UriInfo uriInfo) { - configPost.incrementAndGet(); + this.configPost.incrementAndGet(); Response response = null; try { - response = delegate.createConfigurationData(payload, uriInfo); + response = this.delegate.createConfigurationData(payload, uriInfo); if (response.getStatus() == Status.OK.getStatusCode()) { - successPost.incrementAndGet(); + this.successPost.incrementAndGet(); } else { - failurePost.incrementAndGet(); + this.failurePost.incrementAndGet(); } - }catch (Exception e) { - failurePost.incrementAndGet(); + }catch (final Exception e) { + this.failurePost.incrementAndGet(); throw e; } return response; @@ -185,105 +187,105 @@ public class StatisticsRestconfServiceWrapper implements RestconfService { @Override public Response deleteConfigurationData(final String identifier) { - configDelete.incrementAndGet(); + this.configDelete.incrementAndGet(); Response response = null; try { - response = delegate.deleteConfigurationData(identifier); + response = this.delegate.deleteConfigurationData(identifier); if (response.getStatus() == Status.OK.getStatusCode()) { - successDelete.incrementAndGet(); + this.successDelete.incrementAndGet(); } else { - failureDelete.incrementAndGet(); + this.failureDelete.incrementAndGet(); } - } catch (Exception e) { - failureDelete.incrementAndGet(); + } catch (final Exception e) { + this.failureDelete.incrementAndGet(); throw e; } return response; } @Override - public Response subscribeToStream(final String identifier, final UriInfo uriInfo) { - return delegate.subscribeToStream(identifier, uriInfo); + public NormalizedNodeContext subscribeToStream(final String identifier, final UriInfo uriInfo) { + return this.delegate.subscribeToStream(identifier, uriInfo); } @Override public NormalizedNodeContext getAvailableStreams(final UriInfo uriInfo) { - return delegate.getAvailableStreams(uriInfo); + return this.delegate.getAvailableStreams(uriInfo); } @Override - public PATCHStatusContext patchConfigurationData(final String identifier, final PATCHContext payload, final UriInfo - uriInfo) { - return delegate.patchConfigurationData(identifier, payload, uriInfo); + public PATCHStatusContext patchConfigurationData(final String identifier, final PATCHContext payload, + final UriInfo uriInfo) { + return this.delegate.patchConfigurationData(identifier, payload, uriInfo); } @Override public PATCHStatusContext patchConfigurationData(final PATCHContext payload, final UriInfo uriInfo) { - return delegate.patchConfigurationData(payload, uriInfo); + return this.delegate.patchConfigurationData(payload, uriInfo); } public BigInteger getConfigDelete() { - return BigInteger.valueOf(configDelete.get()); + return BigInteger.valueOf(this.configDelete.get()); } public BigInteger getConfigGet() { - return BigInteger.valueOf(configGet.get()); + return BigInteger.valueOf(this.configGet.get()); } public BigInteger getConfigPost() { - return BigInteger.valueOf(configPost.get()); + return BigInteger.valueOf(this.configPost.get()); } public BigInteger getConfigPut() { - return BigInteger.valueOf(configPut.get()); + return BigInteger.valueOf(this.configPut.get()); } public BigInteger getOperationalGet() { - return BigInteger.valueOf(operationalGet.get()); + return BigInteger.valueOf(this.operationalGet.get()); } public BigInteger getRpc() { - return BigInteger.valueOf(rpc.get()); + return BigInteger.valueOf(this.rpc.get()); } public BigInteger getSuccessGetConfig() { - return BigInteger.valueOf(successGetConfig.get()); + return BigInteger.valueOf(this.successGetConfig.get()); } public BigInteger getSuccessGetOperational() { - return BigInteger.valueOf(successGetOperational.get()); + return BigInteger.valueOf(this.successGetOperational.get()); } public BigInteger getSuccessPost() { - return BigInteger.valueOf(successPost.get()); + return BigInteger.valueOf(this.successPost.get()); } public BigInteger getSuccessPut() { - return BigInteger.valueOf(successPut.get()); + return BigInteger.valueOf(this.successPut.get()); } public BigInteger getSuccessDelete() { - return BigInteger.valueOf(successDelete.get()); + return BigInteger.valueOf(this.successDelete.get()); } public BigInteger getFailureGetConfig() { - return BigInteger.valueOf(failureGetConfig.get()); + return BigInteger.valueOf(this.failureGetConfig.get()); } public BigInteger getFailureGetOperational() { - return BigInteger.valueOf(failureGetOperational.get()); + return BigInteger.valueOf(this.failureGetOperational.get()); } public BigInteger getFailurePost() { - return BigInteger.valueOf(failurePost.get()); + return BigInteger.valueOf(this.failurePost.get()); } public BigInteger getFailurePut() { - return BigInteger.valueOf(failurePut.get()); + return BigInteger.valueOf(this.failurePut.get()); } public BigInteger getFailureDelete() { - return BigInteger.valueOf(failureDelete.get()); + return BigInteger.valueOf(this.failureDelete.get()); } } \ No newline at end of file diff --git a/restconf/sal-rest-connector/src/main/yang/subscribe-to-notification.yang b/restconf/sal-rest-connector/src/main/yang/subscribe-to-notification.yang new file mode 100644 index 0000000000..5fe7df70a6 --- /dev/null +++ b/restconf/sal-rest-connector/src/main/yang/subscribe-to-notification.yang @@ -0,0 +1,18 @@ +module subscribe-to-notification { + + yang-version 1; + namespace "subscribe:to:notification"; + prefix "subs-to-notifi"; + + description + "Added input parameters to rpc create-data-change-event-subscription and to create-notification-stream"; + + revision "2016-10-28" { + } + + container "notifi"{ + leaf "location"{ + type string; + } + } +} diff --git a/restconf/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplTest.java b/restconf/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplTest.java index 7c4b350c6c..b0996bff5c 100644 --- a/restconf/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplTest.java +++ b/restconf/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestconfImplTest.java @@ -16,7 +16,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; - import com.google.common.base.Optional; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -26,7 +25,6 @@ import java.net.URI; import java.text.ParseException; import java.util.Set; import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.Response; import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriInfo; import org.junit.Before; @@ -111,7 +109,8 @@ public class RestconfImplTest { doReturn(mount).when(iiCtx).getMountPoint(); final DOMRpcService rpcService = mock(DOMRpcService.class); doReturn(Optional.of(rpcService)).when(mount).getService(DOMRpcService.class); - doReturn(Futures.immediateCheckedFuture(mock(DOMRpcResult.class))).when(rpcService).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class)); + doReturn(Futures.immediateCheckedFuture(mock(DOMRpcResult.class))).when(rpcService) + .invokeRpc(any(SchemaPath.class), any(NormalizedNode.class)); this.restconfImpl.invokeRpc("randomId", ctx, uriInfo); this.restconfImpl.invokeRpc("ietf-netconf", ctx, uriInfo); verify(rpcService, times(2)).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class)); @@ -179,8 +178,7 @@ public class RestconfImplTest { this.restconfImpl.setBroker(brokerFacade); // subscribe to stream and verify response - final Response response = this.restconfImpl.subscribeToStream(identifier, uriInfo); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); + final NormalizedNodeContext response = this.restconfImpl.subscribeToStream(identifier, uriInfo); // remove test notification stream Notificator.removeAllListeners(); diff --git a/restconf/sal-rest-connector/src/test/resources/full-versions/yangs/subscribe-to-notification.yang b/restconf/sal-rest-connector/src/test/resources/full-versions/yangs/subscribe-to-notification.yang new file mode 100644 index 0000000000..5fe7df70a6 --- /dev/null +++ b/restconf/sal-rest-connector/src/test/resources/full-versions/yangs/subscribe-to-notification.yang @@ -0,0 +1,18 @@ +module subscribe-to-notification { + + yang-version 1; + namespace "subscribe:to:notification"; + prefix "subs-to-notifi"; + + description + "Added input parameters to rpc create-data-change-event-subscription and to create-notification-stream"; + + revision "2016-10-28" { + } + + container "notifi"{ + leaf "location"{ + type string; + } + } +}