diff options
author | Marek Gradzki <mgradzki@cisco.com> | 2018-04-13 13:38:16 +0200 |
---|---|---|
committer | Marek Gradzki <mgradzki@cisco.com> | 2018-08-17 10:17:15 +0000 |
commit | fa641a3e06a905cb3222ebd15a2b4ab90b599efc (patch) | |
tree | 2043bcea16a4105a7b93aaf057e17e34adf1d607 /infra/data-impl/src/main/java/io/fd/honeycomb/data/impl/ModifiableDataTreeManager.java | |
parent | 2be001c5014010698ed930236496bb939df89cde (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/data-impl/src/main/java/io/fd/honeycomb/data/impl/ModifiableDataTreeManager.java')
-rw-r--r-- | infra/data-impl/src/main/java/io/fd/honeycomb/data/impl/ModifiableDataTreeManager.java | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/infra/data-impl/src/main/java/io/fd/honeycomb/data/impl/ModifiableDataTreeManager.java b/infra/data-impl/src/main/java/io/fd/honeycomb/data/impl/ModifiableDataTreeManager.java index aa5b3e5cf..acaa6e5ee 100644 --- a/infra/data-impl/src/main/java/io/fd/honeycomb/data/impl/ModifiableDataTreeManager.java +++ b/infra/data-impl/src/main/java/io/fd/honeycomb/data/impl/ModifiableDataTreeManager.java @@ -19,6 +19,7 @@ package io.fd.honeycomb.data.impl; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; import static com.google.common.util.concurrent.Futures.immediateCheckedFuture; +import static io.fd.honeycomb.data.impl.ModifiableDataTreeManager.DataTreeContextFactory.DataTreeContext; import com.google.common.base.Optional; import com.google.common.util.concurrent.CheckedFuture; @@ -50,9 +51,16 @@ public class ModifiableDataTreeManager implements ModifiableDataManager { private static final Logger LOG = LoggerFactory.getLogger(ModifiableDataTreeManager.class); private final DataTree dataTree; + private final DataTreeContextFactory contextFactory; public ModifiableDataTreeManager(@Nonnull final DataTree dataTree) { + this(dataTree, candidate -> (() -> candidate)); + } + + public ModifiableDataTreeManager(@Nonnull final DataTree dataTree, + @Nonnull final DataTreeContextFactory contextFactory) { this.dataTree = checkNotNull(dataTree, "dataTree should not be null"); + this.contextFactory = contextFactory; } @Override @@ -102,13 +110,13 @@ public class ModifiableDataTreeManager implements ModifiableDataManager { @Override public final void commit() throws TranslationException { - final DataTreeCandidate candidate = prepareCandidate(modification); - validateCandidate(candidate); - processCandidate(candidate); - dataTree.commit(candidate); + final DataTreeContext candidateContext = prepareCandidateContext(modification); + validateCandidate(candidateContext); + processCandidate(candidateContext); + dataTree.commit(candidateContext.getCandidate()); } - private DataTreeCandidate prepareCandidate(final DataTreeModification dataTreeModification) + private DataTreeContext prepareCandidateContext(final DataTreeModification dataTreeModification) throws ValidationFailedException { // Seal the modification (required to perform validate) dataTreeModification.ready(); @@ -120,14 +128,14 @@ public class ModifiableDataTreeManager implements ModifiableDataManager { throw new ValidationFailedException(e); } - return dataTree.prepare(dataTreeModification); + return contextFactory.create(dataTree.prepare(dataTreeModification)); } - protected void validateCandidate(final DataTreeCandidate candidate) throws ValidationFailedException { + protected void validateCandidate(final DataTreeContext dataTreeContext) throws ValidationFailedException { // NOOP } - protected void processCandidate(final DataTreeCandidate candidate) throws TranslationException { + protected void processCandidate(final DataTreeContext dataTreeContext) throws TranslationException { // NOOP } @@ -141,7 +149,7 @@ public class ModifiableDataTreeManager implements ModifiableDataManager { checkState(cursor != null, "DataTreeModificationCursor for root path should not be null"); modification.applyToCursor(cursor); // Then validate it. - validateCandidate(prepareCandidate(modificationCopy)); + validateCandidate(prepareCandidateContext(modificationCopy)); } @Override @@ -155,4 +163,16 @@ public class ModifiableDataTreeManager implements ModifiableDataManager { ) + '}'; } } + + interface DataTreeContextFactory { + DataTreeContext create(final DataTreeCandidate candidate); + + /** + * Stores DataTreeCandidate. Implementation may also store additional data to optimize validation + * and translation process. + */ + interface DataTreeContext { + DataTreeCandidate getCandidate(); + } + } } |