/*
* Copyright (c) 2015 - 2016 Hewlett-Packard Development Company, L.P. 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.nic.of.renderer.strategy;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.nic.of.renderer.impl.IntentFlowManager;
import org.opendaylight.nic.of.renderer.utils.TopologyUtils;
import org.opendaylight.nic.utils.FlowAction;
import org.opendaylight.nic.utils.IntentUtils;
import org.opendaylight.nic.utils.exceptions.IntentInvalidException;
import org.opendaylight.yang.gen.v1.urn.opendaylight.intent.rev150122.intent.actions.Action;
import org.opendaylight.yang.gen.v1.urn.opendaylight.intent.rev150122.intents.Intent;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
import java.util.List;
import java.util.Map;
/**
* Created by yrineu on 01/03/16.
*/
public class DefaultExecutor implements ActionStrategy {
private final IntentFlowManager intentFlowManager;
private final DataBroker dataBroker;
private static final String INTENT_NULL_MESSAGE = "Intent could not be null";
public DefaultExecutor(final IntentFlowManager intentFlowManager, final DataBroker dataBroker) {
this.intentFlowManager = intentFlowManager;
this.dataBroker = dataBroker;
}
@Override
public void execute(final Intent intent, final FlowAction flowAction) throws IntentInvalidException {
if(intent == null) {
throw new IntentInvalidException(INTENT_NULL_MESSAGE);
}
final List<String> endPointGroups = IntentUtils.extractEndPointGroup(intent);
Action actionContainer = null;
actionContainer = IntentUtils.getAction(intent);
intentFlowManager.setEndPointGroups(endPointGroups);
intentFlowManager.setAction(actionContainer);
intentFlowManager.setIntent(intent);
//Get all node Id's
final Map<Node, List<NodeConnector>> nodeMap = TopologyUtils.getNodes(dataBroker);
for (Map.Entry<Node, List<NodeConnector>> entry : nodeMap.entrySet()) {
//Push flow to every node for now
intentFlowManager.pushFlow(entry.getKey().getId(), flowAction);
}
}
}