Author: michiel
Date: 2010-02-09 18:59:46 +0100 (Tue, 09 Feb 2010)
New Revision: 40947
Modified:
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/datatypes/BasicDataType.java
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/datatypes/util/xml/DataTypeDefinition.java
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/datatypes/util/xml/resources/datatypes.xsd
Log:
MMB-1930
Modified:
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/datatypes/BasicDataType.java
===================================================================
---
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/datatypes/BasicDataType.java
2010-02-09 16:39:30 UTC (rev 40946)
+++
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/datatypes/BasicDataType.java
2010-02-09 17:59:46 UTC (rev 40947)
@@ -73,6 +73,8 @@
private Processor[] getProcessors;
private Processor[] setProcessors;
+ private Processor defaultProcessor;
+
private Map<String, Handler<?>> handlers = new ConcurrentHashMap<String,
Handler<?>>();
private Element xml = null;
@@ -126,6 +128,7 @@
out.writeObject(setProcessors);
out.writeObject(handlers);
out.writeObject(restrictions);
+ out.writeObject(defaultProcessor);
}
// implementation of serializable
@SuppressWarnings("unchecked")
@@ -151,6 +154,7 @@
handlers = (Map<String, Handler<?>>) in.readObject();
restrictions = (Collection<Restriction<?>>) in.readObject();
unmodifiableRestrictions =
Collections.unmodifiableCollection(restrictions);
+ defaultProcessor = (Processor) in.readObject();
}
public String getBaseTypeIdentifier() {
@@ -181,6 +185,7 @@
defaultValue = origin.getDefaultValue();
commitProcessor = (CommitProcessor) ( origin.commitProcessor
instanceof PublicCloneable ? ((PublicCloneable) origin.commitProcessor).clone()
: origin.commitProcessor);
+ deleteProcessor = (CommitProcessor) ( origin.deleteProcessor
instanceof PublicCloneable ? ((PublicCloneable) origin.deleteProcessor).clone()
: origin.deleteProcessor);
if (origin.getProcessors == null) {
getProcessors = null;
} else {
@@ -191,6 +196,12 @@
} else {
setProcessors = origin.setProcessors.clone();
}
+ if (origin.defaultProcessor == null) {
+ defaultProcessor = null;
+ } else {
+ defaultProcessor = origin.defaultProcessor;
+ }
+
styleClasses = origin.styleClasses;
}
@@ -397,16 +408,27 @@
*/
public C getDefaultValue(Locale locale, Cloud cloud, Field field) {
- if (defaultValue == null) return null;
- C res = cast(defaultValue, null, null);
- if (res != null) return res;
-
- try {
- return cast(defaultValue, getCloud(cloud), null, null);
- } catch (CastException ce) {
- log.error(ce);
- return Casting.toType(classType, cloud, preCast(defaultValue,
cloud, null, field));
+ C res;
+ if (defaultValue != null) {
+ res = cast(defaultValue, null, null);
+ if (res == null) {
+ try {
+ res = cast(defaultValue, getCloud(cloud), null, null);
+ } catch (CastException ce) {
+ log.error(ce);
+ res = Casting.toType(classType, cloud,
preCast(defaultValue, cloud, null, field));
+ }
+ }
+ } else {
+ res = null;
}
+ if (defaultProcessor != null) {
+ log.debug("Found " + defaultProcessor);
+ res = Casting.toType(classType, cloud,
defaultProcessor.process(null, field, res));
+ } else {
+ //log.debug("No default processor found for " + this);
+ }
+ return res;
}
@@ -620,6 +642,7 @@
buf.append(getName() + " (" + getTypeAsClass() + (defaultValue != null
? ":" + defaultValue : "") + ")");
buf.append(commitProcessor == null ||
EmptyCommitProcessor.getInstance() == commitProcessor ? "" : " commit: " +
commitProcessor + "");
buf.append(deleteProcessor == null ||
EmptyCommitProcessor.getInstance() == deleteProcessor ? "" : " delete: " +
deleteProcessor + "");
+ buf.append(defaultProcessor == null || CopyProcessor.getInstance() ==
defaultProcessor ? "" : " default: " + defaultProcessor + "");
if (getProcessors != null) {
for (int i = 0; i < Fields.TYPE_MAXVALUE; i++) {
buf.append(getProcessors[i] == null ? "" : ("; get [" +
Fields.typeToClass(i) + "]:" + getProcessors[i] + " "));
@@ -925,6 +948,12 @@
}
+ public Processor getDefaultProcessor() {
+ return defaultProcessor == null ? CopyProcessor.getInstance() :
defaultProcessor;
+ }
+ public void setDefaultProcessor(Processor dp) {
+ defaultProcessor = dp;
+ }
public CommitProcessor getCommitProcessor() {
return commitProcessor == null ? EmptyCommitProcessor.getInstance() :
commitProcessor;
@@ -932,7 +961,6 @@
public void setCommitProcessor(CommitProcessor cp) {
commitProcessor = cp;
}
-
public CommitProcessor getDeleteProcessor() {
return deleteProcessor == null ? EmptyCommitProcessor.getInstance() :
deleteProcessor;
}
Modified:
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/datatypes/util/xml/DataTypeDefinition.java
===================================================================
---
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/datatypes/util/xml/DataTypeDefinition.java
2010-02-09 16:39:30 UTC (rev 40946)
+++
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/datatypes/util/xml/DataTypeDefinition.java
2010-02-09 17:59:46 UTC (rev 40947)
@@ -93,7 +93,7 @@
dt.inherit(baseDataType);
}
} catch (Exception e) {
- log.error(e);
+ log.error(e.getMessage(), e);
}
}
break;
@@ -169,7 +169,7 @@
return this;
}
- private static final java.util.regex.Pattern nonConditions =
java.util.regex.Pattern.compile("specialization|datatype|class|name|description|handler|styleClass|getprocessor|setprocessor|commitprocessor|deleteprocessor");
+ private static final java.util.regex.Pattern nonConditions =
java.util.regex.Pattern.compile("specialization|datatype|class|name|description|handler|styleClass|getprocessor|setprocessor|defaultprocessor|commitprocessor|deleteprocessor");
/**
* Configures the conditions of a datatype definition, using data from a
DOM element
@@ -213,7 +213,11 @@
for (String mimeType :
childElement.getAttribute("mimetype").split(",")) {
try {
Handler handler = (Handler)
Instantiator.getInstance(childElement);
- dataType.getHandlers().put(mimeType, handler);
+ if (dataType.isFinished()) {
+ log.error("The datatype " + dataType + " is
finished already", new Exception());
+ } else {
+ dataType.getHandlers().put(mimeType, handler);
+ }
} catch (Exception e) {
log.error("For mimetype " + mimeType + " " +
e.getClass() + " " + e.getMessage(), e);
}
@@ -267,6 +271,8 @@
addProcessor(DataType.PROCESS_GET, childElement, getters);
} else if ("setprocessor".equals(childTag) && !
childElement.getAttribute("type").equals("*")) {
addProcessor(DataType.PROCESS_SET, childElement, setters);
+ } else if ("defaultprocessor".equals(childTag)) {
+ addDefaultProcessor(childElement);
} else if ("commitprocessor".equals(childTag)) {
addCommitProcessor(childElement);
} else if ("deleteprocessor".equals(childTag)) {
@@ -383,6 +389,14 @@
dataType.setDeleteProcessor(newProcessor);
}
+ protected void addDefaultProcessor(Element processorElement) {
+ Processor newProcessor = DataTypeXml.createProcessor(processorElement);
+ Processor oldProcessor = dataType.getDefaultProcessor();
+ newProcessor = DataTypeXml.chainProcessors(oldProcessor, newProcessor);
+ log.info("Setting default processor " + newProcessor);
+ dataType.setDefaultProcessor(newProcessor);
+ }
+
protected void setRestrictionData(DataType.Restriction restriction,
Element element) {
if (DataTypeXml.hasAttribute(element, "fixed")) {
boolean isFixed =
Boolean.valueOf(DataTypeXml.getAttribute(element, "fixed")).booleanValue();
Modified:
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/datatypes/util/xml/resources/datatypes.xsd
===================================================================
---
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/datatypes/util/xml/resources/datatypes.xsd
2010-02-09 16:39:30 UTC (rev 40946)
+++
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/datatypes/util/xml/resources/datatypes.xsd
2010-02-09 17:59:46 UTC (rev 40947)
@@ -115,10 +115,11 @@
</xsd:complexType>
</xsd:element>
<xsd:element ref="enumeration" maxOccurs="unbounded" minOccurs="0" />
+ <xsd:element name="defaultprocessor" type="SingleProcessor"
maxOccurs="unbounded" minOccurs="0" />
<xsd:element name="setprocessor" type="Processor"
maxOccurs="unbounded" minOccurs="0" />
<xsd:element name="getprocessor" type="Processor"
maxOccurs="unbounded" minOccurs="0" />
- <xsd:element name="commitprocessor" type="Processor"
maxOccurs="unbounded" minOccurs="0" />
- <xsd:element name="deleteprocessor" type="Processor"
maxOccurs="unbounded" minOccurs="0" />
+ <xsd:element name="commitprocessor" type="SingleProcessor"
maxOccurs="unbounded" minOccurs="0" />
+ <xsd:element name="deleteprocessor" type="SingleProcessor"
maxOccurs="unbounded" minOccurs="0" />
<xsd:element ref="specialization" maxOccurs="unbounded" minOccurs="0" />
@@ -214,6 +215,12 @@
<xsd:attribute name="type" type="type_database" />
</xsd:complexType>
+ <xsd:complexType name="SingleProcessor">
+ <xsd:sequence>
+ <xsd:element name="class" type="Class" maxOccurs="unbounded"
minOccurs="1" />
+ </xsd:sequence>
+ </xsd:complexType>
+
<xsd:complexType name="Class">
<xsd:sequence>
<xsd:element ref="param" maxOccurs="unbounded" minOccurs="0" />
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs