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