2 * Copyright (c) 2014 Cisco Systems, Inc. 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.controller.md.frm.compatibility;
10 import java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.HashSet;
13 import java.util.List;
14 import java.util.Map.Entry;
17 import org.opendaylight.controller.forwardingrulesmanager.FlowConfig;
18 import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction;
19 import org.opendaylight.controller.md.sal.common.api.data.DataModification;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.flows.Flow;
21 import org.opendaylight.yangtools.yang.binding.DataObject;
22 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
23 import org.opendaylight.yangtools.yang.common.RpcResult;
25 public class FlowCommitTransaction implements DataCommitTransaction<InstanceIdentifier<? extends DataObject>, DataObject> {
27 private final DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification;
28 private final HashSet<FlowConfig> toAdd = new HashSet<FlowConfig>();
29 private final FRMRuntimeDataProvider flowManager;
30 private Iterable<FlowConfig> toUpdate;
31 private Iterable<FlowConfig> toRemove;
33 public FlowCommitTransaction(
34 final FRMRuntimeDataProvider flowManager,
35 final DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification) {
36 this.flowManager = flowManager;
37 this.modification = modification;
38 this.processModification();
42 public RpcResult<Void> finish() throws IllegalStateException {
43 return this.flowManager.finish(this);
47 public RpcResult<Void> rollback() throws IllegalStateException {
48 return this.flowManager.rollback(this);
51 public void processModification() {
52 final Set<Entry<InstanceIdentifier<? extends DataObject>, DataObject>> updated =
53 this.modification.getUpdatedConfigurationData().entrySet();
54 final List<FlowConfig> forUpdate = new ArrayList<FlowConfig>(updated.size());
56 if (updated != null && !(updated.isEmpty())) {
57 for (Entry<InstanceIdentifier<? extends DataObject>, DataObject> entry : updated) {
58 if (FlowConfigMapping.isFlowPath(entry.getKey())) {
59 forUpdate.add(FlowConfigMapping.toFlowConfig((Flow) entry.getValue()));
63 this.toUpdate = Collections.unmodifiableCollection(forUpdate);
65 final Set<InstanceIdentifier<? extends DataObject>> removedConfigurationData =
66 this.modification.getRemovedConfigurationData();
67 final List<FlowConfig> forRemove = new ArrayList<FlowConfig>(removedConfigurationData.size());
69 if (removedConfigurationData != null && !(removedConfigurationData.isEmpty())) {
70 for (InstanceIdentifier<? extends DataObject> data : removedConfigurationData) {
71 if (FlowConfigMapping.isFlowPath(data)) {
72 forRemove.add(FlowConfigMapping.toFlowConfig(data));
76 this.toRemove = Collections.unmodifiableCollection(forRemove);
80 public DataModification<InstanceIdentifier<? extends DataObject>, DataObject> getModification() {
81 return this.modification;
84 public FRMRuntimeDataProvider getFlowManager() {
85 return this.flowManager;
88 public HashSet<FlowConfig> getToAdd() {
92 public Iterable<FlowConfig> getToUpdate() {
96 public Iterable<FlowConfig> getToRemove() {