package beanspack; import framepack.*; import org.w3c.dom.*; import toolspack.*; /** * Bean che realizza un contatore elementare * @author Stefano Ricciarelli * @version 1.2 - Date: 28-06-2002 */ public class CounterBean { private ISupportBean supportBean = null; private int counter; public CounterBean() { counter = 0; } // Metodi per un utilizzo "comune" del contatore, al di fuori dell'infrastruttura public void setCounter(int c){ this.counter = c; } public int getCounter() { return counter; } //Metodi per utilizzare il contatore all'interno dell'infrastruttura /** * Permette di settare il riferimento al supportBean. E' fondamentale settare * questo riferimento prima che siano invocati altri metodi che fanno uso del * supportBean * @param supportBean il riferimento al supportBean */ public void setSupportBean(ISupportBean supportBean) { this.supportBean = supportBean; supportBean.print(this, "settato il supportbean"); } /** * Setta il contatore ad un valore passato attraverso un docuemto XML del seguente * formato: * Non interagisce col supportBean ma setta il contatore unilateralmente. Da utilizzare * in fase di inizializzazione del contatore * @param params il documento XML contenente il valore a cui settare il contatore */ public void initCounter(Document params) { NodeList param = params.getDocumentElement().getElementsByTagName("param"); this.counter = Integer.parseInt( ((Element)param.item(0)).getAttribute("value") ); } /** * Setta il contatore ad un valore passato attraverso un docuemto XML del seguente * formato: * Prima di settare il contatore, crea un documento XML del seguente formato: * * e prova a settare con questo documento actionXML del supportBean. Se riceve un veto * non porta a termine l'operazione. * Da invocare solo dopo avere settato il supportBean. * @param params il documento XML contenente il valore a cui settare il contatore */ public void setCounter(Document params) { NodeList param = params.getDocumentElement().getElementsByTagName("param"); int c = Integer.parseInt( ((Element)param.item(0)).getAttribute("value") ); supportBean.print(this, "mi setto al valore " + c); if (veto(c)) return; setCounter(c); } /** * Incrementa di 1 il contatore, se non riceve alcun veto */ public void incCounter() { if (veto(counter+1)) return; setCounter(counter + 1); } //Da invocare solo dopo avere settato il supportBean. private boolean veto(int c){ //actionXML: supportBean.print(this, "Preparo actionXML per settare il contatore"); Document actionXML = supportBean.getNewDocument(); Element action = actionXML.createElement("action"); action.setAttribute("beanName", "counterBean"); action.setAttribute("actionName", "setCounter"); action.setAttribute("newValue", Integer.toString(c)); actionXML.appendChild(action); supportBean.print(this, "actionXML settata. "); supportBean.DOMtoXMLfile(actionXML, "_action.xml"); try{ supportBean.setActionXML(actionXML); } catch(Exception ex) { supportBean.print(this, "Veto ricevuto, contatore non aggiornato"); return true;//veto } return false; //no veto } /** * Fornisce la rappresentazione XML dello stato, ossia del valore del contatore, * nel seguente formato: * Da invocare solo dopo avere settato il supportBean. * @return il documento XML */ public Document getXMLRepresentation() { Document returnXML = supportBean.getNewDocument(); Element returnXMLRoot = returnXML.createElement("root"); returnXMLRoot.setAttribute("counterValue", Integer.toString(counter)); returnXML.appendChild(returnXMLRoot); return returnXML; } }