// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea
// Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com
// Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology
// Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/

package graphtea.samples.extensions;

import graphtea.graph.graph.GraphModel;
import graphtea.graph.graph.Vertex;
import graphtea.platform.parameter.Parameter;
import graphtea.platform.parameter.Parametrizable;
import graphtea.plugins.reports.extension.GraphReportExtension;

public class OrderKReport implements GraphReportExtension<Integer>, Parametrizable {
    //you can set a (display) name and a description for the parameter, this is optional.
    @Parameter(name = "k", description = "the degree of desired vertices")
    public int k;


    public String checkParameters() {
        if (k <= 0) return "K must be positive";
        else
            return null;
    }

    public String getName() {
        return "order k";
    }

    public String getDescription() {
        return "Number of vertices with degree k";
    }

    public Integer calculate(GraphModel graph) {
        int ret = 0;
        for (Vertex v : graph) {
            if (graph.getInDegree(v) + graph.getOutDegree(v) == k) {
                ret++;
            }
        }
        return ret;
    }

	@Override
	public String getCategory() {
		return "General";
	}

}