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