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.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() {}
}

View File

@ -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 <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
*/
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;
/**
* <code>true</code> if the parameter value in a request should be set
* to the default value when it would ordinarily be set
@ -77,9 +72,7 @@ public abstract class ParameterModel implements Lockable {
* This defaults to <code>true</code>.
*/
private boolean m_defaultOverridesNull = false;
private boolean m_passIn = true;
private static final Logger s_log =
Logger.getLogger(ParameterModel.class.getName());
@ -196,7 +189,7 @@ public abstract class ParameterModel implements Lockable {
*/
public void setName(String name) {
Assert.assertNotLocked(this);
m_name=name;
m_name = name;
}
/**
@ -252,7 +245,6 @@ public abstract class ParameterModel implements Lockable {
public abstract Object transformValue(HttpServletRequest request)
throws IllegalArgumentException;
/**
* Helper method for implementing {@link #transformValue
* transformValue}. Calls {@link #unmarshal unmarshal}, passing in the
@ -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
@ -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) {
@ -415,8 +405,8 @@ public abstract class ParameterModel implements Lockable {
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 <code>null</code>
*/
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;
}
}