CVS: plexus-components/formproc/src/java/org/apache/plexus/formproc DefaultFormProcService.java,NONE,1.1 FormProcService.java,NONE,1.1 FormTool.java,NONE,1.1

[email protected] Tue, 20 May 2003 18:31:13 -0500
Newsgroups gmane.comp.java.plexus.devel
Message-ID <[email protected]>
Update of /cvsroot/plexus/plexus-components/formproc/src/java/org/apache/plexus/formproc
In directory eng.werken.com:/tmp/cvs-serv9939/formproc/src/java/org/apache/plexus/formproc

Added Files:
	DefaultFormProcService.java FormProcService.java FormTool.java 
Log Message:
A formproc component.  Includes a template helper tool.  If 
interested in using this, find my on IRC and I'll tell you how things
work (but only until I write some docs).

--- NEW FILE: DefaultFormProcService.java ---
package org.apache.plexus.formproc;

import java.io.File;

import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.formproc.FormManager;

/**
 * @author <a href="mailto:[email protected]">Dan Diephouse</a>
 * @since May 15, 2003
 */
public class DefaultFormProcService
    implements FormProcService, Configurable, Initializable
{
    protected final static String CONFIGURATION = "formproc-config";
    
    private FormManager manager;
    
    private String configuration;
    
    /**
     * @see org.apache.plexus.formproc.FormProcService#getFormManager()
     */
    public FormManager getFormManager()
    {
        return manager;
    }

    /**
     * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
     */
    public void configure(Configuration config) throws ConfigurationException
    {
        configuration = config.getAttribute( CONFIGURATION, "formproc.xml" );
    }

    /**
     * @see org.apache.avalon.framework.activity.Initializable#initialize()
     */
    public void initialize() throws Exception
    {
        File configFile = new File( configuration );
        
        if ( configFile.exists() )
        {
            manager = new FormManager( configFile );
        }
        else
        {
            manager = new FormManager(
                getClass().getResourceAsStream( configuration ) );        
        }
    }

}

--- NEW FILE: FormProcService.java ---
package org.apache.plexus.formproc;

import org.formproc.FormManager;

/**
 * @author <a href="mailto:[email protected]">Dan Diephouse</a>
 * @since May 5, 2003
 */
public interface FormProcService
{
    final public static String ROLE = FormProcService.class.getName();
    
    FormManager getFormManager();
}

--- NEW FILE: FormTool.java ---
package org.apache.plexus.formproc;

import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.plexus.summit.SummitConstants;
import org.apache.plexus.summit.pull.RequestTool;
import org.apache.plexus.summit.rundata.RunData;
import org.apache.plexus.summit.view.ViewContext;
import org.formproc.Form;
import org.formproc.FormManager;
import org.formproc.FormResult;
import org.formproc.servlet.HttpForm;

/**
 * A template tool that provides easy access to FormProc.
 * 
 * @author <a href="mailto:[email protected]">Dan Diephouse</a>
 * @since May 15, 2003
 */
public class FormTool
    implements RequestTool, Serviceable
{
    private static final String FORM_KEY = "form";

    private ServiceManager manager;

    private RunData data;

    public HttpForm getForm()
    {
        HttpForm form;
        
        if ( data.getSession().getAttribute( FORM_KEY ) != null )
        {
            form = (HttpForm) data.getSession().getAttribute( FORM_KEY );
        }
        else
        {
            form = new HttpForm();
            data.getSession().setAttribute( FORM_KEY, form ); 
        }
        return form;
    }

    public HttpForm getForm( String name, Object target ) throws Exception
    {
        HttpForm form;
        
        if ( data.getSession().getAttribute( FORM_KEY ) != null )
        {
            form = (HttpForm) data.getSession().getAttribute( FORM_KEY );
        }
        else
        {
            form = new HttpForm();    
            data.getSession().setAttribute( FORM_KEY, form );        
        }
        
        form.setName(name);
        form.setTarget(target);
        configure( form );

        return form;
    }
    
    /**
     * When processing a form, this method will retrieve the value from the
     * FormResult (via getOriginalValue()).  However, if there is no FormResult
     * yet (ie, a form that is modifying values on an object), it will return
     * the value that you specify.
     * 
     * @param name
     * @param value
     * @return
     */
    public Object getValue( String name, Object value )
    {
        ViewContext context =
            (ViewContext) data.getMap().get( SummitConstants.VIEW_CONTEXT );
            
        if ( context.get( "results" ) != null )
        {
             FormResult result = (FormResult) context.get( "results" );
             return result.getOriginalValue( name );
        }
        
        return value;
    }
        
    public FormManager getFormManager() throws ServiceException
    {
        return ((FormProcService) manager.lookup(FormProcService.ROLE)).getFormManager();
    }
    
    public void configure( Form form ) throws Exception
    {
        getFormManager().configure( form );
    }
    
    /**
     * @see org.apache.plexus.summit.pull.RequestTool#setRunData(org.apache.plexus.summit.rundata.RunData)
     */
    public void setRunData(RunData data)
    {
        this.data = data;
    }

    /**
     * @see org.apache.plexus.summit.pull.RequestTool#refresh()
     */
    public void refresh()
    {
    }

    /**
     * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
     */
    public void service(ServiceManager manager) throws ServiceException
    {
        this.manager = manager;
    }
}