Update of /var/cvs/src/org/mmbase/datatypes/handlers/html
In directory james.mmbase.org:/tmp/cvs-serv19140/html
Modified Files:
AbstractHtmlHandler.java
Log Message:
MMB-1560
See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/datatypes/handlers/html
See also: http://www.mmbase.org/jira/browse/MMB-1560
Index: AbstractHtmlHandler.java
===================================================================
RCS file:
/var/cvs/src/org/mmbase/datatypes/handlers/html/AbstractHtmlHandler.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- AbstractHtmlHandler.java 28 Jul 2008 16:47:31 -0000 1.1
+++ AbstractHtmlHandler.java 17 Apr 2009 15:43:39 -0000 1.2
@@ -11,9 +11,14 @@
package org.mmbase.datatypes.handlers.html;
import org.mmbase.datatypes.handlers.*;
+import org.mmbase.datatypes.DataType;
import org.mmbase.bridge.*;
import org.mmbase.util.transformers.Xml;
import org.mmbase.util.transformers.CharTransformer;
+import org.mmbase.util.logging.*;
+import org.mmbase.util.*;
+
+import java.util.*;
/**
* Handlers can be associated to DataTypes, but different Handler can be
associated with different
@@ -21,20 +26,21 @@
* post and things like that.
*
* @author Michiel Meeuwissen
- * @version $Id: AbstractHtmlHandler.java,v 1.1 2008/07/28 16:47:31 michiel
Exp $
+ * @version $Id: AbstractHtmlHandler.java,v 1.2 2009/04/17 15:43:39 michiel
Exp $
* @since MMBase-1.9.1
*/
public abstract class AbstractHtmlHandler extends AbstractHandler<String> {
+ private static final Logger log =
Logging.getLoggerInstance(AbstractHtmlHandler.class);
protected static final CharTransformer XML = new Xml(Xml.ESCAPE);
protected void appendClasses(StringBuilder buf, Node node, Field field) {
buf.append("mm_validate");
if (field instanceof org.mmbase.bridge.util.DataTypeField) {
- buf.append(" mm_dt_").append(field.getDataType().getName());
+ buf.append(" mm_dthandler
mm_dt_").append(field.getDataType().getName());
} else {
- buf.append(" mm_f_").append(field.getName()).append("
mm_nm_").append(field.getNodeManager().getName());
+ buf.append(" mm_dthandler mm_f_").append(field.getName()).append("
mm_nm_").append(field.getNodeManager().getName());
}
if (node != null) buf.append(" mm_n_").append(node.getNumber());
}
@@ -44,7 +50,73 @@
buf.append("id=\"").append(id(request.getName(field))).append("\" ");
}
+ protected String prefixError(String s) {
+ String prefix = "_";
+ return "mm_check_" + prefix + (prefix.length() != 0 ? "_" : "") + s;
+ }
-
+ public String check(Request request, Node node, Field field, boolean
errors) {
+ Object fieldValue = request.getValue(field);
+ final DataType<Object> dt = field.getDataType();
+ if (fieldValue == null) {
+ log.debug("Field value not found in context, using existing value
");
+ fieldValue = getFieldValue(request, node, field, node == null);
+ } else if (fieldValue.equals("") && ! field.isRequired()) {
+ log.debug("Field value found in context is empty, interpreting as
null");
+ fieldValue = null;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("Value for field " + field + ": " + fieldValue + " and
node " + node);
+ }
+ Collection<LocalizedString> col = dt.validate(fieldValue, node, field);
+ if (col.size() == 0) {
+ // do actually set the field, because some datatypes need
cross-field checking
+ // also in an mm:form, you can simply commit.
+ if (node != null && ! field.isReadOnly()) {
+ String fieldName = field.getName();
+ Object oldValue = node.getValue(fieldName);
+ if (fieldValue == null ? oldValue != null : !
fieldValue.equals(oldValue)) {
+ try {
+ if(log.isDebugEnabled()) {
+ log.debug("Setting " + fieldName + " to " +
(fieldValue == null ? "" : fieldValue.getClass().getName()) + " " + fieldValue);
+ }
+ if ("".equals(fieldValue) &&
interpretEmptyAsNull(field)) {
+ setValue(node, fieldName, null);
+ } else {
+ setValue(node, fieldName, fieldValue);
+ }
+ } catch (Throwable t) {
+ // may throw exception like 'You cannot change the
field"
+ }
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("not Setting " + fieldName + " to " +
fieldValue + " because already has that value");
+ }
+ }
+ }
+ if (errors && ! field.isReadOnly()) {
+ return "<div id=\"" + prefixError(field.getName()) + "\"
class=\"mm_check_noerror\"> </div>";
+ } else {
+ return "";
+ }
+ } else {
+ request.invalidate();
+ if (errors && ! field.isReadOnly()) {
+ StringBuilder show = new StringBuilder("<div id=\"");
+ show.append(request.getName(field));
+ show.append("\" class=\"mm_check_error\">");
+ Locale locale = request.getLocale();
+ for (LocalizedString error : col) {
+ show.append("<span class='" + error.getKey() + "'>");
+ Xml.XMLEscape(error.get(locale), show);
+ show.append("</span>");
+ }
+ show.append("</div>");
+ return show.toString();
+ } else {
+ return "";
+ }
+ }
+ }
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs