summaryrefslogtreecommitdiffstats
path: root/infra/translate-api
diff options
context:
space:
mode:
authorMarek Gradzki <mgradzki@cisco.com>2018-04-13 13:38:16 +0200
committerMarek Gradzki <mgradzki@cisco.com>2018-08-17 10:17:15 +0000
commitfa641a3e06a905cb3222ebd15a2b4ab90b599efc (patch)
tree2043bcea16a4105a7b93aaf057e17e34adf1d607 /infra/translate-api
parent2be001c5014010698ed930236496bb939df89cde (diff)
HONEYCOMB-431: delegate DataModification.validate to WriterRegistry
This patch introduces ModifiableDataTreeDelegator.validateCandidate that translates DataTreeCandidate to DataObjectUpdates and delegates validation to WriterRegistry (similarly as for bulk update). ModifiableDataTreeManager.commit implementation invokes validation before bulk update. To make it efficient, DataObjectUpdates are computed once and stored in DataTreeContext. Change-Id: If4bd558e64ed84c11c9c50c7a98a2aaa8db841bb Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
Diffstat (limited to 'infra/translate-api')
-rw-r--r--infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/DataValidationFailedException.java79
-rw-r--r--infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/registry/WriterRegistry.java11
2 files changed, 90 insertions, 0 deletions
diff --git a/infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/DataValidationFailedException.java b/infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/DataValidationFailedException.java
new file mode 100644
index 000000000..3c0392efa
--- /dev/null
+++ b/infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/DataValidationFailedException.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2018 Cisco and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.honeycomb.translate.write;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import io.fd.honeycomb.translate.ValidationFailedException;
+import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * Thrown when a writer fails to validate data update.
+ */
+public class DataValidationFailedException extends ValidationFailedException {
+ private static final long serialVersionUID = 1;
+
+ private final InstanceIdentifier<?> failedId;
+
+ /**
+ * Constructs an ValidationFailedException given data id, exception detail message and exception cause.
+ *
+ * @param failedId instance identifier of the data object that could not be validated
+ * @param cause the cause of validation failure
+ * @param message the exception detail message
+ */
+ public DataValidationFailedException(@Nonnull final InstanceIdentifier<?> failedId,
+ @Nonnull final String message,
+ @Nonnull final Throwable cause) {
+ super(message, cause);
+ this.failedId = checkNotNull(failedId, "failedId should not be null");
+ }
+
+ /**
+ * Constructs an ValidationFailedException given data id.
+ *
+ * @param failedId instance identifier of the data object that could not be validated
+ */
+ public DataValidationFailedException(@Nonnull final InstanceIdentifier<?> failedId,
+ @Nonnull final String message) {
+ super(message);
+ this.failedId = checkNotNull(failedId, "failedId should not be null");
+ }
+
+ /**
+ * Constructs an ValidationFailedException given data id and exception cause.
+ *
+ * @param failedId instance identifier of the data object that could not be validated
+ * @param cause the cause of validated failure
+ */
+ public DataValidationFailedException(@Nonnull final InstanceIdentifier<?> failedId,
+ @Nonnull final Throwable cause) {
+ super(cause);
+ this.failedId = checkNotNull(failedId, "failedId should not be null");
+ }
+
+ /**
+ * Returns id of the data object that could not be validated.
+ *
+ * @return data object instance identifier
+ */
+ @Nonnull
+ public InstanceIdentifier<?> getFailedId() {
+ return failedId;
+ }
+}
diff --git a/infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/registry/WriterRegistry.java b/infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/registry/WriterRegistry.java
index e2924f84a..aae62e1fe 100644
--- a/infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/registry/WriterRegistry.java
+++ b/infra/translate-api/src/main/java/io/fd/honeycomb/translate/write/registry/WriterRegistry.java
@@ -21,6 +21,7 @@ import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
import io.fd.honeycomb.translate.TranslationException;
import io.fd.honeycomb.translate.write.DataObjectUpdate;
+import io.fd.honeycomb.translate.write.DataValidationFailedException;
import io.fd.honeycomb.translate.write.WriteContext;
import io.fd.honeycomb.translate.write.Writer;
import java.util.Set;
@@ -34,6 +35,16 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
*/
@Beta
public interface WriterRegistry {
+ /**
+ * Validates provided DataObject updates.
+ *
+ * @param updates Updates to be validated
+ * @param ctx Write context that provides information about current state of DataTree.
+ * @throws DataValidationFailedException if validation failed.
+ */
+ default void validateModifications(@Nonnull DataObjectUpdates updates, @Nonnull WriteContext ctx) throws
+ DataValidationFailedException {
+ }
/**
* Performs bulk update.