package keo.pos.tools;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

import org.apache.log4j.*;

/**
 * C'est cette classe qui permet de gérer les propriétés de l'application.
 * Elle fournit les méthodes permettant de lire, écrire, sauvegarder, 
 * effacer ... les paramètres.<br>
 * Simple à utiliser. Dans n'importe quelle classe, il suffit de faire :
 * <pre>
 * <code>
 * static Properties proprietes = PropertiesManager.getProperties();
 * ...
 * String uneChaine = proprietes.getProperty("une.propriete");
 * </code>
 * </pre>
 * 
 * @version	$Revision$ $Date$
 * @author		damien.lecan
 */
public class PropertiesManager {

	static Logger log = Logger.getLogger(PropertiesManager.class);

	/** Le fichier qui contient la configuration par défault de l'application */
	public static final String DEFAULT_CONFIG = "default.properties";

	/** Le fichier qui contient la configuration en cours de l'application */
	public static final String CUSTOM_CONFIG = "custom.properties";

	/** Lecture du fichier global de configuration */
	public static Properties mProprietes = new PropertiesLoader();

	/** 
	 * Permet de récupérer les propriétés de l'application, dont les propriétés
	 * personnalisées.
	 * @return La liste des propriétés de l'application
	 */
	public static Properties getProperties() {
		Properties customProperties;
		try {
			/* 
			 * On tente de charger le fichier de config personnalisé
			 * Si cela échoue, on garde juste les propriétés par défaut.
			 */
			customProperties = new PropertiesLoader(mProprietes, CUSTOM_CONFIG);
			if (customProperties != null) {
				return customProperties;
			}
		} catch(FileNotFoundException e) {
			log.warn("Fichier " + CUSTOM_CONFIG + " introuvable", e);
		} catch(IOException e) {
			log.warn("Fichier " + CUSTOM_CONFIG + " illisible", e);
		} catch(NullPointerException e) { // nécessaire, sinon plante à l'éxecution
			log.warn("Fichier " + CUSTOM_CONFIG + " introuvable", e);
		}
		return mProprietes;
	}
	
	/**
	 * TODO
	 */
	public static boolean saveProperties(Properties proprietes) {	
		/* TODO */
		return true;
	}
	
	/**
	 * TODO
	 */
	public static boolean saveProperty(Object unePropriete) {
		/* TODO */
		return true;			
	}
}
