2 * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.mdsal.binding.javav2.dom.adapter.impl.data.tree;
10 import com.google.common.annotations.Beta;
11 import com.google.common.base.Preconditions;
12 import com.google.common.util.concurrent.CheckedFuture;
13 import com.google.common.util.concurrent.Futures;
14 import com.google.common.util.concurrent.ListenableFuture;
15 import com.google.common.util.concurrent.MoreExecutors;
16 import java.util.ArrayList;
17 import java.util.List;
18 import java.util.function.BiConsumer;
19 import javax.annotation.Nonnull;
20 import org.opendaylight.mdsal.binding.javav2.api.DataTreeCommitCohort;
21 import org.opendaylight.mdsal.binding.javav2.api.DataTreeModification;
22 import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingToNormalizedNodeCodec;
23 import org.opendaylight.mdsal.binding.javav2.dom.codec.modification.LazyDataTreeModification;
24 import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode;
25 import org.opendaylight.mdsal.common.api.DataValidationFailedException;
26 import org.opendaylight.mdsal.common.api.MappingCheckedFuture;
27 import org.opendaylight.mdsal.common.api.PostCanCommitStep;
28 import org.opendaylight.mdsal.dom.api.DOMDataTreeCandidate;
29 import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohort;
30 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
33 * Data tree commit cohort adapter.
36 * - {@link TreeNode} type
39 public class BindingDOMDataTreeCommitCohortAdapter<T extends TreeNode> implements DOMDataTreeCommitCohort {
41 private final BindingToNormalizedNodeCodec codec;
42 private final DataTreeCommitCohort<T> cohort;
44 public BindingDOMDataTreeCommitCohortAdapter(final BindingToNormalizedNodeCodec codec,
45 final DataTreeCommitCohort<T> cohort) {
46 this.codec = Preconditions.checkNotNull(codec);
47 this.cohort = Preconditions.checkNotNull(cohort);
52 public CheckedFuture<PostCanCommitStep, DataValidationFailedException> canCommit(@Nonnull final Object txId,
53 @Nonnull final DOMDataTreeCandidate candidate, @Nonnull final SchemaContext ctx) {
54 final DataTreeModification<T> modification = LazyDataTreeModification.create(codec, candidate);
55 final List<CheckedFuture<PostCanCommitStep, DataValidationFailedException>> futures = new ArrayList<>();
56 final BiConsumer<DataValidationFailedException, PostCanCommitStep> biConsumer = (ex, cc) -> {
57 final ListenableFuture<PostCanCommitStep> immediateFuture = Futures.immediateFuture(cc);
58 futures.add(MappingCheckedFuture.create(immediateFuture,
59 new DataValidationFailedExceptionMapper("canCommit", candidate.getRootPath())));
61 final ListenableFuture<PostCanCommitStep> resultFuture =
62 Futures.transform(Futures.allAsList(futures), input -> input.get(input.size() - 1),
63 MoreExecutors.directExecutor());
64 cohort.canCommit(txId, modification, biConsumer);
65 return MappingCheckedFuture.create(resultFuture,
66 new DataValidationFailedExceptionMapper("canCommit", candidate.getRootPath()));