You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by df...@apache.org on 2004/05/10 18:54:25 UTC

cvs commit: jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/descriptor ParameterDescriptor.java MapValueDescriptor.java

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: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org