package graphtea.extensions.algorithms;

import graphtea.extensions.reports.spectralreports.maxflowmincut.PushRelabel;
import graphtea.graph.graph.GraphModel;
import graphtea.graph.graph.Vertex;
import graphtea.platform.core.BlackBoard;
import graphtea.plugins.algorithmanimator.core.GraphAlgorithm;
import graphtea.plugins.algorithmanimator.extension.AlgorithmExtension;

/**
 * Created with IntelliJ IDEA.
 * User: rostam
 * Date: 5/1/13
 * Time: 1:01 PM
 * To change this template use File | Settings | File Templates.
 */
public class MaximunFlowAlgorithm extends GraphAlgorithm implements AlgorithmExtension {
    public MaximunFlowAlgorithm(BlackBoard blackBoard) {
        super(blackBoard);
    }

    @Override
    public void doAlgorithm() {
        step("Start of the algorithm.") ;

        GraphModel g = graphData.getGraph();
        Vertex v1 = requestVertex(g, "select the first vertex");
        v1.setColor(7);
        v1.setMark(true);
        Vertex v2 = requestVertex(g, "select the second vertex");
        v2.setColor(3);
        v2.setMark(true);
        PushRelabel prl = new PushRelabel(g,v1,v2,true);
        prl.perform();

        step("end of the algorithm");

    }

    @Override
    public String getName() {
        return "Maximum Flow";
    }

    @Override
    public String getDescription() {
        return "Generates the maximum flow between two selected nodes.";
    }
}
