dflorey     2004/05/10 09:54:25

  Modified:    proposals/projector/src/java/org/apache/slide/projector/engine
                        HttpContext.java Process.java
               proposals/projector/src/java/org/apache/slide/projector/processor/form
                        ControlComposer.java Form.java FormHandler.java
                        FormGenerator.java Trigger.java
               proposals/projector/src/java/org/apache/slide/projector/processor/tree
                        TreeRenderer.java
               proposals/projector/src/java/org/apache/slide/projector/processor
                        TemplateRenderer.java TemplateMapRenderer.java
                        TemplateArrayRenderer.java
               proposals/projector/src/java/org/apache/slide/projector/util
                        StoreHelper.java ProcessorHelper.java
               proposals/projector/src/java/org/apache/slide/projector/descriptor
                        ParameterDescriptor.java MapValueDescriptor.java
  Added:       proposals/projector/src/java/org/apache/slide/projector/engine
                        Test.java
  Removed:     proposals/projector/src/java/org/apache/slide/projector/engine
                        TestServlet.java
  Log:
  Improved form handling (wizard style)
  
  Revision  Changes    Path
  1.3       +1 -1      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/HttpContext.java
  
  Index: HttpContext.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/HttpContext.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- HttpContext.java  6 May 2004 12:54:11 -0000       1.2
  +++ HttpContext.java  10 May 2004 16:54:24 -0000      1.3
  @@ -248,7 +248,7 @@
                        store.dispose(domain);
                }
                
  -             private MapResource getDomain() throws IOException {
  +             public MapResource getDomain() throws IOException {
                        String domain = getProcess().toString();
                        MapResource mapResource = (MapResource)store.get(domain);
                        if ( mapResource == null ) {
  
  
  
  1.4       +12 -22    
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/Process.java
  
  Index: Process.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/Process.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Process.java      6 May 2004 12:54:11 -0000       1.3
  +++ Process.java      10 May 2004 16:54:24 -0000      1.4
  @@ -10,7 +10,6 @@
   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.MapResource;
   import org.apache.slide.projector.resource.NullResource;
   import org.apache.slide.projector.resource.NumberResource;
   import org.apache.slide.projector.resource.StreamableResource;
  @@ -67,7 +66,7 @@
       public Result process(Map parameter, Context context) throws Exception {
        URI processorUri = 
ProcessorManager.getInstance().getProcessorDescriptor(this).getUri(); 
        context.setProcess(processorUri);
  -     String nextStep = getStep(processorUri, parameter, context);
  +     String nextStep = getStep(firstStep, context);
        Result result = null;
           Step step;
           do {
  @@ -119,6 +118,17 @@
           return providedContextDescriptors;
       }
   
  +    static String getStep(String firstStep, Context context) {
  +     Store sessionStore = context.getStore(Store.SESSION);
  +     if ( sessionStore != null ) {
  +             Resource stepParameter = (Resource)StoreHelper.get(sessionStore, 
context.getProcess().toString(), STEP);
  +             if (stepParameter != null && stepParameter instanceof StringResource ) 
{
  +                     return stepParameter.toString();
  +             }
  +     }
  +             return firstStep;
  +    }
  +
       static void checkRoutings(Step step, Processor processor) throws 
ValidationException {
           ResultDescriptor resultDescriptor = processor.getResultDescriptor();
           StateDescriptor[] states = resultDescriptor.getStateDescriptors();
  @@ -173,26 +183,6 @@
               return key;
           }
           return key;
  -    }
  -
  -    private String getStep(URI processorUri, Map parameter, Context context) {
  -     Store sessionStore = context.getStore(Store.SESSION);
  -     if ( sessionStore != null ) {
  -             try {
  -                     MapResource mapResource = 
(MapResource)sessionStore.get(processorUri.toString());
  -                     if ( mapResource != null ) {
  -                             Map map = mapResource.getMap();
  -                             Resource stepParameter = (Resource)map.get(STEP);
  -                             if (stepParameter != null && stepParameter instanceof 
StringResource ) {
  -                                     return stepParameter.toString();
  -                             }
  -                     }
  -             } catch ( IOException exception ) {
  -                     logger.log(Level.SEVERE, "Error while accessing session 
store", exception);
  -                     return firstStep;
  -             }
  -     }
  -             return firstStep;
       }
       
       private Map loadParameters(Step step, Processor processor, Map parameter, 
Result previousResult, Context context) throws Exception {
  
  
  
  1.1                  
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/Test.java
  
  Index: Test.java
  ===================================================================
  package org.apache.slide.projector.engine;
  
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;
  
  import org.apache.slide.projector.Context;
  import org.apache.slide.projector.Information;
  import org.apache.slide.projector.Processor;
  import org.apache.slide.projector.Resource;
  import org.apache.slide.projector.Result;
  import org.apache.slide.projector.Store;
  import org.apache.slide.projector.URI;
  import org.apache.slide.projector.descriptor.ParameterDescriptor;
  import org.apache.slide.projector.descriptor.ResultDescriptor;
  import org.apache.slide.projector.descriptor.URIValueDescriptor;
  import org.apache.slide.projector.i18n.ParameterMessage;
  import org.apache.slide.projector.processor.form.Control;
  import org.apache.slide.projector.processor.form.ControlComposer;
  import org.apache.slide.projector.processor.form.FormGenerator;
  import org.apache.slide.projector.resource.MapResource;
  import org.apache.slide.projector.resource.NullResource;
  import org.apache.slide.projector.resource.StringResource;
  import org.apache.slide.projector.resource.URIResource;
  import org.apache.slide.projector.util.ProcessorHelper;
  
  public class Test implements Processor {
      private final static URI FORM_PROCESSOR = new URIResource("/formGenerator");
      private final static URI RESULT_RENDERER = new URIResource("/result");
      private final static String PROCESSOR = "processor";
  
      private final static String FORM_STEP = "form";
      private final static String PROCESS_STEP = "process";
      private final static String RESULT_STEP = "result";
      
      private final static ParameterDescriptor[] parameterDescriptors = new 
ParameterDescriptor[] {
                        new ParameterDescriptor(PROCESSOR, new 
ParameterMessage("test/parameter/processor"), new URIValueDescriptor(), 
NullResource.NULL),
        };
        
        public Result process(Map parameter, Context context) throws Exception {
                context.setBookmark(ProcessorManager.getInstance().getURI(this));
                Resource uri = (Resource)parameter.get(PROCESSOR); 
          if ( uri == null || uri == NullResource.NULL ) {
                uri = (URI)context.getStore(Store.SESSION).get(PROCESSOR);
          }
          context.setProcess((URI)uri);
        context.getStore(Store.SESSION).put(PROCESSOR, uri);
        Resource stepResource = 
(Resource)context.getStore(Store.FORM).get(Process.STEP);
        String step;
        if ( stepResource == null ) {
                step = FORM_STEP;
        } else {
                step = stepResource.toString();
        }
                context.setStep(step);
                Processor formProcessor = 
ProcessorManager.getInstance().getProcessor(FORM_PROCESSOR);
          Processor resultRenderer = 
ProcessorManager.getInstance().getProcessor(RESULT_RENDERER);
          Processor processor = ProcessorManager.getInstance().getProcessor((URI)uri);
        parameter.put(Control.ACTION, uri);
          parameter.put(ControlComposer.LOCALE, 
ProcessorManager.getInstance().process(ProcessorManager.LOCALE_RESOLVER, 
context.getStore(Store.REQUEST_HEADER).get("accept-language"), context));
          parameter.put(FormGenerator.TARGET_STEP, PROCESS_STEP);
          Result result = null;
          if ( step.equals(FORM_STEP) ) {
                result = formProcessor.process(parameter, context);
          } else if ( step.equals(PROCESS_STEP) ) {
                
parameter.putAll(((MapResource)((HttpContext.FormStore)context.getStore(Store.FORM)).getDomain()).getMap());
                ProcessorHelper.validate(processor.getParameterDescriptors(), 
parameter, context);
                Result processorResult = processor.process(parameter, context);
                if ( hasErrors(context.getInformations()) ) {
                context.setStep(FORM_STEP);
                        result = formProcessor.process(parameter, context);
                } else {
                        Map resultParameters = new HashMap();
                        resultParameters.put("state", new 
StringResource(processorResult.getState()));
                        
ProcessorHelper.validate(resultRenderer.getParameterDescriptors(), resultParameters, 
context);
                        result = resultRenderer.process(resultParameters, context);
                        ((HttpContext.FormStore)context.getStore(Store.FORM)).clear();
                }
          } else {
                ((HttpContext.FormStore)context.getStore(Store.FORM)).clear();
                return Result.OK;
          }
          return result;
        }
  
      protected boolean hasErrors(List informations) {
          for ( Iterator i = informations.iterator(); i.hasNext(); ) {
                Information info = (Information)i.next();
                if ( info.getSeverity() == Information.ERROR ) {
                  return true;
              }
          }
          return false;
      }
  
        public ParameterDescriptor[] getParameterDescriptors() {
                return parameterDescriptors;
        }
  
        public ResultDescriptor getResultDescriptor() {
                return null;
        }
  }
  
  
  1.6       +16 -5     
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.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ControlComposer.java      6 May 2004 16:44:54 -0000       1.5
  +++ ControlComposer.java      10 May 2004 16:54:24 -0000      1.6
  @@ -2,6 +2,7 @@
   
   import org.apache.slide.projector.*;
   import org.apache.slide.projector.descriptor.*;
  +import org.apache.slide.projector.engine.HttpContext;
   import org.apache.slide.projector.engine.Process;
   import org.apache.slide.projector.engine.ProcessorManager;
   import org.apache.slide.projector.i18n.DefaultMessage;
  @@ -115,6 +116,7 @@
                                                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(Trigger.INVOLVED_PARAMETERS, new 
ParameterMessage("trigger/involvedParameters"), new ArrayValueDescriptor(new 
StringValueDescriptor()), NullResource.NULL),
                                                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)
  @@ -143,8 +145,9 @@
        Locale locale = ((LocaleResource)parameter.get(LOCALE)).getLocale();
           String state = DEFAULT_STATE;
           List informations = context.getInformations();
  -             MapResource mapResource = 
(MapResource)context.getStore(Store.SESSION).get(context.getProcess().toString());
  +             MapResource mapResource = 
(MapResource)((HttpContext.FormStore)context.getStore(Store.FORM)).getDomain();
                List generatedControls = new ArrayList();
  +             List involvedParameters = new ArrayList();
                for (int i = 0; i < controlDescriptions.length; i++ ) {
                Map controlParameters = ((MapResource)controlDescriptions[i]).getMap();
                String controlName = controlParameters.get(CONTROL_NAME).toString();
  @@ -161,6 +164,7 @@
               Resource controlContainerUri = 
(Resource)controlParameters.get(CONTROL_CONTAINER); 
               ParameterDescriptor parameterDescriptor = 
Control.getParameterDescriptor(controlParameters, context); 
               String parameterName = parameterDescriptor.getName();
  +            involvedParameters.add(new StringResource(parameterName));
               ParameterMessage description = 
(ParameterMessage)parameterDescriptor.getDescription();
               boolean required = parameterDescriptor.isRequired();
               String controlState = Control.OPTIONAL_CONTROL;
  @@ -171,7 +175,9 @@
               boolean validate = false;
               if ( mapResource != null ) {
                controlValue = mapResource.getMap().get(parameterName);
  -             validate = 
((BooleanResource)mapResource.getMap().get(VALIDATE)).booleanValue();
  +             validate = false;
  +             BooleanResource validateResource = 
((BooleanResource)mapResource.getMap().get(VALIDATE));
  +             if ( validateResource != null ) validate = 
validateResource.booleanValue();
               }
               if ( validate ) {
                try {
  @@ -190,7 +196,7 @@
                        explodeInformations(controlParameters, informations, 
parameterName, locale);
                } else {
                        if ( required ) {
  -                             controlState = Control.REQUIRED_INVALID_CONTROL;
  +                             controlState = Control.REQUIRED_VALID_CONTROL;
                        } else {
                                controlState = Control.OPTIONAL_VALID_CONTROL;
                        }
  @@ -237,6 +243,11 @@
                for (int i = 0; i < triggerDescriptions.length; i++ ) {
                Map triggerParameters = ((MapResource)triggerDescriptions[i]).getMap();
                String triggerName = triggerParameters.get(TRIGGER_NAME).toString();
  +             Resource involvedTriggerParameters = 
(Resource)triggerParameters.get(Trigger.INVOLVED_PARAMETERS);
  +             if ( involvedTriggerParameters == NullResource.NULL ) {
  +                     involvedTriggerParameters = new 
ArrayResource((StringResource[])involvedParameters.toArray(new 
StringResource[involvedParameters.size()]));
  +             }
  +             triggerParameters.put(Trigger.INVOLVED_PARAMETERS, 
involvedTriggerParameters);
                URI triggerUri = (URI)triggerParameters.get(TRIGGER);
                Trigger trigger = 
(Trigger)ProcessorManager.getInstance().getProcessor(triggerUri);
                Resource triggerActionUri = 
(Resource)triggerParameters.get(Trigger.ACTION);
  @@ -260,9 +271,9 @@
                        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)));
  +             generatedTriggers.add(new MapResource(triggerName, 
(Resource)triggerContainerResult.getResultEntries().get(OUTPUT)));
               } else {
  -             generatedControls.add(new MapResource(triggerName, 
(Resource)triggerResult.getResultEntries().get(OUTPUT)));
  +             generatedTriggers.add(new MapResource(triggerName, 
(Resource)triggerResult.getResultEntries().get(OUTPUT)));
               }
           }
           composerResult.addResultEntry(GENERATED_TRIGGERS, new 
ArrayResource((Resource [])generatedTriggers.toArray(new 
Resource[generatedTriggers.size()]))); 
  
  
  
  1.7       +13 -7     
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.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Form.java 6 May 2004 16:44:54 -0000       1.6
  +++ Form.java 10 May 2004 16:54:24 -0000      1.7
  @@ -31,6 +31,7 @@
   import org.apache.slide.projector.i18n.DefaultMessage;
   import org.apache.slide.projector.i18n.ParameterMessage;
   import org.apache.slide.projector.resource.*;
  +import org.apache.slide.projector.util.ProcessorHelper;
   
   import java.util.*;
   
  @@ -72,10 +73,10 @@
                ((MapResource)value).getMap().put(TRIGGER_NAME, parameterName);
                triggerDescriptions.add(value);
               }
  -
           }
           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()])));
  +        ProcessorHelper.validate(super.getParameterDescriptors(), parameter, 
context);
           Result controlComposerResult = super.process(parameter, context);
           Resource[] generatedControls = 
((ArrayResource)controlComposerResult.getResultEntries().get(GENERATED_CONTROLS)).getArray();
           for ( int i = 0; i < generatedControls.length; i++ ) {
  @@ -111,19 +112,24 @@
                           new ParameterMessage("form/control"),
                           new MapValueDescriptor(new ParameterDescriptor[] {
                               new ParameterDescriptor(CONTROL, new 
ParameterMessage("form/control"), new URIValueDescriptor()),
  +                            new ParameterDescriptor(CONTROL_CONTAINER, new 
ParameterMessage("form/controlContainer"),  new URIValueDescriptor(), 
NullResource.NULL),
                               new ParameterDescriptor(Control.ACTION, new 
ParameterMessage("control/action"), new URIValueDescriptor(), NullResource.NULL),
  -                            new ParameterDescriptor(Control.PARAMETER, new 
ParameterMessage("control/parameter"), new StringValueDescriptor()),
  +                            new ParameterDescriptor(Control.PARAMETER, new 
ParameterMessage("control/parameter"), new StringValueDescriptor())
                           })));
               } else if 
(parentParameterDescriptors[i].getName().startsWith(TRIGGER_IDENTIFIER)) {
                       parameterList.add(new 
ParameterDescriptor(parentParameterDescriptors[i].getName(),
                               new ParameterMessage("form/trigger"),
                               new MapValueDescriptor(new ParameterDescriptor[] {
  -                                new ParameterDescriptor(CONTROL, new 
ParameterMessage("form/trigger"), new URIValueDescriptor()),
  +                                new ParameterDescriptor(TRIGGER, new 
ParameterMessage("form/trigger"), new URIValueDescriptor()),
  +                                new ParameterDescriptor(TRIGGER_CONTAINER, new 
ParameterMessage("form/triggerContainer"),  new URIValueDescriptor(), 
NullResource.NULL),
                                   new ParameterDescriptor(Trigger.ACTION, new 
ParameterMessage("trigger/action"), new URIValueDescriptor(), NullResource.NULL),
  -                                new ParameterDescriptor(Process.STEP, new 
ParameterMessage("trigger/step"),  new ResourceValueDescriptor(), new NullResource()),
  +                                             new 
ParameterDescriptor(Trigger.BOOKMARK, new ParameterMessage("trigger/bookmark"), new 
URIValueDescriptor(), NullResource.NULL),
  +                                                     new 
ParameterDescriptor(Trigger.VALIDATE, new ParameterMessage("trigger/validate"), new 
BooleanValueDescriptor(), BooleanResource.TRUE),
  +                                new ParameterDescriptor(Process.STEP, new 
ParameterMessage("trigger/step"),  new ResourceValueDescriptor(), NullResource.NULL)
                               })));
               } else if (!parentParameterDescriptors[i].getName().equals(FRAGMENT) 
                        && 
!parentParameterDescriptors[i].getName().equals(CONTROL_DESCRIPTIONS)
  +                     && 
!parentParameterDescriptors[i].getName().equals(TRIGGER_DESCRIPTIONS)
                                        && 
!parentParameterDescriptors[i].getName().equals(RENDERED_ERRORS)
                                        && 
!parentParameterDescriptors[i].getName().equals(HANDLER)
                                        && 
!parentParameterDescriptors[i].getName().equals(METHOD)) {
  
  
  
  1.7       +17 -8     
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/FormHandler.java
  
  Index: FormHandler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/FormHandler.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- FormHandler.java  6 May 2004 12:54:11 -0000       1.6
  +++ FormHandler.java  10 May 2004 16:54:24 -0000      1.7
  @@ -13,8 +13,9 @@
   import org.apache.slide.projector.util.ProcessorHelper;
   import org.apache.slide.projector.engine.Process;
   
  +import java.util.ArrayList;
   import java.util.HashMap;
  -import java.util.Iterator;
  +import java.util.List;
   import java.util.Map;
   import java.util.StringTokenizer;
   
  @@ -43,6 +44,10 @@
                String targetStep = tokenizer.nextToken();
                URI bookmarkUri = new URIResource(tokenizer.nextToken());
                String domain = tokenizer.nextToken();
  +             List involvedParamters = new ArrayList();
  +             while ( tokenizer.hasMoreTokens() ) {
  +                     involvedParamters.add(tokenizer.nextToken());
  +             }
                Store store = context.getStore(Store.SESSION);
                // 1. Store all (request) parameters into requested domain
                Map map; 
  @@ -56,16 +61,20 @@
                }
           map.put(ControlComposer.VALIDATE, new BooleanResource(validate));
        map.put(Process.STEP, new StringResource(targetStep));
  -     for ( Iterator i = parameter.entrySet().iterator(); i.hasNext(); ) {
  -             Map.Entry entry = (Map.Entry)i.next();
  -             String key = (String)entry.getKey();
  -                     map.put(key, entry.getValue());
  -     }
  +     map.putAll(parameter);
        if ( validate ) {
                // 2. Validate parameters
                Processor processor = 
ProcessorManager.getInstance().getProcessor(actionURI);
                try {
  -                     ProcessorHelper.validate(processor.getParameterDescriptors(), 
parameter, context);
  +                     // validate only given parameters to enable wizard like forms
  +                     ParameterDescriptor[] parameterDescriptors = 
processor.getParameterDescriptors();
  +             for ( int i = 0; i < parameterDescriptors.length; i++ ) {
  +                     String parameterName = parameterDescriptors[i].getName();
  +                 if ( involvedParamters.contains(parameterName) ) {
  +                     map.put(parameterName, 
ProcessorHelper.validate(parameterDescriptors[i], parameter.get(parameterName), 
context));
  +                 }
  +             }
  +             map.put(ControlComposer.VALIDATE, BooleanResource.FALSE);
                } catch ( ValidationException exception ) {
                // 3. Go back to form step if validation failes
                        map.put(Process.STEP, new StringResource(lastStep));
  
  
  
  1.5       +14 -8     
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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FormGenerator.java        6 May 2004 16:44:54 -0000       1.4
  +++ FormGenerator.java        10 May 2004 16:54:24 -0000      1.5
  @@ -19,7 +19,9 @@
   public class FormGenerator extends ControlComposer {
       public final static String CONTROLS = "controls";
       public final static String TRIGGERS = "triggers";
  +    public final static String TARGET_STEP = "targetStep";
   
  +    protected final static String TRIGGER_IMAGE = "image";
       protected final static URI TEXTFIELD = new URIResource("/textfield");
       protected final static URI TEXTAREA = new URIResource("/textarea");
       protected final static URI LISTBOX = new URIResource("/listbox");
  @@ -27,9 +29,10 @@
       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_TRIGGER_IMAGE = new 
URIResource("/files/contelligent/images/ok.gif");
       protected final static URI DEFAULT_CONTROL_CONTAINER = new 
URIResource("/bigControl");
       protected final static URI DEFAULT_TRIGGER_CONTAINER = new 
URIResource("/triggerContainer");
  +    protected final static URI DEFAULT_ERROR_RENDERER = new URIResource("/errors");
   
       protected final static String PROCESSOR_NAME = "processor-name";
       protected final static String PROCESSOR_TITLE = "processor-title";
  @@ -70,13 +73,14 @@
        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.INVOLVED_PARAMETERS, NullResource.NULL);
  +     triggerDescriptor.getMap().put(Process.STEP, parameter.get(TARGET_STEP));
        triggerDescriptor.getMap().put(TRIGGER, TRIGGER_URI);
        triggerDescriptor.getMap().put(TRIGGER_NAME, TRIGGER_URI);
  -     triggerDescriptor.getMap().put("image", TRIGGER_IMAGE);
  +     triggerDescriptor.getMap().put(TRIGGER_IMAGE, 
ProcessorManager.getInstance().process(ProcessorManager.BINARY, DEFAULT_TRIGGER_IMAGE, 
"url", context));
        triggerDescriptor.getMap().put(TRIGGER_CONTAINER, DEFAULT_TRIGGER_CONTAINER);
           parameter.put(TRIGGER_DESCRIPTIONS, new ArrayResource(new Resource[] { 
triggerDescriptor }));
  +        parameter.put(ERRORS_PROCESSOR, DEFAULT_ERROR_RENDERER);
           
           parameter.put(HANDLER, 
ProcessorManager.getInstance().process(ProcessorManager.URL, 
Constants.DEFAULT_FORM_HANDLER, context));
           parameter.put(METHOD, new StringResource(POST));
  @@ -95,9 +99,9 @@
           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());
  +             triggerBuffer.append(renderedTrigger.toString());
           }
  -        StringResource composedTriggers= new StringResource(buffer.toString());
  +        StringResource composedTriggers= new 
StringResource(triggerBuffer.toString());
           parameter.put(TRIGGERS, composedTriggers);
           ProcessorDescriptor processorDescriptor = 
ProcessorManager.getInstance().getProcessorDescriptor(actionUri);
           parameter.put(PROCESSOR_NAME, processorDescriptor.getName());
  @@ -107,6 +111,7 @@
           parameter.put(PROCESSOR_SMALL_ICON, 
ProcessorManager.getInstance().process(ProcessorManager.BINARY, 
processorDescriptor.getSmallIcon(), "url", context));
           parameter.put(TITLE, processorDescriptor.getName());
           parameter.put(STYLE, ((HttpContext)context).getContextPath() + 
ORANGE_STYLE);
  +        parameter.put(ERRORS, 
controlComposerResult.getResultEntries().get(ControlComposer.RENDERED_ERRORS)); 
           parameter.put(ERRORS_TITLE, "Fehler:");
           Template template = defaultTemplate;
           String state = controlComposerResult.getState();
  @@ -122,7 +127,8 @@
           super.configure(config);
           parameterDescriptors = new ParameterDescriptor[] {
               new ParameterDescriptor(ACTION, new 
ParameterMessage("formGenerator/action"), new URIValueDescriptor()),
  -            new ParameterDescriptor(LOCALE, new 
ParameterMessage("formGenerator/locale"), new LocaleValueDescriptor(), new 
LocaleResource(Locale.getDefault()))
  +            new ParameterDescriptor(LOCALE, new 
ParameterMessage("formGenerator/locale"), new LocaleValueDescriptor(), new 
LocaleResource(Locale.getDefault())),
  +            new ParameterDescriptor(TARGET_STEP, new 
ParameterMessage("formGenerator/targetStep"), new StringValueDescriptor())
           };
           try {
               defaultTemplate = getRequiredFragment(DEFAULT_FORM);
  
  
  
  1.7       +21 -7     
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.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Trigger.java      6 May 2004 16:44:54 -0000       1.6
  +++ Trigger.java      10 May 2004 16:54:24 -0000      1.7
  @@ -8,12 +8,14 @@
   import org.apache.slide.projector.Resource;
   import org.apache.slide.projector.Result;
   import org.apache.slide.projector.URI;
  +import org.apache.slide.projector.descriptor.ArrayValueDescriptor;
   import org.apache.slide.projector.descriptor.BooleanValueDescriptor;
   import org.apache.slide.projector.descriptor.ParameterDescriptor;
   import org.apache.slide.projector.descriptor.StringValueDescriptor;
   import org.apache.slide.projector.descriptor.URIValueDescriptor;
   import org.apache.slide.projector.i18n.ParameterMessage;
   import org.apache.slide.projector.processor.TemplateRenderer;
  +import org.apache.slide.projector.resource.ArrayResource;
   import org.apache.slide.projector.resource.BooleanResource;
   import org.apache.slide.projector.resource.NullResource;
   import org.apache.slide.projector.resource.StreamableResource;
  @@ -29,7 +31,9 @@
       public final static String ACTION = "action";
       public final static String VALIDATE = "validate";
        public final static String BOOKMARK = "bookmark";
  -
  +     public final static String INVOLVED_PARAMETERS = "involved-parameters";
  +     public final char SEPARATOR = ';';
  +     
       private ParameterDescriptor[] parameterDescriptors;
   
       public Trigger() {
  @@ -41,18 +45,26 @@
        if ( bookmark instanceof NullResource ) {
                bookmark = context.getBookmark();
        }
  +     StringResource []involvedParameters = 
(StringResource[])((ArrayResource)parameter.get(INVOLVED_PARAMETERS)).getArray();
        String targetStep = parameter.get(Process.STEP).toString();
  -        BooleanResource validate = (BooleanResource)parameter.get(VALIDATE);
  -        URI actionUri = (URI)parameter.get(ACTION);
  -        String instruction = actionUri + ";" + validate + ";" + context.getStep() + 
";" + targetStep + ";" + bookmark + ";" +context.getProcess();
  -        parameter.put(INSTRUCTION, new StringResource(instruction));
  +     BooleanResource validate = (BooleanResource)parameter.get(VALIDATE);
  +     URI actionUri = (URI)parameter.get(ACTION);
  +             StringBuffer buffer = new StringBuffer(128);
  +             
buffer.append(actionUri).append(SEPARATOR).append(validate).append(SEPARATOR).append(context.getStep()).append(SEPARATOR).append(targetStep).append(SEPARATOR).append(bookmark).append(SEPARATOR).append(context.getProcess());
  +     if ( validate.booleanValue() ) {
  +             for ( int i = 0; i < involvedParameters.length; i++ ) {
  +                     buffer.append(SEPARATOR).append(involvedParameters[i]);
  +             }
  +     }
  +             String instruction = buffer.toString();
  +             parameter.put(INSTRUCTION, new StringResource(instruction));
           return new Result(OK, OUTPUT, renderFragment(getName(), parameter));
       }
       
       public void configure(StreamableResource config) throws ConfigurationException {
           super.configure(config);
           ParameterDescriptor[] parentParameterDescriptors = 
super.getParameterDescriptors();
  -        parameterDescriptors = new 
ParameterDescriptor[parentParameterDescriptors.length + 3];
  +        parameterDescriptors = new 
ParameterDescriptor[parentParameterDescriptors.length + 4];
           int counter = 0;
           for ( int i = 0; i < parentParameterDescriptors.length; i++ ) {
               if (!parentParameterDescriptors[i].getName().equals(FRAGMENT)) {
  @@ -68,6 +80,8 @@
               new ParameterDescriptor(VALIDATE, new 
ParameterMessage("trigger/validate"), new BooleanValueDescriptor(), 
BooleanResource.TRUE);
           parameterDescriptors[parentParameterDescriptors.length + 2] =
               new ParameterDescriptor(BOOKMARK, new 
ParameterMessage("trigger/bookmark"), new URIValueDescriptor(), NullResource.NULL );
  +        parameterDescriptors[parentParameterDescriptors.length + 3] =
  +            new ParameterDescriptor(INVOLVED_PARAMETERS, new 
ParameterMessage("trigger/involvedParameters"), new ArrayValueDescriptor(new 
StringValueDescriptor()));
       }
   
       public ParameterDescriptor[] getParameterDescriptors() {
  
  
  
  1.3       +1 -1      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/tree/TreeRenderer.java
  
  Index: TreeRenderer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/tree/TreeRenderer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TreeRenderer.java 3 May 2004 15:50:40 -0000       1.2
  +++ TreeRenderer.java 10 May 2004 16:54:24 -0000      1.3
  @@ -42,7 +42,7 @@
       public void configure(StreamableResource config) throws ConfigurationException {
           super.configure(config);
           List validMapEntries = new ArrayList();
  -        for ( Iterator i = parameterDescriptions.values().iterator(); i.hasNext(); 
) {
  +        for ( Iterator i = parameterDescriptions.iterator(); i.hasNext(); ) {
               ParameterDescriptor parentParameter = (ParameterDescriptor)i.next();
               if ( !parentParameter.getName().equals(FRAGMENT) ) {
                   validMapEntries.add(new 
ParameterDescriptor(parentParameter.getName(), new 
ParameterMessage("treeRenderer/mapEntry"), parentParameter.getValueDescriptor()));
  
  
  
  1.3       +9 -9      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/TemplateRenderer.java
  
  Index: TemplateRenderer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/TemplateRenderer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TemplateRenderer.java     5 May 2004 15:32:44 -0000       1.2
  +++ TemplateRenderer.java     10 May 2004 16:54:25 -0000      1.3
  @@ -46,7 +46,7 @@
       
       private ParameterDescriptor[] parameterDescriptors;
   
  -    protected Map parameterDescriptions;
  +    protected List parameterDescriptions;
       protected boolean fragments;
   
       private Map templates;
  @@ -57,7 +57,7 @@
       // FIXME: Nested fragments
       public void configure(StreamableResource config) throws ConfigurationException {
           templates = new HashMap();
  -        parameterDescriptions = new HashMap();
  +        parameterDescriptions = new ArrayList();
           try {
               String template = StreamHelper.streamToString(config);
               // ignore sections marked as ignored
  @@ -104,9 +104,7 @@
                       }
                   }
               }
  -            parameterDescriptions.put(FRAGMENT, new ParameterDescriptor(
  -                    FRAGMENT, new ParameterMessage("templateRenderer/fragment"),
  -                    new StringValueDescriptor((String 
[])templates.keySet().toArray(new String[0])), new StringResource(DEFAULT_FRAGMENT)));
  +            parameterDescriptions.add(new ParameterDescriptor(FRAGMENT, new 
ParameterMessage("templateRenderer/fragment"), new StringValueDescriptor((String 
[])templates.keySet().toArray(new String[0])), new StringResource(DEFAULT_FRAGMENT)));
               if ( fragments ) {
                   if ( requiredFragments != null ) {
                       templates.put(DEFAULT_FRAGMENT, 
templates.get(requiredFragments[0]));
  @@ -116,7 +114,7 @@
               } else {
                   templates.put(DEFAULT_FRAGMENT, new Template(template));
               }
  -            parameterDescriptors = (ParameterDescriptor 
[])parameterDescriptions.values().toArray(new ParameterDescriptor[0]);
  +            parameterDescriptors = (ParameterDescriptor 
[])parameterDescriptions.toArray(new ParameterDescriptor[0]);
           } catch (IOException ioexception) {
               logger.log(Level.SEVERE, "Could not load configuration resource!");
           }
  @@ -293,7 +291,9 @@
                       } else {
                           parameterDescriptor = new ParameterDescriptor(variableName, 
new ParameterMessage("templateVariable", new String[] { variableName }), 
resourceValueDescriptor, new NullResource());
                       }
  -                    parameterDescriptions.put(variableName, parameterDescriptor);
  +                    if ( !parameterDescriptions.contains(parameterDescriptor) ) {
  +                     parameterDescriptions.add(parameterDescriptor);
  +                    }
                       templateParameterDescriptors.put(variableName, 
parameterDescriptor);
                       currentPosition = close+TAG_CLOSE.length();
                   } else {
  @@ -362,8 +362,8 @@
           public ConditionalTemplateFragment(String variable) {
               this.variable = variable;
               optionalParameters.add(variable);
  -            if ( parameterDescriptions.containsKey(variable) ) {
  -                
((ResourceValueDescriptor)((ParameterDescriptor)parameterDescriptions.get(variable)).getValueDescriptor()).addAllowedContentType(NullResource.CONTENT_TYPE);
  +            if ( parameterDescriptions.contains(variable) ) {
  +                
((ResourceValueDescriptor)((ParameterDescriptor)parameterDescriptions.get(parameterDescriptions.indexOf(variable))).getValueDescriptor()).addAllowedContentType(NullResource.CONTENT_TYPE);
               }
           }
   
  
  
  
  1.2       +1 -1      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/TemplateMapRenderer.java
  
  Index: TemplateMapRenderer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/TemplateMapRenderer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TemplateMapRenderer.java  3 May 2004 14:20:24 -0000       1.1
  +++ TemplateMapRenderer.java  10 May 2004 16:54:25 -0000      1.2
  @@ -33,7 +33,7 @@
           if ( repeatedFragments == null ) repeatedFragments = getDefinedFragments();
           MapValueDescriptor mapValueDescriptor = new MapValueDescriptor();
           List parameterDescriptorList = new ArrayList();
  -        for ( Iterator i = parameterDescriptions.values().iterator(); i.hasNext(); 
) {
  +        for ( Iterator i = parameterDescriptions.iterator(); i.hasNext(); ) {
               ParameterDescriptor entryDescriptor = (ParameterDescriptor)i.next();
               if ( entryDescriptor.getName() == FRAGMENT ) {
                   parameterDescriptorList.add(entryDescriptor);
  
  
  
  1.2       +1 -1      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/TemplateArrayRenderer.java
  
  Index: TemplateArrayRenderer.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/TemplateArrayRenderer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TemplateArrayRenderer.java        3 May 2004 14:20:24 -0000       1.1
  +++ TemplateArrayRenderer.java        10 May 2004 16:54:25 -0000      1.2
  @@ -25,7 +25,7 @@
           super.configure(config);
           parameterDescriptors = new 
ParameterDescriptor[parameterDescriptions.size()];
           int counter = 0;
  -        for ( Iterator i = parameterDescriptions.values().iterator(); i.hasNext(); 
) {
  +        for ( Iterator i = parameterDescriptions.iterator(); i.hasNext(); ) {
               ParameterDescriptor entryDescriptor = (ParameterDescriptor)i.next();
               if ( entryDescriptor.getName() == FRAGMENT ) {
                   parameterDescriptors[counter] = entryDescriptor;
  
  
  
  1.2       +32 -0     
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/util/StoreHelper.java
  
  Index: StoreHelper.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/util/StoreHelper.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- StoreHelper.java  3 May 2004 14:20:29 -0000       1.1
  +++ StoreHelper.java  10 May 2004 16:54:25 -0000      1.2
  @@ -1,13 +1,45 @@
   package org.apache.slide.projector.util;
   
  +import org.apache.slide.projector.Resource;
   import org.apache.slide.projector.Store;
  +import org.apache.slide.projector.resource.MapResource;
   
  +import java.io.IOException;
  +import java.util.Map;
   import java.util.logging.Level;
   import java.util.logging.Logger;
   
   public class StoreHelper {
       private static Logger logger = Logger.getLogger(StoreHelper.class.getName());
   
  +    public static Object get(Store store, String domain, String key) {
  +     try {
  +             MapResource mapResource = (MapResource)store.get(domain);
  +             if ( mapResource != null ) {
  +                     Map map = mapResource.getMap();
  +                     return (Resource)map.get(key);
  +             }
  +     } catch ( IOException exception ) {
  +             logger.log(Level.SEVERE, "Error while accessing store", exception);
  +     }
  +     return null;
  +    }
  +
  +    public static void put(Store store, String domain, String key, Resource value) {
  +     try {
  +             MapResource mapResource = (MapResource)store.get(domain);
  +             if ( mapResource != null ) {
  +                     Map map = mapResource.getMap();
  +                     map.put(key, value);
  +             } else {
  +                     mapResource = new MapResource(key, value);
  +                     store.put(domain, mapResource);
  +             }
  +     } catch ( IOException exception ) {
  +             logger.log(Level.SEVERE, "Error while accessing store", exception);
  +     }
  +    }
  +    
       public static int getStoreByName(String store) {
           for ( int i = 0; i < Store.stores.length; i++ ) {
               if ( Store.stores[i].equals(store) ) return i;
  
  
  
  1.3       +4 -2      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/util/ProcessorHelper.java
  
  Index: ProcessorHelper.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/util/ProcessorHelper.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ProcessorHelper.java      5 May 2004 17:53:12 -0000       1.2
  +++ ProcessorHelper.java      10 May 2004 16:54:25 -0000      1.3
  @@ -45,8 +45,10 @@
               } else {
                   parameterValue = parameterDescriptor.getDefaultValue();
               }
  +        } else if ( parameterValue.equals(parameterDescriptor.getDefaultValue()) ) {
  +             return parameterDescriptor.getDefaultValue();
           } else {
  -            parameterValue = 
parameterDescriptor.getValueDescriptor().validate(parameterValue, context);
  +             parameterValue = 
parameterDescriptor.getValueDescriptor().validate(parameterValue, context);
           }
           return (Resource)parameterValue;
       }
  
  
  
  1.3       +5 -0      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/descriptor/ParameterDescriptor.java
  
  Index: ParameterDescriptor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/descriptor/ParameterDescriptor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ParameterDescriptor.java  6 May 2004 12:54:12 -0000       1.2
  +++ ParameterDescriptor.java  10 May 2004 16:54:25 -0000      1.3
  @@ -43,4 +43,9 @@
       public Resource getDefaultValue() {
           return defaultValue;
       }
  +    
  +    public boolean equals(Object o) {
  +     if ( o instanceof ParameterDescriptor && 
((ParameterDescriptor)o).getName().equals(getName())) return true;
  +     return false;
  +    }
   }
  
  
  
  1.3       +6 -1      
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/descriptor/MapValueDescriptor.java
  
  Index: MapValueDescriptor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/descriptor/MapValueDescriptor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MapValueDescriptor.java   5 May 2004 15:32:45 -0000       1.2
  +++ MapValueDescriptor.java   10 May 2004 16:54:25 -0000      1.3
  @@ -71,7 +71,12 @@
                                map.put(key, parameterDescriptor.getDefaultValue());
                        }
                } else {
  -                     map.put(key, entryDescriptor.validate(map.get(key), context));
  +                     Object object = map.get(key);
  +                     if ( object.equals(parameterDescriptor.getDefaultValue())) {
  +                             map.put(key, object);
  +                     } else {
  +                             map.put(key, entryDescriptor.validate(object, 
context));
  +                     }
                }
               }
           }
  
  
  

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

Reply via email to