package eu.dnetlib.espas.jdbc.configuration;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import java.util.ArrayList;
import java.util.List;

public class OutputParameter extends Parameter {

    private int order = -1;
    private String value = null;
    private String type = null;
    private String statement = null;

    private List<OutputParameter> parameters = new ArrayList<OutputParameter>();

    public OutputParameter() {

    }

    public OutputParameter(String name, int order) {
        this(name, order, null, null);
    }

    public OutputParameter(String name, String value) {
        this(name, -1, value, null);
    }

    public OutputParameter(String name,
                           int order,
                           String value,
                           String type) {
        super();
        this.name = name;
        this.order = order;
        this.value = value;
        this.type = type;
    }

    public OutputParameter(String name, String type, String statement) {
        super();
        this.name = name;
        this.order = -1;
        this.type = type;
        this.statement = statement;
    }


    @XmlElement(name = "parameter")
    public List<OutputParameter> getParameters() {
        return this.parameters;
    }

    public void setParameters(List<OutputParameter> parameters) {
        this.parameters = parameters;
    }

    @XmlAttribute(required = false)
    public int getOrder() {
        return this.order;
    }

    public void setOrder(int order) {
        this.order = order;
    }

    @XmlAttribute(required = false)
    public String getValue() {
        return this.value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    @XmlAttribute(required = false)
    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @XmlAttribute(required = false)
    public String getStatement() {
        return statement;
    }

    public void setStatement(String statement) {
        this.statement = statement;
    }

    public OutputParameter getOutputParameter(String name) {
        for (OutputParameter param : parameters) {
            if (param.getName().equals(name))
                return param;
        }

        return null;
    }

    public OutputParameter getOutputParameter(String parent, String name) {
        OutputParameter parameter = null;
        for (OutputParameter param : parameters) {

            if (param.getName().equalsIgnoreCase(parent)) {
                parameter = param.getOutputParameter(name);
            }
        }

        if (parameter != null)
            return parameter;
        else {
            for (OutputParameter param : parameters) {
                if (!param.getName().equalsIgnoreCase(parent)) {
                    parameter = param.getOutputParameter(parent, name);
                }
            }
        }

        return parameter;
    }
}