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;
}
}