Package org.jbpm.ui.bsh

Source Code of org.jbpm.ui.bsh.BSHTypeSupport$NumberType

package org.jbpm.ui.bsh;

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

import org.jbpm.ui.DesignerLogger;
import org.jbpm.ui.common.model.Variable;
import org.jbpm.ui.dialog.NumberInputDialog;
import org.jbpm.ui.dialog.UserInputDialog;
import org.jbpm.ui.resource.Messages;

public abstract class BSHTypeSupport {
    private static final String DEFAULT_FORMAT_NAME = "org.jbpm.web.formgen.format.DefaultFormat";

    private static final Map<String, BSHTypeSupport> TYPES_MAP = new HashMap<String, BSHTypeSupport>();
    static {
        TYPES_MAP.put(DEFAULT_FORMAT_NAME, new StringType());
        TYPES_MAP.put("ru.runa.wf.web.forms.format.StringFormat", new StringType());
        TYPES_MAP.put("ru.runa.wf.web.forms.format.BooleanFormat", new BooleanType());
        TYPES_MAP.put("org.jbpm.web.formgen.format.DoubleFormat", new NumberType());
        TYPES_MAP.put("ru.runa.wf.web.forms.format.LongFormat", new NumberType());
        TYPES_MAP.put("ru.runa.wf.web.forms.format.DateFormat", new DateType());
        TYPES_MAP.put("ru.runa.wf.web.forms.format.TimeFormat", new DateType());
        TYPES_MAP.put("ru.runa.wf.web.forms.format.DateTimeFormat", new DateType());
        TYPES_MAP.put("ru.runa.wf.web.forms.format.FileFormat", new DefaultType());
    }

    public static BSHTypeSupport getByFormat(String format) {
        if (format == null) {
            format = DEFAULT_FORMAT_NAME;
        }
        BSHTypeSupport typeSupport = TYPES_MAP.get(format);
        if (typeSupport == null) {
            DesignerLogger.logInfo("Not found type support for format: " + format + ", using default");
            typeSupport = TYPES_MAP.get(DEFAULT_FORMAT_NAME);
        }
        return typeSupport;
    }

    public boolean hasUserInputEditor() {
        return true;
    }

    public List<String> getPredefinedValues(Operation operation) {
        List<String> v = new ArrayList<String>();
        if (operation == Operation.EQ || operation == Operation.NOT_EQ) {
            v.add("null");
        }
        return v;
    }

    public UserInputDialog createUserInputDialog(String title, String initialValue) {
        return new UserInputDialog(title, initialValue);
    }

    abstract String wrap(Object value);

    public String unwrapValue(String value) {
        return value;
    }

    abstract List<Operation> getTypedOperations();

    private static class DefaultType extends BSHTypeSupport {

        @Override
        String wrap(Object value) {
            if (value instanceof Variable) {
                return ((Variable) value).getName();
            } else {
                throw new IllegalArgumentException("value class is " + value.getClass().getName());
            }
        }

        @Override
        public boolean hasUserInputEditor() {
            return false;
        }

        @Override
        List<Operation> getTypedOperations() {
            return null;
        }
    }

    static class StringType extends BSHTypeSupport {

        @Override
        String wrap(Object value) {
            if (value instanceof Variable) {
                return ((Variable) value).getName();
            } else if (value instanceof String) {
                return "\"" + value + "\"";
            } else {
                throw new IllegalArgumentException("value class is " + value.getClass().getName());
            }
        }

        @Override
        public String unwrapValue(String value) {
            return value.substring(1, value.length() - 1);
        }

        @Override
        List<Operation> getTypedOperations() {
            List<Operation> extOperations = new ArrayList<Operation>();
            extOperations.add(new Operation(Messages.getString("BSH.Operation.contains"), "contains") {

                @Override
                public String generateCode(Variable variable, Object lexem2) {
                    StringBuffer buffer = new StringBuffer("");
                    buffer.append(wrap(variable));
                    buffer.append(".contains(");
                    buffer.append(wrap(lexem2));
                    buffer.append(")");
                    return buffer.toString();
                }

            });
            return extOperations;
        }
    }

    private static class BooleanType extends BSHTypeSupport {

        @Override
        String wrap(Object value) {
            if (value instanceof Variable) {
                return ((Variable) value).getName() + ".booleanValue()";
            } else if (value instanceof String) {
                return (String) value;
            } else {
                throw new IllegalArgumentException("value class is " + value.getClass().getName());
            }
        }

        @Override
        public List<String> getPredefinedValues(Operation operation) {
            List<String> v = super.getPredefinedValues(operation);
            v.add("true");
            v.add("false");
            return v;
        }

        @Override
        public boolean hasUserInputEditor() {
            return false;
        }

        @Override
        List<Operation> getTypedOperations() {
            return null;
        }
    }

    private static class NumberType extends BSHTypeSupport {

        @Override
        String wrap(Object value) {
            if (value instanceof Variable) {
                return ((Variable) value).getName() + ".doubleValue()";
            } else if (value instanceof String) {
                return (String) value;
            } else {
                throw new IllegalArgumentException("value class is " + value.getClass().getName());
            }
        }

        @Override
        public UserInputDialog createUserInputDialog(String title, String initialValue) {
            return new NumberInputDialog(initialValue);
        }

        @Override
        List<Operation> getTypedOperations() {
            List<Operation> extOperations = new ArrayList<Operation>();
            extOperations.add(new Operation(Messages.getString("BSH.Operation.more"), ">"));
            extOperations.add(new Operation(Messages.getString("BSH.Operation.less"), "<"));
            extOperations.add(new Operation(Messages.getString("BSH.Operation.moreeq"), ">="));
            extOperations.add(new Operation(Messages.getString("BSH.Operation.lesseq"), "<="));
            return extOperations;
        }
    }

    private static class DateType extends BSHTypeSupport {

        @Override
        String wrap(Object value) {
            if (value instanceof Variable) {
                return ((Variable) value).getName() + ".getTime()";
            } else if (value instanceof String) {
                return (String) value;
            } else {
                throw new IllegalArgumentException("value class is " + value.getClass().getName());
            }
        }

        @Override
        public boolean hasUserInputEditor() {
            return false;
        }

        @Override
        List<Operation> getTypedOperations() {
            List<Operation> extOperations = new ArrayList<Operation>();
            extOperations.add(new Operation(Messages.getString("BSH.Operation.earlier"), "<"));
            extOperations.add(new Operation(Messages.getString("BSH.Operation.later"), ">"));
            extOperations.add(new Operation(Messages.getString("BSH.Operation.earliereq"), "<="));
            extOperations.add(new Operation(Messages.getString("BSH.Operation.latereq"), ">="));
            return extOperations;
        }
    }
}
TOP

Related Classes of org.jbpm.ui.bsh.BSHTypeSupport$NumberType

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.