+++ /dev/null
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- * Copyright (c) 2021 PANTHEON.tech, s.r.o.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.restconf.nb.rfc8040;
-
-import com.google.common.base.MoreObjects;
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.restconf.api.query.ChangedLeafNodesOnlyParam;
-import org.opendaylight.restconf.api.query.ChildNodesOnlyParam;
-import org.opendaylight.restconf.api.query.FilterParam;
-import org.opendaylight.restconf.api.query.LeafNodesOnlyParam;
-import org.opendaylight.restconf.api.query.SkipNotificationDataParam;
-import org.opendaylight.restconf.api.query.StartTimeParam;
-import org.opendaylight.restconf.api.query.StopTimeParam;
-import org.opendaylight.yangtools.concepts.Immutable;
-
-/**
- * Parser and holder of query parameters from uriInfo for notifications.
- */
-public final class NotificationQueryParams implements Immutable {
- private final SkipNotificationDataParam skipNotificationData;
- private final LeafNodesOnlyParam leafNodesOnly;
- private final StartTimeParam startTime;
- private final StopTimeParam stopTime;
- private final FilterParam filter;
- private final ChangedLeafNodesOnlyParam changedLeafNodesOnly;
- private final ChildNodesOnlyParam childNodesOnly;
-
- private NotificationQueryParams(final StartTimeParam startTime, final StopTimeParam stopTime,
- final FilterParam filter, final LeafNodesOnlyParam leafNodesOnly,
- final SkipNotificationDataParam skipNotificationData, final ChangedLeafNodesOnlyParam changedLeafNodesOnly,
- final ChildNodesOnlyParam childNodesOnly) {
- this.startTime = startTime;
- this.stopTime = stopTime;
- this.filter = filter;
- this.leafNodesOnly = leafNodesOnly;
- this.skipNotificationData = skipNotificationData;
- this.changedLeafNodesOnly = changedLeafNodesOnly;
- this.childNodesOnly = childNodesOnly;
- }
-
- public static @NonNull NotificationQueryParams of(final StartTimeParam startTime, final StopTimeParam stopTime,
- final FilterParam filter, final LeafNodesOnlyParam leafNodesOnly,
- final SkipNotificationDataParam skipNotificationData, final ChangedLeafNodesOnlyParam changedLeafNodesOnly,
- final ChildNodesOnlyParam childNodesOnly) {
- if (stopTime != null && startTime == null) {
- throw new IllegalArgumentException(StopTimeParam.uriName + " parameter has to be used with "
- + StartTimeParam.uriName + " parameter");
- }
- if (changedLeafNodesOnly != null) {
- if (leafNodesOnly != null) {
- throw new IllegalArgumentException(ChangedLeafNodesOnlyParam.uriName + " parameter cannot be used with "
- + LeafNodesOnlyParam.uriName + " parameter");
- }
- if (childNodesOnly != null) {
- throw new IllegalArgumentException(ChangedLeafNodesOnlyParam.uriName + " parameter cannot be used with "
- + ChildNodesOnlyParam.uriName + " parameter");
- }
- }
- return new NotificationQueryParams(startTime, stopTime, filter, leafNodesOnly, skipNotificationData,
- changedLeafNodesOnly, childNodesOnly);
- }
-
- /**
- * Get start-time query parameter.
- *
- * @return start-time
- */
- public @Nullable StartTimeParam startTime() {
- return startTime;
- }
-
- /**
- * Get stop-time query parameter.
- *
- * @return stop-time
- */
- public @Nullable StopTimeParam stopTime() {
- return stopTime;
- }
-
- /**
- * Get filter query parameter.
- *
- * @return filter
- */
- public @Nullable FilterParam filter() {
- return filter;
- }
-
- /**
- * Get odl-leaf-nodes-only query parameter.
- *
- * @return odl-leaf-nodes-only
- */
- public @Nullable LeafNodesOnlyParam leafNodesOnly() {
- return leafNodesOnly;
- }
-
- /**
- * Get odl-skip-notification-data query parameter.
- *
- * @return odl-skip-notification-data
- */
- public @Nullable SkipNotificationDataParam skipNotificationData() {
- return skipNotificationData;
- }
-
- /**
- * Get changed-leaf-nodes-only query parameter.
- *
- * @return changed-leaf-nodes-only
- */
- public @Nullable ChangedLeafNodesOnlyParam changedLeafNodesOnly() {
- return changedLeafNodesOnly;
- }
-
- /**
- * Get odl-child-nodes-only query parameter.
- *
- * @return odl-child-nodes-only
- */
- public @Nullable ChildNodesOnlyParam childNodesOnly() {
- return childNodesOnly;
- }
-
- @Override
- public String toString() {
- final var helper = MoreObjects.toStringHelper(this);
- if (startTime != null) {
- helper.add("startTime", startTime.paramValue());
- }
- if (stopTime != null) {
- helper.add("stopTime", stopTime.paramValue());
- }
- if (filter != null) {
- helper.add("filter", filter.paramValue());
- }
- if (leafNodesOnly != null) {
- helper.add("leafNodesOnly", leafNodesOnly.value());
- }
- if (skipNotificationData != null) {
- helper.add("skipNotificationData", skipNotificationData.value());
- }
- if (changedLeafNodesOnly != null) {
- helper.add("changedLeafNodesOnly", changedLeafNodesOnly.value());
- }
- if (childNodesOnly != null) {
- helper.add("childNodesOnly", childNodesOnly.value());
- }
- return helper.toString();
- }
-}
--- /dev/null
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+ * Copyright (c) 2021 PANTHEON.tech, s.r.o.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.restconf.nb.rfc8040;
+
+import com.google.common.base.MoreObjects;
+import org.opendaylight.restconf.api.query.ChangedLeafNodesOnlyParam;
+import org.opendaylight.restconf.api.query.ChildNodesOnlyParam;
+import org.opendaylight.restconf.api.query.FilterParam;
+import org.opendaylight.restconf.api.query.LeafNodesOnlyParam;
+import org.opendaylight.restconf.api.query.SkipNotificationDataParam;
+import org.opendaylight.restconf.api.query.StartTimeParam;
+import org.opendaylight.restconf.api.query.StopTimeParam;
+
+/**
+ * Query parameters valid in the scope of a GET request on an event stream resource, as outline in
+ * <a href="https://www.rfc-editor.org/rfc/rfc8040#section-6.3">RFC8040 section 6.3</a>.
+ */
+public record ReceiveEventsParams(
+ StartTimeParam startTime,
+ StopTimeParam stopTime,
+ FilterParam filter,
+ LeafNodesOnlyParam leafNodesOnly,
+ SkipNotificationDataParam skipNotificationData,
+ ChangedLeafNodesOnlyParam changedLeafNodesOnly,
+ ChildNodesOnlyParam childNodesOnly) {
+ public ReceiveEventsParams {
+ if (stopTime != null && startTime == null) {
+ throw new IllegalArgumentException(StopTimeParam.uriName + " parameter has to be used with "
+ + StartTimeParam.uriName + " parameter");
+ }
+ if (changedLeafNodesOnly != null) {
+ if (leafNodesOnly != null) {
+ throw new IllegalArgumentException(ChangedLeafNodesOnlyParam.uriName + " parameter cannot be used with "
+ + LeafNodesOnlyParam.uriName + " parameter");
+ }
+ if (childNodesOnly != null) {
+ throw new IllegalArgumentException(ChangedLeafNodesOnlyParam.uriName + " parameter cannot be used with "
+ + ChildNodesOnlyParam.uriName + " parameter");
+ }
+ }
+ }
+
+ @Override
+ public String toString() {
+ final var helper = MoreObjects.toStringHelper(this);
+ if (startTime != null) {
+ helper.add("startTime", startTime.paramValue());
+ }
+ if (stopTime != null) {
+ helper.add("stopTime", stopTime.paramValue());
+ }
+ if (filter != null) {
+ helper.add("filter", filter.paramValue());
+ }
+ if (leafNodesOnly != null) {
+ helper.add("leafNodesOnly", leafNodesOnly.value());
+ }
+ if (skipNotificationData != null) {
+ helper.add("skipNotificationData", skipNotificationData.value());
+ }
+ if (changedLeafNodesOnly != null) {
+ helper.add("changedLeafNodesOnly", changedLeafNodesOnly.value());
+ }
+ if (childNodesOnly != null) {
+ helper.add("childNodesOnly", childNodesOnly.value());
+ }
+ return helper.toString();
+ }
+}
import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
import org.opendaylight.restconf.common.errors.RestconfError;
import org.opendaylight.restconf.nb.rfc8040.Insert;
-import org.opendaylight.restconf.nb.rfc8040.NotificationQueryParams;
import org.opendaylight.restconf.nb.rfc8040.ReadDataParams;
+import org.opendaylight.restconf.nb.rfc8040.ReceiveEventsParams;
import org.opendaylight.restconf.nb.rfc8040.legacy.InstanceIdentifierContext;
import org.opendaylight.restconf.nb.rfc8040.legacy.QueryParameters;
import org.opendaylight.restconf.nb.rfc8040.utils.parser.NetconfFieldsTranslator;
// Utility class
}
- public static @NonNull NotificationQueryParams newNotificationQueryParams(final UriInfo uriInfo) {
+ public static @NonNull ReceiveEventsParams newReceiveEventsParams(final UriInfo uriInfo) {
StartTimeParam startTime = null;
StopTimeParam stopTime = null;
FilterParam filter = null;
}
try {
- return NotificationQueryParams.of(startTime, stopTime, filter, leafNodesOnly, skipNotificationData,
+ return new ReceiveEventsParams(startTime, stopTime, filter, leafNodesOnly, skipNotificationData,
changedLeafNodesOnly, childNodesOnly);
} catch (IllegalArgumentException e) {
throw new RestconfDocumentedException("Invalid query parameters: " + e.getMessage(), e);
@Override
public Response subscribeToStream(final String identifier, final UriInfo uriInfo) {
- final var params = QueryParams.newNotificationQueryParams(uriInfo);
+ final var params = QueryParams.newReceiveEventsParams(uriInfo);
final URI location;
if (identifier.contains(RestconfStreamsConstants.DATA_SUBSCRIPTION)) {
import org.checkerframework.checker.lock.qual.Holding;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
-import org.opendaylight.restconf.nb.rfc8040.NotificationQueryParams;
+import org.opendaylight.restconf.nb.rfc8040.ReceiveEventsParams;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.NotificationOutputTypeGrouping.NotificationOutputType;
import org.opendaylight.yangtools.concepts.Registration;
*
* @param params NotificationQueryParams to use.
*/
- public final void setQueryParams(final NotificationQueryParams params) {
+ public final void setQueryParams(final ReceiveEventsParams params) {
final var startTime = params.startTime();
start = startTime == null ? Instant.now() : parseDateAndTime(startTime.value());
import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
import org.opendaylight.mdsal.dom.api.DOMMountPointService;
import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
-import org.opendaylight.restconf.nb.rfc8040.NotificationQueryParams;
+import org.opendaylight.restconf.nb.rfc8040.ReceiveEventsParams;
import org.opendaylight.restconf.nb.rfc8040.URLConstants;
import org.opendaylight.restconf.nb.rfc8040.rests.services.impl.RestconfStreamsSubscriptionServiceImpl.HandlersHolder;
import org.opendaylight.restconf.nb.rfc8040.utils.parser.IdentifierCodec;
* @return Stream location for listening.
*/
public final @NonNull URI subscribeToYangStream(final String identifier, final UriInfo uriInfo,
- final NotificationQueryParams notificationQueryParams, final HandlersHolder handlersHolder) {
+ final ReceiveEventsParams notificationQueryParams, final HandlersHolder handlersHolder) {
final String streamName = createStreamNameFromUri(identifier);
if (isNullOrEmpty(streamName)) {
throw new RestconfDocumentedException("Stream name is empty.", ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE);
* @return Location for listening.
*/
public final URI subscribeToDataStream(final String identifier, final UriInfo uriInfo,
- final NotificationQueryParams notificationQueryParams, final HandlersHolder handlersHolder) {
+ final ReceiveEventsParams notificationQueryParams, final HandlersHolder handlersHolder) {
final var streamName = createStreamNameFromUri(identifier);
final var listener = dataChangeListenerFor(streamName);
if (listener == null) {
*/
@Test
public void checkParametersTypesNegativeTest() {
- assertUnknownParam(QueryParams::newNotificationQueryParams);
+ assertUnknownParam(QueryParams::newReceiveEventsParams);
assertUnknownParam(QueryParams::newReadDataParams);
assertUnknownParam(uriInfo -> QueryParams.parseInsert(mock(EffectiveModelContext.class), uriInfo));
- assertInvalidParam(QueryParams::newNotificationQueryParams, ContentParam.ALL);
+ assertInvalidParam(QueryParams::newReceiveEventsParams, ContentParam.ALL);
assertInvalidParam(QueryParams::newReadDataParams, InsertParam.LAST);
assertInvalidParam(
uriInfo -> QueryParams.parseInsert(mock(EffectiveModelContext.class), uriInfo),
import org.opendaylight.restconf.api.query.LeafNodesOnlyParam;
import org.opendaylight.restconf.api.query.SkipNotificationDataParam;
import org.opendaylight.restconf.api.query.StartTimeParam;
-import org.opendaylight.restconf.nb.rfc8040.NotificationQueryParams;
+import org.opendaylight.restconf.nb.rfc8040.ReceiveEventsParams;
import org.opendaylight.restconf.nb.rfc8040.databind.DatabindContext;
import org.opendaylight.restconf.nb.rfc8040.databind.DatabindProvider;
import org.opendaylight.yang.gen.v1.augment.instance.identifier.patch.module.rev220218.PatchCont1Builder;
final boolean skipNotificationData, final boolean changedLeafNodesOnly, final boolean childNodesOnly,
final ListenersBroker listenersBroker) {
super(streamName, outputType, listenersBroker, LogicalDatastoreType.CONFIGURATION, path);
- setQueryParams(NotificationQueryParams.of(StartTimeParam.forUriValue("1970-01-01T00:00:00Z"), null, null,
+ setQueryParams(new ReceiveEventsParams(StartTimeParam.forUriValue("1970-01-01T00:00:00Z"), null, null,
leafNodesOnly ? LeafNodesOnlyParam.of(true) : null,
skipNotificationData ? SkipNotificationDataParam.of(true) : null,
changedLeafNodesOnly ? ChangedLeafNodesOnlyParam.of(true) : null,