/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+ * Copyright (c) 2014, 2016 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,
*/
package org.opendaylight.ovsdb.southbound.ovsdb.transact;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Collection;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
import org.opendaylight.ovsdb.lib.operations.TransactionBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+/**
+ * This transactional command aggregates all the Southbound commands.
+ */
public class TransactCommandAggregator implements TransactCommand {
+ private static final Logger LOG = LoggerFactory.getLogger(TransactCommandAggregator.class);
- private List<TransactCommand> commands = new ArrayList<TransactCommand>();
- private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes;
- private BridgeOperationalState operationalState;
+ private static final Class<? extends TransactCommand>[] COMMAND_CLASSES =
+ new Class[] {
+ BridgeUpdateCommand.class,
+ OpenVSwitchBridgeAddCommand.class,
+ ControllerUpdateCommand.class,
+ ControllerRemovedCommand.class,
+ ProtocolUpdateCommand.class,
+ ProtocolRemovedCommand.class,
+ BridgeRemovedCommand.class,
+ TerminationPointCreateCommand.class,
+ TerminationPointDeleteCommand.class,
+ OvsdbNodeUpdateCommand.class,
+ AutoAttachUpdateCommand.class,
+ AutoAttachRemovedCommand.class,
+ QosUpdateCommand.class,
+ QosRemovedCommand.class,
+ QueueUpdateCommand.class,
+ QueueRemovedCommand.class,
+ TerminationPointUpdateCommand.class,
+ };
- public TransactCommandAggregator(BridgeOperationalState state,AsyncDataChangeEvent<InstanceIdentifier<?>,
- DataObject> changes) {
- this.operationalState = state;
- this.changes = changes;
- commands.add(new BridgeUpdateCommand(state,changes));
- commands.add(new OpenVSwitchBridgeAddCommand());
- commands.add(new ControllerUpdateCommand(state,changes));
- commands.add(new ControllerRemovedCommand(state,changes));
- commands.add(new ProtocolUpdateCommand(state,changes));
- commands.add(new ProtocolRemovedCommand(state,changes));
- commands.add(new BridgeRemovedCommand(state,changes));
- commands.add(new TerminationPointCreateCommand(state,changes));
- commands.add(new TerminationPointDeleteCommand(state, changes));
- commands.add(new OvsdbNodeUpdateCommand(changes));
- commands.add(new TerminationPointUpdateCommand(state, changes));
+ @Override
+ public void execute(TransactionBuilder transaction, BridgeOperationalState state,
+ AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> events) {
+ for (Class<? extends TransactCommand> commandClass : COMMAND_CLASSES) {
+ try {
+ commandClass.newInstance().execute(transaction, state, events);
+ } catch (InstantiationException | IllegalAccessException e) {
+ LOG.error("Error instantiating {}", commandClass, e);
+ }
+ }
}
@Override
- public void execute(TransactionBuilder transaction) {
- for (TransactCommand command:commands) {
- command.execute(transaction);
+ public void execute(TransactionBuilder transaction, BridgeOperationalState state,
+ Collection<DataTreeModification<Node>> modifications) {
+ for (Class<? extends TransactCommand> commandClass : COMMAND_CLASSES) {
+ try {
+ commandClass.newInstance().execute(transaction, state, modifications);
+ } catch (InstantiationException | IllegalAccessException e) {
+ LOG.error("Error instantiating {}", commandClass, e);
+ }
}
}
}