package beanspack;
import java.beans.*;
import org.w3c.dom.*;
/**
* Bean che ascolta gli eventi del support bean e pone il veto nel caso rilevi che si sta tentando di settare il valore di un contatore
* oltre una data soglia
* @author Stefano Ricciarelli
* @version 1.2 - Date: 28-06-2002
*/
public class LimitBean implements VetoableChangeListener{
private int soglia;
public LimitBean() {
}
// Metodi per un utilizzo "comune" del LimitBean, al di fuori dell'infrastruttura
public void setSoglia(int soglia) {
this.soglia = soglia;
}
public int getSoglia() {
return soglia;
}
//Metodi per utilizzare il LimitBean all'interno dell'infrastruttura
/**
* Imposta la soglia del LimitBean attraverso un documento XML del seguente formato:
*
* @param sogliaXML
*/
public void setSoglia(Document sogliaXML) {
soglia = Integer.parseInt( ( (Element)sogliaXML.getDocumentElement().
getElementsByTagName("param").item(0) ).getAttribute("valoreSoglia") );
}
/**
* Ascolta gli eventi del supportBean. Esamina l'evento pce e controlla che sia della forma
*
* in qual caso analizza il valore dell'attributo newValue e, se maggiore della soglia,
* restituisce una PropertyVetoException
* @param pce l'evento ricevuto dal supportBean
* @throws PropertyVetoException il veto restituito a seguito del superamento della soglia
*/
public void vetoableChange(PropertyChangeEvent pce) throws PropertyVetoException {
Element actionRoot = ((Document)pce.getNewValue()).getDocumentElement();
String beanName = actionRoot.getAttribute("beanName");
String actionName = actionRoot.getAttribute("actionName");
if (beanName==null || actionName==null) return;
if (beanName.equals("counterBean"))
if (actionName.equals("setCounter") || actionName.equals("incCounter")) {
int c = Integer.parseInt(actionRoot.getAttribute("newValue"));
if (c > soglia)
throw new PropertyVetoException("not allowed", pce);
}
}
} //Fine classe