[daisy] Custom field editor - first attempt
Valerie Nyre
valerie at nyre.de
Tue Jul 22 16:47:01 CEST 2008
Hello
Can a simple user (= me) add more CFORM validation to the form fragments
generated by Daisy?
I though I could just copy, rename, modify and reuse the CFORM
fragments, which are generated by the DefaultFieldEditor - but
apparently this is not "simple".
Yes, this will cause perhaps some amusement. I try to learn Java and -
of course - it is not advisable to start with a custom field editor in
Daisy. However, I do hope that you can give me just a short information
tidbit for me to find my way out...
The Problem at Hand: I though I could just do a simple copy and reuse
action to see if if it basically possible to add a custom field editor.
I copied the DefaultFieldEditorl.java - renamed it (and of course the
class names for the factory) compiled it - no errors - placed it into a
JAR and then tried to use it in the WIKI. There is however a nullpointer
exception when Daisy tries to get the class .
The stack trace shows.
org.outerj.daisy.frontend.editor.FieldsFormSourceValidity./getFieldEditorClasses/
(FieldsFormSourceValidity.java:149)
org.outerj.daisy.frontend.editor.FieldsFormSourceValidity./getValidity/
(FieldsFormSourceValidity.java:122)
----------------------------------------------------------------------------------------------
The java program starts with (no other changes are made to the
DefaultFieldEditor):
package org.outerj.daisy.frontend.editor;
import org.apache.cocoon.forms.formmodel.*;
import org.apache.cocoon.forms.validation.WidgetValidator;
import org.apache.cocoon.forms.validation.ValidationErrorAware;
import org.apache.cocoon.forms.validation.ValidationError;
import org.apache.cocoon.forms.event.ValueChangedListener;
import org.apache.cocoon.forms.event.ValueChangedEvent;
import org.apache.cocoon.forms.event.ValueChangedListenerEnabled;
import org.apache.cocoon.forms.datatype.StaticSelectionList;
import org.apache.cocoon.forms.util.StringMessage;
import org.apache.cocoon.xml.IncludeXMLConsumer;
import org.apache.cocoon.components.flow.util.PipelineUtil;
import org.apache.cocoon.components.LifecycleHelper;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.logger.Logger;
import org.apache.xmlbeans.XmlCursor;
import org.outerj.daisy.repository.*;
import org.outerj.daisy.repository.Field;
import org.outerj.daisy.repository.variant.VariantManager;
import org.outerj.daisy.repository.schema.*;
import org.outerj.daisy.publisher.Publisher;
import org.outerj.daisy.frontend.util.XmlObjectXMLizable;
import org.outerx.daisy.x10Publisher.PublisherRequestDocument;
import org.outerx.daisy.x10Publisher.ResolveDocumentIdsDocument;
import org.outerx.daisy.x10.FieldTypeUseDocument;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.ContentHandler;
import java.util.*;
public class MaasFieldEditor extends AbstractFieldEditor {
private FieldEditorContext fieldEditorContext;
private MaasFieldEditor(FieldTypeUse fieldTypeUse, ServiceManager
serviceManager, Context context, Logger logger) {
super(fieldTypeUse, serviceManager, context, logger);
}
public static class Factory implements FieldEditorFactory {
public FieldEditor getFieldEditor(FieldTypeUse fieldTypeUse, Map
properties, ServiceManager serviceManager, Context context, Logger logger) {
return new MaasFieldEditor(fieldTypeUse, serviceManager,
context, logger);
}
}
....
the rest is left as the DefaultFieldEditor....
----------------------------------------------------------------------------------------------
The XML file used in the <daisywiki>/resources/xslt/B_Email.xml:
<?xml version="1.0"?>
<fieldEditor xmlns="http://outerx.org/daisy/1.0#fieldeditor"
class="org.outerj.daisy.frontend.editor.MaasFieldEditor$Factory" />
----------------------------------------------------------------------------------------------
The error message in the WIKI:
Error
Sitemap: error calling continuation
Show Details
<http://localhost:8888/OXSEEDOrgUnits/Unternehmen/547-mht_DSY/edit/195a224c72054888427a71496250175873216b2c#>
Hide Details
<http://localhost:8888/OXSEEDOrgUnits/Unternehmen/547-mht_DSY/edit/195a224c72054888427a71496250175873216b2c#>
Cocoon Stack Trace
*Message: *Sitemap: error calling continuation
file:/D:/Programme/Daisy/daisy-2.2/daisywiki/webapp/daisy/sitemap.xmap -
938:40 /<map:call>/
Java Stack Trace
*Message: *Sitemap: error calling continuation
*Class: *org.apache.cocoon.ProcessingException
*Stacktrace:*
org.apache.cocoon.ProcessingException./throwLocated/
(ProcessingException.java:113)
org.apache.cocoon.components.treeprocessor.sitemap.CallFunctionNode./invoke/
(CallFunctionNode.java:126)
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode./invokeNodes/
(AbstractParentProcessingNode.java:47)
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode./invoke/
(PreparableMatchNode.java:131)
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode./invokeNodes/
(AbstractParentProcessingNode.java:47)
org.apache.cocoon.components.treeprocessor.sitemap.MatchNode./invoke/
(MatchNode.java:108)
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode./invokeNodes/
(AbstractParentProcessingNode.java:69)
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode./invoke/
(PipelineNode.java:143)
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode./invokeNodes/
(AbstractParentProcessingNode.java:69)
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode./invoke/
(PipelinesNode.java:93)
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor./process/
(ConcreteTreeProcessor.java:235)
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor./process/
(ConcreteTreeProcessor.java:177)
org.apache.cocoon.components.treeprocessor.TreeProcessor./process/
(TreeProcessor.java:253)
org.apache.cocoon.components.treeprocessor.sitemap.MountNode./invoke/
(MountNode.java:118)
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode./invokeNodes/
(AbstractParentProcessingNode.java:69)
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode./invoke/
(PipelineNode.java:143)
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode./invokeNodes/
(AbstractParentProcessingNode.java:69)
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode./invoke/
(PipelinesNode.java:93)
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor./process/
(ConcreteTreeProcessor.java:235)
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor./process/
(ConcreteTreeProcessor.java:177)
org.apache.cocoon.components.treeprocessor.TreeProcessor./process/
(TreeProcessor.java:253)
org.apache.cocoon.Cocoon./process/ (Cocoon.java:699)
org.apache.cocoon.servlet.CocoonServlet./service/ (CocoonServlet.java:1154)
javax.servlet.http.HttpServlet./service/ (HttpServlet.java:820)
org.mortbay.jetty.servlet.ServletHolder./handle/ (ServletHolder.java:487)
org.mortbay.jetty.servlet.ServletHandler$CachedChain./doFilter/
(ServletHandler.java:1098)
org.outerj.daisy.frontend.util.CharacterEncodingFilter./doFilter/
(CharacterEncodingFilter.java:35)
org.mortbay.jetty.servlet.ServletHandler$CachedChain./doFilter/
(ServletHandler.java:1089)
org.mortbay.jetty.servlet.ServletHandler./handle/ (ServletHandler.java:365)
org.mortbay.jetty.security.SecurityHandler./handle/
(SecurityHandler.java:216)
org.mortbay.jetty.servlet.SessionHandler./handle/ (SessionHandler.java:181)
org.mortbay.jetty.handler.ContextHandler./handle/ (ContextHandler.java:712)
org.mortbay.jetty.webapp.WebAppContext./handle/ (WebAppContext.java:405)
org.mortbay.jetty.handler.HandlerCollection./handle/
(HandlerCollection.java:114)
org.mortbay.jetty.handler.HandlerWrapper./handle/ (HandlerWrapper.java:139)
org.mortbay.jetty.Server./handle/ (Server.java:285)
org.mortbay.jetty.HttpConnection./handleRequest/ (HttpConnection.java:502)
org.mortbay.jetty.HttpConnection$RequestHandler./headerComplete/
(HttpConnection.java:821)
org.mortbay.jetty.HttpParser./parseNext/ (HttpParser.java:513)
org.mortbay.jetty.HttpParser./parseAvailable/ (HttpParser.java:208)
org.mortbay.jetty.HttpConnection./handle/ (HttpConnection.java:378)
org.mortbay.io.nio.SelectChannelEndPoint./run/
(SelectChannelEndPoint.java:368)
org.mortbay.thread.BoundedThreadPool$PoolThread./run/
(BoundedThreadPool.java:442)
*Message: *
*Class: *java.lang.NullPointerException
*Stacktrace:*
org.outerj.daisy.frontend.editor.FieldsFormSourceValidity./getFieldEditorClasses/
(FieldsFormSourceValidity.java:149)
org.outerj.daisy.frontend.editor.FieldsFormSourceValidity./getValidity/
(FieldsFormSourceValidity.java:122)
org.outerj.daisy.frontend.editor.DocumentEditorFormBuilder./createFieldEditorForm/
(DocumentEditorFormBuilder.java:213)
org.outerj.daisy.frontend.editor.DocumentEditorFormBuilder./getFieldsForm/
(DocumentEditorFormBuilder.java:191)
org.outerj.daisy.frontend.editor.DocumentEditorFormBuilder./build/
(DocumentEditorFormBuilder.java:84)
org.outerj.daisy.frontend.editor.DocumentEditorFormBuilder./build/
(DocumentEditorFormBuilder.java:70)
org.outerj.daisy.frontend.editor.DocumentEditorApple./processRequest/
(DocumentEditorApple.java:214)
org.outerj.daisy.frontend.util.AbstractDaisyApple./process/
(AbstractDaisyApple.java:61)
org.apache.cocoon.components.flow.apples.ApplesProcessor./processApple/
(ApplesProcessor.java:139)
org.apache.cocoon.components.flow.apples.ApplesProcessor./handleContinuation/
(ApplesProcessor.java:108)
org.apache.cocoon.components.treeprocessor.sitemap.CallFunctionNode./invoke/
(CallFunctionNode.java:124)
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode./invokeNodes/
(AbstractParentProcessingNode.java:47)
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode./invoke/
(PreparableMatchNode.java:131)
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode./invokeNodes/
(AbstractParentProcessingNode.java:47)
org.apache.cocoon.components.treeprocessor.sitemap.MatchNode./invoke/
(MatchNode.java:108)
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode./invokeNodes/
(AbstractParentProcessingNode.java:69)
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode./invoke/
(PipelineNode.java:143)
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode./invokeNodes/
(AbstractParentProcessingNode.java:69)
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode./invoke/
(PipelinesNode.java:93)
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor./process/
(ConcreteTreeProcessor.java:235)
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor./process/
(ConcreteTreeProcessor.java:177)
org.apache.cocoon.components.treeprocessor.TreeProcessor./process/
(TreeProcessor.java:253)
org.apache.cocoon.components.treeprocessor.sitemap.MountNode./invoke/
(MountNode.java:118)
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode./invokeNodes/
(AbstractParentProcessingNode.java:69)
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode./invoke/
(PipelineNode.java:143)
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode./invokeNodes/
(AbstractParentProcessingNode.java:69)
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode./invoke/
(PipelinesNode.java:93)
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor./process/
(ConcreteTreeProcessor.java:235)
org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor./process/
(ConcreteTreeProcessor.java:177)
org.apache.cocoon.components.treeprocessor.TreeProcessor./process/
(TreeProcessor.java:253)
org.apache.cocoon.Cocoon./process/ (Cocoon.java:699)
org.apache.cocoon.servlet.CocoonServlet./service/ (CocoonServlet.java:1154)
javax.servlet.http.HttpServlet./service/ (HttpServlet.java:820)
org.mortbay.jetty.servlet.ServletHolder./handle/ (ServletHolder.java:487)
org.mortbay.jetty.servlet.ServletHandler$CachedChain./doFilter/
(ServletHandler.java:1098)
org.outerj.daisy.frontend.util.CharacterEncodingFilter./doFilter/
(CharacterEncodingFilter.java:35)
org.mortbay.jetty.servlet.ServletHandler$CachedChain./doFilter/
(ServletHandler.java:1089)
org.mortbay.jetty.servlet.ServletHandler./handle/ (ServletHandler.java:365)
org.mortbay.jetty.security.SecurityHandler./handle/
(SecurityHandler.java:216)
org.mortbay.jetty.servlet.SessionHandler./handle/ (SessionHandler.java:181)
org.mortbay.jetty.handler.ContextHandler./handle/ (ContextHandler.java:712)
org.mortbay.jetty.webapp.WebAppContext./handle/ (WebAppContext.java:405)
org.mortbay.jetty.handler.HandlerCollection./handle/
(HandlerCollection.java:114)
org.mortbay.jetty.handler.HandlerWrapper./handle/ (HandlerWrapper.java:139)
org.mortbay.jetty.Server./handle/ (Server.java:285)
org.mortbay.jetty.HttpConnection./handleRequest/ (HttpConnection.java:502)
org.mortbay.jetty.HttpConnection$RequestHandler./headerComplete/
(HttpConnection.java:821)
org.mortbay.jetty.HttpParser./parseNext/ (HttpParser.java:513)
org.mortbay.jetty.HttpParser./parseAvailable/ (HttpParser.java:208)
org.mortbay.jetty.HttpConnection./handle/ (HttpConnection.java:378)
org.mortbay.io.nio.SelectChannelEndPoint./run/
(SelectChannelEndPoint.java:368)
org.mortbay.thread.BoundedThreadPool$PoolThread./run/
(BoundedThreadPool.java:442)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.cocoondev.org/pipermail/daisy/attachments/20080722/db7b5be6/attachment-0001.htm
More information about the daisy
mailing list