/** * Copyright (c) 2014 Cisco Systems, Inc. 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.controller.md.frm.compatibility; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map.Entry; import java.util.Set; import org.opendaylight.controller.forwardingrulesmanager.FlowConfig; import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction; import org.opendaylight.controller.md.sal.common.api.data.DataModification; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.config.rev130819.flows.Flow; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; public class FlowCommitTransaction implements DataCommitTransaction, DataObject> { private final DataModification, DataObject> modification; private final HashSet toAdd = new HashSet(); private final FRMRuntimeDataProvider flowManager; private Iterable toUpdate; private Iterable toRemove; public FlowCommitTransaction( final FRMRuntimeDataProvider flowManager, final DataModification, DataObject> modification) { this.flowManager = flowManager; this.modification = modification; this.processModification(); } @Override public RpcResult finish() throws IllegalStateException { return this.flowManager.finish(this); } @Override public RpcResult rollback() throws IllegalStateException { return this.flowManager.rollback(this); } public void processModification() { final Set, DataObject>> updated = this.modification.getUpdatedConfigurationData().entrySet(); final List forUpdate = new ArrayList(updated.size()); if (updated != null && !(updated.isEmpty())) { for (Entry, DataObject> entry : updated) { if (FlowConfigMapping.isFlowPath(entry.getKey())) { forUpdate.add(FlowConfigMapping.toFlowConfig((Flow) entry.getValue())); } } } this.toUpdate = Collections.unmodifiableCollection(forUpdate); final Set> removedConfigurationData = this.modification.getRemovedConfigurationData(); final List forRemove = new ArrayList(removedConfigurationData.size()); if (removedConfigurationData != null && !(removedConfigurationData.isEmpty())) { for (InstanceIdentifier data : removedConfigurationData) { if (FlowConfigMapping.isFlowPath(data)) { forRemove.add(FlowConfigMapping.toFlowConfig(data)); } } } this.toRemove = Collections.unmodifiableCollection(forRemove); } @Override public DataModification, DataObject> getModification() { return this.modification; } public FRMRuntimeDataProvider getFlowManager() { return this.flowManager; } public HashSet getToAdd() { return this.toAdd; } public Iterable getToUpdate() { return this.toUpdate; } public Iterable getToRemove() { return this.toRemove; } }