/**
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 *
 * Copyright (C)
 * <a href="http://www.inab.org">Spanish National Institute of Bioinformatics (INB)</a>
 * <a href="http://www.bsc.es">Barcelona Supercomputing Center (BSC)</a>
 * <a href="http://inb.bsc.es">Computational Node 6</a>
 */

package org.inb.biomoby.shared.registry;

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

/**
 * @author Dmitry Repchevsky
 */

@XmlRootElement(name="parameter")
public class Parameter implements Serializable, Cloneable
{
    public static enum PARAMETER_TYPE {Integer, Boolean, Float, String, DateTime};

    private String articleName;
    private PARAMETER_TYPE datatype;
    private String description;
    private String _default;

    private String max;
    private String min;

    private ArrayList<String> _enum;

    public Parameter() {}

    @XmlAttribute(name="article_name")
    public String getArticleName()
    {
        return articleName;
    }

    public void setArticleName(String articleName)
    {
        this.articleName = articleName;
    }

    @XmlAttribute
    public PARAMETER_TYPE getDatatype()
    {
        return datatype;
    }

    public void setDatatype(PARAMETER_TYPE datatype)
    {
        this.datatype = datatype;
    }

    @XmlAttribute
    public String getDescription()
    {
        return description;
    }

    public void setDescription(String description)
    {
        this.description = description;
    }

    @XmlAttribute
    public String getDefault()
    {
        return _default;
    }

    public void setDefault(String _default)
    {
        this._default = _default;
    }

    @XmlAttribute
    public String getMax()
    {
        return max;
    }

    public void setMax(String max)
    {
        this.max = max;
    }

    @XmlAttribute
    public String getMin()
    {
        return min;
    }

    public void setMin(String min)
    {
        this.min = min;
    }

    public void addEnum(String _enum)
    {
        getEnum().add(_enum);
    }
    
    @XmlElement(name="enum")
    public List<String> getEnum()
    {
        if (_enum == null)
        {
            _enum = new ArrayList<String>();
        }

        return _enum;
    }

    @Override
    public Parameter clone()
    {
        Parameter clone;

        try
        {
            clone = (Parameter)super.clone();

            if (_enum != null)
            {
                clone._enum = (ArrayList<String>)_enum.clone();
            }
        }
        catch(CloneNotSupportedException ex)
        {
            clone = null;
        }

        return clone;
    }
}
