Package org.apache.slide.projector.processor.form

Source Code of org.apache.slide.projector.processor.form.FormGenerator

package org.apache.slide.projector.processor.form;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import org.apache.slide.projector.ConfigurationException;
import org.apache.slide.projector.Constants;
import org.apache.slide.projector.Context;
import org.apache.slide.projector.HttpContext;
import org.apache.slide.projector.ProcessException;
import org.apache.slide.projector.Processor;
import org.apache.slide.projector.Result;
import org.apache.slide.projector.URI;
import org.apache.slide.projector.descriptor.ArrayValueDescriptor;
import org.apache.slide.projector.descriptor.BooleanValueDescriptor;
import org.apache.slide.projector.descriptor.LocaleValueDescriptor;
import org.apache.slide.projector.descriptor.NumberValueDescriptor;
import org.apache.slide.projector.descriptor.ParameterDescriptor;
import org.apache.slide.projector.descriptor.ProcessorDescriptor;
import org.apache.slide.projector.descriptor.StringValueDescriptor;
import org.apache.slide.projector.descriptor.URIValueDescriptor;
import org.apache.slide.projector.descriptor.ValueDescriptor;
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.processor.process.Process;
import org.apache.slide.projector.value.ArrayValue;
import org.apache.slide.projector.value.BooleanValue;
import org.apache.slide.projector.value.LocaleValue;
import org.apache.slide.projector.value.MapValue;
import org.apache.slide.projector.value.NullValue;
import org.apache.slide.projector.value.StreamableValue;
import org.apache.slide.projector.value.StringValue;
import org.apache.slide.projector.value.URIValue;
import org.apache.slide.projector.value.Value;

/**
* @version $Revision: 1.3 $
*/
public class FormGenerator extends ControlComposer {
    public final static String CONTROLS = "controls";
    public final static String TRIGGERS = "triggers";
    public final static String TARGET_STEP = "targetStep";

    protected final static String TRIGGER_IMAGE = "image";
    protected final static URI TEXTFIELD = new URIValue("textfield");
    protected final static URI TEXTAREA = new URIValue("textarea");
    protected final static URI LISTBOX = new URIValue("listbox");
    protected final static URI COMBOBOX = new URIValue("combobox");
    protected final static URI CHECKBOX = new URIValue("checkbox");
    protected final static URI ERRORS_TABLE = new URIValue("errors");
    protected final static URI TRIGGER_URI = new URIValue("textTrigger");
    protected final static URI DEFAULT_TRIGGER_IMAGE = new URIValue("/files/contelligent/images/ok.gif");
    protected final static URI DEFAULT_CONTROL_CONTAINER = new URIValue("bigControl");
    protected final static URI DEFAULT_TRIGGER_CONTAINER = new URIValue("triggerContainer");
    protected final static URI DEFAULT_ERROR_RENDERER = new URIValue("errors");

    protected final static String PROCESSOR_NAME = "processor-name";
    protected final static String PROCESSOR_TITLE = "processor-title";
    protected final static String PROCESSOR_TEXT = "processor-text";
    protected final static String PROCESSOR_SMALL_ICON = "processor-small-icon";
    protected final static String PROCESSOR_LARGE_ICON = "processor-large-icon";

    protected final static String STYLE = "style";
    protected final static String ORANGE_STYLE = "style.html";
    protected final static String LAUNCH_PROCESSOR = "trigger:launch";
   
    private ParameterDescriptor[] parameterDescriptors;

    public FormGenerator() {
      super();
    }

    public Result process(Map parameter, Context context) throws Exception {
        URI actionUri = (URIValue)parameter.get(Control.ACTION);
        Processor action = ProcessorManager.getInstance().getProcessor(actionUri);
        Locale locale = ((LocaleValue)parameter.get(LOCALE)).getLocale();
        ParameterDescriptor []actionParameterDescriptors = action.getParameterDescriptors();
        StringBuffer buffer = new StringBuffer();
        List controlDescriptors = new ArrayList();
        // Collect controls to compose...
        for (int i = 0; i < actionParameterDescriptors.length; i++) {
          String parameterName = actionParameterDescriptors[i].getName();
          MapValue controlDescriptor = new MapValue();
          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 ArrayValue((Value[])controlDescriptors.toArray(new Value[controlDescriptors.size()])));

        // Finally add testing trigger...
      MapValue triggerDescriptor = new MapValue();
      triggerDescriptor.getMap().put(Trigger.ACTION, actionUri);
      triggerDescriptor.getMap().put(Trigger.VALIDATE, BooleanValue.TRUE);
      triggerDescriptor.getMap().put(Trigger.INVOLVED_PARAMETERS, NullValue.NULL);
      triggerDescriptor.getMap().put(Process.STEP, parameter.get(TARGET_STEP));
      triggerDescriptor.getMap().put(TRIGGER, TRIGGER_URI);
      triggerDescriptor.getMap().put(TRIGGER_NAME, LAUNCH_PROCESSOR);
      triggerDescriptor.getMap().put(TRIGGER_IMAGE, ProcessorManager.getInstance().process(ProcessorManager.BINARY, DEFAULT_TRIGGER_IMAGE, "url", context));
      triggerDescriptor.getMap().put(TRIGGER_CONTAINER, DEFAULT_TRIGGER_CONTAINER);
        parameter.put(TRIGGER_DESCRIPTIONS, new ArrayValue(new Value[] { triggerDescriptor }));
        parameter.put(ERRORS_PROCESSOR, DEFAULT_ERROR_RENDERER);
       
        parameter.put(HANDLER, ProcessorManager.getInstance().process(ProcessorManager.URL, Constants.DEFAULT_FORM_HANDLER, context));
        parameter.put(METHOD, new StringValue(POST));
        Result controlComposerResult = super.process(parameter, context);
        StringBuffer controlBuffer = new StringBuffer();
        Value []generatedControls = ((ArrayValue)controlComposerResult.getResultEntries().get(ControlComposer.GENERATED_CONTROLS)).getArray();
        for ( int i = 0; i < generatedControls.length; i++ ) {
          Iterator j = ((MapValue)generatedControls[i]).getMap().values().iterator();
          StringValue renderedControl = (StringValue)j.next();
          buffer.append(renderedControl.toString());
        }
        StringValue composedControls = new StringValue(buffer.toString());
        parameter.put(CONTROLS, composedControls);
        StringBuffer triggerBuffer = new StringBuffer();
        Value []generatedTriggers = ((ArrayValue)controlComposerResult.getResultEntries().get(ControlComposer.GENERATED_TRIGGERS)).getArray();
        for ( int i = 0; i < generatedTriggers.length; i++ ) {
          Iterator j = ((MapValue)generatedTriggers[i]).getMap().values().iterator();
          StringValue renderedTrigger = (StringValue)j.next();
          triggerBuffer.append(renderedTrigger.toString());
        }
        StringValue composedTriggers= new StringValue(triggerBuffer.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()));
        parameter.put(PROCESSOR_TEXT, ((DefaultMessage)processorDescriptor.getDescription()).getText(locale, ""));
        parameter.put(PROCESSOR_LARGE_ICON, ProcessorManager.getInstance().process(ProcessorManager.BINARY, processorDescriptor.getLargeIcon(), "url", context));
        parameter.put(PROCESSOR_SMALL_ICON, ProcessorManager.getInstance().process(ProcessorManager.BINARY, processorDescriptor.getSmallIcon(), "url", context));
        parameter.put(TITLE, processorDescriptor.getName());
        parameter.put(STYLE, ((HttpContext)context).getContextPath() + ORANGE_STYLE);
        parameter.put(ERRORS, controlComposerResult.getResultEntries().get(ControlComposer.RENDERED_ERRORS));
        parameter.put(ERRORS_TITLE, "Fehler:");
        Template template = defaultTemplate;
        String state = controlComposerResult.getState();
        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(StreamableValue config) throws ConfigurationException {
        super.configure(config);
        parameterDescriptors = new ParameterDescriptor[] {
            new ParameterDescriptor(ACTION, new ParameterMessage("formGenerator/action"), new URIValueDescriptor()),
            new ParameterDescriptor(LOCALE, new ParameterMessage("formGenerator/locale"), new LocaleValueDescriptor(), new LocaleValue(Locale.getDefault())),
            new ParameterDescriptor(TARGET_STEP, new ParameterMessage("formGenerator/targetStep"), new StringValueDescriptor())
        };
        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() {
        return parameterDescriptors;
    }

    public static URI getControlURI(ValueDescriptor descriptor) {
        if ( descriptor instanceof ArrayValueDescriptor ) {
            return LISTBOX;
        }
        if ( descriptor instanceof StringValueDescriptor ) {
            if ( ((StringValueDescriptor)descriptor).isEnumrable() ) {
                return COMBOBOX;
            } else if ( ((StringValueDescriptor)descriptor).getMaximumLength() < 256 ) {
                return TEXTFIELD;
            } else {
                return TEXTAREA;
            }
        }
        if ( descriptor instanceof BooleanValueDescriptor ) {
            return CHECKBOX;
        }
        if ( descriptor instanceof NumberValueDescriptor ) {
            if ( ((NumberValueDescriptor)descriptor).isConstrained() ) {
                return COMBOBOX;
            }
            return TEXTFIELD;
        }
        return TEXTFIELD;
    }
}
TOP

Related Classes of org.apache.slide.projector.processor.form.FormGenerator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.