From 4aae634c337a68d6ff25d8ee3eda91034945828b Mon Sep 17 00:00:00 2001 From: quasi Date: Fri, 19 Feb 2010 11:58:55 +0000 Subject: [PATCH] =?UTF-8?q?Erweiterung=20um=20Abfrage=20der=20hinzugef?= =?UTF-8?q?=C3=BCgten=20ParameterListener=20als=20Vorbereitung=20zur=20?= =?UTF-8?q?=C3=84nderung=20an=20com.arsdigita.bebop.form.Date.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hinzugefügt werden soll eine Checkbox, die ein bereits eingetragenes Datum wieder löscht ("Kein Datum setzen"). Zusätzlich soll die Anzeige an dieakltive Locale angepaßt werden, so daß das Widget die korrekte Darstellung hat. git-svn-id: https://svn.libreccm.org/ccm/trunk@354 8810af33-2d31-482b-a856-94f89814c4df --- .../src/com/arsdigita/bebop/form/Date.java | 8 +++ .../src/com/arsdigita/bebop/form/Widget.java | 13 ++++ .../bebop/parameters/ParameterModel.java | 63 ++++++++++--------- 3 files changed, 56 insertions(+), 28 deletions(-) diff --git a/ccm-core/src/com/arsdigita/bebop/form/Date.java b/ccm-core/src/com/arsdigita/bebop/form/Date.java index d11e4e4bb..4fcd9ad94 100755 --- a/ccm-core/src/com/arsdigita/bebop/form/Date.java +++ b/ccm-core/src/com/arsdigita/bebop/form/Date.java @@ -33,6 +33,7 @@ import com.arsdigita.bebop.util.BebopConstants; import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.Form; import com.arsdigita.bebop.FormData; +import com.arsdigita.bebop.parameters.NotNullValidationListener; import com.arsdigita.kernel.Kernel; // This interface contains the XML element name of this class // in a constant which is used when generating XML @@ -229,6 +230,10 @@ public class Date extends Widget implements BebopConstants { m_month.generateXML(ps, date); m_day .generateXML(ps, date); m_year .generateXML(ps, date); + + if (!hasValidationListener(new NotNullValidationListener())) { + date.newChildElement("NoDate"); + } } public void setDisabled() { @@ -279,4 +284,7 @@ public class Date extends Widget implements BebopConstants { m_day.setClassAttr(at); super.setClassAttr(at); } + + // Don't lock + public void lock() {} } diff --git a/ccm-core/src/com/arsdigita/bebop/form/Widget.java b/ccm-core/src/com/arsdigita/bebop/form/Widget.java index 479b81df8..283ee579f 100755 --- a/ccm-core/src/com/arsdigita/bebop/form/Widget.java +++ b/ccm-core/src/com/arsdigita/bebop/form/Widget.java @@ -179,6 +179,19 @@ public abstract class Widget extends BlockStylable implements Cloneable, BebopCo m_listeners.remove(ParameterListener.class, listener); } + /** + * Test for existens of a particular type of ValidationListener + * + * @param listener Subtype of ParameterListern which is tested for + * @return true if subtype is in the list + */ + public boolean hasValidationListener(ParameterListener listener) { + Assert.assertNotNull(listener, "ParameterListener"); + return this.getParameterModel().hasParameterListener(listener); + +// return (m_listeners.getListenerCount(listener.getClass()) > 0); + } + /** * Adds a print listener for this widget. Only one print listener can be * set for a widget, since the PrintListener is expected to diff --git a/ccm-core/src/com/arsdigita/bebop/parameters/ParameterModel.java b/ccm-core/src/com/arsdigita/bebop/parameters/ParameterModel.java index d1a64ca64..8af80cc32 100755 --- a/ccm-core/src/com/arsdigita/bebop/parameters/ParameterModel.java +++ b/ccm-core/src/com/arsdigita/bebop/parameters/ParameterModel.java @@ -46,26 +46,21 @@ public abstract class ParameterModel implements Lockable { * exception if the specified name is null */ protected String m_name; - /** * The default value of this ParameterModel. This value is used when * the request is not a submission, and the transformValue returns * null. */ protected Object m_defaultValue; - /** * A List of Listeners to validate this parameter. */ protected List m_parameterListeners; - /** * A boolean indicating if this ParameterModel is locked, as per the * Lockable interface */ protected boolean m_locked; - - /** * true if the parameter value in a request should be set * to the default value when it would ordinarily be set @@ -77,11 +72,9 @@ public abstract class ParameterModel implements Lockable { * This defaults to true. */ private boolean m_defaultOverridesNull = false; - private boolean m_passIn = true; - private static final Logger s_log = - Logger.getLogger(ParameterModel.class.getName()); + Logger.getLogger(ParameterModel.class.getName()); /** * Construct an unlocked ParameterModel @@ -160,7 +153,7 @@ public abstract class ParameterModel implements Lockable { * @see #isPassIn() * @param v true if this parameter is a pass in parameter. */ - public void setPassIn(boolean v) { + public void setPassIn(boolean v) { Assert.assertNotLocked(this); m_passIn = v; } @@ -196,7 +189,7 @@ public abstract class ParameterModel implements Lockable { */ public void setName(String name) { Assert.assertNotLocked(this); - m_name=name; + m_name = name; } /** @@ -250,8 +243,7 @@ public abstract class ParameterModel implements Lockable { * error transforming form/URL variables to an object. */ public abstract Object transformValue(HttpServletRequest request) - throws IllegalArgumentException; - + throws IllegalArgumentException; /** * Helper method for implementing {@link #transformValue @@ -274,10 +266,9 @@ public abstract class ParameterModel implements Lockable { } public ParameterData createParameterData(HttpServletRequest request) { - return createParameterData(request,null,false); + return createParameterData(request, null, false); } - /** * Create a ParameterData for this ParameterModel with the supplied * request If this tranformation throws an exception, mark the @@ -295,7 +286,7 @@ public abstract class ParameterModel implements Lockable { * null values from the submission. */ public ParameterData createParameterData(HttpServletRequest request, - boolean isSubmission) { + boolean isSubmission) { return createParameterData(request, null, isSubmission); } @@ -320,8 +311,8 @@ public abstract class ParameterModel implements Lockable { * null values from the submission. */ public ParameterData createParameterData(HttpServletRequest request, - Object defaultValue, - boolean isSubmission) { + Object defaultValue, + boolean isSubmission) { // This method can work in one of two modes, which influences how // default values are used. // (0) if transformValue() returns null, we *always* try @@ -342,18 +333,17 @@ public abstract class ParameterModel implements Lockable { // logic, to make defaults work right. //isSubmission = isSubmission || isPassIn(); - if ( isSubmission ) { + if (isSubmission) { try { result.setValue(transformValue(request)); if (result.getValue() == null && defaultValue != null) { result.setValue(defaultValue); } - if ( getDefaultOverridesNull() - && result.getValue() == null ) { + if (getDefaultOverridesNull() && result.getValue() == null) { result.setValue(getDefaultValue()); } } catch (IllegalArgumentException e) { - if ( getDefaultOverridesNull() ) { + if (getDefaultOverridesNull()) { result.setValue(getDefaultValue()); } else { result.setValue(null); @@ -370,7 +360,7 @@ public abstract class ParameterModel implements Lockable { if (result.getValue() == null && defaultValue != null) { result.setValue(defaultValue); } - if ( result.getValue() == null ) { + if (result.getValue() == null) { result.setValue(getDefaultValue()); } } catch (IllegalArgumentException e) { @@ -410,13 +400,13 @@ public abstract class ParameterModel implements Lockable { * the value and errors of this parameter */ public void validate(ParameterData data) - throws FormProcessException { + throws FormProcessException { Assert.assertLocked(this); ParameterEvent e = null; - for (Iterator i = m_parameterListeners.iterator(); i.hasNext(); ) { - if ( e == null ) { + for (Iterator i = m_parameterListeners.iterator(); i.hasNext();) { + if (e == null) { e = new ParameterEvent(this, data); } ((ParameterListener) i.next()).validate(e); @@ -433,7 +423,7 @@ public abstract class ParameterModel implements Lockable { * @return the value as a readable string, may be null */ public String marshal(Object value) { - return ( value == null ) ? null : value.toString(); + return (value == null) ? null : value.toString(); } /** @@ -452,8 +442,7 @@ public abstract class ParameterModel implements Lockable { * @pre encoded != null */ public Object unmarshal(String encoded) { - throw new UnsupportedOperationException("Not implemented. " - + "This method needs to be implemented by the specific subclasses."); + throw new UnsupportedOperationException("Not implemented. " + "This method needs to be implemented by the specific subclasses."); } /** @@ -476,4 +465,22 @@ public abstract class ParameterModel implements Lockable { public boolean isLocked() { return m_locked; } + + /** + * Test m_parameterKisteners for member of a given subtype + * + * @param listener Subtype of the ParameterListener + * @return true if a ParameterListener of given type is in the list + */ + public boolean hasParameterListener(ParameterListener listener) { + Iterator lListIter = m_parameterListeners.iterator(); + + while (lListIter.hasNext()) { + ParameterListener pl = (ParameterListener) lListIter.next(); + if (pl.getClass().equals(listener.getClass())) { + return true; + } + } + return false; + } }