/* * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved. * * 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.mdsal.binding.javav2.dom.adapter.impl.data.tree; import com.google.common.annotations.Beta; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.SettableFuture; import java.util.Collection; import java.util.stream.Collectors; import javax.annotation.Nonnull; import org.opendaylight.mdsal.binding.javav2.api.DataTreeCommitCohort; import org.opendaylight.mdsal.binding.javav2.api.DataTreeModification; import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingToNormalizedNodeCodec; import org.opendaylight.mdsal.binding.javav2.dom.codec.modification.LazyDataTreeModification; import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode; import org.opendaylight.mdsal.common.api.PostCanCommitStep; import org.opendaylight.mdsal.dom.api.DOMDataTreeCandidate; import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohort; import org.opendaylight.yangtools.yang.model.api.SchemaContext; /** * Data tree commit cohort adapter. * * @param * - {@link TreeNode} type */ @Beta public class BindingDOMDataTreeCommitCohortAdapter implements DOMDataTreeCommitCohort { private final BindingToNormalizedNodeCodec codec; private final DataTreeCommitCohort cohort; public BindingDOMDataTreeCommitCohortAdapter(final BindingToNormalizedNodeCodec codec, final DataTreeCommitCohort cohort) { this.codec = Preconditions.checkNotNull(codec); this.cohort = Preconditions.checkNotNull(cohort); } @Nonnull @Override public FluentFuture canCommit(Object txId, SchemaContext ctx, Collection candidates) { final Collection> modifications = candidates.stream().map( candidate -> LazyDataTreeModification.create(codec, candidate)).collect(Collectors.toList()); final SettableFuture resultFuture = SettableFuture.create(); cohort.canCommit(txId, modifications, (ex, pccs) -> { if (ex != null) { resultFuture.setException(ex); } else { resultFuture.set(pccs); } }); return resultFuture; } }