package eva2.gui;

import eva2.server.go.problems.InterfaceOptimizationObjective;

/**
 * Created by IntelliJ IDEA.
 * User: streiche
 * Date: 14.01.2005
 * Time: 17:11:31
 * To change this template use File | Settings | File Templates.
 */
public class PropertyOptimizationObjectives implements java.io.Serializable {
    public InterfaceOptimizationObjective[]    m_AvailableObjectives;
    public InterfaceOptimizationObjective[]    m_SelectedObjectives;

    public PropertyOptimizationObjectives(InterfaceOptimizationObjective[] d) {
        this.m_AvailableObjectives = d;
        this.m_SelectedObjectives  = null;
    }
    public PropertyOptimizationObjectives(PropertyOptimizationObjectives d) {
        this.m_AvailableObjectives         = new InterfaceOptimizationObjective[d.m_AvailableObjectives.length];
        for (int i = 0; i < this.m_AvailableObjectives.length; i++) {
            this.m_AvailableObjectives[i]  = (InterfaceOptimizationObjective)d.m_AvailableObjectives[i].clone();
        }
        this.m_SelectedObjectives          = new InterfaceOptimizationObjective[d.m_SelectedObjectives.length];
        for (int i = 0; i < this.m_SelectedObjectives.length; i++) {
            this.m_SelectedObjectives[i]   = (InterfaceOptimizationObjective)d.m_SelectedObjectives[i].clone();
        }
    }

    public Object clone() {
        return (Object) new PropertyOptimizationObjectives(this);
    }

    /** This method will allow you to set the value of the InterfaceOptimizationTarget array
     * @param d     The InterfaceOptimizationTarget[]
     */
    public void setSelectedTargets(InterfaceOptimizationObjective[] d) {
        this.m_SelectedObjectives = d;
    }

    /** This method will return the InterfaceOptimizationTarget array
     * @return The InterfaceOptimizationTarget[].
     */
    public InterfaceOptimizationObjective[] getSelectedTargets() {
        return this.m_SelectedObjectives;
    }

    /** This method will return the InterfaceOptimizationTarget array
     * @return The InterfaceOptimizationTarget[].
     */
    public InterfaceOptimizationObjective[] getAvailableTargets() {
        return this.m_AvailableObjectives;
    }

    /** This method allows you to remove a Target from the list
     * @param index     The index of the target to be removed.
     */
    public void removeTarget(int index) {
        if ((index < 0) || (index >= this.m_SelectedObjectives.length)) return;

        InterfaceOptimizationObjective[] newList = new InterfaceOptimizationObjective[this.m_SelectedObjectives.length-1];
        int j = 0;
        for (int i = 0; i < this.m_SelectedObjectives.length; i++) {
            if (index != i) {
                newList[j] = this.m_SelectedObjectives[i];
                j++;
            }
        }
        this.m_SelectedObjectives = newList;
    }

    /** This method allows you to add a new target to the list
     * @param optTarget
     */
    public void addTarget(InterfaceOptimizationObjective optTarget) {
        InterfaceOptimizationObjective[] newList = new InterfaceOptimizationObjective[this.m_SelectedObjectives.length+1];
        for (int i = 0; i < this.m_SelectedObjectives.length; i++) {
            newList[i] = this.m_SelectedObjectives[i];
        }
        newList[this.m_SelectedObjectives.length] = optTarget;
        this.m_SelectedObjectives = newList;
    }
}
