/*
 * Copyright
 *   2009 axYus - www.axyus.com
 *   2009 C.Marchand - christophe.marchand@axyus.com
 *
 * This file is part of XEMELIOS.
 *
 * XEMELIOS is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * XEMELIOS is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with XEMELIOS; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
package fr.gouv.finances.dgfip.xemelios.web.gwt.client.dto;

import com.google.gwt.user.client.rpc.IsSerializable;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author chm
 */
public class ExportElementDTO implements IsSerializable {
    private String id=null, libelle=null;
    private ExportElementDTO parent=null;
    private List<ExportChampDTO> champs = null;
    private List<ExportElementDTO> enfants=null;

    public ExportElementDTO() {
        super();
        champs = new ArrayList<ExportChampDTO>();
        enfants = new ArrayList<ExportElementDTO>();
    }
    public ExportElementDTO(String id, String libelle) {
        this();
        this.id=id;
        this.libelle=libelle;
    }

    public List<ExportChampDTO> getChamps() {
        return champs;
    }

    public void setChamps(List<ExportChampDTO> champs) {
        this.champs = champs;
    }

    public List<ExportElementDTO> getEnfants() {
        return enfants;
    }

    public void setEnfants(List<ExportElementDTO> enfants) {
        this.enfants = enfants;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
    public void addChamp(ExportChampDTO champ)  {
        champs.add(champ);
        champ.setParent(this);
    }
    public void addEnfant(ExportElementDTO enfant) {
        enfants.add(enfant);
        enfant.setParent(this);
    }

    public String getLibelle() {
        return libelle;
    }

    public void setLibelle(String libelle) {
        this.libelle = libelle;
    }

    public ExportElementDTO getParent() {
        return parent;
    }

    public void setParent(ExportElementDTO parent) {
        this.parent = parent;
    }
    public boolean hasChampSelected() {
        boolean ret = hasOwnChampSelected();
        if(!ret) {
            for(ExportElementDTO el:getEnfants()) {
                if(el.hasChampSelected()) {
                    ret = true;
                    break;
                }
            }
        }
        return ret;
    }
    private boolean hasOwnChampSelected() {
        boolean ret = false;
        for(ExportChampDTO champ:getChamps()) {
            if(champ.isSelectionne()) {
                ret = true;
                break;
            }
        }
        return ret;
    }

    public void ensureKeysSelected() {
        // warning, check if it is hasOwnChampSelected or hasChampSelected
        if(hasOwnChampSelected()) {
            selectKeys();
        }
        for(ExportElementDTO el:getEnfants()) {
            el.ensureKeysSelected();
        }
    }
    private void selectKeys() {
        for(ExportChampDTO champ:getChamps()) {
            if(champ.isIdentifiant()) champ.setSelectionne(true);
        }
    }
    public ExportChampDTO getChampById(String id) {
        for(ExportChampDTO champ:getChamps()) {
            if(champ.getId().equals(id)) return champ;
        }
        return null;
    }
}
