All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openl.rules.ui.tablewizard.ConditionClauseRegistry Maven / Gradle / Ivy

The newest version!
package org.openl.rules.ui.tablewizard;

import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.Set;
import java.util.HashSet;
import javax.faces.model.SelectItem;

/**
 * @author Aliaksandr Antonik.
 */
public class ConditionClauseRegistry {
    private static ConditionClauseRegistry instance = new ConditionClauseRegistry();
    private static final Set numericClasses;
    private Map> registry;

    private Map selectItems;
    private Map id2Variant = new HashMap();
    static {
        numericClasses = new HashSet();
        numericClasses.add("int");
        numericClasses.add("byte");
        numericClasses.add("short");
        numericClasses.add("long");
        numericClasses.add("float");
        numericClasses.add("double");
        numericClasses.add("char");
    }

    public static ConditionClauseRegistry getInstance() {
        return instance;
    }

    private static String getType(String clazz) {
        if (numericClasses.contains(clazz)) {
            return "numeric";
        }
        if (String.class.getName().equals(clazz)) {
            return "string";
        }
        if ("boolean".equals(clazz)) {
            return "boolean";
        }
        return "object";
    }

    public ConditionClauseRegistry() {
        registry = new HashMap>();

        List numericClauses = new ArrayList();
        numericClauses.add(new ConditionClauseVariant("less", "{0} < {1}"));
        numericClauses.add(new ConditionClauseVariant("more", "{0} > {1}"));
        numericClauses.add(new ConditionClauseVariant("equals", "{0} == {1}"));
        registry.put("numeric", numericClauses);

        List stringClauses = new ArrayList();
        stringClauses.add(new ConditionClauseVariant("starts", "{0}.startsWith({1})"));
        stringClauses.add(new ConditionClauseVariant("ends", "{0}.endsWith({1})"));
        stringClauses.add(new ConditionClauseVariant("equals", "{0}.equals({1})"));
        registry.put("string", stringClauses);

        List dateClauses = new ArrayList();
        dateClauses.add(new ConditionClauseVariant("equals", "{0}.equals({1})"));
        registry.put("object", dateClauses);

        List booleanClauses = new ArrayList();
        booleanClauses.add(new ConditionClauseVariant("equals", "{0} == {1})"));
        booleanClauses.add(new ConditionClauseVariant("not equal", "{0} != {1})"));
        registry.put("boolean", booleanClauses);

        index();
    }

    public ConditionClauseVariant get(long id) {
        return id2Variant.get(id);
    }

    public List getConditionClauseVariants(String clazz) {
        return registry.get(getType(clazz));
    }

    public SelectItem[] getItemsByType(String clazz) {
        return selectItems.get(getType(clazz));
    }

    private void index() {
        for (List conditions : registry.values()) {
            for (ConditionClauseVariant variant : conditions) {
                id2Variant.put(variant.getId(), variant);
            }
        }

        selectItems = new HashMap();
        for (Map.Entry> entry : registry.entrySet()) {
            SelectItem[] items = new SelectItem[entry.getValue().size()];
            int pos = 0;
            for (ConditionClauseVariant v : entry.getValue()) {
                items[pos++] = new SelectItem(v.getId(), v.getDisplayValue());
            }
            selectItems.put(entry.getKey(), items);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy