Author: michiel
Date: 2009-07-06 16:36:43 +0200 (Mon, 06 Jul 2009)
New Revision: 36584

Modified:
   
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/BasicField.java
   
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/BasicNodeQuery.java
   
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/BasicQuery.java
   mmbase/trunk/core/src/main/java/org/mmbase/bridge/util/AbstractNode.java
   mmbase/trunk/core/src/main/java/org/mmbase/bridge/util/FieldWrapper.java
Log:
  MMB-1846. Made BasicField as thin as possible. 

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/BasicField.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/BasicField.java
    2009-07-06 14:34:38 UTC (rev 36583)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/BasicField.java
    2009-07-06 14:36:43 UTC (rev 36584)
@@ -11,10 +11,9 @@
 package org.mmbase.bridge.implementation;
 
 import org.mmbase.bridge.*;
-import org.mmbase.core.AbstractField;
+import org.mmbase.bridge.util.FieldWrapper;
 import org.mmbase.core.CoreField;
-import org.mmbase.util.LocalizedString;
-import java.util.Collection;
+import org.mmbase.util.logging.*;
 
 /**
  * @javadoc
@@ -22,67 +21,40 @@
  * @author Pierre van Rooden
  * @version $Id$
  */
-public class BasicField extends AbstractField<Object> implements Field {
+public class BasicField extends FieldWrapper implements Field {
 
+    private static final Logger log = 
Logging.getLoggerInstance(BasicField.class);
+
     private final NodeManager nodeManager;
-    protected final CoreField coreField;
 
-    public BasicField(Field field, NodeManager nodeManager) {
-        super(field.getName(), field);
-        this.nodeManager = nodeManager;
-        if (field instanceof CoreField) {
-            this.coreField = (CoreField) field;
+
+    /**
+     * Converts a Field to a CoreField.
+     * @todo Should this method be here?
+
+     * @since MMBase-1.9.2
+     */
+     static CoreField getCoreField(Field f) {
+        while (f instanceof FieldWrapper) {
+            f  = ((FieldWrapper) f).getField();
+        }
+        if (f instanceof CoreField) {
+            return (CoreField) f;
         } else {
-            this.coreField = new CoreField(field);
+            return 
BasicCloudContext.mmb.getBuilder(f.getNodeManager().getName()).getField(f.getName());
         }
     }
 
-    @Override
-    public NodeManager getNodeManager() {
-        return nodeManager;
-    }
 
-    @Override
-    public int getSearchPosition(){
-        return coreField.getSearchPosition();
+    public BasicField(Field field, NodeManager nodeManager) {
+        super(field);
+        this.nodeManager = nodeManager;
     }
 
     @Override
-    public int getListPosition(){
-        return coreField.getListPosition();
+    public NodeManager getNodeManager() {
+        return nodeManager;
     }
 
-    @Override
-    public int getEditPosition(){
-        return coreField.getEditPosition();
-    }
 
-    @Override
-    public int getStoragePosition(){
-        return coreField.getStoragePosition();
-    }
-
-    public Collection<String> validate(Object value) {
-        Collection<LocalizedString> errors = getDataType().validate(value, 
null, this);
-        return LocalizedString.toStrings(errors, 
getNodeManager().getCloud().getLocale());
-    }
-
-    @Override
-    public int getMaxLength() {
-        return coreField.getMaxLength();
-    }
-
-
-    @Override
-    protected java.util.Locale getDefaultLocale() {
-        return nodeManager.getCloud().getLocale();
-    }
-
-    // deprecated methods
-    @Override
-    @Deprecated
-    public String getGUIType() {
-        return coreField.getGUIType();
-    }
-
 }

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/BasicNodeQuery.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/BasicNodeQuery.java
        2009-07-06 14:34:38 UTC (rev 36583)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/BasicNodeQuery.java
        2009-07-06 14:36:43 UTC (rev 36584)
@@ -115,7 +115,7 @@
 
     public StepField getStepField(Field field) {
         if (query instanceof NodeSearchQuery) {
-            BasicStepField stepField = ((NodeSearchQuery) 
query).getField(((BasicField)field).coreField);
+            BasicStepField stepField = ((NodeSearchQuery) 
query).getField(BasicField.getCoreField(field));
             return stepField;
         } else {
             Iterator<StepField> fields = query.getFields().iterator();

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/BasicQuery.java
===================================================================
--- 
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/BasicQuery.java
    2009-07-06 14:34:38 UTC (rev 36583)
+++ 
mmbase/trunk/core/src/main/java/org/mmbase/bridge/implementation/BasicQuery.java
    2009-07-06 14:36:43 UTC (rev 36584)
@@ -383,7 +383,7 @@
 
     public StepField addField(Step step, Field field) {
         if (used) throw new BridgeException("Query was used already");
-        org.mmbase.core.CoreField cf = ((BasicField)field).coreField; /// XXX 
Casting is wrong
+        org.mmbase.core.CoreField cf = BasicField.getCoreField(field);
         BasicStepField sf = new BasicStepField(step, cf);
         if (! implicitFields.remove(sf)) {// it's explicitly added now
             if (cf.inStorage()) {
@@ -415,7 +415,7 @@
     protected void addFieldImplicit(Step step, Field field) {
         if (used) throw new BridgeException("Query was used already");
         if (! query.isDistinct()) {
-            org.mmbase.core.CoreField coreField = 
((BasicField)field).coreField; /// XXX Casting is wrong
+            org.mmbase.core.CoreField coreField = 
BasicField.getCoreField(field);
             StepField sf = query.addFieldUnlessPresent(step, coreField);
             if (! implicitFields.contains(sf)) {
                 implicitFields.add(sf);
@@ -426,7 +426,7 @@
     public StepField createStepField(Step step, Field field) {
         if (field == null) throw new BridgeException("Field is null");
         return
-            new BasicStepField(step, ((BasicField)field).coreField); /// XXX 
Casting is wrong
+            new BasicStepField(step, BasicField.getCoreField(field));
     }
 
     public StepField createStepField(Step step, String fieldName) {
@@ -454,7 +454,7 @@
 
     public AggregatedField addAggregatedField(Step step, Field field, int 
aggregationType) {
         if (used) throw new BridgeException("Query was used already");
-        BasicAggregatedField aggregatedField =  query.addAggregatedField(step, 
((BasicField)field).coreField, aggregationType); /// XXX Casting is wrong
+        BasicAggregatedField aggregatedField =  query.addAggregatedField(step, 
BasicField.getCoreField(field), aggregationType); /// XXX Casting is wrong
         // aggregatedField.setAlias(field.getName());
 
         if (this instanceof NodeQuery) { // UGLY!

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/bridge/util/AbstractNode.java
===================================================================
--- mmbase/trunk/core/src/main/java/org/mmbase/bridge/util/AbstractNode.java    
2009-07-06 14:34:38 UTC (rev 36583)
+++ mmbase/trunk/core/src/main/java/org/mmbase/bridge/util/AbstractNode.java    
2009-07-06 14:36:43 UTC (rev 36584)
@@ -151,6 +151,7 @@
     public void setValueWithoutProcess(String fieldName, Object value) {
         checkWrite();
         if ("owner".equals(fieldName)) {
+            // System.out.println("Setting owner, so setting context to " + 
Casting.toString(value));
             setContext(Casting.toString(value));
             return;
         }

Modified: 
mmbase/trunk/core/src/main/java/org/mmbase/bridge/util/FieldWrapper.java
===================================================================
--- mmbase/trunk/core/src/main/java/org/mmbase/bridge/util/FieldWrapper.java    
2009-07-06 14:34:38 UTC (rev 36583)
+++ mmbase/trunk/core/src/main/java/org/mmbase/bridge/util/FieldWrapper.java    
2009-07-06 14:36:43 UTC (rev 36584)
@@ -18,21 +18,25 @@
 
 
 /**
- * Wraps another Field. You can use this if you want to implement Field, and 
want to base that
+ * Wraps another Field (and makes it unmodifiable). You can use this if you 
want to implement Field, and want to base that
  * implementation on a existing <code>Field</code> instance.
  *
+ * To implement a modifiable field, you need to override the setters too.
+ *
  * @author  Michiel Meeuwissen
  * @version $Id$
  * @since   MMBase-1.8.1
  */
 
-public abstract class FieldWrapper implements Field {
+public class FieldWrapper implements Field {
     protected final Field field;
 
     public FieldWrapper(Field field)  {
         this.field = field;
     }
-    public abstract NodeManager getNodeManager();
+    public NodeManager getNodeManager() {
+        throw new UnsupportedOperationException();
+    }
 
     public int getState() { return Field.STATE_VIRTUAL; }
 
@@ -50,8 +54,8 @@
     public boolean isRequired() { return field.isRequired(); }
     public int getMaxLength() { return field.getMaxLength(); }
     public Collection<String> validate(Object value) { return 
field.validate(value); }
-    public boolean isVirtual() { return true; }
-    public boolean isReadOnly() { return true; }
+    public boolean isVirtual() { return field.isVirtual(); }
+    public boolean isReadOnly() { return field.isReadOnly(); }
     public String getName() { return field.getName(); }
     public String getGUIName() { return field.getGUIName(); }
     public String getGUIName(Locale locale) { return field.getGUIName(locale); 
}
@@ -63,6 +67,7 @@
     public String getDescription() { return field.getDescription(); }
     public void setDescription(String description, Locale locale) { throw new 
UnsupportedOperationException(); }
     public void setDescription(String description) { throw new 
UnsupportedOperationException(); }
+    public int compareTo(Field f) { return field.compareTo(f); }
 
 
     public Field getField() {

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to