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

Reply via email to