Update of /var/cvs/src/org/mmbase/util/xml
In directory james.mmbase.org:/tmp/cvs-serv26292
Modified Files:
BuilderReader.java
Log Message:
MMB-1588
See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/util/xml
See also: http://www.mmbase.org/jira/browse/MMB-1588
Index: BuilderReader.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/util/xml/BuilderReader.java,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -b -r1.92 -r1.93
--- BuilderReader.java 28 Jan 2008 16:28:00 -0000 1.92
+++ BuilderReader.java 1 Feb 2008 17:19:41 -0000 1.93
@@ -38,7 +38,7 @@
* @author Rico Jansen
* @author Pierre van Rooden
* @author Michiel Meeuwissen
- * @version $Id: BuilderReader.java,v 1.92 2008/01/28 16:28:00 michiel Exp $
+ * @version $Id: BuilderReader.java,v 1.93 2008/02/01 17:19:41 michiel Exp $
*/
public class BuilderReader extends DocumentReader {
@@ -332,6 +332,7 @@
def.setDataType(dataType); // replace datatype
}
decodeFieldDef(field, def, collector);
+ decodeFieldAttributes(field, def);
def.finish();
} else {
def = decodeFieldDef(builder, collector, field);
@@ -762,6 +763,32 @@
return dataType;
}
+
+
+ /**
+ * @since MMBase-1.8.6
+ */
+ private void decodeFieldAttributes(Element field, CoreField def) {
+ String fieldState = getElementAttributeValue(field, "state");
+ String fieldReadOnly = getElementAttributeValue(field, "readonly");
+ // deprecated db type tag - only use if no other data is given!
+ Element dbtype = getElementByPath(field, "field.db.type");
+ if (dbtype != null) {
+ if ("".equals(fieldState)) fieldState =
getElementAttributeValue(dbtype, "state");
+ if ("".equals(fieldReadOnly)) fieldReadOnly =
getElementAttributeValue(dbtype, "readonly");
+ }
+
+ // state - default peristent
+ int state = Field.STATE_PERSISTENT;
+ if (!"".equals(fieldState)) { state = Fields.getState(fieldState); }
+ if (state != def.getState()) def.setState(state);
+
+
+ boolean readOnly = "true".equalsIgnoreCase(fieldReadOnly);
+ if (def.isReadOnly() != readOnly) {
+ def.setReadOnly(readOnly);
+ }
+ }
/**
* Construct a FieldDef object using a field Element using information
* obtained from the builder configuration.
@@ -786,9 +813,6 @@
log.warn("Specified field name twice: once in the name attribute
('" + fieldName + "') and once in the <name> tag ('" + fieldDBName + "').
Ignoring name tag.");
}
- String fieldState = getElementAttributeValue(field, "state");
- String fieldReadOnly = getElementAttributeValue(field, "readonly");
-
// implied by datatype
// use db/type to override for legacy database issues
// (mostly to prevent warnings in the log, as mmbase fixes this anyway)
@@ -810,8 +834,6 @@
log.debug("<db><type> tag for field '" + fieldName + "' is
deprecated.");
}
fieldType = getElementValue(dbtype);
- fieldState = getElementAttributeValue(dbtype, "state");
- fieldReadOnly = getElementAttributeValue(dbtype, "readonly");
fieldNotNull = getElementAttributeValue(dbtype, "notnull");
fieldRequired = getElementAttributeValue(dbtype, "required");
fieldUnique = getElementAttributeValue(dbtype, "unique");
@@ -842,13 +864,13 @@
}
}
- // state - default peristent
- int state = Field.STATE_PERSISTENT;
- if (!"".equals(fieldState)) { state = Fields.getState(fieldState); }
-
- CoreField def = Fields.createField(fieldName, type, listItemType,
state, dataType);
+ CoreField def = Fields.createField(fieldName, type, listItemType,
+ Field.STATE_VIRTUAL,/*temp default,
will set by decodeFieldAttributes*/
+ dataType);
dataType = def.getDataType();
+ decodeFieldAttributes(field, def);
+
def.setParent(builder);
if (!fieldSize.equals("")) {
@@ -859,10 +881,6 @@
}
}
- // set readonly property, but only if given
- if (!"".equals(fieldReadOnly)) {
- def.setReadOnly("true".equalsIgnoreCase(fieldReadOnly));
- }
// set required property, but only if given
if (!"".equals(fieldRequired)) {
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs