/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.segmentation.server.util; import net.codjo.sql.builder.DefaultFieldInfoList; import net.codjo.sql.builder.FieldInfo; import net.codjo.sql.builder.QueryBuilder; import net.codjo.sql.builder.TableName; import net.codjo.variable.TemplateInterpreter; import net.codjo.variable.UnknownVariableException; import net.codjo.util.string.StringUtil; import java.util.Collection; import java.util.List; import java.util.Map; /** * */ public class SegmentationUtil { private SegmentationUtil() { } public static void checkParameters(List<String> expectedParameter, Map<String, String> parameters) { for (String argumentName : expectedParameter) { if (!parameters.containsKey(argumentName)) { throw new IllegalArgumentException("'" + argumentName + "' missing."); } } } public static String determineFullColumnName(String tableName, String columnName) { return tableName + "$" + columnName; } public static String buildSelectQuery(QueryBuilder queryBuilder, Collection<String> fieldsFullColumnName, Map<String, String> parameters, DefaultFieldInfoList infoList) throws UnknownVariableException { int index = 1; for (String fullColumnName : fieldsFullColumnName) { infoList.add(buildFieldInfo(index++, fullColumnName)); } String selectQuery = queryBuilder.buildQuery(infoList); return new TemplateInterpreter().evaluate(selectQuery, parameters); } private static FieldInfo buildFieldInfo(int index, String fullColumnName) { TableName tableName = new TableName(getTableName(fullColumnName)); String columnName = getColumnName(fullColumnName); return new FieldInfo(tableName, columnName, "alias_" + index); } private static String getTableName(String fullColumnName) { int separatorPosition = fullColumnName.indexOf("$"); if (separatorPosition != -1) { return fullColumnName.substring(0, separatorPosition); } return "#NO_TABLE#"; } private static String getColumnName(String fullColumnName) { int separatorPosition = fullColumnName.indexOf("$"); if (separatorPosition != -1) { return fullColumnName.substring(separatorPosition + 1); } return StringUtil.javaToSqlName(fullColumnName); } public static int getColumnIndexByName(String[] line, String columnName) { for (int index = 0; index < line.length; index++) { String expectedColumn = line[index]; if (expectedColumn.equals(columnName)) { return index; } } return -1; } }