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/05 17:32:45 UTC
cvs commit: jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/descriptor MapValueDescriptor.java
dflorey 2004/05/05 08:32:45
Modified: proposals/projector/src/java/org/apache/slide/projector/engine
SystemContext.java Process.java
proposals/projector/src/java/org/apache/slide/projector/processor/form
Control.java Form.java FormHandler.java
Textbutton.java FormGenerator.java Trigger.java
proposals/projector/src/java/org/apache/slide/projector/processor
TemplateRenderer.java
proposals/projector/src/java/org/apache/slide/projector/resource
MapResource.java
proposals/projector/src/java/org/apache/slide/projector
Constants.java Context.java
proposals/projector/src/java/org/apache/slide/projector/descriptor
MapValueDescriptor.java
Added: proposals/projector/src/java/org/apache/slide/projector/processor/form
ControlComposer.java
Log:
Rebuilding form handling to enable multiple page spanning forms
Revision Changes Path
1.2 +0 -14 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/SystemContext.java
Index: SystemContext.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/SystemContext.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SystemContext.java 3 May 2004 14:20:20 -0000 1.1
+++ SystemContext.java 5 May 2004 15:32:44 -0000 1.2
@@ -61,18 +61,4 @@
public URI getBookmark() throws IOException {
return (URI)transientProcessStore.get(BOOKMARK);
}
-
- public void setFormStep(URI form, String step) throws IOException {
- MapResource formMapResource = (MapResource)transientProcessStore.get(FORM_MAP);
- if ( formMapResource == null ) formMapResource = new MapResource(new HashMap());
- Map formMap = formMapResource.getMap();
- formMap.put(form.toString(), step);
- transientProcessStore.put(FORM_MAP, formMapResource);
- }
-
- public String getFormStep(URI form) throws IOException {
- MapResource formMapResource = (MapResource)transientProcessStore.get(FORM_MAP);
- if ( formMapResource == null ) return null;
- return (String)formMapResource.getMap().get(form.toString());
- }
}
1.2 +25 -6 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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Process.java 3 May 2004 14:20:20 -0000 1.1
+++ Process.java 5 May 2004 15:32:44 -0000 1.2
@@ -10,6 +10,7 @@
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;
@@ -31,7 +32,8 @@
private final static String OK = "ok";
protected Map steps;
- protected String firstStep = null;
+ protected String firstStep, domain;
+ protected int store;
protected EnvironmentDescriptor[] requiredContextDescriptors, providedContextDescriptors;
protected ExpressionFactory expressionFactory = new ExpressionFactory();
@@ -64,11 +66,7 @@
}
public Result process(Map parameter, Context context) throws Exception {
- String nextStep = firstStep;
- Object stepParameter = parameter.get(STEP);
- if (stepParameter != null && !(stepParameter instanceof NullResource) ) {
- nextStep = StringValueDescriptor.toString(stepParameter);
- }
+ String nextStep = getStep(parameter, context);
Result result = null;
Step step;
do {
@@ -175,6 +173,25 @@
return key;
}
+ private String getStep(Map parameter, Context context) {
+ if ( domain != null ) {
+ try {
+ MapResource mapResource = (MapResource)context.getStore(store).get(domain);
+ if ( mapResource != null ) {
+ Map map = mapResource.getMap();
+ Resource stepParameter = (Resource)parameter.get(STEP);
+ if (stepParameter != null && stepParameter instanceof StringResource ) {
+ return stepParameter.toString();
+ }
+ }
+ } catch ( IOException exception ) {
+ logger.log(Level.SEVERE, "Error while accessing store", exception);
+ return firstStep;
+ }
+ }
+ return firstStep;
+ }
+
private Map loadParameters(Step step, Processor processor, Map parameter, Result previousResult, Context context) throws Exception {
// Collect parameters for this processor
Map parameters = new HashMap();
@@ -290,6 +307,8 @@
public void startElement(SimplePath path, String name, AttributesImpl attributes, String leadingCDdata) {
if (path.matches("process")) {
firstStep = attributes.getValue("first-step");
+ store = StoreHelper.getStoreByName(attributes.getValue("store"));
+ domain = attributes.getValue("domain");
} else if (path.matches("description")) {
parsingDescription = true;
} else if (path.matches("input/parameter")) {
1.2 +2 -3 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Control.java
Index: Control.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Control.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Control.java 3 May 2004 14:20:18 -0000 1.1
+++ Control.java 5 May 2004 15:32:44 -0000 1.2
@@ -35,7 +35,6 @@
public final static String PARAMETER = "parameter";
public final static String VALUE = "value";
public final static String STATE = "state";
- public final static String ERROR = "error";
protected Template optionalFragment, requiredFragment, validOptionalFragment, invalidOptionalFragment, validRequiredFragment, invalidRequiredFragment;
@@ -70,7 +69,7 @@
return new Result(state, OUTPUT, renderFragment(fragment, parameter));
}
- protected ParameterDescriptor getParameterDescriptor(Map parameter, Context context) throws ProcessException {
+ public ParameterDescriptor getParameterDescriptor(Map parameter, Context context) throws ProcessException {
URI actionUri = (URIResource)parameter.get(ACTION);
Processor action = ProcessorManager.getInstance().getProcessor(actionUri);
String parameterName = parameter.get(PARAMETER).toString();
1.3 +59 -149 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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Form.java 5 May 2004 09:58:08 -0000 1.2
+++ Form.java 5 May 2004 15:32:44 -0000 1.3
@@ -25,15 +25,12 @@
import org.apache.slide.projector.*;
import org.apache.slide.projector.descriptor.*;
+import org.apache.slide.projector.engine.Process;
import org.apache.slide.projector.engine.ContentType;
-import org.apache.slide.projector.engine.ProcessorManager;
import org.apache.slide.projector.i18n.DefaultMessage;
import org.apache.slide.projector.i18n.ErrorMessage;
-import org.apache.slide.projector.i18n.MessageNotFoundException;
import org.apache.slide.projector.i18n.ParameterMessage;
-import org.apache.slide.projector.processor.TemplateRenderer;
import org.apache.slide.projector.resource.*;
-import org.apache.slide.projector.util.ProcessorHelper;
import java.util.*;
@@ -42,41 +39,27 @@
*
* @author <a href="mailto:dflorey@c1-fse.de">Daniel Florey</a>
*/
-public class Form extends TemplateRenderer {
- public final static String CONTROL = "control";
- public final static String CONTROLS = "controls";
- public final static String VALIDATE = "validate";
- public final static String INFO = "info";
- public final static String LOCALE = "locale";
- public final static String METHOD = "method";
- public final static String HANDLER = "handler";
- public final static String SUBMIT = "submit";
-
- public final static String ERROR_NUMBER = "error-number";
- public final static String ERROR_TITLE = "error-title";
- public final static String ERROR_TEXT = "error-text";
- public final static String ERROR_DETAILS = "error-details";
- public final static String ERROR_SUMMARY = "error-summary";
-
- public final static String CONTROL_IDENTIFIER = "control:";
+public class Form extends ControlComposer {
+ public final static String HANDLER = "handler";
+ public final static String METHOD = "method";
+
+ public final static String CONTROL_IDENTIFIER = "control:";
public final static String TRIGGER_IDENTIFIER = "trigger:";
- public final static String DEFAULT_STATE ="default";
- public final static String VALID_STATE ="valid";
- public final static String INVALID_STATE ="invalid";
-
protected final static String DEFAULT_FORM = "default form";
protected final static String INVALID_FORM = "invalid form";
protected final static String VALID_FORM = "valid form";
- protected ErrorMessage NO_ERROR_MESSAGE_AVAILABLE = new ErrorMessage("errorMessageNotFound");
+ private final static String GET = "GET";
+ private final static String POST = "POST";
+ private final static String[] methods = new String[] { GET, POST };
protected Template defaultTemplate;
protected Template validTemplate;
protected Template invalidTemplate;
private ParameterDescriptor[] parameterDescriptors;
-
+
private final static ResultDescriptor resultDescriptor = new ResultDescriptor(
new StateDescriptor[] {
new StateDescriptor(DEFAULT_STATE, new DefaultMessage("form/state/default")),
@@ -92,10 +75,42 @@
setOptionalFragments(new String[] { VALID_FORM, INVALID_FORM });
}
+ public Result process(Map parameter, Context context) throws Exception {
+ String domain = parameter.get(DOMAIN).toString();
+ URI actionUri = (URI)parameter.get(ACTION);
+ Locale locale = ((LocaleResource)parameter.get(LOCALE)).getLocale();
+ boolean validate = ((BooleanResource)parameter.get(VALIDATE)).booleanValue();
+ List informations = context.getInformations();
+ MapResource controlDescriptions = new MapResource();
+ for (int i = 0; i < parameterDescriptors.length; i++) {
+ String parameterName = parameterDescriptors[i].getName();
+ Resource value = (Resource)parameter.get(parameterName);
+ if (value instanceof MapResource) {
+ controlDescriptions.getMap().put(parameterName, value);
+ }
+ }
+ parameter.put(ControlComposer.CONTROL_DESCRIPTIONS, controlDescriptions);
+ Result controlComposerResult = super.process(parameter, context);
+ MapResource generatedControls = (MapResource)controlComposerResult.getResultEntries().get(ControlComposer.GENERATED_CONTROLS);
+ for ( Iterator i = generatedControls.getMap().entrySet().iterator(); i.hasNext(); ) {
+ Map.Entry entry = (Map.Entry)i.next();
+ parameter.put(entry.getKey(), entry.getValue());
+ }
+ parameter.put(RENDERED_ERRORS, controlComposerResult.getResultEntries().get(RENDERED_ERRORS));
+ Template template = defaultTemplate;
+ String state = controlComposerResult.getState();
+ if ( state == VALID_STATE && validTemplate != null ) {
+ template = validTemplate;
+ } else if ( state == INVALID_STATE && invalidTemplate != null ) {
+ template = invalidTemplate;
+ }
+ return new Result(state, OUTPUT, renderFragment(template, parameter));
+ }
+
public void configure(StreamableResource config) throws ConfigurationException {
super.configure(config);
ParameterDescriptor[] parentParameterDescriptors = super.getParameterDescriptors();
- parameterDescriptors = new ParameterDescriptor[parentParameterDescriptors.length + 1 ];
+ parameterDescriptors = new ParameterDescriptor[parentParameterDescriptors.length + 6 ];
int counter = 0;
for (int i = 0; i < parentParameterDescriptors.length; i++) {
if (parentParameterDescriptors[i].getName().startsWith(CONTROL_IDENTIFIER)) {
@@ -103,7 +118,7 @@
new ParameterMessage("form/control"),
new MapValueDescriptor(new ParameterDescriptor[] {
new ParameterDescriptor(CONTROL, new ParameterMessage("form/control"), new URIValueDescriptor()),
- new ParameterDescriptor(Control.ACTION, new ParameterMessage("control/action"), new URIValueDescriptor()),
+ new ParameterDescriptor(Control.ACTION, new ParameterMessage("control/action"), new URIValueDescriptor(), NullResource.NULL),
new ParameterDescriptor(Control.PARAMETER, new ParameterMessage("control/parameter"), new StringValueDescriptor()),
}));
counter++;
@@ -112,8 +127,8 @@
new ParameterMessage("form/trigger"),
new MapValueDescriptor(new ParameterDescriptor[] {
new ParameterDescriptor(CONTROL, new ParameterMessage("form/trigger"), new URIValueDescriptor()),
- new ParameterDescriptor(Trigger.ACTION, new ParameterMessage("trigger/action"), new URIValueDescriptor()),
- new ParameterDescriptor(Trigger.STEP, new ParameterMessage("trigger/step"), new ResourceValueDescriptor(), new NullResource()),
+ new ParameterDescriptor(Trigger.ACTION, new ParameterMessage("trigger/action"), new URIValueDescriptor(), NullResource.NULL),
+ new ParameterDescriptor(Process.STEP, new ParameterMessage("trigger/step"), new ResourceValueDescriptor(), new NullResource()),
}));
counter++;
} else if (!parentParameterDescriptors[i].getName().equals(FRAGMENT)) {
@@ -122,9 +137,17 @@
}
}
parameterDescriptors[counter] =
- new ParameterDescriptor(VALIDATE, new ParameterMessage("form/validate"), new BooleanValueDescriptor(), new BooleanResource(false));
+ new ParameterDescriptor(HANDLER, new ParameterMessage("form/handler"), new URIValueDescriptor(), Constants.DEFAULT_FORM_HANDLER);
parameterDescriptors[counter+1] =
- new ParameterDescriptor(LOCALE, new ParameterMessage("form/locale"), new LocaleValueDescriptor());
+ new ParameterDescriptor(METHOD, new ParameterMessage("form/method"), new StringValueDescriptor(methods), new StringResource(POST));
+ parameterDescriptors[counter+2] =
+ new ParameterDescriptor(LOCALE, new ParameterMessage("form/locale"), new LocaleValueDescriptor());
+ parameterDescriptors[counter+3] =
+ new ParameterDescriptor(ACTION, new ParameterMessage("form/action"), new URIValueDescriptor());
+ parameterDescriptors[counter+4] =
+ new ParameterDescriptor(STORE, new ParameterMessage("form/store"), new StringValueDescriptor(Store.stores));
+ parameterDescriptors[counter+5] =
+ new ParameterDescriptor(DOMAIN, new ParameterMessage("form/domain"), new StringValueDescriptor());
try {
defaultTemplate = getRequiredFragment(DEFAULT_FORM);
@@ -133,119 +156,6 @@
}
validTemplate = getOptionalFragment(VALID_FORM);
invalidTemplate = getOptionalFragment(INVALID_FORM);
- }
-
- public Result process(Map parameter, Context context) throws Exception {
- Locale locale = ((LocaleResource)parameter.get(LOCALE)).getLocale();
- boolean validate = ((BooleanResource)parameter.get(VALIDATE)).booleanValue();
- String state = DEFAULT_STATE;
- List informations = context.getInformations();
- for (int i = 0; i < parameterDescriptors.length; i++) {
- Resource value = (Resource)parameter.get(parameterDescriptors[i].getName());
- if (value instanceof MapResource) {
- String parameterName = parameterDescriptors[i].getName();
- Map controlParameters = ((MapResource)value).getMap();
- URI controlUri = ((URIResource)controlParameters.get(CONTROL));
- Processor control = ProcessorManager.getInstance().getProcessor(controlUri);
- try {
- ProcessorHelper.validate(control.getParameterDescriptors(), controlParameters, context);
- } catch ( ValidationException exception ) {
- throw new ValidationException(new ErrorMessage("form/controlParameterInvalid", new Object[] { control }), exception);
- }
- boolean required = parameterDescriptors[i].isRequired();
- String controlState = Control.OPTIONAL_CONTROL;
- if ( required ) {
- controlState = Control.REQUIRED_CONTROL;
- }
- if ( validate ) {
- Object controlValue = context.getStore(Store.TRANSIENT_PROCESS).get(parameterName);
- try {
- controlValue = ProcessorHelper.validate(parameterDescriptors[i], controlValue, context);
- } catch ( ValidationException exception ) {
- controlValue = StringValueDescriptor.toString(controlValue);
- context.addInformation(new Information(Information.ERROR, exception.getErrorMessage(), new String[] { parameterName }));
- }
- controlParameters.put(Control.VALUE, controlValue);
- if ( hasErrors(informations, parameterName) ) {
- if ( required ) {
- controlState = Control.REQUIRED_INVALID_CONTROL;
- } else {
- controlState = Control.OPTIONAL_INVALID_CONTROL;
- }
- explodeInformations(controlParameters, informations, parameterName, locale);
- } else {
- if ( required ) {
- controlState = Control.REQUIRED_INVALID_CONTROL;
- } else {
- controlState = Control.OPTIONAL_VALID_CONTROL;
- }
- }
- }
- controlParameters.put(Control.STATE, controlState);
- Result controlResult = control.process(controlParameters, context);
- parameter.put(parameterDescriptors[i].getName(), controlResult.getResultEntries().get(OUTPUT));
- if ( controlState == Control.OPTIONAL_INVALID_CONTROL || controlState == Control.REQUIRED_INVALID_CONTROL ) {
- state = INVALID_STATE;
- } else if ( state == OPTIONAL && ( controlState == Control.OPTIONAL_VALID_CONTROL || controlState == Control.REQUIRED_VALID_CONTROL ) ) {
- state = VALID_STATE;
- }
- }
- }
- Template template = defaultTemplate;
- if ( state == VALID_STATE && validTemplate != null ) {
- template = validTemplate;
- } else if ( state == INVALID_STATE && invalidTemplate != null ) {
- template = invalidTemplate;
- }
- return new Result(state, OUTPUT, renderFragment(template, parameter));
- }
-
- protected void explodeInformations(Map parameters, List informations, String parameterName, Locale locale) {
- // FIXME: Use template for error numbers
- List matchingInfos = getErrors(informations, parameterName);
- StringBuffer buffer = new StringBuffer();
- for ( Iterator i = matchingInfos.iterator(); i.hasNext(); ) {
- Information info = (Information)i.next();
- buffer.append(info.getNumber()).append(") ");
- explodeInformation(parameters, info, locale);
- }
- parameters.put(ERROR_NUMBER, buffer.toString());
- }
-
- protected void explodeInformation(Map parameters, Information info, Locale locale) {
- parameters.put(ERROR_NUMBER, String.valueOf(info.getNumber()));
- try {
- parameters.put(ERROR_TITLE, info.getErrorMessage().getTitle(locale));
- parameters.put(ERROR_TEXT, info.getErrorMessage().getText(locale));
- parameters.put(ERROR_SUMMARY, info.getErrorMessage().getSummary(locale));
- parameters.put(ERROR_DETAILS, info.getErrorMessage().getDetails(locale));
- } catch ( MessageNotFoundException exception ) {
- parameters.put(ERROR_TITLE, NO_ERROR_MESSAGE_AVAILABLE.getTitle(locale, "no error title available"));
- parameters.put(ERROR_TEXT, NO_ERROR_MESSAGE_AVAILABLE.getText(locale, "no error text available"));
- parameters.put(ERROR_SUMMARY, NO_ERROR_MESSAGE_AVAILABLE.getSummary(locale, "no error summary available"));
- parameters.put(ERROR_DETAILS, NO_ERROR_MESSAGE_AVAILABLE.getDetails(locale, "no error details available"));
- }
- }
-
- protected boolean hasErrors(List informations, String parameterName) {
- for ( Iterator i = informations.iterator(); i.hasNext(); ) {
- Information info = (Information)i.next();
- if ( info.isParameterInvolved(parameterName) && info.getSeverity() == Information.ERROR ) {
- return true;
- }
- }
- return false;
- }
-
- protected List getErrors(List informations, String parameterName) {
- List matchingInfos = new ArrayList();
- for ( Iterator i = informations.iterator(); i.hasNext(); ) {
- Information info = (Information)i.next();
- if ( info.isParameterInvolved(parameterName) && info.getSeverity() == Information.ERROR ) {
- matchingInfos.add(info);
- }
- }
- return matchingInfos;
}
public ParameterDescriptor[] getParameterDescriptors() {
1.4 +33 -23 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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FormHandler.java 5 May 2004 09:58:08 -0000 1.3
+++ FormHandler.java 5 May 2004 15:32:44 -0000 1.4
@@ -7,11 +7,16 @@
import org.apache.slide.projector.i18n.ParameterMessage;
import org.apache.slide.projector.processor.SimpleProcessor;
import org.apache.slide.projector.resource.BooleanResource;
-import org.apache.slide.projector.resource.NullResource;
+import org.apache.slide.projector.resource.MapResource;
+import org.apache.slide.projector.resource.URIResource;
import org.apache.slide.projector.util.ProcessorHelper;
+import org.apache.slide.projector.util.StoreHelper;
+import org.apache.slide.projector.engine.Process;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
+import java.util.StringTokenizer;
/**
* @author <a href="mailto:dflorey@c1-fse.de">Daniel Florey</a>
@@ -21,15 +26,11 @@
public class FormHandler implements Processor {
private final static String FORM_PARAMETER_IDENTIFIER = "form:";
- private final static String FORM_PROCESSOR = "form-processor";
- private final static String FORM_STEP = "form-step";
-
private final static ParameterDescriptor[] parameterDescriptors = new ParameterDescriptor[] {
- new ParameterDescriptor(Trigger.ACTION, new ParameterMessage("formHandler/action"), new URIValueDescriptor()),
- new ParameterDescriptor(Trigger.VALIDATE, new ParameterMessage("formHandler/validate"), new BooleanValueDescriptor(), BooleanResource.TRUE),
- new ParameterDescriptor(Trigger.STEP, new ParameterMessage("formHandler/step"), new StringValueDescriptor(), NullResource.NULL ),
- new ParameterDescriptor(FORM_STEP, new ParameterMessage("formHandler/form-step"), new StringValueDescriptor(), NullResource.NULL ),
- new ParameterDescriptor(FORM_PROCESSOR, new ParameterMessage("formHandler/form-processor"), new URIValueDescriptor())
+ new ParameterDescriptor(Trigger.INSTRUCTION, new ParameterMessage("formHandler/instruction"), new StringValueDescriptor()),
+ new ParameterDescriptor(Trigger.LAST_STEP, new ParameterMessage("formHandler/last-step"), new URIValueDescriptor()),
+ new ParameterDescriptor(ControlComposer.STORE, new ParameterMessage("formHandler/store"), new StringValueDescriptor(Store.stores)),
+ new ParameterDescriptor(ControlComposer.DOMAIN, new ParameterMessage("formHandler/form-step"), new StringValueDescriptor())
};
private final static ResultDescriptor resultDescriptor = new ResultDescriptor(
@@ -39,32 +40,41 @@
});
public Result process(Map parameter, Context context) throws Exception {
- boolean validate = ((BooleanResource)parameter.get(Trigger.VALIDATE)).booleanValue();
- URI processorURI = (URI)parameter.get(Trigger.ACTION);
- URI formURI = (URI)parameter.get(FORM_PROCESSOR);
- Processor formProcessor = ProcessorManager.getInstance().getProcessor(formURI);
- String formStep = parameter.get(FORM_STEP).toString();
- String targetStep = parameter.get(Trigger.STEP).toString();
- // 1. Store all (request) parameters into process store
+ // Decode instruction
+ StringTokenizer tokenizer = new StringTokenizer(parameter.get(Trigger.INSTRUCTION).toString(), ";");
+ URI actionURI = new URIResource(tokenizer.nextToken());
+ boolean validate = Boolean.valueOf(tokenizer.nextToken()).booleanValue();
+ String targetStep = tokenizer.nextToken();
+ String lastStep = parameter.get(Trigger.LAST_STEP).toString();
+ String domain = parameter.get(ControlComposer.DOMAIN).toString();
+ Store store = context.getStore(StoreHelper.getStoreByName(parameter.get(ControlComposer.STORE).toString()));
+ // 1. Store all (request) parameters into requested domain
+ Map map;
+ MapResource mapResource = (MapResource)store.get(domain);
+ if ( mapResource == null ) {
+ map = new HashMap();
+ mapResource = new MapResource(map);
+ store.put(domain, mapResource);
+ } else {
+ map = mapResource.getMap();
+ }
for ( Iterator i = parameter.entrySet().iterator(); i.hasNext(); ) {
Map.Entry entry = (Map.Entry)i.next();
String key = (String)entry.getKey();
- if ( key.startsWith(FORM_PARAMETER_IDENTIFIER) ) {
- context.getStore(Store.TRANSIENT_PROCESS).put(key.substring(FORM_PARAMETER_IDENTIFIER.length()), entry.getValue());
- }
+ map.put(key, entry.getValue());
}
if ( validate ) {
// 2. Validate parameters
- Processor processor = ProcessorManager.getInstance().getProcessor(processorURI);
+ Processor processor = ProcessorManager.getInstance().getProcessor(actionURI);
try {
ProcessorHelper.validate(processor.getParameterDescriptors(), parameter, context);
} catch ( ValidationException exception ) {
// 3. Go back to form step if validation failes
- context.setFormStep(formURI, formStep);
+ map.put(Process.STEP, lastStep);
}
}
// 4. Launch target step if validation is successfull
- context.setFormStep(formURI, targetStep);
+ map.put(Process.STEP, targetStep);
Processor bookmark = ProcessorManager.getInstance().getProcessor(context.getBookmark());
return bookmark.process(parameter, context);
}
1.2 +5 -10 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Textbutton.java
Index: Textbutton.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Textbutton.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Textbutton.java 3 May 2004 14:20:18 -0000 1.1
+++ Textbutton.java 5 May 2004 15:32:44 -0000 1.2
@@ -1,10 +1,5 @@
package org.apache.slide.projector.processor.form;
-import org.apache.slide.projector.Context;
-import org.apache.slide.projector.Result;
-
-import java.util.Map;
-
/**
* @author <a href="mailto:dflorey@c1-fse.de">Daniel Florey</a>
* @version $Revision$
@@ -14,10 +9,10 @@
private final static String FRAGMENT = "textbutton";
public Textbutton() {
- setRequiredFragments(new String[] { FRAGMENT });
+ super();
}
-
- public Result process(Map parameter, Context context) throws Exception {
- return new Result(OK, OUTPUT, renderFragment(FRAGMENT, parameter));
+
+ protected String getName() {
+ return FRAGMENT;
}
}
1.3 +9 -14 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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FormGenerator.java 5 May 2004 09:58:08 -0000 1.2
+++ FormGenerator.java 5 May 2004 15:32:44 -0000 1.3
@@ -19,7 +19,7 @@
* @version $Revision$
*/
public class FormGenerator extends Form {
- public final static String CONTROL = " control";
+ public final static String CONTROL_FRAGMENT = " control";
protected final static URI TEXTFIELD = new URIResource("/textfield");
protected final static URI TEXTAREA = new URIResource("/textarea");
@@ -36,12 +36,6 @@
protected final static String STYLE = "style";
protected final static String ORANGE_STYLE = "/orangeStyle";
- protected final static String TITLE = "title";
- protected final static String TEXT = "text";
- protected final static String PROMPT = "prompt";
- protected final static String ERRORS = "errors";
- protected final static String ERRORS_TITLE = "errors-title";
- protected final static String CLASS = "class";
protected ParameterMessage NO_PARAMETER_MESSAGE_AVAILABLE = new ParameterMessage("parameterMessageNotFound");
private ParameterDescriptor[] parameterDescriptors;
@@ -53,6 +47,8 @@
}
public Result process(Map parameter, Context context) throws Exception {
+ // FIXME: Redo!!
+ /*
// Collect involved parameters and call super
boolean validate = ((BooleanResource)parameter.get(VALIDATE)).booleanValue();
@@ -152,6 +148,8 @@
errorsParameter.put(SimpleProcessor.INPUT, new ArrayResource((MapResource[])errorList.toArray(errorsArray)));
ProcessorHelper.validate(errorsTable.getParameterDescriptors(), errorsParameter, context);
Result renderedErrors = errorsTable.process(errorsParameter, context);
+ parameter.put(ERRORS, renderedErrors.getResultEntries().get(OUTPUT));
+
ProcessorDescriptor processorDescriptor = ProcessorManager.getInstance().getProcessorDescriptor(actionUri);
parameter.put(PROCESSOR_NAME, processorDescriptor.getName());
parameter.put(PROCESSOR_TITLE, ((DefaultMessage)processorDescriptor.getDescription()).getTitle(locale, processorDescriptor.getName()));
@@ -161,18 +159,15 @@
parameter.put(TITLE, processorDescriptor.getName());
parameter.put(STYLE, ((HttpContext)context).getContextPath() + ORANGE_STYLE);
parameter.put(ERRORS_TITLE, "Fehler:");
- parameter.put(ERRORS, renderedErrors.getResultEntries().get(OUTPUT));
return new Result(state, OUTPUT, renderFragment(template, parameter));
+ */
+ return null;
}
public void configure(StreamableResource config) throws ConfigurationException {
super.configure(config);
parameterDescriptors = new ParameterDescriptor[] {
- new ParameterDescriptor(Control.ACTION, new ParameterMessage("formGenerator/action"), new URIValueDescriptor()),
- new ParameterDescriptor(HANDLER, new ParameterMessage("formGenerator/handler"), new URIValueDescriptor()),
- new ParameterDescriptor(VALIDATE, new ParameterMessage("formGenerator/validate"), new BooleanValueDescriptor(), BooleanResource.FALSE ),
- new ParameterDescriptor(METHOD, new ParameterMessage("formGenerator/method"), new StringValueDescriptor(), new StringResource("POST")),
- new ParameterDescriptor(SUBMIT, new ParameterMessage("formGenerator/submit"), new StringValueDescriptor(), new StringResource("Submit")),
+ new ParameterDescriptor(ACTION, new ParameterMessage("formGenerator/action"), new URIValueDescriptor()),
new ParameterDescriptor(LOCALE, new ParameterMessage("formGenerator/locale"), new LocaleValueDescriptor(), new LocaleResource(Locale.getDefault()))
};
}
1.3 +30 -11 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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Trigger.java 5 May 2004 09:58:08 -0000 1.2
+++ Trigger.java 5 May 2004 15:32:44 -0000 1.3
@@ -1,33 +1,52 @@
package org.apache.slide.projector.processor.form;
+import java.util.Map;
+
+import org.apache.slide.projector.engine.Process;
import org.apache.slide.projector.ConfigurationException;
+import org.apache.slide.projector.Context;
+import org.apache.slide.projector.Result;
+import org.apache.slide.projector.URI;
import org.apache.slide.projector.descriptor.BooleanValueDescriptor;
import org.apache.slide.projector.descriptor.ParameterDescriptor;
-import org.apache.slide.projector.descriptor.ResourceValueDescriptor;
+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.BooleanResource;
-import org.apache.slide.projector.resource.NullResource;
import org.apache.slide.projector.resource.StreamableResource;
+import org.apache.slide.projector.resource.StringResource;
/**
* @author <a href="mailto:dflorey@c1-fse.de">Daniel Florey</a>
* @version $Revision$
*/
-public class Trigger extends TemplateRenderer {
+public abstract class Trigger extends TemplateRenderer {
+ public final static String INSTRUCTION = "instruction";
public final static String ACTION = "action";
- public final static String STEP = "step";
+ public final static String LAST_STEP = "last-step";
public final static String VALIDATE = "validate";
- public final static String VALUE = "value";
private ParameterDescriptor[] parameterDescriptors;
+ public Trigger() {
+ setRequiredFragments(new String[] { getName() });
+ }
+
+ public Result process(Map parameter, Context context) throws Exception {
+ String targetStep = parameter.get(Process.STEP).toString();
+ BooleanResource validate = (BooleanResource)parameter.get(VALIDATE);
+ URI actionUri = (URI)parameter.get(ACTION);
+ String instruction = actionUri + ";" + validate + ";" + targetStep;
+ 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 + 2];
+ parameterDescriptors = new ParameterDescriptor[parentParameterDescriptors.length + 3];
int counter = 0;
for ( int i = 0; i < parentParameterDescriptors.length; i++ ) {
if (!parentParameterDescriptors[i].getName().equals(FRAGMENT)) {
@@ -38,14 +57,14 @@
parameterDescriptors[parentParameterDescriptors.length - 1] =
new ParameterDescriptor(ACTION, new ParameterMessage("trigger/action"), new URIValueDescriptor());
parameterDescriptors[parentParameterDescriptors.length ] =
- new ParameterDescriptor(STEP, new ParameterMessage("trigger/step"), new ResourceValueDescriptor(), NullResource.NULL );
- parameterDescriptors[parentParameterDescriptors.length + 1] =
- new ParameterDescriptor(VALUE, new ParameterMessage("trigger/value"), new ResourceValueDescriptor(), NullResource.NULL);
- parameterDescriptors[parentParameterDescriptors.length + 1] =
+ new ParameterDescriptor(Process.STEP, new ParameterMessage("trigger/step"), new StringValueDescriptor());
+ parameterDescriptors[parentParameterDescriptors.length + 2] =
new ParameterDescriptor(VALIDATE, new ParameterMessage("trigger/validate"), new BooleanValueDescriptor(), BooleanResource.TRUE);
}
public ParameterDescriptor[] getParameterDescriptors() {
return parameterDescriptors;
}
+
+ protected abstract String getName();
}
1.1 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/ControlComposer.java
Index: ControlComposer.java
===================================================================
package org.apache.slide.projector.processor.form;
import org.apache.slide.projector.*;
import org.apache.slide.projector.descriptor.*;
import org.apache.slide.projector.engine.ProcessorManager;
import org.apache.slide.projector.i18n.DefaultMessage;
import org.apache.slide.projector.i18n.ErrorMessage;
import org.apache.slide.projector.i18n.MessageNotFoundException;
import org.apache.slide.projector.i18n.ParameterMessage;
import org.apache.slide.projector.processor.SimpleProcessor;
import org.apache.slide.projector.processor.TemplateRenderer;
import org.apache.slide.projector.resource.*;
import org.apache.slide.projector.util.ProcessorHelper;
import org.apache.slide.projector.util.StoreHelper;
import java.util.*;
/**
* The ControlComposer class
*
* @author <a href="mailto:dflorey@c1-fse.de">Daniel Florey</a>
*/
public class ControlComposer extends TemplateRenderer {
// Parameters for the control composer
public final static String VALIDATE = "validate";
public final static String LOCALE = "locale";
public final static String ACTION = "action";
public final static String STORE = "store";
public final static String DOMAIN = "domain";
public final static String ERRORS_PROCESSOR = "errorsProcessor";
public final static String CONTROL_DESCRIPTIONS = "controlDescriptions";
// Parameters for each control
public final static String CONTROL = "control";
public final static String CONTROL_CONTAINER = "control-container";
// Parameters for the control container
protected final static String TITLE = "title";
protected final static String TEXT = "text";
protected final static String PROMPT = "prompt";
protected final static String ERRORS = "errors";
protected final static String ERRORS_TITLE = "errors-title";
public final static String ERROR_NUMBER = "error-number";
public final static String ERROR_TITLE = "error-title";
public final static String ERROR_TEXT = "error-text";
public final static String ERROR_DETAILS = "error-details";
public final static String ERROR_SUMMARY = "error-summary";
// Result
public final static String GENERATED_CONTROLS = "renderedControls";
public final static String RENDERED_ERRORS = "renderedErrors";
public final static String DEFAULT_STATE ="default";
public final static String VALID_STATE ="valid";
public final static String INVALID_STATE ="invalid";
protected ErrorMessage NO_ERROR_MESSAGE_AVAILABLE = new ErrorMessage("errorMessageNotFound");
protected ParameterMessage NO_PARAMETER_MESSAGE_AVAILABLE = new ParameterMessage("parameterMessageNotFound");
private ParameterDescriptor[] parameterDescriptors;
private final static ResultDescriptor resultDescriptor = new ResultDescriptor(
new StateDescriptor[] {
new StateDescriptor(DEFAULT_STATE, new DefaultMessage("controlComposer/state/default")),
new StateDescriptor(VALID_STATE, new DefaultMessage("controlComposer/state/valid")),
new StateDescriptor(INVALID_STATE, new DefaultMessage("controlComposer/state/invalid"))
},
new ResultEntryDescriptor[]{
new ResultEntryDescriptor(GENERATED_CONTROLS, new DefaultMessage("controlComposer/generatedControls"), MapResource.CONTENT_TYPE, false)
});
public void configure(StreamableResource config) throws ConfigurationException {
super.configure(config);
ParameterDescriptor[] parentParameterDescriptors = super.getParameterDescriptors();
parameterDescriptors = new ParameterDescriptor[parentParameterDescriptors.length + 6];
parameterDescriptors[parentParameterDescriptors.length] =
new ParameterDescriptor(CONTROL_DESCRIPTIONS, new ParameterMessage("controlComposer/controlDescriptions"), new MapValueDescriptor());
parameterDescriptors[parentParameterDescriptors.length+1] =
new ParameterDescriptor(LOCALE, new ParameterMessage("controlComposer/locale"), new LocaleValueDescriptor());
parameterDescriptors[parentParameterDescriptors.length+2] =
new ParameterDescriptor(ACTION, new ParameterMessage("controlComposer/action"), new URIValueDescriptor());
parameterDescriptors[parentParameterDescriptors.length+3] =
new ParameterDescriptor(STORE, new ParameterMessage("controlComposer/store"), new StringValueDescriptor(Store.stores));
parameterDescriptors[parentParameterDescriptors.length+4] =
new ParameterDescriptor(DOMAIN, new ParameterMessage("controlComposer/domain"), new StringValueDescriptor());
parameterDescriptors[parentParameterDescriptors.length+5] =
new ParameterDescriptor(ERRORS_PROCESSOR, new ParameterMessage("controlComposer/errorsProcessor"), new URIValueDescriptor(), NullResource.NULL);
}
public Result process(Map parameter, Context context) throws Exception {
Map controlDescriptions = ((MapResource)parameter.get(CONTROL_DESCRIPTIONS)).getMap();
String store = parameter.get(STORE).toString();
String domain = parameter.get(DOMAIN).toString();
URI actionUri = (URI)parameter.get(ACTION);
URI errorsProcessorUri = (URI)parameter.get(ERRORS_PROCESSOR);
Locale locale = ((LocaleResource)parameter.get(LOCALE)).getLocale();
boolean validate = ((BooleanResource)parameter.get(VALIDATE)).booleanValue();
String state = DEFAULT_STATE;
List informations = context.getInformations();
MapResource generatedControls = new MapResource();
for (Iterator i = controlDescriptions.entrySet().iterator(); i.hasNext(); ) {
Map.Entry entry = (Map.Entry)i.next();
String controlName = (String)entry.getKey();
Map controlParameters = ((MapResource)entry.getValue()).getMap();
if ( ((URI)controlParameters.get(Control.ACTION)) == null ) controlParameters.put(Control.ACTION, actionUri);
Control control = (Control)ProcessorManager.getInstance().getProcessor((URI)controlParameters.get(CONTROL));
try {
ProcessorHelper.validate(control.getParameterDescriptors(), controlParameters, context);
} catch ( ValidationException exception ) {
throw new ValidationException(new ErrorMessage("controlComposer/controlParameterInvalid", new Object[] { control }), exception);
}
ParameterDescriptor parameterDescriptor = control.getParameterDescriptor(controlParameters, context);
String parameterName = parameterDescriptor.getName();
ParameterMessage description = (ParameterMessage)parameterDescriptor.getDescription();
boolean required = parameterDescriptor.isRequired();
String controlState = Control.OPTIONAL_CONTROL;
if ( required ) {
controlState = Control.REQUIRED_CONTROL;
}
Object controlValue = null;
if ( validate ) {
MapResource mapResource = (MapResource)context.getStore(StoreHelper.getStoreByName(store)).get(domain);
if ( mapResource != null ) {
controlValue = mapResource.getMap().get(parameterName);
}
try {
controlValue = ProcessorHelper.validate(parameterDescriptor, controlValue, context);
} catch ( ValidationException exception ) {
controlValue = StringValueDescriptor.toString(controlValue);
context.addInformation(new Information(Information.ERROR, exception.getErrorMessage(), new String[] { parameterName }));
}
controlParameters.put(Control.VALUE, controlValue);
if ( hasErrors(informations, parameterName) ) {
if ( required ) {
controlState = Control.REQUIRED_INVALID_CONTROL;
} else {
controlState = Control.OPTIONAL_INVALID_CONTROL;
}
explodeInformations(controlParameters, informations, parameterName, locale);
} else {
if ( required ) {
controlState = Control.REQUIRED_INVALID_CONTROL;
} else {
controlState = Control.OPTIONAL_VALID_CONTROL;
}
}
}
controlParameters.put(Control.STATE, controlState);
controlParameters.put(Control.VALUE, controlValue);
Result controlResult = control.process(controlParameters, context);
Resource controlContainerUri = (Resource)controlParameters.get(CONTROL_CONTAINER);
if ( controlContainerUri != null ) {
Processor controlContainer = ProcessorManager.getInstance().getProcessor((URI)controlContainerUri);
Map controlContainerParameters = new HashMap();
controlContainerParameters.putAll(parameter);
if ( hasErrors(informations, parameterName) ) {
explodeInformations(controlContainerParameters, informations, parameterName, locale);
}
controlContainerParameters.put(CONTROL, controlResult.getResultEntries().get(OUTPUT));
controlContainerParameters.put(TITLE, description.getTitle(locale, parameterName ));
try {
controlContainerParameters.put(TEXT, description.getText(locale));
controlContainerParameters.put(PROMPT, description.getPrompt(locale));
} catch ( MessageNotFoundException exception ) {
controlContainerParameters.put(TEXT, NO_PARAMETER_MESSAGE_AVAILABLE.getText(locale, " "));
controlContainerParameters.put(PROMPT, NO_PARAMETER_MESSAGE_AVAILABLE.getPrompt(locale, " "));
}
try {
ProcessorHelper.validate(controlContainer.getParameterDescriptors(), controlContainerParameters, context);
} catch ( ValidationException exception ) {
throw new ValidationException(new ErrorMessage("controlComposer/controlContainerParameterInvalid", new Object[] { controlContainerUri }), exception);
}
Result controlContainerResult = controlContainer.process(controlContainerParameters, context);
generatedControls.getMap().put(controlName, controlContainerResult.getResultEntries().get(OUTPUT));
} else {
generatedControls.getMap().put(controlName, controlResult.getResultEntries().get(OUTPUT));
}
if ( controlState == Control.OPTIONAL_INVALID_CONTROL || controlState == Control.REQUIRED_INVALID_CONTROL ) {
state = INVALID_STATE;
} else if ( state == DEFAULT_STATE && ( controlState == Control.OPTIONAL_VALID_CONTROL || controlState == Control.REQUIRED_VALID_CONTROL ) ) {
state = VALID_STATE;
}
}
Result composerResult = new Result(state, GENERATED_CONTROLS, generatedControls);
if ( errorsProcessorUri != null ) {
Processor errorsTable = ProcessorManager.getInstance().getProcessor(errorsProcessorUri);
List errorList = new ArrayList();
for ( Iterator i = context.getInformations().iterator(); i.hasNext(); ) {
Information info = (Information)i.next();
Map errors = new HashMap();
explodeInformation(errors, info, locale );
errorList.add(new MapResource(errors));
}
Map errorsParameter = new HashMap();
MapResource[] errorsArray = new MapResource[errorList.size()];
errorsParameter.put(SimpleProcessor.INPUT, new ArrayResource((MapResource[])errorList.toArray(errorsArray)));
ProcessorHelper.validate(errorsTable.getParameterDescriptors(), errorsParameter, context);
Result renderedErrors = errorsTable.process(errorsParameter, context);
composerResult.addResultEntry(RENDERED_ERRORS, (Resource)renderedErrors.getResultEntries().get(OUTPUT));
}
return composerResult;
}
protected void explodeInformations(Map parameters, List informations, String parameterName, Locale locale) {
// FIXME: Use template for error numbers
List matchingInfos = getErrors(informations, parameterName);
StringBuffer buffer = new StringBuffer();
for ( Iterator i = matchingInfos.iterator(); i.hasNext(); ) {
Information info = (Information)i.next();
buffer.append(info.getNumber()).append(") ");
explodeInformation(parameters, info, locale);
}
parameters.put(ERROR_NUMBER, buffer.toString());
}
protected void explodeInformation(Map parameters, Information info, Locale locale) {
parameters.put(ERROR_NUMBER, String.valueOf(info.getNumber()));
try {
parameters.put(ERROR_TITLE, info.getErrorMessage().getTitle(locale));
parameters.put(ERROR_TEXT, info.getErrorMessage().getText(locale));
parameters.put(ERROR_SUMMARY, info.getErrorMessage().getSummary(locale));
parameters.put(ERROR_DETAILS, info.getErrorMessage().getDetails(locale));
} catch ( MessageNotFoundException exception ) {
parameters.put(ERROR_TITLE, NO_ERROR_MESSAGE_AVAILABLE.getTitle(locale, "no error title available"));
parameters.put(ERROR_TEXT, NO_ERROR_MESSAGE_AVAILABLE.getText(locale, "no error text available"));
parameters.put(ERROR_SUMMARY, NO_ERROR_MESSAGE_AVAILABLE.getSummary(locale, "no error summary available"));
parameters.put(ERROR_DETAILS, NO_ERROR_MESSAGE_AVAILABLE.getDetails(locale, "no error details available"));
}
}
protected boolean hasErrors(List informations, String parameterName) {
for ( Iterator i = informations.iterator(); i.hasNext(); ) {
Information info = (Information)i.next();
if ( info.isParameterInvolved(parameterName) && info.getSeverity() == Information.ERROR ) {
return true;
}
}
return false;
}
protected List getErrors(List informations, String parameterName) {
List matchingInfos = new ArrayList();
for ( Iterator i = informations.iterator(); i.hasNext(); ) {
Information info = (Information)i.next();
if ( info.isParameterInvolved(parameterName) && info.getSeverity() == Information.ERROR ) {
matchingInfos.add(info);
}
}
return matchingInfos;
}
public ParameterDescriptor[] getParameterDescriptors() {
return parameterDescriptors;
}
public ResultDescriptor getResultDescriptor() {
return resultDescriptor;
}
}
1.2 +6 -1 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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TemplateRenderer.java 3 May 2004 14:20:24 -0000 1.1
+++ TemplateRenderer.java 5 May 2004 15:32:44 -0000 1.2
@@ -51,6 +51,7 @@
private Map templates;
private String[] requiredFragments, optionalFragments;
+ private boolean ignoreUndefinedFragments = true;
protected List optionalParameters = new ArrayList(); // all variables used in conditions reflect optional parameters
// FIXME: Nested fragments
@@ -136,6 +137,10 @@
public void setOptionalFragments(String[] optionalFragments) {
this.optionalFragments = optionalFragments;
}
+
+ public void ignoreUndefinedFragments(boolean ignoreUndefinedFragments) {
+ this.ignoreUndefinedFragments = ignoreUndefinedFragments;
+ }
public StringResource renderFragment(String fragment, Map parameter) throws ProcessException {
Template template = getRequiredFragment(fragment);
@@ -204,7 +209,7 @@
if ( fragmentName.startsWith(optionalFragments[i])) return false;
}
}
- return true;
+ return ignoreUndefinedFragments;
}
protected class Template {
1.2 +5 -0 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/resource/MapResource.java
Index: MapResource.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/resource/MapResource.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MapResource.java 3 May 2004 14:20:24 -0000 1.1
+++ MapResource.java 5 May 2004 15:32:44 -0000 1.2
@@ -4,6 +4,7 @@
import de.zeigermann.xml.XMLWriter;
import org.apache.slide.projector.Resource;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -12,6 +13,10 @@
public final static String CONTENT_TYPE = "application/x-java-map";
+ public MapResource() {
+ map = new HashMap();
+ }
+
public MapResource(Map map) {
this.map = map;
}
1.4 +3 -0 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Constants.java
Index: Constants.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Constants.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Constants.java 5 May 2004 09:58:08 -0000 1.3
+++ Constants.java 5 May 2004 15:32:44 -0000 1.4
@@ -4,6 +4,7 @@
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory;
import org.apache.commons.httpclient.protocol.Protocol;
+import org.apache.slide.projector.resource.URIResource;
public interface Constants {
// FIXME should be read from configuration
@@ -51,4 +52,6 @@
public final static String CLASSES_DIR = SYSTEM_HOME + "classes/";
public static final String PROCESS_STORAGE_PREFIX = SYSTEM_HOME+"jobs/";
+
+ public static final URI DEFAULT_FORM_HANDLER = new URIResource("/formHandler");
}
1.2 +1 -5 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Context.java
Index: Context.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Context.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Context.java 3 May 2004 14:20:23 -0000 1.1
+++ Context.java 5 May 2004 15:32:44 -0000 1.2
@@ -21,11 +21,7 @@
void setBookmark(URI processor) throws IOException ;
URI getBookmark() throws IOException ;
-
- void setFormStep(URI form, String nextStep) throws IOException;
-
- String getFormStep(URI form) throws IOException;
-
+
Credentials getCredentials();
void addInformation(Information information);
1.2 +21 -10 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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MapValueDescriptor.java 3 May 2004 14:20:21 -0000 1.1
+++ MapValueDescriptor.java 5 May 2004 15:32:45 -0000 1.2
@@ -11,20 +11,24 @@
import java.util.Map;
public class MapValueDescriptor implements ValueDescriptor {
- protected List entryDescriptors;
+ public final static String ALL = "*";
+
+ protected List entryDescriptors = new ArrayList();
protected ValueDescriptor entryValueDescriptor;
public MapValueDescriptor() {
- entryDescriptors = new ArrayList();
}
public MapValueDescriptor(List entryDescriptors) {
this.entryDescriptors = entryDescriptors;
}
+ public MapValueDescriptor(ParameterDescriptor parameterDescriptor) {
+ entryDescriptors.add(parameterDescriptor);
+ }
+
public MapValueDescriptor(ParameterDescriptor[] parameterDescriptors) {
- entryDescriptors = new ArrayList();
for ( int i = 0; i < parameterDescriptors.length; i++ ) {
entryDescriptors.add(parameterDescriptors[i]);
}
@@ -54,14 +58,21 @@
ParameterDescriptor parameterDescriptor = (ParameterDescriptor)i.next();
ValueDescriptor entryDescriptor = parameterDescriptor.getValueDescriptor();
String key = parameterDescriptor.getName();
- if ( !map.containsKey(key) ) {
- if ( parameterDescriptor.isRequired() ) {
- throw new ValidationException(new ErrorMessage("mapEntryMissing", new String[] { key }));
- } else {
- map.put(key, parameterDescriptor.getDefaultValue());
- }
+ if ( key.equals(ALL) ) {
+ for ( Iterator j = map.entrySet().iterator(); j.hasNext(); ) {
+ Map.Entry entry = (Map.Entry)j.next();
+ map.put(entry.getKey(), entryDescriptor.validate(entry.getValue(), context));
+ }
} else {
- map.put(key, entryDescriptor.validate(map.get(key), context));
+ if ( !map.containsKey(key) ) {
+ if ( parameterDescriptor.isRequired() ) {
+ throw new ValidationException(new ErrorMessage("mapEntryMissing", new String[] { key }));
+ } else {
+ map.put(key, parameterDescriptor.getDefaultValue());
+ }
+ } else {
+ map.put(key, entryDescriptor.validate(map.get(key), context));
+ }
}
}
return new MapResource(map);
---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org