KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > slide > projector > processor > form > FormGenerator


1 package org.apache.slide.projector.processor.form;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.Iterator JavaDoc;
5 import java.util.List JavaDoc;
6 import java.util.Locale JavaDoc;
7 import java.util.Map JavaDoc;
8
9 import org.apache.slide.projector.ConfigurationException;
10 import org.apache.slide.projector.Constants;
11 import org.apache.slide.projector.Context;
12 import org.apache.slide.projector.HttpContext;
13 import org.apache.slide.projector.ProcessException;
14 import org.apache.slide.projector.Processor;
15 import org.apache.slide.projector.Result;
16 import org.apache.slide.projector.URI;
17 import org.apache.slide.projector.descriptor.ArrayValueDescriptor;
18 import org.apache.slide.projector.descriptor.BooleanValueDescriptor;
19 import org.apache.slide.projector.descriptor.LocaleValueDescriptor;
20 import org.apache.slide.projector.descriptor.NumberValueDescriptor;
21 import org.apache.slide.projector.descriptor.ParameterDescriptor;
22 import org.apache.slide.projector.descriptor.ProcessorDescriptor;
23 import org.apache.slide.projector.descriptor.StringValueDescriptor;
24 import org.apache.slide.projector.descriptor.URIValueDescriptor;
25 import org.apache.slide.projector.descriptor.ValueDescriptor;
26 import org.apache.slide.projector.engine.ProcessorManager;
27 import org.apache.slide.projector.i18n.DefaultMessage;
28 import org.apache.slide.projector.i18n.ErrorMessage;
29 import org.apache.slide.projector.i18n.ParameterMessage;
30 import org.apache.slide.projector.processor.process.Process;
31 import org.apache.slide.projector.value.ArrayValue;
32 import org.apache.slide.projector.value.BooleanValue;
33 import org.apache.slide.projector.value.LocaleValue;
34 import org.apache.slide.projector.value.MapValue;
35 import org.apache.slide.projector.value.NullValue;
36 import org.apache.slide.projector.value.StreamableValue;
37 import org.apache.slide.projector.value.StringValue;
38 import org.apache.slide.projector.value.URIValue;
39 import org.apache.slide.projector.value.Value;
40
41 /**
42  * @version $Revision: 1.3 $
43  */

44 public class FormGenerator extends ControlComposer {
45     public final static String JavaDoc CONTROLS = "controls";
46     public final static String JavaDoc TRIGGERS = "triggers";
47     public final static String JavaDoc TARGET_STEP = "targetStep";
48
49     protected final static String JavaDoc TRIGGER_IMAGE = "image";
50     protected final static URI TEXTFIELD = new URIValue("textfield");
51     protected final static URI TEXTAREA = new URIValue("textarea");
52     protected final static URI LISTBOX = new URIValue("listbox");
53     protected final static URI COMBOBOX = new URIValue("combobox");
54     protected final static URI CHECKBOX = new URIValue("checkbox");
55     protected final static URI ERRORS_TABLE = new URIValue("errors");
56     protected final static URI TRIGGER_URI = new URIValue("textTrigger");
57     protected final static URI DEFAULT_TRIGGER_IMAGE = new URIValue("/files/contelligent/images/ok.gif");
58     protected final static URI DEFAULT_CONTROL_CONTAINER = new URIValue("bigControl");
59     protected final static URI DEFAULT_TRIGGER_CONTAINER = new URIValue("triggerContainer");
60     protected final static URI DEFAULT_ERROR_RENDERER = new URIValue("errors");
61
62     protected final static String JavaDoc PROCESSOR_NAME = "processor-name";
63     protected final static String JavaDoc PROCESSOR_TITLE = "processor-title";
64     protected final static String JavaDoc PROCESSOR_TEXT = "processor-text";
65     protected final static String JavaDoc PROCESSOR_SMALL_ICON = "processor-small-icon";
66     protected final static String JavaDoc PROCESSOR_LARGE_ICON = "processor-large-icon";
67
68     protected final static String JavaDoc STYLE = "style";
69     protected final static String JavaDoc ORANGE_STYLE = "style.html";
70     protected final static String JavaDoc LAUNCH_PROCESSOR = "trigger:launch";
71     
72     private ParameterDescriptor[] parameterDescriptors;
73
74     public FormGenerator() {
75         super();
76     }
77
78     public Result process(Map JavaDoc parameter, Context context) throws Exception JavaDoc {
79         URI actionUri = (URIValue)parameter.get(Control.ACTION);
80         Processor action = ProcessorManager.getInstance().getProcessor(actionUri);
81         Locale JavaDoc locale = ((LocaleValue)parameter.get(LOCALE)).getLocale();
82         ParameterDescriptor []actionParameterDescriptors = action.getParameterDescriptors();
83         StringBuffer JavaDoc buffer = new StringBuffer JavaDoc();
84         List JavaDoc controlDescriptors = new ArrayList JavaDoc();
85         // Collect controls to compose...
86
for (int i = 0; i < actionParameterDescriptors.length; i++) {
87             String JavaDoc parameterName = actionParameterDescriptors[i].getName();
88             MapValue controlDescriptor = new MapValue();
89             controlDescriptor.getMap().put(Control.ACTION, actionUri);
90             controlDescriptor.getMap().put(Control.PARAMETER, parameterName);
91             controlDescriptor.getMap().put(CONTROL, getControlURI(actionParameterDescriptors[i].getValueDescriptor()));
92             controlDescriptor.getMap().put(CONTROL_CONTAINER, DEFAULT_CONTROL_CONTAINER);
93             controlDescriptor.getMap().put(CONTROL_NAME, parameterName);
94             controlDescriptors.add(controlDescriptor);
95         }
96         parameter.put(CONTROL_DESCRIPTIONS, new ArrayValue((Value[])controlDescriptors.toArray(new Value[controlDescriptors.size()])));
97
98         // Finally add testing trigger...
99
MapValue triggerDescriptor = new MapValue();
100         triggerDescriptor.getMap().put(Trigger.ACTION, actionUri);
101         triggerDescriptor.getMap().put(Trigger.VALIDATE, BooleanValue.TRUE);
102         triggerDescriptor.getMap().put(Trigger.INVOLVED_PARAMETERS, NullValue.NULL);
103         triggerDescriptor.getMap().put(Process.STEP, parameter.get(TARGET_STEP));
104         triggerDescriptor.getMap().put(TRIGGER, TRIGGER_URI);
105         triggerDescriptor.getMap().put(TRIGGER_NAME, LAUNCH_PROCESSOR);
106         triggerDescriptor.getMap().put(TRIGGER_IMAGE, ProcessorManager.getInstance().process(ProcessorManager.BINARY, DEFAULT_TRIGGER_IMAGE, "url", context));
107         triggerDescriptor.getMap().put(TRIGGER_CONTAINER, DEFAULT_TRIGGER_CONTAINER);
108         parameter.put(TRIGGER_DESCRIPTIONS, new ArrayValue(new Value[] { triggerDescriptor }));
109         parameter.put(ERRORS_PROCESSOR, DEFAULT_ERROR_RENDERER);
110         
111         parameter.put(HANDLER, ProcessorManager.getInstance().process(ProcessorManager.URL, Constants.DEFAULT_FORM_HANDLER, context));
112         parameter.put(METHOD, new StringValue(POST));
113         Result controlComposerResult = super.process(parameter, context);
114         StringBuffer JavaDoc controlBuffer = new StringBuffer JavaDoc();
115         Value []generatedControls = ((ArrayValue)controlComposerResult.getResultEntries().get(ControlComposer.GENERATED_CONTROLS)).getArray();
116         for ( int i = 0; i < generatedControls.length; i++ ) {
117             Iterator JavaDoc j = ((MapValue)generatedControls[i]).getMap().values().iterator();
118             StringValue renderedControl = (StringValue)j.next();
119             buffer.append(renderedControl.toString());
120         }
121         StringValue composedControls = new StringValue(buffer.toString());
122         parameter.put(CONTROLS, composedControls);
123         StringBuffer JavaDoc triggerBuffer = new StringBuffer JavaDoc();
124         Value []generatedTriggers = ((ArrayValue)controlComposerResult.getResultEntries().get(ControlComposer.GENERATED_TRIGGERS)).getArray();
125         for ( int i = 0; i < generatedTriggers.length; i++ ) {
126             Iterator JavaDoc j = ((MapValue)generatedTriggers[i]).getMap().values().iterator();
127             StringValue renderedTrigger = (StringValue)j.next();
128             triggerBuffer.append(renderedTrigger.toString());
129         }
130         StringValue composedTriggers= new StringValue(triggerBuffer.toString());
131         parameter.put(TRIGGERS, composedTriggers);
132         ProcessorDescriptor processorDescriptor = ProcessorManager.getInstance().getProcessorDescriptor(actionUri);
133         parameter.put(PROCESSOR_NAME, processorDescriptor.getName());
134         parameter.put(PROCESSOR_TITLE, ((DefaultMessage)processorDescriptor.getDescription()).getTitle(locale, processorDescriptor.getName()));
135         parameter.put(PROCESSOR_TEXT, ((DefaultMessage)processorDescriptor.getDescription()).getText(locale, ""));
136         parameter.put(PROCESSOR_LARGE_ICON, ProcessorManager.getInstance().process(ProcessorManager.BINARY, processorDescriptor.getLargeIcon(), "url", context));
137         parameter.put(PROCESSOR_SMALL_ICON, ProcessorManager.getInstance().process(ProcessorManager.BINARY, processorDescriptor.getSmallIcon(), "url", context));
138         parameter.put(TITLE, processorDescriptor.getName());
139         parameter.put(STYLE, ((HttpContext)context).getContextPath() + ORANGE_STYLE);
140         parameter.put(ERRORS, controlComposerResult.getResultEntries().get(ControlComposer.RENDERED_ERRORS));
141         parameter.put(ERRORS_TITLE, "Fehler:");
142         Template template = defaultTemplate;
143         String JavaDoc state = controlComposerResult.getState();
144         if ( state == VALID_STATE && validTemplate != null ) {
145             template = validTemplate;
146         } else if ( state == INVALID_STATE && invalidTemplate != null ) {
147             template = invalidTemplate;
148         }
149         return new Result(state, OUTPUT, renderFragment(template, parameter));
150     }
151
152     public void configure(StreamableValue config) throws ConfigurationException {
153         super.configure(config);
154         parameterDescriptors = new ParameterDescriptor[] {
155             new ParameterDescriptor(ACTION, new ParameterMessage("formGenerator/action"), new URIValueDescriptor()),
156             new ParameterDescriptor(LOCALE, new ParameterMessage("formGenerator/locale"), new LocaleValueDescriptor(), new LocaleValue(Locale.getDefault())),
157             new ParameterDescriptor(TARGET_STEP, new ParameterMessage("formGenerator/targetStep"), new StringValueDescriptor())
158         };
159         try {
160             defaultTemplate = getRequiredFragment(DEFAULT_FORM);
161         } catch ( ProcessException exception ) {
162             throw new ConfigurationException(new ErrorMessage("form/defaultFragmentMissing"));
163         }
164         validTemplate = getOptionalFragment(VALID_FORM);
165         invalidTemplate = getOptionalFragment(INVALID_FORM);
166     }
167
168     public ParameterDescriptor[] getParameterDescriptors() {
169         return parameterDescriptors;
170     }
171
172     public static URI getControlURI(ValueDescriptor descriptor) {
173         if ( descriptor instanceof ArrayValueDescriptor ) {
174             return LISTBOX;
175         }
176         if ( descriptor instanceof StringValueDescriptor ) {
177             if ( ((StringValueDescriptor)descriptor).isEnumrable() ) {
178                 return COMBOBOX;
179             } else if ( ((StringValueDescriptor)descriptor).getMaximumLength() < 256 ) {
180                 return TEXTFIELD;
181             } else {
182                 return TEXTAREA;
183             }
184         }
185         if ( descriptor instanceof BooleanValueDescriptor ) {
186             return CHECKBOX;
187         }
188         if ( descriptor instanceof NumberValueDescriptor ) {
189             if ( ((NumberValueDescriptor)descriptor).isConstrained() ) {
190                 return COMBOBOX;
191             }
192             return TEXTFIELD;
193         }
194         return TEXTFIELD;
195     }
196 }
Popular Tags