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

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

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

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

import org.apache.slide.projector.ConfigurationException;
import org.apache.slide.projector.Context;
import org.apache.slide.projector.ProcessException;
import org.apache.slide.projector.Result;
import org.apache.slide.projector.descriptor.ArrayValueDescriptor;
import org.apache.slide.projector.descriptor.BooleanValueDescriptor;
import org.apache.slide.projector.descriptor.NumberValueDescriptor;
import org.apache.slide.projector.descriptor.ParameterDescriptor;
import org.apache.slide.projector.descriptor.StringValueDescriptor;
import org.apache.slide.projector.descriptor.ValueDescriptor;
import org.apache.slide.projector.i18n.ErrorMessage;
import org.apache.slide.projector.value.ArrayValue;
import org.apache.slide.projector.value.NumberValue;
import org.apache.slide.projector.value.StreamableValue;
import org.apache.slide.projector.value.StringValue;
import org.apache.slide.projector.value.Value;

/**
* @version $Revision: 1.3 $
*/

public class EnclosingControl extends Control {
    protected final static int MAX_OPTIONS = 100;

    private final static String OPTIONS = "options";
    private final static String ENTRY_POSTFIX = " entry";
    private final static String SELECTED_ENTRY_POSTFIX = " selected entry";

    protected Template optionalEntryFragment, optionalSelectedEntryFragment, optionalValidEntryFragment, optionalValidSelectedEntryFragment, optionalInvalidEntryFragment, optionalInvalidSelectedEntryFragment;
    protected Template requiredEntryFragment, requiredSelectedEntryFragment, requiredValidEntryFragment, requiredValidSelectedEntryFragment, requiredInvalidEntryFragment, requiredInvalidSelectedEntryFragment;

    public EnclosingControl() {
        setRequiredFragments(new String[] { OPTIONAL+getName(), OPTIONAL+getName()+ENTRY_POSTFIX, OPTIONAL+getName()+SELECTED_ENTRY_POSTFIX,
                                            REQUIRED+getName(), REQUIRED+getName()+ENTRY_POSTFIX, REQUIRED+getName()+SELECTED_ENTRY_POSTFIX });
        setOptionalFragments(new String[] { OPTIONAL_VALID_CONTROL+getName(), OPTIONAL_INVALID_CONTROL+getName(), OPTIONAL_VALID_CONTROL+getName()+ENTRY_POSTFIX, OPTIONAL_INVALID_CONTROL+getName()+ENTRY_POSTFIX,
                                            OPTIONAL_VALID_CONTROL+getName()+SELECTED_ENTRY_POSTFIX, OPTIONAL_INVALID_CONTROL+getName()+SELECTED_ENTRY_POSTFIX,
                                            REQUIRED_VALID_CONTROL+getName(), REQUIRED_INVALID_CONTROL+getName(), REQUIRED_VALID_CONTROL+getName()+ENTRY_POSTFIX, REQUIRED_INVALID_CONTROL+getName()+ENTRY_POSTFIX,
                                            REQUIRED_VALID_CONTROL+getName()+SELECTED_ENTRY_POSTFIX, REQUIRED_INVALID_CONTROL+getName()+SELECTED_ENTRY_POSTFIX});
    }

    public Result process(Map parameter, Context context) throws Exception {
        ParameterDescriptor parameterDescriptor = getParameterDescriptor(parameter, context);
        String state = parameter.get(STATE).toString();
        Object value = parameter.get(VALUE);
        String[] options = getOptions(parameterDescriptor.getValueDescriptor());
        StringBuffer renderedEntries = new StringBuffer();
        Template template = optionalEntryFragment;
        for (int j = 0; j < options.length; j++) {
            if (valueMatches(options[j], value)) {
                if ( state.equals(OPTIONAL_CONTROL) ) {
                  template = optionalSelectedEntryFragment;
                } else if ( state.equals(OPTIONAL_VALID_CONTROL) ) {
                    template = optionalValidSelectedEntryFragment;
                } else if ( state.equals(OPTIONAL_INVALID_CONTROL) ) {
                    template = optionalInvalidSelectedEntryFragment;
                } else if ( state.equals(REQUIRED_CONTROL) ) {
                  template = requiredSelectedEntryFragment;
                } else if ( state.equals(REQUIRED_VALID_CONTROL) ) {
                    template = requiredValidSelectedEntryFragment;
                } else if ( state.equals(REQUIRED_INVALID_CONTROL) ) {
                    template = requiredInvalidSelectedEntryFragment;
                }
            } else {
                if ( state.equals(OPTIONAL_CONTROL) ) {
                  template = optionalEntryFragment;
                } else if ( state.equals(OPTIONAL_VALID_CONTROL) ) {
                    template = optionalValidEntryFragment;
                } else if ( state.equals(OPTIONAL_INVALID_CONTROL) ) {
                    template = optionalInvalidEntryFragment;
                } else if ( state.equals(REQUIRED_CONTROL) ) {
                  template = requiredEntryFragment;
                } else if ( state.equals(REQUIRED_VALID_CONTROL) ) {
                    template = requiredValidEntryFragment;
                } else if ( state.equals(REQUIRED_INVALID_CONTROL) ) {
                    template = requiredInvalidEntryFragment;
                }
            }
            parameter.put(VALUE, new StringValue(options[j]));
            template.evaluate(renderedEntries, parameter);
        }
        parameter.put(OPTIONS, new StringValue(renderedEntries.toString()));
        return super.process(parameter, context);
    }

    public void configure(StreamableValue config) throws ConfigurationException {
        super.configure(config);
        try {
            optionalEntryFragment = getRequiredFragment(OPTIONAL_CONTROL + getName() + ENTRY_POSTFIX);
            optionalSelectedEntryFragment = getRequiredFragment(OPTIONAL_CONTROL + getName() + SELECTED_ENTRY_POSTFIX);
            requiredEntryFragment = getRequiredFragment(REQUIRED_CONTROL + getName() + ENTRY_POSTFIX);
            requiredSelectedEntryFragment = getRequiredFragment(REQUIRED_CONTROL + getName() + SELECTED_ENTRY_POSTFIX);
        } catch ( ProcessException exception ) {
            throw new ConfigurationException(new ErrorMessage("control/requiredFragmentMissing", new String[] { OPTIONAL+getName()}), exception);
        }
        optionalValidEntryFragment = getOptionalFragment(OPTIONAL_VALID_CONTROL + getName() + ENTRY_POSTFIX, optionalEntryFragment);
        optionalInvalidEntryFragment = getOptionalFragment(OPTIONAL_INVALID_CONTROL + getName() + ENTRY_POSTFIX, optionalEntryFragment);
        optionalValidSelectedEntryFragment = getOptionalFragment(OPTIONAL_VALID_CONTROL + getName() + SELECTED_ENTRY_POSTFIX, optionalSelectedEntryFragment);
        optionalInvalidSelectedEntryFragment = getOptionalFragment(OPTIONAL_INVALID_CONTROL + getName() + SELECTED_ENTRY_POSTFIX, optionalSelectedEntryFragment);
        requiredValidEntryFragment = getOptionalFragment(REQUIRED_VALID_CONTROL + getName() + ENTRY_POSTFIX, requiredEntryFragment);
        requiredInvalidEntryFragment = getOptionalFragment(REQUIRED_INVALID_CONTROL + getName() + ENTRY_POSTFIX, requiredEntryFragment);
        requiredValidSelectedEntryFragment = getOptionalFragment(REQUIRED_VALID_CONTROL + getName() + SELECTED_ENTRY_POSTFIX, requiredSelectedEntryFragment);
        requiredInvalidSelectedEntryFragment = getOptionalFragment(REQUIRED_INVALID_CONTROL + getName() + SELECTED_ENTRY_POSTFIX, requiredSelectedEntryFragment);
    }

    protected String[] getOptions(ValueDescriptor valueDescriptor) {
        if (valueDescriptor instanceof ArrayValueDescriptor ) {
            valueDescriptor = ((ArrayValueDescriptor)valueDescriptor).getEntryValueDescriptor();
        }
        if (valueDescriptor instanceof StringValueDescriptor) {
            return ((StringValueDescriptor)valueDescriptor).getAllowedValues();
        } else if (valueDescriptor instanceof BooleanValueDescriptor) {
            return new String[]{BooleanValueDescriptor.TRUE, BooleanValueDescriptor.FALSE};
        } else if (valueDescriptor instanceof NumberValueDescriptor) {
            NumberValueDescriptor numberDescriptor = (NumberValueDescriptor)valueDescriptor;
            if (numberDescriptor.isConstrained()) {
                List allowedValues = new ArrayList();
                if (numberDescriptor.getAllowedValues() != null) {
                    Number[] numbers = numberDescriptor.getAllowedValues();
                    for (int i = 0; i < numbers.length; i++) {
                        allowedValues.add(String.valueOf(numbers[i]));
                    }
                } else {
                    int counter = 0;
                    for (int i = numberDescriptor.getMinimum().intValue(); i <= numberDescriptor.getMaximum().intValue(); i++) {
                        allowedValues.add(String.valueOf(i));
                        counter++;
                        if (counter == MAX_OPTIONS) break;
                    }
                }
                String[] options = new String[allowedValues.size()];
                return (String[])allowedValues.toArray(options);
            }
        }
        return new String[0];
    }

    protected boolean valueMatches(String value, Object resource) {
        if (resource instanceof StringValue) {
            return value.equals(resource.toString());
        } else if (resource instanceof NumberValue) {
            return value.equals(String.valueOf(((NumberValue)resource).getNumber()));
        } else if (resource instanceof ArrayValue) {
            Value[] array = ((ArrayValue)resource).getArray();
            for (int i = 0; i < array.length; i++) {
                if (array[i] instanceof StringValue) {
                    if (array[i].toString().equals(value)) return true;
                }
            }
        }
        return false;
    }
}
TOP

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

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.