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

org.hcjf.layers.query.functions.StringQueryFunctionLayer Maven / Gradle / Ivy

package org.hcjf.layers.query.functions;

import org.hcjf.properties.SystemProperties;
import org.hcjf.utils.Strings;

import java.util.Collection;

/**
 * @author javaito
 */
public class StringQueryFunctionLayer extends BaseQueryFunctionLayer implements QueryFunctionLayerInterface {

    private static final String TRIM = "trim";
    private static final String LENGTH = "length";
    private static final String SPLIT = "split";
    private static final String SPLIT_BY_LENGTH = "splitByLength";
    private static final String CONCAT = "concat";
    private static final String STRING_JOIN = "stringJoin";
    private static final String TO_UPPER_CASE = "toUpperCase";
    private static final String TO_LOWER_CASE = "toLowerCase";
    private static final String TO_STRING = "toString";
    private static final String HEX_TO_BYTES = "hexToBytes";
    private static final String BYTES_TO_HEX = "bytesToHex";
    private static final String REPLACE = "replace";

    public StringQueryFunctionLayer() {
        super(SystemProperties.get(SystemProperties.Query.Function.STRING_FUNCTION_NAME));

        addFunctionName(TRIM);
        addFunctionName(LENGTH);
        addFunctionName(SPLIT);
        addFunctionName(SPLIT_BY_LENGTH);
        addFunctionName(CONCAT);
        addFunctionName(STRING_JOIN);
        addFunctionName(TO_UPPER_CASE);
        addFunctionName(TO_LOWER_CASE);
        addFunctionName(TO_STRING);
        addFunctionName(HEX_TO_BYTES);
        addFunctionName(BYTES_TO_HEX);
        addFunctionName(REPLACE);
    }

    @Override
    public Object evaluate(String functionName, Object... parameters) {
        Object result = null;
        switch (functionName) {
            case TRIM: result = ((String)getParameter(0, parameters)).trim();break;
            case LENGTH: result = ((String)getParameter(0, parameters)).length();break;
            case SPLIT: result = ((String)getParameter(0, parameters)).split(getParameter(1, parameters));break;
            case SPLIT_BY_LENGTH: result = Strings.splitByLength(getParameter(0, parameters), getParameter(1, parameters));break;
            case TO_UPPER_CASE: result = ((String)getParameter(0, parameters)).toUpperCase();break;
            case TO_LOWER_CASE: result = ((String)getParameter(0, parameters)).toLowerCase();break;
            case TO_STRING: result = getParameter(0, parameters).toString(); break;
            case HEX_TO_BYTES: result = Strings.hexToBytes(getParameter(0, parameters));break;
            case BYTES_TO_HEX: result = Strings.bytesToHex(getParameter(0, parameters));break;
            case REPLACE: {
                String source = getParameter(0, parameters);
                String target = getParameter(1, parameters);
                String replacement = getParameter(2, parameters);
                result = source.replace(target, replacement);
                break;
            }
            case CONCAT: {
                StringBuilder builder = new StringBuilder();
                for(Object parameter : parameters) {
                    if(parameter instanceof Collection) {
                        for(Object collectionParameter : ((Collection)parameter)) {
                            builder.append(collectionParameter);
                        }
                    } else {
                        builder.append(parameter);
                    }
                }
                result = builder.toString();
                break;
            }
            case STRING_JOIN: {
                Strings.Builder builder = new Strings.Builder();
                for (int i = 1; i < parameters.length; i++) {
                    if(parameters[i] instanceof Collection) {
                        for(Object collectionParameter : ((Collection)parameters[i])) {
                            builder.append(collectionParameter, getParameter(0, parameters));
                        }
                    } else {
                        builder.append(parameters[i], (String)getParameter(0, parameters));
                    }
                }
                result = builder.toString();
            }
        }
        return result;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy