/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.broadcast.common; import net.codjo.broadcast.common.diffuser.Diffuser; import net.codjo.broadcast.common.diffuser.DiffuserManager; import java.io.File; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.NoSuchElementException; /** * Manager des pr�f�rences de diffusion. */ public class PreferencesManager { private static final String DEFAULT_FILE_TABLENAME = "PM_BROADCAST_FILES"; private static final String DEFAULT_FILE_CONTENTS_TABLENAME = "PM_BROADCAST_FILE_CONTENTS"; private static final String DEFAULT_SECTION_TABLENAME = "PM_BROADCAST_SECTION"; private static final String DEFAULT_COLUMN_TABLENAME = "PM_BROADCAST_COLUMNS"; private DiffuserManager diffuserManager = new DiffuserManager(); private Map<String, Preferences> preferences = new HashMap<String, Preferences>(); private RootContext rootContext; public PreferencesManager() { this(DEFAULT_FILE_TABLENAME, DEFAULT_FILE_CONTENTS_TABLENAME, DEFAULT_SECTION_TABLENAME, DEFAULT_COLUMN_TABLENAME, null); } /** * @deprecated Use default constructor #PreferencesManager(). */ @Deprecated public PreferencesManager(String fileTableName, String fileContentsTableName, String sectionTableName, String columnTableName) { this(fileTableName, fileContentsTableName, sectionTableName, columnTableName, null); } public PreferencesManager(String fileTableName, String fileContentsTableName, String sectionTableName, String columnTableName, Map<String, Object> variables) { this.rootContext = new RootContext(fileTableName, fileContentsTableName, sectionTableName, columnTableName, variables); } /** * Retourne un tableau de noms des diffuseurs possibles. * * @return Le tableau. */ public final String[] getDiffusersCode() { return diffuserManager.getDiffusersCode(); } public void addAll(PreferencesManager prefMan) { preferences.putAll(prefMan.preferences); } /** * Ajout d'une nouvelle pr�f�rence. * * @param pref */ public void addPreferences(Preferences pref) { preferences.put(pref.getFamily(), pref); } /** * Construit le <code>Diffuser</code> appropri�. * * @param diffuserCode * @param arg * * @return un diffuseur */ public Diffuser buildDiffuser(String diffuserCode, String arg) { return diffuserManager.buildDiffuser(diffuserCode, arg); } /** * Efface toutes les Pr�f�rence initialis�s. */ public void clearPreferences() { preferences.clear(); } /** * Declare une methode de diffusion. * * @param diffuserCode code de diffusion. * @param diffuserClass class du diffuseur * * @throws NoSuchMethodException La classe ne possede pas de constructeur avec un argument de type * String. */ public void declareDiffuser(String diffuserCode, Class<? extends Diffuser> diffuserClass) throws NoSuchMethodException { diffuserManager.declareDiffuser(diffuserCode, diffuserClass); } public String getColumnsTableName() { return rootContext.getColumnsTableName(); } public String getFileContentsTableName() { return rootContext.getFileContentsTableName(); } public String getFileTableName() { return rootContext.getFileTableName(); } /** * retourne la pr�f�rence de diffusion pour une famille. * * @param family * * @return une pr�f�rence * * @throws NoSuchElementException */ public Preferences getPreferences(String family) { Preferences pref = preferences.get(family); if (pref == null) { throw new NoSuchElementException("Famille inconnue : " + family); } return pref; } public Context getRootContext() { return rootContext; } public String getSectionTableName() { return rootContext.getSectionTableName(); } /** * Retourne un iterateur sur les <code>Preferences</code> d�finies. */ public Iterator<Preferences> iterator() { return preferences.values().iterator(); } /** * Retourne un contexte pour un export particulier. Cette methode est utilis� par la session EJB. * * @param user L'utilisateur demandant l'export * @param fileName le fichier a exporter * @param generationDate la date de generation. * @param broadcastDate La date utilis� pour la diffusion * @param outFolder Le repertoire de sortie * * @return un contexte d'export. */ public Context buildContext(final String user, final String fileName, final java.util.Date generationDate, final java.util.Date broadcastDate, final File outFolder) { return new Context(new java.sql.Date(broadcastDate.getTime())); } }