Erweiterung um Abfrage der hinzugefügten ParameterListener als Vorbereitung zur Änderung an com.arsdigita.bebop.form.Date.

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
master
quasi 2010-02-19 11:58:55 +00:00
parent 67f1083f0c
commit 4aae634c33
3 changed files with 56 additions and 28 deletions

View File

@ -33,6 +33,7 @@ import com.arsdigita.bebop.util.BebopConstants;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.Form; import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormData; import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.parameters.NotNullValidationListener;
import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Kernel;
// This interface contains the XML element name of this class // This interface contains the XML element name of this class
// in a constant which is used when generating XML // 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_month.generateXML(ps, date);
m_day .generateXML(ps, date); m_day .generateXML(ps, date);
m_year .generateXML(ps, date); m_year .generateXML(ps, date);
if (!hasValidationListener(new NotNullValidationListener())) {
date.newChildElement("NoDate");
}
} }
public void setDisabled() { public void setDisabled() {
@ -279,4 +284,7 @@ public class Date extends Widget implements BebopConstants {
m_day.setClassAttr(at); m_day.setClassAttr(at);
super.setClassAttr(at); super.setClassAttr(at);
} }
// Don't lock
public void lock() {}
} }

View File

@ -179,6 +179,19 @@ public abstract class Widget extends BlockStylable implements Cloneable, BebopCo
m_listeners.remove(ParameterListener.class, listener); 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 * Adds a print listener for this widget. Only one print listener can be
* set for a widget, since the <code>PrintListener</code> is expected to * set for a widget, since the <code>PrintListener</code> is expected to

View File

@ -46,26 +46,21 @@ public abstract class ParameterModel implements Lockable {
* exception if the specified name is null * exception if the specified name is null
*/ */
protected String m_name; protected String m_name;
/** /**
* The default value of this ParameterModel. This value is used when * The default value of this ParameterModel. This value is used when
* the request is not a submission, and the transformValue returns * the request is not a submission, and the transformValue returns
* null. * null.
*/ */
protected Object m_defaultValue; protected Object m_defaultValue;
/** /**
* A List of Listeners to validate this parameter. * A List of Listeners to validate this parameter.
*/ */
protected List m_parameterListeners; protected List m_parameterListeners;
/** /**
* A boolean indicating if this ParameterModel is locked, as per the * A boolean indicating if this ParameterModel is locked, as per the
* Lockable interface * Lockable interface
*/ */
protected boolean m_locked; protected boolean m_locked;
/** /**
* <code>true</code> if the parameter value in a request should be set * <code>true</code> if the parameter value in a request should be set
* to the default value when it would ordinarily 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 <code>true</code>. * This defaults to <code>true</code>.
*/ */
private boolean m_defaultOverridesNull = false; private boolean m_defaultOverridesNull = false;
private boolean m_passIn = true; private boolean m_passIn = true;
private static final Logger s_log = private static final Logger s_log =
Logger.getLogger(ParameterModel.class.getName()); Logger.getLogger(ParameterModel.class.getName());
/** /**
* Construct an unlocked ParameterModel * Construct an unlocked ParameterModel
@ -160,7 +153,7 @@ public abstract class ParameterModel implements Lockable {
* @see #isPassIn() * @see #isPassIn()
* @param v <code>true</code> if this parameter is a pass in parameter. * @param v <code>true</code> if this parameter is a pass in parameter.
*/ */
public void setPassIn(boolean v) { public void setPassIn(boolean v) {
Assert.assertNotLocked(this); Assert.assertNotLocked(this);
m_passIn = v; m_passIn = v;
} }
@ -196,7 +189,7 @@ public abstract class ParameterModel implements Lockable {
*/ */
public void setName(String name) { public void setName(String name) {
Assert.assertNotLocked(this); 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. * error transforming form/URL variables to an object.
*/ */
public abstract Object transformValue(HttpServletRequest request) public abstract Object transformValue(HttpServletRequest request)
throws IllegalArgumentException; throws IllegalArgumentException;
/** /**
* Helper method for implementing {@link #transformValue * Helper method for implementing {@link #transformValue
@ -274,10 +266,9 @@ public abstract class ParameterModel implements Lockable {
} }
public ParameterData createParameterData(HttpServletRequest request) { public ParameterData createParameterData(HttpServletRequest request) {
return createParameterData(request,null,false); return createParameterData(request, null, false);
} }
/** /**
* Create a ParameterData for this ParameterModel with the supplied * Create a ParameterData for this ParameterModel with the supplied
* request If this tranformation throws an exception, mark the * request If this tranformation throws an exception, mark the
@ -295,7 +286,7 @@ public abstract class ParameterModel implements Lockable {
* null values from the submission. * null values from the submission.
*/ */
public ParameterData createParameterData(HttpServletRequest request, public ParameterData createParameterData(HttpServletRequest request,
boolean isSubmission) { boolean isSubmission) {
return createParameterData(request, null, isSubmission); return createParameterData(request, null, isSubmission);
} }
@ -320,8 +311,8 @@ public abstract class ParameterModel implements Lockable {
* null values from the submission. * null values from the submission.
*/ */
public ParameterData createParameterData(HttpServletRequest request, public ParameterData createParameterData(HttpServletRequest request,
Object defaultValue, Object defaultValue,
boolean isSubmission) { boolean isSubmission) {
// This method can work in one of two modes, which influences how // This method can work in one of two modes, which influences how
// default values are used. // default values are used.
// (0) if transformValue() returns null, we *always* try // (0) if transformValue() returns null, we *always* try
@ -342,18 +333,17 @@ public abstract class ParameterModel implements Lockable {
// logic, to make defaults work right. // logic, to make defaults work right.
//isSubmission = isSubmission || isPassIn(); //isSubmission = isSubmission || isPassIn();
if ( isSubmission ) { if (isSubmission) {
try { try {
result.setValue(transformValue(request)); result.setValue(transformValue(request));
if (result.getValue() == null && defaultValue != null) { if (result.getValue() == null && defaultValue != null) {
result.setValue(defaultValue); result.setValue(defaultValue);
} }
if ( getDefaultOverridesNull() if (getDefaultOverridesNull() && result.getValue() == null) {
&& result.getValue() == null ) {
result.setValue(getDefaultValue()); result.setValue(getDefaultValue());
} }
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
if ( getDefaultOverridesNull() ) { if (getDefaultOverridesNull()) {
result.setValue(getDefaultValue()); result.setValue(getDefaultValue());
} else { } else {
result.setValue(null); result.setValue(null);
@ -370,7 +360,7 @@ public abstract class ParameterModel implements Lockable {
if (result.getValue() == null && defaultValue != null) { if (result.getValue() == null && defaultValue != null) {
result.setValue(defaultValue); result.setValue(defaultValue);
} }
if ( result.getValue() == null ) { if (result.getValue() == null) {
result.setValue(getDefaultValue()); result.setValue(getDefaultValue());
} }
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
@ -410,13 +400,13 @@ public abstract class ParameterModel implements Lockable {
* the value and errors of this parameter * the value and errors of this parameter
*/ */
public void validate(ParameterData data) public void validate(ParameterData data)
throws FormProcessException { throws FormProcessException {
Assert.assertLocked(this); Assert.assertLocked(this);
ParameterEvent e = null; ParameterEvent e = null;
for (Iterator i = m_parameterListeners.iterator(); i.hasNext(); ) { for (Iterator i = m_parameterListeners.iterator(); i.hasNext();) {
if ( e == null ) { if (e == null) {
e = new ParameterEvent(this, data); e = new ParameterEvent(this, data);
} }
((ParameterListener) i.next()).validate(e); ((ParameterListener) i.next()).validate(e);
@ -433,7 +423,7 @@ public abstract class ParameterModel implements Lockable {
* @return the value as a readable string, may be <code>null</code> * @return the value as a readable string, may be <code>null</code>
*/ */
public String marshal(Object value) { 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 * @pre encoded != null
*/ */
public Object unmarshal(String encoded) { public Object unmarshal(String encoded) {
throw new UnsupportedOperationException("Not implemented. " throw new UnsupportedOperationException("Not implemented. " + "This method needs to be implemented by the specific subclasses.");
+ "This method needs to be implemented by the specific subclasses.");
} }
/** /**
@ -476,4 +465,22 @@ public abstract class ParameterModel implements Lockable {
public boolean isLocked() { public boolean isLocked() {
return m_locked; 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;
}
} }