
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import org.apache.log4j.Logger;

import org.jdom.*;
import org.jdom.input.SAXBuilder;

import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;

public class GadgetLoader {

	// ## LOG4J ##
	static Logger logger = Logger.getLogger(GadgetLoader.class.getName());

	// Méthode de chargement des Gadgets à partir du fichier XML
	public ArrayList load() {
		ArrayList gadgets = new ArrayList();

		Document document = null;
		Element root = null;

		// OK pour l'accès au fichier XML
		InputStream xmlfile = this.getClass().getClassLoader().getResourceAsStream("xml/gadgets.xml");
		if (xmlfile==null) {
			logger.error("Erreur sur fichier des gadgets !");
			return null;
		}
		
		// Résolution de la DTD par un EntityResolver...
		MyDTDResolver resolver = new MyDTDResolver();
		SAXBuilder builder = new SAXBuilder();
		builder.setEntityResolver(resolver);
		builder.setValidation(true);
		try {
			document = builder.build(xmlfile);
			root = document.getRootElement();
		} catch (JDOMException e) {
			logger.error("Erreur sur parsing du fichier des gadgets : "+e);
			return null;
		} catch (IOException e) {
			logger.error("Erreur sur fichier des gadgets : "+e);
			return null;
		}

		// ...
	}

	public class MyDTDResolver implements EntityResolver {
		
		public InputSource resolveEntity (String publicId, String systemId)	{
		
			logger.debug("publicId : "+publicId);
			if ("systemeu.dtd.gadgets".equals(publicId)) {
				//return new InputSource(this.getClass().getClassLoader().getResourceAsStream("dtd/gadgets.dtd")); ==> ECHEC
				//return(new InputSource("/dtd/gadgets.dtd")); ==> ECHEC
				return(new InputSource("/dtd/gadgets.dtd"));
			} else {
				return null;
			}
		}
	}
}
