/*
 * Cr�� le 26 juin 07
 *
 * Pour changer le mod�le de ce fichier g�n�r�, allez � :
 * Fen�tre&gt;Pr�f�rences&gt;Java&gt;G�n�ration de code&gt;Code et commentaires
 */

package fr.gouv.finances.cp.xemelios.common.config;

import java.util.Hashtable;

import org.apache.log4j.Logger;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;

import fr.gouv.finances.cp.utils.xml.marshal.InvalidXmlDefinition;
import fr.gouv.finances.cp.utils.xml.marshal.NoeudModifiable;
import fr.gouv.finances.cp.utils.xml.marshal.XmlAttributes;
import fr.gouv.finances.cp.utils.xml.marshal.XmlMarshallable;
import fr.gouv.finances.cp.utils.xml.marshal.XmlOutputter;

public class EnfantModel implements NoeudModifiable {
	private static Logger logger = Logger.getLogger(EnfantModel.class);
        private String configXPath = null;
        
        public final static String TAG = "enfants";
        
	private Hashtable<String, SimpleElement> enfants;
	private NoeudModifiable _NMParent = null;
	public Hashtable<String, SimpleElement> getEnfants() {
		return enfants;
	}

	public void setEnfants(Hashtable<String, SimpleElement> enfants) {
		this.enfants = enfants;
	}

	public EnfantModel(String tagName) {
		super();
		enfants = new Hashtable<String, SimpleElement>();
	}

	public void addCharacterData(String cData) throws SAXException {
		// TODO Raccord de m�thode auto-g�n�r�

	}

	public void addChild(XmlMarshallable child, String tagName)
			throws SAXException {
		if ("enfant".equals(tagName)) {
			SimpleElement se = (SimpleElement)child;
			se.setParent(this);
			se.setParentAsNoeudModifiable(this);
			enfants.put(se.getElement(), se);
		}

	}

	public XmlMarshallable getAttributes(XmlAttributes attributes)
			throws SAXException {
		// TODO Raccord de m�thode auto-g�n�r�
		return null;
	}

	public void marshall(XmlOutputter output) {
		output.startTag(TAG);
		for (SimpleElement se:enfants.values()) {
			se.marshall(output);
		}
		output.endTag(TAG);
	}
	
	public EnfantModel clone () {
		EnfantModel em = new EnfantModel(TAG);
		
		for (String k:enfants.keySet()) {
			try { em.addChild(enfants.get(k).clone(), k); } catch (Throwable t) {}
		}
		
		return em;
	}

	public void validate() throws InvalidXmlDefinition {
		for(SimpleElement se:enfants.values()) se.validate();
	}

	public NoeudModifiable getChildAsNoeudModifiable(String tagName, String id) {
		return null;
	}
	public void setParentAsNoeudModifiable(NoeudModifiable p) {
		this._NMParent = p;
	}
	public NoeudModifiable getParentAsNoeudModifiable() {
		return this._NMParent;
	}
	public void modifyAttr(String attrName, String value) {
		// TODO Raccord de m�thode auto-g�n�r�
		
	}
	public void modifyAttrs(Attributes attrs) {
		try {
			getAttributes(new XmlAttributes(attrs));
		} catch (Exception e) {
			logger.error("Erreur lors de la mise � jour des attributs : "+e);
		}
	}
	public String[] getChildIdAttrName(String childTagName) {
		return null;
	}
	public void resetCharData() {
		
	}
	
    public String getIdValue() { return null; }
    public String getConfigXPath() {
        if(configXPath==null) {
            if(getParentAsNoeudModifiable()!=null) configXPath = getParentAsNoeudModifiable().getConfigXPath();
            else configXPath = "";
            configXPath+="/"+TAG;
        }
        return configXPath;
    }
}
