Package org.jbpm.ui.infopath

Source Code of org.jbpm.ui.infopath.ValidationMapper

package org.jbpm.ui.infopath;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.jbpm.ui.DesignerLogger;
import org.jbpm.ui.validation.ValidatorConfig;

public class ValidationMapper {
    private static String namespace;

    private static String rootGroup;

    private static Map<String, Map<String, ValidatorConfig>> validators;

    private static Map<Pattern, ExpressionAdapter> expressionAdapters = new HashMap<Pattern, ExpressionAdapter>();
    static {
        // is present
        registerAdapter("\\.", new RequiredExpressionAdapter());
        // is not blank
        registerAdapter("\\. != \"\"", new RequiredExpressionAdapter());
        // less and greater than
        registerAdapter(".* [<>] \\d*", new StringLengthExpressionAdapter());
    }

    private static void registerAdapter(String patternString, ExpressionAdapter adapter) {
        try {
            expressionAdapters.put(Pattern.compile(patternString), adapter);
        } catch (Throwable e) {
            DesignerLogger.logError("[InfoPath Validation] Failed to register adapter " + adapter.getClass(), e);
        }
    }

    public static void init(Map<String, Map<String, ValidatorConfig>> validators, String namespace, String rootGroup) {
        ValidationMapper.validators = validators;
        ValidationMapper.namespace = namespace;
        ValidationMapper.rootGroup = rootGroup;
    }

    public static void apply(String match, String expressionContext, String expression, String errorMessage) {
        String[] exprs = expression.split("and");

        String variableName;

        String groupXPath = "/" + namespace + ":" + rootGroup;
        if (groupXPath.equals(match)) {
            // we are having /my:myFields | my:field1 | ${expr}
            variableName = expression.substring(namespace.length() + 1);
        } else {
            // we are having /my:myFields/my:field1 | . | ${expr}
            variableName = match.substring(groupXPath.length() + namespace.length() + 2);
        }

        for (String expr : exprs) {
            ExpressionAdapter adapter = null;
            for (Pattern pattern : expressionAdapters.keySet()) {
                Matcher m = pattern.matcher(expr);
                if (m.matches()) {
                    adapter = expressionAdapters.get(pattern);
                    break;
                }
            }
            if (adapter == null) {
                DesignerLogger.logInfo("[InfoPath Validation DEBUG] : Not found adapter for expression '" + expr + "'");
            } else {
                try {
                    DesignerLogger.logInfo("[InfoPath Validation DEBUG] : Applying adapter " + adapter.getClass() + " to expression '" + expr + "'");
                    ValidatorConfig config = adapter.createConfig(expr, errorMessage);
                    if (validators.containsKey(variableName)) {
                        validators.get(variableName).put(config.getType(), config);
                    } else {
                        DesignerLogger.logInfo("[InfoPath Validation DEBUG] : Variable not found: " + variableName);
                    }
                } catch (Throwable e) {
                    DesignerLogger.logError("[InfoPath Validation] Failed to apply validation: " + adapter.getClass(), e);
                }
            }
        }
    }

}
TOP

Related Classes of org.jbpm.ui.infopath.ValidationMapper

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.