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 Cvs@lists.mmbase.org http://lists.mmbase.org/mailman/listinfo/cvs