package framepack.configurationpack; import java.io.*; import javax.xml.parsers.*; import org.w3c.dom.*; import toolspack.*; /** * Classe deputata alla memorizzazione centralizzata della configurazione del sistema * Si tratta di una classe singleton, ossia della quale è presente una sola istanza. * E' una soluzione simile ad una classe con soli metodi statici, tuttavia in questo * modo si è sicuri che venga chiamato il costruttore della classe prima che venga invocato * un qualunque metodo. Inoltre si dispone di un riferimento ad un oggetto che come * tale può essere passato ad altri oggetti. * NB: La classe è utilizzata dai Viewer, dai Controller e dal ServletRequestManager, * dall'XMLTools; non necessita di altre classi del framepack, quindi può essere * inizializzata fin da subito * NB2: I metodi sono tutti synchronized dal momento che questa classe può essere invocata * contemporaneamente da più oggetti controller e/o da più oggetti viewer. Si ricorda che * l'implemantazione dei metodi relativi al trattamento di DOM-XML non garantisce correttezza * in presenza di richieste concorrenti * @author Stefano Ricciarelli * @version 1.2 - Date: 28-06-2002 */ public class Configurator { private String outputPagesPath = new String(""); private static Configurator instance = new Configurator(); private DocumentBuilder builder; private String viewXSLfile; private String controlXSLfile; private String beansDescriptorXMLfile; /** * Il costruttore è privato poiché si tratta di una classe singleton */ private Configurator() { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); try { builder = dbFactory.newDocumentBuilder(); }catch (Exception ex) {Logger.print(this, "errore nell'inizializzazione di Configurator" + ex); } } /** * Metodo statico da invocare per ottenere il riferimeto all'unico oggetto esistente * di questa classe * @return il riferimento all'unico oggetto di questa classe */ public static Configurator getInstance() { return instance; } /** * Inizializza correttamente questa classe. Deve essere invocato esplicitamente prima * di utilizzare gli altri metodi della classe; ma deve essere chiamato DOPO avere settato * con i metodi getXXX() le proprietà di questa classe, precisamente i vari file xml e xsl. * @return true se l'operazione è andata a buon fine, false altrimenti */ public synchronized boolean initialize() { //deve essere chiamato DOPO avere settato i vari file per inizializzare i documenti xml interni try { Document beansDescriptorXML = builder.parse( new File(beansDescriptorXMLfile) ); //inizializzo il BeanCreatorAndLinker con beansDescriptorXML new BeanCreatorAndLinker(beansDescriptorXML); boolean ok = BeanCreatorAndLinker.initialize(); if (!ok) { Logger.print(this, "ERRORE in BeanCreatorAndLinker.initialize()"); return false;} return true; } catch (Exception ex) { Logger.print(this, "ERRORE nell'inizializzaione dei Document" + ex); return false; } } /** * Wrappa l'omonimo metodo del BeanCreatorAndLinker e restituisce delle nuove istanze * dei sessionBeans correttamente inizizializzate e configurate * @return l'ObjectSet contenente le istanze dei sessionBeans */ public synchronized ObjectSet getNewSessionBeanInstances() { try{ return BeanCreatorAndLinker.getNewSessionBeanInstances(); } catch(Exception ex) { Logger.print(this, "ERRORE chiamando BeanCreatorAndLinker.getNewSessionBeanInstances()"); return null; } } /** * Wrappa l'omonimo metodo del BeanCreatorAndLinker e restituisce le istanze (sono uniche) * degli applicationBeans correttamente inizizializzate e configurate * @return l'ObjectSet contenente le istanze degli applicationBeans */ public synchronized ObjectSet getApplicationBeanInstances() { return BeanCreatorAndLinker.getApplicationBeanInstances(); } //-------------------- bean properties ----------------------- public synchronized String getOutputPagesPath() { return outputPagesPath; } public synchronized void setOutputPagesPath(String p) { outputPagesPath = p; } public synchronized void setViewXSLfile(String viewXSLfile2) { viewXSLfile = viewXSLfile2; } public synchronized String getViewXSLfile() { return viewXSLfile; } public synchronized void setControlXSLfile(String callsXSLfile2) { controlXSLfile = callsXSLfile2; } public synchronized String getControlXSLfile() { return controlXSLfile; } public synchronized void setBeansDescriptorXMLfile(String beansDescriptorXMLfile2) { beansDescriptorXMLfile = beansDescriptorXMLfile2; } public synchronized String getBeansDescriptorXMLfile() { return beansDescriptorXMLfile; } } // FINE CLASSE