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