dflorey     2004/05/06 09:44:55

  Modified:    proposals/projector/src/java/org/apache/slide/projector/engine
                        TestServlet.java
               proposals/projector/src/java/org/apache/slide/projector/resource
                        MapResource.java
               proposals/projector/src/java/org/apache/slide/projector/processor/form
                        ControlComposer.java FormGenerator.java
                        Trigger.java Form.java
  Log:
  Improved form handling
  
  Revision  Changes    Path
  1.3       +1 -5      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/TestServlet.java
  
  Index: TestServlet.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/TestServlet.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TestServlet.java  3 May 2004 15:50:40 -0000       1.2
  +++ TestServlet.java  6 May 2004 16:44:54 -0000       1.3
  @@ -1,7 +1,6 @@
   package org.apache.slide.projector.engine;
   
   import org.apache.slide.projector.*;
  -import org.apache.slide.projector.descriptor.BooleanValueDescriptor;
   import org.apache.slide.projector.processor.ExceptionRenderer;
   import org.apache.slide.projector.processor.SimpleProcessor;
   import org.apache.slide.projector.processor.form.Control;
  @@ -50,12 +49,9 @@
                   if ( 
ProcessorManager.getInstance().getProcessorDescriptor(uri).isBookmark() ) {
                       context.setBookmark(uri);
                   }
  +                context.setProcess(uri);
                   validatedParameters.put(Control.ACTION, uri);
  -                validatedParameters.put("handler", new 
URIResource(request.getRequestURI()));
  -                validatedParameters.put("submit", new StringResource("Los..."));
  -                validatedParameters.put("method", new StringResource("POST"));
                   validatedParameters.put(Form.LOCALE, 
ProcessorManager.getInstance().process(ProcessorManager.LOCALE_RESOLVER, 
((String)request.getHeader("accept-language")), context));
  -                validatedParameters.put(Form.VALIDATE, 
BooleanValueDescriptor.getBooleanResource(((String)request.getParameter(Form.VALIDATE))));
                   result = formProcessor.process(validatedParameters, context);
                   logger.log(Level.INFO, "State is=" + result.getState());
                   if ( result.getState() == Form.VALID_STATE ) {
  
  
  
  1.3       +9 -0      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/resource/MapResource.java
  
  Index: MapResource.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/resource/MapResource.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MapResource.java  5 May 2004 15:32:44 -0000       1.2
  +++ MapResource.java  6 May 2004 16:44:54 -0000       1.3
  @@ -21,6 +21,15 @@
           this.map = map;
       }
   
  +    public MapResource(String key, Resource value) {
  +        this();
  +        addEntry(key, value);
  +    }
  +
  +    public void addEntry(String key, Resource value) {
  +     map.put(key, value);
  +    }
  +    
       public Map getMap() {
           return map;
       }
  
  
  
  1.5       +173 -91   
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/ControlComposer.java
  
  Index: ControlComposer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/ControlComposer.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ControlComposer.java      6 May 2004 14:19:48 -0000       1.4
  +++ ControlComposer.java      6 May 2004 16:44:54 -0000       1.5
  @@ -2,6 +2,7 @@
   
   import org.apache.slide.projector.*;
   import org.apache.slide.projector.descriptor.*;
  +import org.apache.slide.projector.engine.Process;
   import org.apache.slide.projector.engine.ProcessorManager;
   import org.apache.slide.projector.i18n.DefaultMessage;
   import org.apache.slide.projector.i18n.ErrorMessage;
  @@ -26,10 +27,16 @@
       public final static String ACTION = "action";
       public final static String ERRORS_PROCESSOR = "errorsProcessor";
       public final static String CONTROL_DESCRIPTIONS = "controlDescriptions";
  +    public final static String TRIGGER_DESCRIPTIONS = "triggerDescriptions";
   
       // Parameters for each control 
       public final static String CONTROL = "control";
  -    public final static String CONTROL_CONTAINER = "control-container";
  +    public final static String CONTROL_NAME = "controlName";
  +    public final static String CONTROL_CONTAINER = "controlContainer";
  +
  +    public final static String TRIGGER = "trigger";
  +    public final static String TRIGGER_NAME = "triggerName";
  +    public final static String TRIGGER_CONTAINER = "triggerContainer";
       
       // Parameters for the control container
       protected final static String TITLE = "title";
  @@ -46,16 +53,38 @@
   
       // Result
       public final static String GENERATED_CONTROLS = "renderedControls";
  +    public final static String GENERATED_TRIGGERS = "renderedTriggers";
       public final static String RENDERED_ERRORS = "renderedErrors";
       public final static String DEFAULT_STATE ="default";
       public final static String VALID_STATE ="valid";
       public final static String INVALID_STATE ="invalid";
   
  +    // Parameters for inheriting classes
  +    public final static String HANDLER = "handler";
  +     public final static String METHOD = "method";
  +     
  +    protected final static String DEFAULT_FORM = "default form";
  +    protected final static String INVALID_FORM = "invalid form";
  +    protected final static String VALID_FORM = "valid form";
  +
  +    protected final static String GET = "GET";
  +    protected final static String POST = "POST";
  +    protected final static String[] methods = new String[] { GET, POST }; 
  +
  +    protected Template defaultTemplate;
  +    protected Template validTemplate;
  +    protected Template invalidTemplate;
  +
       protected ErrorMessage NO_ERROR_MESSAGE_AVAILABLE = new 
ErrorMessage("errorMessageNotFound");
       protected ParameterMessage NO_PARAMETER_MESSAGE_AVAILABLE = new 
ParameterMessage("parameterMessageNotFound");
   
       private ParameterDescriptor[] parameterDescriptors;
   
  +    public ControlComposer() {
  +        setRequiredFragments(new String[] { DEFAULT_FORM });
  +        setOptionalFragments(new String[] { VALID_FORM, INVALID_FORM });
  +    }
  +
       private final static ResultDescriptor resultDescriptor = new ResultDescriptor(
               new StateDescriptor[] {
                   new StateDescriptor(DEFAULT_STATE, new 
DefaultMessage("controlComposer/state/default")),
  @@ -63,127 +92,180 @@
                   new StateDescriptor(INVALID_STATE, new 
DefaultMessage("controlComposer/state/invalid"))
               },
               new ResultEntryDescriptor[]{
  -                new ResultEntryDescriptor(GENERATED_CONTROLS, new 
DefaultMessage("controlComposer/generatedControls"), MapResource.CONTENT_TYPE, false)
  +                     new ResultEntryDescriptor(GENERATED_CONTROLS, new 
DefaultMessage("controlComposer/generatedControls"), ArrayResource.CONTENT_TYPE, 
false),
  +                     new ResultEntryDescriptor(GENERATED_TRIGGERS, new 
DefaultMessage("controlComposer/generatedTriggers"), ArrayResource.CONTENT_TYPE, 
false),
  +                                     new ResultEntryDescriptor(RENDERED_ERRORS, new 
DefaultMessage("controlComposer/renderedErrors"), MapResource.CONTENT_TYPE, false)
               });
   
       public void configure(StreamableResource config) throws ConfigurationException {
           super.configure(config);
           ParameterDescriptor[] parentParameterDescriptors = 
super.getParameterDescriptors();
  -        parameterDescriptors = new 
ParameterDescriptor[parentParameterDescriptors.length + 4];
  +        parameterDescriptors = new 
ParameterDescriptor[parentParameterDescriptors.length + 5];
           System.arraycopy(parentParameterDescriptors, 0, parameterDescriptors, 0, 
parentParameterDescriptors.length);
           parameterDescriptors[parentParameterDescriptors.length] =
  -             new ParameterDescriptor(CONTROL_DESCRIPTIONS, new 
ParameterMessage("controlComposer/controlDescriptions"), new MapValueDescriptor());
  +             new ParameterDescriptor(CONTROL_DESCRIPTIONS, new 
ParameterMessage("controlComposer/controlDescriptions"), new ArrayValueDescriptor(
  +                             new MapValueDescriptor(new ParameterDescriptor[] {
  +                                             new 
ParameterDescriptor(Control.ACTION, new 
ParameterMessage("controlComposer/controlDescriptions/action"), new 
URIValueDescriptor(), NullResource.NULL),
  +                                             new ParameterDescriptor(CONTROL, new 
ParameterMessage("controlComposer/controlDescriptions/control"), new 
URIValueDescriptor()),
  +                                             new 
ParameterDescriptor(CONTROL_CONTAINER, new 
ParameterMessage("controlComposer/controlDescriptions/controlContainer"), new 
URIValueDescriptor(), NullResource.NULL),
  +                             })));
           parameterDescriptors[parentParameterDescriptors.length+1] =
  -             new ParameterDescriptor(LOCALE, new 
ParameterMessage("controlComposer/locale"), new LocaleValueDescriptor());
  +             new ParameterDescriptor(TRIGGER_DESCRIPTIONS, new 
ParameterMessage("controlComposer/triggerDescriptions"), new ArrayValueDescriptor(
  +                             new MapValueDescriptor(new ParameterDescriptor[] {
  +                                             new 
ParameterDescriptor(Trigger.ACTION, new 
ParameterMessage("controlComposer/triggerDescriptions/action"), new 
URIValueDescriptor(), NullResource.NULL),
  +                                             new 
ParameterDescriptor(Trigger.BOOKMARK, new 
ParameterMessage("controlComposer/triggerDescriptions/bookmark"), new 
URIValueDescriptor(), NullResource.NULL),
  +                                             new 
ParameterDescriptor(Trigger.VALIDATE, new 
ParameterMessage("controlComposer/triggerDescriptions/validate"), new 
BooleanValueDescriptor(), BooleanResource.TRUE),
  +                                             new ParameterDescriptor(Process.STEP, 
new ParameterMessage("controlComposer/triggerDescriptions/step"), new 
StringValueDescriptor()),
  +                                             new ParameterDescriptor(TRIGGER, new 
ParameterMessage("controlComposer/triggerDescriptions/trigger"), new 
URIValueDescriptor()),
  +                                             new 
ParameterDescriptor(TRIGGER_CONTAINER, new 
ParameterMessage("controlComposer/triggerDescriptions/triggerContainer"), new 
URIValueDescriptor(), NullResource.NULL)
  +                             })));
           parameterDescriptors[parentParameterDescriptors.length+2] =
  -             new ParameterDescriptor(ACTION, new 
ParameterMessage("controlComposer/action"), new URIValueDescriptor());
  +             new ParameterDescriptor(LOCALE, new 
ParameterMessage("controlComposer/locale"), new LocaleValueDescriptor());
           parameterDescriptors[parentParameterDescriptors.length+3] =
  +             new ParameterDescriptor(ACTION, new 
ParameterMessage("controlComposer/action"), new URIValueDescriptor());
  +        parameterDescriptors[parentParameterDescriptors.length+4] =
                new ParameterDescriptor(ERRORS_PROCESSOR, new 
ParameterMessage("controlComposer/errorsProcessor"), new URIValueDescriptor(), 
NullResource.NULL);
  +
  +        try {
  +            defaultTemplate = getRequiredFragment(DEFAULT_FORM);
  +        } catch ( ProcessException exception ) {
  +            throw new ConfigurationException(new 
ErrorMessage("form/defaultFragmentMissing"));
  +        }
  +        validTemplate = getOptionalFragment(VALID_FORM);
  +        invalidTemplate = getOptionalFragment(INVALID_FORM);
       }
   
       public Result process(Map parameter, Context context) throws Exception {
  -     Map controlDescriptions = 
((MapResource)parameter.get(CONTROL_DESCRIPTIONS)).getMap();
  +     Resource[] controlDescriptions = 
((ArrayResource)parameter.get(CONTROL_DESCRIPTIONS)).getArray();
  +     Resource[] triggerDescriptions = 
((ArrayResource)parameter.get(TRIGGER_DESCRIPTIONS)).getArray();
        URI actionUri = (URIResource)parameter.get(ACTION);
        Resource errorsProcessorUri = (Resource)parameter.get(ERRORS_PROCESSOR);
        Locale locale = ((LocaleResource)parameter.get(LOCALE)).getLocale();
           String state = DEFAULT_STATE;
           List informations = context.getInformations();
  -        MapResource generatedControls = new MapResource();
                MapResource mapResource = 
(MapResource)context.getStore(Store.SESSION).get(context.getProcess().toString());
  -        for (Iterator i = controlDescriptions.entrySet().iterator(); i.hasNext(); ) 
{
  -             Map.Entry entry = (Map.Entry)i.next();
  -             String controlName = (String)entry.getKey();
  -             Map controlParameters = ((MapResource)entry.getValue()).getMap();
  +             List generatedControls = new ArrayList();
  +             for (int i = 0; i < controlDescriptions.length; i++ ) {
  +             Map controlParameters = ((MapResource)controlDescriptions[i]).getMap();
  +             String controlName = controlParameters.get(CONTROL_NAME).toString();
                URI controlUri = (URI)controlParameters.get(CONTROL); 
  -             Processor control = 
(Processor)ProcessorManager.getInstance().getProcessor(controlUri);
  +             Control control = 
(Control)ProcessorManager.getInstance().getProcessor(controlUri);
                Resource controlActionUri = 
(Resource)controlParameters.get(Control.ACTION);
  -             if ( controlActionUri == null || controlActionUri instanceof 
NullResource ) controlActionUri = actionUri; 
  +             if ( controlActionUri == NullResource.NULL ) controlActionUri = 
actionUri; 
                        controlParameters.put(Control.ACTION, controlActionUri);
                try {
                        ProcessorHelper.validate(control.getParameterDescriptors(), 
controlParameters, context);
                } catch ( ValidationException exception ) {
                        throw new ValidationException(new 
ErrorMessage("controlComposer/controlParameterInvalid", new Object[] { controlUri }), 
exception);
                }
  -             if ( control instanceof Control ) {
  -                     ParameterDescriptor parameterDescriptor = 
Control.getParameterDescriptor(controlParameters, context); 
  -                     String parameterName = parameterDescriptor.getName();
  -                     ParameterMessage description = 
(ParameterMessage)parameterDescriptor.getDescription();
  -                     boolean required = parameterDescriptor.isRequired();
  -                     String controlState = Control.OPTIONAL_CONTROL;
  -                     if ( required ) {
  -                             controlState = Control.REQUIRED_CONTROL;
  -                     }
  -                     Object controlValue = null;
  -                     boolean validate = false;
  -                     if ( mapResource != null ) {
  -                             controlValue = mapResource.getMap().get(parameterName);
  -                             validate = 
((BooleanResource)mapResource.getMap().get(VALIDATE)).booleanValue();
  -                     }
  -                     if ( validate ) {
  -                             try {
  -                                     controlValue = 
ProcessorHelper.validate(parameterDescriptor, controlValue, context);
  -                             } catch ( ValidationException exception ) {
  -                                     controlValue = 
StringValueDescriptor.toString(controlValue);
  -                                     context.addInformation(new 
Information(Information.ERROR, exception.getErrorMessage(), new String[] { 
parameterName }));
  -                             }
  -                             controlParameters.put(Control.VALUE, controlValue);
  -                             if ( hasErrors(informations, parameterName) ) {
  -                                     if ( required ) {
  -                                             controlState = 
Control.REQUIRED_INVALID_CONTROL;
  -                                     } else {
  -                                             controlState = 
Control.OPTIONAL_INVALID_CONTROL;
  -                                     }
  -                                     explodeInformations(controlParameters, 
informations, parameterName, locale);
  -                             } else {
  -                                     if ( required ) {
  -                                             controlState = 
Control.REQUIRED_INVALID_CONTROL;
  -                                     } else {
  -                                             controlState = 
Control.OPTIONAL_VALID_CONTROL;
  -                                     }
  -                             }
  -                     }
  -             controlParameters.put(Control.STATE, controlState);
  -                controlParameters.put(Control.VALUE, controlValue);
  -                Result controlResult = control.process(controlParameters, context);
  -                String controlContainerUri = 
(String)controlParameters.get(CONTROL_CONTAINER); 
  -                if ( controlContainerUri != null ) {
  -                     Processor controlContainer = 
ProcessorManager.getInstance().getProcessor(new URIResource(controlContainerUri));
  -                     Map controlContainerParameters = new HashMap();
  -                     controlContainerParameters.putAll(parameter);
  -                     if ( hasErrors(informations, parameterName) ) {
  -                             explodeInformations(controlContainerParameters, 
informations, parameterName, locale);
  -                     } 
  -                     controlContainerParameters.put(Control.STATE, controlState);
  -                     controlContainerParameters.put(CONTROL, 
controlResult.getResultEntries().get(OUTPUT));
  -                     controlContainerParameters.put(TITLE, 
description.getTitle(locale, parameterName ));
  -                     try {
  -                             controlContainerParameters.put(TEXT, 
description.getText(locale));
  -                             controlContainerParameters.put(PROMPT, 
description.getPrompt(locale));
  -                     } catch ( MessageNotFoundException exception ) {
  -                             controlContainerParameters.put(TEXT, 
NO_PARAMETER_MESSAGE_AVAILABLE.getText(locale, "&nbsp;"));
  -                             controlContainerParameters.put(PROMPT, 
NO_PARAMETER_MESSAGE_AVAILABLE.getPrompt(locale, "&nbsp;"));
  -                     }
  -                     try {
  -                             
ProcessorHelper.validate(controlContainer.getParameterDescriptors(), 
controlContainerParameters, context);
  -                     } catch ( ValidationException exception ) {
  -                             throw new ValidationException(new 
ErrorMessage("controlComposer/controlContainerParameterInvalid", new Object[] { 
controlContainerUri }), exception);
  -                     }
  -                     Result controlContainerResult = 
controlContainer.process(controlContainerParameters, context);
  -                     generatedControls.getMap().put(controlName, 
controlContainerResult.getResultEntries().get(OUTPUT));
  -                } else {
  -                     generatedControls.getMap().put(controlName, 
controlResult.getResultEntries().get(OUTPUT));
  -                }
  -             if ( controlState == Control.OPTIONAL_INVALID_CONTROL || controlState 
== Control.REQUIRED_INVALID_CONTROL  ) {
  -                     state = INVALID_STATE;
  -             } else if ( state == DEFAULT_STATE && ( controlState == 
Control.OPTIONAL_VALID_CONTROL || controlState == Control.REQUIRED_VALID_CONTROL ) ) {
  -                     state = VALID_STATE;
  +            Resource controlContainerUri = 
(Resource)controlParameters.get(CONTROL_CONTAINER); 
  +            ParameterDescriptor parameterDescriptor = 
Control.getParameterDescriptor(controlParameters, context); 
  +            String parameterName = parameterDescriptor.getName();
  +            ParameterMessage description = 
(ParameterMessage)parameterDescriptor.getDescription();
  +            boolean required = parameterDescriptor.isRequired();
  +            String controlState = Control.OPTIONAL_CONTROL;
  +            if ( required ) {
  +             controlState = Control.REQUIRED_CONTROL;
  +            }
  +            Object controlValue = null;
  +            boolean validate = false;
  +            if ( mapResource != null ) {
  +             controlValue = mapResource.getMap().get(parameterName);
  +             validate = 
((BooleanResource)mapResource.getMap().get(VALIDATE)).booleanValue();
  +            }
  +            if ( validate ) {
  +             try {
  +                     controlValue = ProcessorHelper.validate(parameterDescriptor, 
controlValue, context);
  +             } catch ( ValidationException exception ) {
  +                     controlValue = StringValueDescriptor.toString(controlValue);
  +                     context.addInformation(new Information(Information.ERROR, 
exception.getErrorMessage(), new String[] { parameterName }));
  +             }
  +             controlParameters.put(Control.VALUE, controlValue);
  +             if ( hasErrors(informations, parameterName) ) {
  +                     if ( required ) {
  +                             controlState = Control.REQUIRED_INVALID_CONTROL;
  +                     } else {
  +                             controlState = Control.OPTIONAL_INVALID_CONTROL;
  +                     }
  +                     explodeInformations(controlParameters, informations, 
parameterName, locale);
  +             } else {
  +                     if ( required ) {
  +                             controlState = Control.REQUIRED_INVALID_CONTROL;
  +                     } else {
  +                             controlState = Control.OPTIONAL_VALID_CONTROL;
  +                     }
  +             }
  +            }
  +            controlParameters.put(Control.STATE, controlState);
  +            controlParameters.put(Control.VALUE, controlValue);
  +            Result controlResult = control.process(controlParameters, context);
  +            if ( controlContainerUri != NullResource.NULL ) {
  +             Processor controlContainer = 
ProcessorManager.getInstance().getProcessor((URI)controlContainerUri);
  +             Map controlContainerParameters = new HashMap();
  +             controlContainerParameters.putAll(parameter);
  +             if ( hasErrors(informations, parameterName) ) {
  +                     explodeInformations(controlContainerParameters, informations, 
parameterName, locale);
  +             } 
  +             controlContainerParameters.put(Control.STATE, controlState);
  +             controlContainerParameters.put(CONTROL, 
controlResult.getResultEntries().get(OUTPUT));
  +             controlContainerParameters.put(TITLE, description.getTitle(locale, 
parameterName ));
  +             try {
  +                     controlContainerParameters.put(TEXT, 
description.getText(locale));
  +                     controlContainerParameters.put(PROMPT, 
description.getPrompt(locale));
  +             } catch ( MessageNotFoundException exception ) {
  +                     controlContainerParameters.put(TEXT, 
NO_PARAMETER_MESSAGE_AVAILABLE.getText(locale, "&nbsp;"));
  +                     controlContainerParameters.put(PROMPT, 
NO_PARAMETER_MESSAGE_AVAILABLE.getPrompt(locale, "&nbsp;"));
  +             }
  +             try {
  +                     
ProcessorHelper.validate(controlContainer.getParameterDescriptors(), 
controlContainerParameters, context);
  +             } catch ( ValidationException exception ) {
  +                     throw new ValidationException(new 
ErrorMessage("controlComposer/controlContainerParameterInvalid", new Object[] { 
controlContainerUri }), exception);
                }
  -             } else {
  -                Result controlResult = control.process(controlParameters, context);
  -             generatedControls.getMap().put(controlName, 
controlResult.getResultEntries().get(OUTPUT));
  +             Result controlContainerResult = 
controlContainer.process(controlContainerParameters, context);
  +             generatedControls.add(new MapResource(controlName, 
(Resource)controlContainerResult.getResultEntries().get(OUTPUT)));
  +            } else {
  +             generatedControls.add(new MapResource(controlName, 
(Resource)controlResult.getResultEntries().get(OUTPUT)));
  +            }
  +            if ( controlState == Control.OPTIONAL_INVALID_CONTROL || controlState 
== Control.REQUIRED_INVALID_CONTROL  ) {
  +             state = INVALID_STATE;
  +            } else if ( state == DEFAULT_STATE && ( controlState == 
Control.OPTIONAL_VALID_CONTROL || controlState == Control.REQUIRED_VALID_CONTROL ) ) {
  +             state = VALID_STATE;
  +            }
  +        }
  +        Result composerResult = new Result(state, GENERATED_CONTROLS, new 
ArrayResource((Resource [])generatedControls.toArray(new 
Resource[generatedControls.size()]))); 
  +             List generatedTriggers = new ArrayList();
  +             for (int i = 0; i < triggerDescriptions.length; i++ ) {
  +             Map triggerParameters = ((MapResource)triggerDescriptions[i]).getMap();
  +             String triggerName = triggerParameters.get(TRIGGER_NAME).toString();
  +             URI triggerUri = (URI)triggerParameters.get(TRIGGER);
  +             Trigger trigger = 
(Trigger)ProcessorManager.getInstance().getProcessor(triggerUri);
  +             Resource triggerActionUri = 
(Resource)triggerParameters.get(Trigger.ACTION);
  +             if ( triggerActionUri == NullResource.NULL ) triggerActionUri = 
actionUri; 
  +                     triggerParameters.put(Trigger.ACTION, triggerActionUri);
  +             try {
  +                     ProcessorHelper.validate(trigger.getParameterDescriptors(), 
triggerParameters, context);
  +             } catch ( ValidationException exception ) {
  +                     throw new ValidationException(new 
ErrorMessage("controlComposer/triggerParameterInvalid", new Object[] { triggerUri }), 
exception);
                }
  +            Resource triggerContainerUri = 
(Resource)triggerParameters.get(TRIGGER_CONTAINER); 
  +            Result triggerResult = trigger.process(triggerParameters, context);
  +            if ( triggerContainerUri != NullResource.NULL ) {
  +             Processor triggerContainer = 
ProcessorManager.getInstance().getProcessor((URI)triggerContainerUri);
  +             Map triggerContainerParameters = new HashMap();
  +             triggerContainerParameters.putAll(parameter);
  +             triggerContainerParameters.put(TRIGGER, 
triggerResult.getResultEntries().get(OUTPUT));
  +             try {
  +                     
ProcessorHelper.validate(triggerContainer.getParameterDescriptors(), 
triggerContainerParameters, context);
  +             } catch ( ValidationException exception ) {
  +                     throw new ValidationException(new 
ErrorMessage("controlComposer/triggerContainerParameterInvalid", new Object[] { 
triggerContainerUri }), exception);
  +             }
  +             Result triggerContainerResult = 
triggerContainer.process(triggerContainerParameters, context);
  +             generatedControls.add(new MapResource(triggerName, 
(Resource)triggerContainerResult.getResultEntries().get(OUTPUT)));
  +            } else {
  +             generatedControls.add(new MapResource(triggerName, 
(Resource)triggerResult.getResultEntries().get(OUTPUT)));
  +            }
           }
  -        Result composerResult = new Result(state, GENERATED_CONTROLS, 
generatedControls); 
  +        composerResult.addResultEntry(GENERATED_TRIGGERS, new 
ArrayResource((Resource [])generatedTriggers.toArray(new 
Resource[generatedTriggers.size()]))); 
           if ( errorsProcessorUri instanceof URI ) {
                Processor errorsTable = 
ProcessorManager.getInstance().getProcessor((URI)errorsProcessorUri);
                List errorList = new ArrayList();
  
  
  
  1.4       +66 -105   
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/FormGenerator.java
  
  Index: FormGenerator.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/FormGenerator.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- FormGenerator.java        5 May 2004 15:32:44 -0000       1.3
  +++ FormGenerator.java        6 May 2004 16:44:54 -0000       1.4
  @@ -2,15 +2,13 @@
   
   import org.apache.slide.projector.*;
   import org.apache.slide.projector.descriptor.*;
  +import org.apache.slide.projector.engine.Process;
   import org.apache.slide.projector.engine.HttpContext;
   import org.apache.slide.projector.engine.ProcessorManager;
   import org.apache.slide.projector.i18n.DefaultMessage;
   import org.apache.slide.projector.i18n.ErrorMessage;
  -import org.apache.slide.projector.i18n.MessageNotFoundException;
   import org.apache.slide.projector.i18n.ParameterMessage;
  -import org.apache.slide.projector.processor.SimpleProcessor;
   import org.apache.slide.projector.resource.*;
  -import org.apache.slide.projector.util.ProcessorHelper;
   
   import java.util.*;
   
  @@ -18,8 +16,9 @@
    * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Florey</a>
    * @version $Revision$
    */
  -public class FormGenerator extends Form {
  -    public final static String CONTROL_FRAGMENT = " control";
  +public class FormGenerator extends ControlComposer {
  +    public final static String CONTROLS = "controls";
  +    public final static String TRIGGERS = "triggers";
   
       protected final static URI TEXTFIELD = new URIResource("/textfield");
       protected final static URI TEXTAREA = new URIResource("/textarea");
  @@ -27,6 +26,10 @@
       protected final static URI COMBOBOX = new URIResource("/combobox");
       protected final static URI CHECKBOX = new URIResource("/checkbox");
       protected final static URI ERRORS_TABLE = new URIResource("/errors");
  +    protected final static URI TRIGGER_URI = new URIResource("/textbutton");
  +    protected final static URI TRIGGER_IMAGE = new 
URIResource("/files/contelligent/images/module2_corner_left.gif");
  +    protected final static URI DEFAULT_CONTROL_CONTAINER = new 
URIResource("/bigControl");
  +    protected final static URI DEFAULT_TRIGGER_CONTAINER = new 
URIResource("/triggerContainer");
   
       protected final static String PROCESSOR_NAME = "processor-name";
       protected final static String PROCESSOR_TITLE = "processor-title";
  @@ -36,120 +39,66 @@
   
       protected final static String STYLE = "style";
       protected final static String ORANGE_STYLE = "/orangeStyle";
  -    protected ParameterMessage NO_PARAMETER_MESSAGE_AVAILABLE = new 
ParameterMessage("parameterMessageNotFound");
   
       private ParameterDescriptor[] parameterDescriptors;
   
       public FormGenerator() {
  -        setRequiredFragments(new String[] { DEFAULT_FORM, 
Control.OPTIONAL_CONTROL+CONTROL, Control.REQUIRED_CONTROL+CONTROL });
  -        setOptionalFragments(new String[] { VALID_FORM, INVALID_FORM, 
Control.OPTIONAL_VALID_CONTROL+CONTROL, Control.OPTIONAL_INVALID_CONTROL+CONTROL,
  -                                            Control.REQUIRED_VALID_CONTROL+CONTROL, 
Control.REQUIRED_INVALID_CONTROL+CONTROL  });
  +     super();
       }
   
       public Result process(Map parameter, Context context) throws Exception {
  -     // FIXME: Redo!!
  -     /*
  -     // Collect involved parameters and call super
  -     
  -     boolean validate = ((BooleanResource)parameter.get(VALIDATE)).booleanValue();
           URI actionUri = (URIResource)parameter.get(Control.ACTION);
           Processor action = ProcessorManager.getInstance().getProcessor(actionUri);
           Locale locale = ((LocaleResource)parameter.get(LOCALE)).getLocale();
           ParameterDescriptor []actionParameterDescriptors = 
action.getParameterDescriptors();
           StringBuffer buffer = new StringBuffer();
  -        String state = DEFAULT_STATE;
  -        List informations = context.getInformations();
  +        List controlDescriptors = new ArrayList();
  +        // Collect controls to compose...
           for (int i = 0; i < actionParameterDescriptors.length; i++) {
  -            String parameterName = actionParameterDescriptors[i].getName();
  -            ParameterMessage description = 
(ParameterMessage)actionParameterDescriptors[i].getDescription();
  -            URI controlUri = 
getControlURI(actionParameterDescriptors[i].getValueDescriptor());
  -            Processor control = 
ProcessorManager.getInstance().getProcessor(controlUri);
  -            Map controlParameters = new HashMap();
  -            boolean required = actionParameterDescriptors[i].isRequired();
  -            String controlState = Control.OPTIONAL_CONTROL;
  -            Object controlValue = 
context.getStore(Store.REQUEST_PARAMETER).get(parameterName);
  -            if ( required ) {
  -                controlState = Control.REQUIRED_CONTROL;
  -            } else {
  -                controlValue = actionParameterDescriptors[i].getDefaultValue();
  -            }
  -            if ( validate ) {
  -                try {
  -                    controlValue = 
ProcessorHelper.validate(actionParameterDescriptors[i], controlValue, context);
  -                } catch ( ValidationException exception ) {
  -                    controlValue = StringValueDescriptor.toString(controlValue);
  -                    context.addInformation(new Information(Information.ERROR, 
exception.getErrorMessage(), new String[] { parameterName }));
  -                }
  -                if ( hasErrors(context.getInformations(), parameterName) ) {
  -                    if ( required ) {
  -                        controlState = Control.REQUIRED_INVALID_CONTROL;
  -                    } else {
  -                        controlState = Control.OPTIONAL_INVALID_CONTROL;
  -                    }
  -                    explodeInformations(controlParameters, informations, 
parameterName, locale);
  -                } else {
  -                    if ( required ) {
  -                        controlState = Control.REQUIRED_VALID_CONTROL;
  -                    } else {
  -                        controlState = Control.OPTIONAL_VALID_CONTROL;
  -                    }
  -                }
  -            }
  -            controlParameters.put(Control.VALUE, controlValue);
  -            controlParameters.put(Control.STATE, controlState);
  -            controlParameters.put(CLASS, controlUri.toString().substring(1));
  -            controlParameters.put(Control.ACTION, actionUri);
  -            controlParameters.put(Control.PARAMETER, new 
StringResource(parameterName));
  -            try {
  -                ProcessorHelper.validate(control.getParameterDescriptors(), 
controlParameters, context);
  -            } catch ( ValidationException exception ) {
  -                throw new ValidationException(new 
ErrorMessage("form/controlParameterInvalid", new Object[] { control }), exception);
  -            }
  -            Result controlResult = control.process(controlParameters, context);
  -            Map controlContainerParameters = new HashMap();
  -            controlContainerParameters.putAll(parameter);
  -            if ( hasErrors(informations, parameterName) ) {
  -                explodeInformations(controlContainerParameters, informations, 
parameterName, locale);
  -            }
  -            controlContainerParameters.put(Form.CONTROL, 
controlResult.getResultEntries().get(OUTPUT));
  -            controlContainerParameters.put(TITLE, description.getTitle(locale, 
actionParameterDescriptors[i].getName() ));
  -            try {
  -                controlContainerParameters.put(TEXT, description.getText(locale));
  -                controlContainerParameters.put(PROMPT, 
description.getPrompt(locale));
  -            } catch ( MessageNotFoundException exception ) {
  -                controlContainerParameters.put(TEXT, 
NO_PARAMETER_MESSAGE_AVAILABLE.getText(locale, "&nbsp;"));
  -                controlContainerParameters.put(PROMPT, 
NO_PARAMETER_MESSAGE_AVAILABLE.getPrompt(locale, "&nbsp;"));
  -            }
  -            renderFragment(buffer, controlState+CONTROL, 
controlContainerParameters);
  -            if ( controlState == Control.OPTIONAL_INVALID_CONTROL || controlState 
== Control.REQUIRED_INVALID_CONTROL  ) {
  -                state = INVALID_STATE;
  -            } else if ( state == DEFAULT_STATE && ( controlState == 
Control.OPTIONAL_VALID_CONTROL || controlState == Control.REQUIRED_VALID_CONTROL ) ) {
  -                state = VALID_STATE;
  -            }
  +             String parameterName = actionParameterDescriptors[i].getName(); 
  +             MapResource controlDescriptor = new MapResource();
  +             controlDescriptor.getMap().put(Control.ACTION, actionUri);
  +             controlDescriptor.getMap().put(Control.PARAMETER, parameterName);
  +             controlDescriptor.getMap().put(CONTROL, 
getControlURI(actionParameterDescriptors[i].getValueDescriptor()));
  +             controlDescriptor.getMap().put(CONTROL_CONTAINER, 
DEFAULT_CONTROL_CONTAINER);
  +             controlDescriptor.getMap().put(CONTROL_NAME, parameterName);
  +             controlDescriptors.add(controlDescriptor);
  +        }
  +        parameter.put(CONTROL_DESCRIPTIONS, new 
ArrayResource((Resource[])controlDescriptors.toArray(new 
Resource[controlDescriptors.size()])));
  +
  +        // Finally add testing trigger...
  +     MapResource triggerDescriptor = new MapResource();
  +     triggerDescriptor.getMap().put(Trigger.ACTION, actionUri);
  +     triggerDescriptor.getMap().put(Trigger.VALIDATE, BooleanResource.TRUE);
  +//           triggerDescriptor.getMap().put(Trigger.BOOKMARK, actionUri);
  +     triggerDescriptor.getMap().put(Process.STEP, "perform");
  +     triggerDescriptor.getMap().put(TRIGGER, TRIGGER_URI);
  +     triggerDescriptor.getMap().put(TRIGGER_NAME, TRIGGER_URI);
  +     triggerDescriptor.getMap().put("image", TRIGGER_IMAGE);
  +     triggerDescriptor.getMap().put(TRIGGER_CONTAINER, DEFAULT_TRIGGER_CONTAINER);
  +        parameter.put(TRIGGER_DESCRIPTIONS, new ArrayResource(new Resource[] { 
triggerDescriptor }));
  +        
  +        parameter.put(HANDLER, 
ProcessorManager.getInstance().process(ProcessorManager.URL, 
Constants.DEFAULT_FORM_HANDLER, context));
  +        parameter.put(METHOD, new StringResource(POST));
  +        Result controlComposerResult = super.process(parameter, context);
  +        StringBuffer controlBuffer = new StringBuffer();
  +        Resource []generatedControls = 
((ArrayResource)controlComposerResult.getResultEntries().get(ControlComposer.GENERATED_CONTROLS)).getArray();
  +        for ( int i = 0; i < generatedControls.length; i++ ) {
  +             Iterator j = 
((MapResource)generatedControls[i]).getMap().values().iterator();
  +             StringResource renderedControl = (StringResource)j.next();
  +             buffer.append(renderedControl.toString());
           }
           StringResource composedControls = new StringResource(buffer.toString());
           parameter.put(CONTROLS, composedControls);
  -        Template template = defaultTemplate;
  -        if ( state == VALID_STATE && validTemplate != null ) {
  -            template = validTemplate;
  -        } else if ( state == INVALID_STATE && invalidTemplate != null ) {
  -            template = invalidTemplate;
  -        }
  -        Processor errorsTable = 
ProcessorManager.getInstance().getProcessor(ERRORS_TABLE);
  -        List errorList = new ArrayList();
  -        for ( Iterator i = context.getInformations().iterator(); i.hasNext(); ) {
  -             Information info = (Information)i.next();
  -             Map errors = new HashMap();
  -            explodeInformation(errors, info, locale );
  -            errorList.add(new MapResource(errors));
  +        StringBuffer triggerBuffer = new StringBuffer();
  +        Resource []generatedTriggers = 
((ArrayResource)controlComposerResult.getResultEntries().get(ControlComposer.GENERATED_TRIGGERS)).getArray();
  +        for ( int i = 0; i < generatedTriggers.length; i++ ) {
  +             Iterator j = 
((MapResource)generatedTriggers[i]).getMap().values().iterator();
  +             StringResource renderedTrigger = (StringResource)j.next();
  +             buffer.append(renderedTrigger.toString());
           }
  -        Map errorsParameter = new HashMap();
  -        MapResource[] errorsArray = new MapResource[errorList.size()];
  -        errorsParameter.put(SimpleProcessor.INPUT, new 
ArrayResource((MapResource[])errorList.toArray(errorsArray)));
  -        ProcessorHelper.validate(errorsTable.getParameterDescriptors(), 
errorsParameter, context);
  -        Result renderedErrors = errorsTable.process(errorsParameter, context);
  -        parameter.put(ERRORS, renderedErrors.getResultEntries().get(OUTPUT));
  -
  +        StringResource composedTriggers= new StringResource(buffer.toString());
  +        parameter.put(TRIGGERS, composedTriggers);
           ProcessorDescriptor processorDescriptor = 
ProcessorManager.getInstance().getProcessorDescriptor(actionUri);
           parameter.put(PROCESSOR_NAME, processorDescriptor.getName());
           parameter.put(PROCESSOR_TITLE, 
((DefaultMessage)processorDescriptor.getDescription()).getTitle(locale, 
processorDescriptor.getName()));
  @@ -159,9 +108,14 @@
           parameter.put(TITLE, processorDescriptor.getName());
           parameter.put(STYLE, ((HttpContext)context).getContextPath() + 
ORANGE_STYLE);
           parameter.put(ERRORS_TITLE, "Fehler:");
  +        Template template = defaultTemplate;
  +        String state = controlComposerResult.getState();
  +        if ( state == VALID_STATE && validTemplate != null ) {
  +            template = validTemplate;
  +        } else if ( state == INVALID_STATE && invalidTemplate != null ) {
  +            template = invalidTemplate;
  +        }
           return new Result(state, OUTPUT, renderFragment(template, parameter));
  -        */
  -        return null;
       }
   
       public void configure(StreamableResource config) throws ConfigurationException {
  @@ -170,6 +124,13 @@
               new ParameterDescriptor(ACTION, new 
ParameterMessage("formGenerator/action"), new URIValueDescriptor()),
               new ParameterDescriptor(LOCALE, new 
ParameterMessage("formGenerator/locale"), new LocaleValueDescriptor(), new 
LocaleResource(Locale.getDefault()))
           };
  +        try {
  +            defaultTemplate = getRequiredFragment(DEFAULT_FORM);
  +        } catch ( ProcessException exception ) {
  +            throw new ConfigurationException(new 
ErrorMessage("form/defaultFragmentMissing"));
  +        }
  +        validTemplate = getOptionalFragment(VALID_FORM);
  +        invalidTemplate = getOptionalFragment(INVALID_FORM);
       }
   
       public ParameterDescriptor[] getParameterDescriptors() {
  
  
  
  1.6       +1 -2      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Trigger.java
  
  Index: Trigger.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Trigger.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Trigger.java      6 May 2004 12:54:11 -0000       1.5
  +++ Trigger.java      6 May 2004 16:44:54 -0000       1.6
  @@ -27,7 +27,6 @@
   public abstract class Trigger extends TemplateRenderer {
        public final static String INSTRUCTION = "instruction";
       public final static String ACTION = "action";
  -    public final static String LAST_STEP = "last-step";
       public final static String VALIDATE = "validate";
        public final static String BOOKMARK = "bookmark";
   
  
  
  
  1.6       +24 -38    
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Form.java
  
  Index: Form.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Form.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Form.java 6 May 2004 12:54:11 -0000       1.5
  +++ Form.java 6 May 2004 16:44:54 -0000       1.6
  @@ -29,7 +29,6 @@
   import org.apache.slide.projector.engine.ContentType;
   import org.apache.slide.projector.engine.ProcessorManager;
   import org.apache.slide.projector.i18n.DefaultMessage;
  -import org.apache.slide.projector.i18n.ErrorMessage;
   import org.apache.slide.projector.i18n.ParameterMessage;
   import org.apache.slide.projector.resource.*;
   
  @@ -41,24 +40,9 @@
    * @author <a href="mailto:[EMAIL PROTECTED]">Daniel Florey</a>
    */
   public class Form extends ControlComposer {
  -     public final static String HANDLER = "handler";
  -     public final static String METHOD = "method";
  -     
        public final static String CONTROL_IDENTIFIER = "control:";
       public final static String TRIGGER_IDENTIFIER = "trigger:";
   
  -    protected final static String DEFAULT_FORM = "default form";
  -    protected final static String INVALID_FORM = "invalid form";
  -    protected final static String VALID_FORM = "valid form";
  -
  -    private final static String GET = "GET";
  -    private final static String POST = "POST";
  -    private final static String[] methods = new String[] { GET, POST }; 
  -
  -    protected Template defaultTemplate;
  -    protected Template validTemplate;
  -    protected Template invalidTemplate;
  -
       private ParameterDescriptor[] parameterDescriptors;
       
       private final static ResultDescriptor resultDescriptor = new ResultDescriptor(
  @@ -71,29 +55,38 @@
                   new ResultEntryDescriptor(OUTPUT, new 
DefaultMessage("form/output"), ContentType.DYNAMIC, false)
               });
   
  -    public Form() {
  -        setRequiredFragments(new String[] { DEFAULT_FORM });
  -        setOptionalFragments(new String[] { VALID_FORM, INVALID_FORM });
  -    }
  -
       public Result process(Map parameter, Context context) throws Exception {
        URI actionUri = (URI)parameter.get(ACTION);
        Locale locale = ((LocaleResource)parameter.get(LOCALE)).getLocale();
           List informations = context.getInformations();
           parameter.put(HANDLER, 
ProcessorManager.getInstance().process(ProcessorManager.URL, parameter.get(HANDLER), 
context));
  -        MapResource controlDescriptions = new MapResource();
  +        List controlDescriptions = new ArrayList();
  +        List triggerDescriptions = new ArrayList();
           for (int i = 0; i < parameterDescriptors.length; i++) {
                String parameterName = parameterDescriptors[i].getName(); 
                Resource value = (Resource)parameter.get(parameterName);
  -            if (value instanceof MapResource) {
  -             controlDescriptions.getMap().put(parameterName, value);
  +            if (parameterName.startsWith(CONTROL_IDENTIFIER)) {
  +             ((MapResource)value).getMap().put(CONTROL_NAME, parameterName);
  +             controlDescriptions.add(value);
  +            } else if (parameterName.startsWith(TRIGGER_IDENTIFIER)) {
  +             ((MapResource)value).getMap().put(TRIGGER_NAME, parameterName);
  +             triggerDescriptions.add(value);
               }
  +
           }
  -        parameter.put(ControlComposer.CONTROL_DESCRIPTIONS, controlDescriptions);
  +        parameter.put(ControlComposer.CONTROL_DESCRIPTIONS, new 
ArrayResource((Resource[])controlDescriptions.toArray(new 
Resource[controlDescriptions.size()])));
  +        parameter.put(ControlComposer.TRIGGER_DESCRIPTIONS, new 
ArrayResource((Resource[])triggerDescriptions.toArray(new 
Resource[triggerDescriptions.size()])));
           Result controlComposerResult = super.process(parameter, context);
  -        MapResource generatedControls = 
(MapResource)controlComposerResult.getResultEntries().get(ControlComposer.GENERATED_CONTROLS);
  -        for ( Iterator i = generatedControls.getMap().entrySet().iterator(); 
i.hasNext(); ) {
  -             Map.Entry entry = (Map.Entry)i.next();
  +        Resource[] generatedControls = 
((ArrayResource)controlComposerResult.getResultEntries().get(GENERATED_CONTROLS)).getArray();
  +        for ( int i = 0; i < generatedControls.length; i++ ) {
  +             Iterator j = 
((MapResource)generatedControls[i]).getMap().entrySet().iterator();
  +             Map.Entry entry = (Map.Entry)j.next();
  +             parameter.put(entry.getKey(), entry.getValue());
  +        }
  +        Resource[] generatedTriggers = 
((ArrayResource)controlComposerResult.getResultEntries().get(GENERATED_TRIGGERS)).getArray();
  +        for ( int i = 0; i < generatedTriggers.length; i++ ) {
  +             Iterator j = 
((MapResource)generatedTriggers[i]).getMap().entrySet().iterator();
  +             Map.Entry entry = (Map.Entry)j.next();
                parameter.put(entry.getKey(), entry.getValue());
           }
        parameter.put(RENDERED_ERRORS, 
controlComposerResult.getResultEntries().get(RENDERED_ERRORS));
  @@ -142,13 +135,6 @@
           parameterList.add(new ParameterDescriptor(LOCALE, new 
ParameterMessage("form/locale"), new LocaleValueDescriptor()));
           parameterList.add(new ParameterDescriptor(ACTION, new 
ParameterMessage("form/action"), new URIValueDescriptor()));
           parameterDescriptors = (ParameterDescriptor[])parameterList.toArray(new 
ParameterDescriptor[parameterList.size()]);
  -        try {
  -            defaultTemplate = getRequiredFragment(DEFAULT_FORM);
  -        } catch ( ProcessException exception ) {
  -            throw new ConfigurationException(new 
ErrorMessage("form/defaultFragmentMissing"));
  -        }
  -        validTemplate = getOptionalFragment(VALID_FORM);
  -        invalidTemplate = getOptionalFragment(INVALID_FORM);
       }
   
       public ParameterDescriptor[] getParameterDescriptors() {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to