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/06 14:54:12 UTC
cvs commit: jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/descriptor ParameterDescriptor.java
dflorey 2004/05/06 05:54:12
Modified: proposals/projector/src/java/org/apache/slide/projector/processor/form
ControlComposer.java Trigger.java Form.java
FormHandler.java
proposals/projector/src/java/org/apache/slide/projector/engine
Process.java HttpContext.java
proposals/projector/src/java/org/apache/slide/projector
Store.java AbstractContext.java Context.java
proposals/projector/src/java/org/apache/slide/projector/descriptor
ParameterDescriptor.java
Added: proposals/projector/src/java/org/apache/slide/projector/processor
ClearForm.java
Log:
Improved form handling
Revision Changes Path
1.3 +2 -10 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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ControlComposer.java 5 May 2004 17:53:12 -0000 1.2
+++ ControlComposer.java 6 May 2004 12:54:11 -0000 1.3
@@ -25,8 +25,6 @@
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";
@@ -72,7 +70,7 @@
public void configure(StreamableResource config) throws ConfigurationException {
super.configure(config);
ParameterDescriptor[] parentParameterDescriptors = super.getParameterDescriptors();
- parameterDescriptors = new ParameterDescriptor[parentParameterDescriptors.length + 6];
+ parameterDescriptors = new ParameterDescriptor[parentParameterDescriptors.length + 4];
System.arraycopy(parentParameterDescriptors, 0, parameterDescriptors, 0, parentParameterDescriptors.length);
parameterDescriptors[parentParameterDescriptors.length] =
new ParameterDescriptor(CONTROL_DESCRIPTIONS, new ParameterMessage("controlComposer/controlDescriptions"), new MapValueDescriptor());
@@ -81,23 +79,18 @@
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 = (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();
@@ -122,7 +115,6 @@
controlState = Control.REQUIRED_CONTROL;
}
Object controlValue = null;
- MapResource mapResource = (MapResource)context.getStore(StoreHelper.getStoreByName(store)).get(domain);
boolean validate = false;
if ( mapResource != null ) {
controlValue = mapResource.getMap().get(parameterName);
1.5 +2 -3 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.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Trigger.java 5 May 2004 17:53:12 -0000 1.4
+++ Trigger.java 6 May 2004 12:54:11 -0000 1.5
@@ -3,7 +3,6 @@
import java.util.Map;
import org.apache.slide.projector.engine.Process;
-import org.apache.slide.projector.engine.ProcessorManager;
import org.apache.slide.projector.ConfigurationException;
import org.apache.slide.projector.Context;
import org.apache.slide.projector.Resource;
@@ -46,7 +45,7 @@
String targetStep = parameter.get(Process.STEP).toString();
BooleanResource validate = (BooleanResource)parameter.get(VALIDATE);
URI actionUri = (URI)parameter.get(ACTION);
- String instruction = actionUri + ";" + validate + ";" + targetStep + ";" + bookmark;
+ String instruction = actionUri + ";" + validate + ";" + context.getStep() + ";" + targetStep + ";" + bookmark + ";" +context.getProcess();
parameter.put(INSTRUCTION, new StringResource(instruction));
return new Result(OK, OUTPUT, renderFragment(getName(), parameter));
}
1.5 +4 -6 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.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Form.java 5 May 2004 17:53:12 -0000 1.4
+++ Form.java 6 May 2004 12:54:11 -0000 1.5
@@ -77,7 +77,6 @@
}
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();
List informations = context.getInformations();
@@ -132,6 +131,7 @@
})));
} else if (!parentParameterDescriptors[i].getName().equals(FRAGMENT)
&& !parentParameterDescriptors[i].getName().equals(CONTROL_DESCRIPTIONS)
+ && !parentParameterDescriptors[i].getName().equals(RENDERED_ERRORS)
&& !parentParameterDescriptors[i].getName().equals(HANDLER)
&& !parentParameterDescriptors[i].getName().equals(METHOD)) {
parameterList.add(parentParameterDescriptors[i]);
@@ -141,8 +141,6 @@
parameterList.add(new ParameterDescriptor(METHOD, new ParameterMessage("form/method"), new StringValueDescriptor(methods), new StringResource(POST)));
parameterList.add(new ParameterDescriptor(LOCALE, new ParameterMessage("form/locale"), new LocaleValueDescriptor()));
parameterList.add(new ParameterDescriptor(ACTION, new ParameterMessage("form/action"), new URIValueDescriptor()));
- parameterList.add(new ParameterDescriptor(STORE, new ParameterMessage("form/store"), new StringValueDescriptor(Store.stores)));
- parameterList.add(new ParameterDescriptor(DOMAIN, new ParameterMessage("form/domain"), new StringValueDescriptor()));
parameterDescriptors = (ParameterDescriptor[])parameterList.toArray(new ParameterDescriptor[parameterList.size()]);
try {
defaultTemplate = getRequiredFragment(DEFAULT_FORM);
1.6 +8 -13 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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- FormHandler.java 5 May 2004 17:53:12 -0000 1.5
+++ FormHandler.java 6 May 2004 12:54:11 -0000 1.6
@@ -8,9 +8,9 @@
import org.apache.slide.projector.processor.SimpleProcessor;
import org.apache.slide.projector.resource.BooleanResource;
import org.apache.slide.projector.resource.MapResource;
+import org.apache.slide.projector.resource.StringResource;
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;
@@ -24,13 +24,8 @@
*/
public class FormHandler implements Processor {
- private final static String FORM_PARAMETER_IDENTIFIER = "form:";
-
private final static ParameterDescriptor[] parameterDescriptors = new ParameterDescriptor[] {
- 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/domain"), new StringValueDescriptor())
+ new ParameterDescriptor(Trigger.INSTRUCTION, new ParameterMessage("formHandler/instruction"), new StringValueDescriptor())
};
private final static ResultDescriptor resultDescriptor = new ResultDescriptor(
@@ -44,11 +39,11 @@
StringTokenizer tokenizer = new StringTokenizer(parameter.get(Trigger.INSTRUCTION).toString(), ";");
URI actionURI = new URIResource(tokenizer.nextToken());
boolean validate = Boolean.valueOf(tokenizer.nextToken()).booleanValue();
+ String lastStep = tokenizer.nextToken();
String targetStep = tokenizer.nextToken();
URI bookmarkUri = new URIResource(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()));
+ String domain = tokenizer.nextToken();
+ Store store = context.getStore(Store.SESSION);
// 1. Store all (request) parameters into requested domain
Map map;
MapResource mapResource = (MapResource)store.get(domain);
@@ -60,6 +55,7 @@
map = mapResource.getMap();
}
map.put(ControlComposer.VALIDATE, new BooleanResource(validate));
+ map.put(Process.STEP, new StringResource(targetStep));
for ( Iterator i = parameter.entrySet().iterator(); i.hasNext(); ) {
Map.Entry entry = (Map.Entry)i.next();
String key = (String)entry.getKey();
@@ -72,11 +68,10 @@
ProcessorHelper.validate(processor.getParameterDescriptors(), parameter, context);
} catch ( ValidationException exception ) {
// 3. Go back to form step if validation failes
- map.put(Process.STEP, lastStep);
+ map.put(Process.STEP, new StringResource(lastStep));
}
}
// 4. Launch target step if validation is successfull
- map.put(Process.STEP, targetStep);
Processor bookmark = ProcessorManager.getInstance().getProcessor(bookmarkUri);
return bookmark.process(parameter, context);
}
1.1 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/ClearForm.java
Index: ClearForm.java
===================================================================
package org.apache.slide.projector.processor;
import java.util.Map;
import org.apache.slide.projector.Context;
import org.apache.slide.projector.Processor;
import org.apache.slide.projector.Result;
import org.apache.slide.projector.Store;
import org.apache.slide.projector.descriptor.ParameterDescriptor;
import org.apache.slide.projector.descriptor.ResultDescriptor;
import org.apache.slide.projector.descriptor.StateDescriptor;
import org.apache.slide.projector.engine.HttpContext;
public class ClearForm implements Processor {
public Result process(Map parameter, Context context) throws Exception {
Store formStore = context.getStore(Store.FORM);
if ( formStore != null ) {
((HttpContext.FormStore)formStore).clear();
}
return new Result(StateDescriptor.OK);
}
public ParameterDescriptor[] getParameterDescriptors() {
return ParameterDescriptor.NO_PARAMETERS;
}
public ResultDescriptor getResultDescriptor() {
return ResultDescriptor.OK;
}
}
1.3 +23 -22 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/Process.java
Index: Process.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/Process.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Process.java 5 May 2004 15:32:44 -0000 1.2
+++ Process.java 6 May 2004 12:54:11 -0000 1.3
@@ -32,8 +32,7 @@
private final static String OK = "ok";
protected Map steps;
- protected String firstStep, domain;
- protected int store;
+ protected String firstStep;
protected EnvironmentDescriptor[] requiredContextDescriptors, providedContextDescriptors;
protected ExpressionFactory expressionFactory = new ExpressionFactory();
@@ -66,11 +65,14 @@
}
public Result process(Map parameter, Context context) throws Exception {
- String nextStep = getStep(parameter, context);
- Result result = null;
+ URI processorUri = ProcessorManager.getInstance().getProcessorDescriptor(this).getUri();
+ context.setProcess(processorUri);
+ String nextStep = getStep(processorUri, parameter, context);
+ Result result = null;
Step step;
do {
logger.log(Level.INFO, "Processing step: " + nextStep);
+ context.setStep(nextStep);
step = (Step)steps.get(nextStep);
if (step == null) throw new ProcessException(new ErrorMessage("stepNotFound", new String[]{nextStep}));
Processor processor = ProcessorManager.getInstance().getProcessor(step.getProcessorURI());
@@ -173,22 +175,23 @@
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;
- }
- }
+ private String getStep(URI processorUri, Map parameter, Context context) {
+ Store sessionStore = context.getStore(Store.SESSION);
+ if ( sessionStore != null ) {
+ try {
+ MapResource mapResource = (MapResource)sessionStore.get(processorUri.toString());
+ if ( mapResource != null ) {
+ Map map = mapResource.getMap();
+ Resource stepParameter = (Resource)map.get(STEP);
+ if (stepParameter != null && stepParameter instanceof StringResource ) {
+ return stepParameter.toString();
+ }
+ }
+ } catch ( IOException exception ) {
+ logger.log(Level.SEVERE, "Error while accessing session store", exception);
+ return firstStep;
+ }
+ }
return firstStep;
}
@@ -307,8 +310,6 @@
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 +44 -0 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/HttpContext.java
Index: HttpContext.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/HttpContext.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- HttpContext.java 3 May 2004 14:20:20 -0000 1.1
+++ HttpContext.java 6 May 2004 12:54:11 -0000 1.2
@@ -3,6 +3,7 @@
import org.apache.commons.httpclient.Credentials;
import org.apache.slide.projector.Constants;
import org.apache.slide.projector.Store;
+import org.apache.slide.projector.resource.MapResource;
import org.apache.slide.projector.resource.StreamableResource;
import javax.servlet.http.Cookie;
@@ -19,11 +20,13 @@
private RequestParameterStore requestParameterStore;
private RequestHeaderStore requestHeaderStore;
private CookieStore cookieStore;
+ private FormStore formStore;
private String contextPath;
public HttpContext(HttpServletRequest request, HttpServletResponse response) {
this.contextPath = request.getContextPath()+Constants.PROCESS_SERVLET_PATH;
sessionStore = new SessionStore(request);
+ formStore = new FormStore(sessionStore);
requestAttributeStore = new RequestAttributeStore(request);
requestParameterStore = new RequestParameterStore(request);
requestHeaderStore = new RequestHeaderStore(request);
@@ -62,6 +65,9 @@
case Store.CACHE : {
return Cache.getInstance();
}
+ case Store.FORM : {
+ return formStore;
+ }
}
return super.getStore(store);
}
@@ -215,5 +221,43 @@
public void dispose(String key) {
request.removeAttribute(key);
}
+ }
+
+ public class FormStore extends AbstractStore {
+ private Store store;
+
+ public FormStore(Store store) {
+ this.store = store;
+ }
+
+ public void put(String key, Object value) throws IOException {
+ MapResource domain = getDomain();
+ domain.getMap().put(key, value);
+ }
+
+ public Object get(String key) throws IOException {
+ return getDomain().getMap().get(key);
+ }
+
+ public void dispose(String key) throws IOException {
+ getDomain().getMap().remove(key);
+ }
+
+ public void clear() throws IOException {
+ String domain = getProcess().toString();
+ store.dispose(domain);
+ }
+
+ private MapResource getDomain() throws IOException {
+ String domain = getProcess().toString();
+ MapResource mapResource = (MapResource)store.get(domain);
+ if ( mapResource == null ) {
+ mapResource = new MapResource();
+ store.put(domain, mapResource);
+ return mapResource;
+ } else {
+ return mapResource;
+ }
+ }
}
}
1.2 +2 -1 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Store.java
Index: Store.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Store.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Store.java 3 May 2004 14:20:23 -0000 1.1
+++ Store.java 6 May 2004 12:54:11 -0000 1.2
@@ -16,8 +16,9 @@
public final static int OUTPUT = 9;
public final static int TRANSIENT_PROCESS = 10; // Transient information bound to the instance of the current process
public final static int PERSISTENT_PROCESS = 11; // Persistent information bound to the instance of the current process
+ public final static int FORM = 12;
- public final static String[] stores = { "request-parameter", "request-attribute", "request-header", "session", "cookie", "context", "cache", "repository", "input", "output", "process", "persistent-process" };
+ public final static String[] stores = { "request-parameter", "request-attribute", "request-header", "session", "cookie", "context", "cache", "repository", "input", "output", "process", "persistent-process", "form" };
void put(String key, Object value, long timeout) throws IOException;
1.2 +19 -1 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/AbstractContext.java
Index: AbstractContext.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/AbstractContext.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AbstractContext.java 3 May 2004 14:20:23 -0000 1.1
+++ AbstractContext.java 6 May 2004 12:54:11 -0000 1.2
@@ -20,6 +20,8 @@
public abstract class AbstractContext implements Context {
private List informations = new ArrayList();
private int informationNumber = 0;
+ private URI process;
+ private String step;
public void addInformation(Information info) {
if ( !informations.contains(info) ) {
@@ -33,6 +35,22 @@
return informations;
}
+ public void setProcess(URI process) {
+ this.process = process;
+ }
+
+ public URI getProcess() {
+ return process;
+ }
+
+ public void setStep(String step) {
+ this.step = step;
+ }
+
+ public String getStep() {
+ return step;
+ }
+
public class RepositoryStore extends AbstractStore {
public void put(String key, Object value) throws IOException {
if ( value instanceof StreamableResource) {
1.3 +10 -2 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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Context.java 5 May 2004 15:32:44 -0000 1.2
+++ Context.java 6 May 2004 12:54:11 -0000 1.3
@@ -18,10 +18,18 @@
String getProcessId();
- void setBookmark(URI processor) throws IOException ;
+ void setBookmark(URI processor) throws IOException;
- URI getBookmark() throws IOException ;
+ URI getBookmark() throws IOException;
+
+ void setProcess(URI process);
+
+ URI getProcess();
+ void setStep(String step);
+
+ String getStep();
+
Credentials getCredentials();
void addInformation(Information information);
1.2 +3 -1 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/descriptor/ParameterDescriptor.java
Index: ParameterDescriptor.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/descriptor/ParameterDescriptor.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ParameterDescriptor.java 3 May 2004 14:20:22 -0000 1.1
+++ ParameterDescriptor.java 6 May 2004 12:54:12 -0000 1.2
@@ -4,7 +4,9 @@
import org.apache.slide.projector.i18n.LocalizedMessage;
public class ParameterDescriptor extends Descriptor {
- protected boolean required;
+ public final static ParameterDescriptor[] NO_PARAMETERS = new ParameterDescriptor[0];
+
+ protected boolean required;
protected ValueDescriptor valueDescriptor;
protected Resource defaultValue;
---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org