[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