Update of /var/cvs/src/org/mmbase/util/xml
In directory james.mmbase.org:/tmp/cvs-serv26188
Modified Files:
Tag: MMBase-1_8
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.74.2.8
retrieving revision 1.74.2.9
diff -u -b -r1.74.2.8 -r1.74.2.9
--- BuilderReader.java 28 Jan 2008 18:44:18 -0000 1.74.2.8
+++ BuilderReader.java 1 Feb 2008 17:15:57 -0000 1.74.2.9
@@ -37,7 +37,7 @@
* @author Rico Jansen
* @author Pierre van Rooden
* @author Michiel Meeuwissen
- * @version $Id: BuilderReader.java,v 1.74.2.8 2008/01/28 18:44:18 michiel Exp
$
+ * @version $Id: BuilderReader.java,v 1.74.2.9 2008/02/01 17:15:57 michiel Exp
$
*/
public class BuilderReader extends DocumentReader {
@@ -331,12 +331,15 @@
CoreField def = (CoreField) oldset.get(fieldName);
try {
if (def != null) {
+
+ boolean parentInStorage = def.inStorage();
def.rewrite();
DataType dataType = decodeDataType(builder, collector,
def.getName(), field, def.getType(), def.getListItemType(), false);
if (dataType != null) {
def.setDataType(dataType); // replace datatype
}
decodeFieldDef(field, def, collector);
+ decodeFieldAttributes(field, def);
def.finish();
} else {
def = decodeFieldDef(builder, collector, field);
@@ -531,7 +534,7 @@
}
/**
* Alter a specified, named FieldDef object using information obtained
from the buidler configuration.
- * Only GUI information is retrieved and stored (name and type of the
field sg=hould already be specified).
+ * Only GUI information is retrieved and stored (name and type of the
field should already be specified).
* @since MMBase-1.6
* @param elm The element containing the field information acc. to the
buidler xml format
* @param def The field definition to alter
@@ -738,6 +741,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.
@@ -762,8 +791,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
@@ -786,8 +813,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");
@@ -818,13 +843,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("")) {
@@ -835,11 +860,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)) {
dataType.setRequired("true".equalsIgnoreCase(fieldRequired));
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs