public boolean supportsType(ColumnType type) { if (TIME_FRAME.equals(this)) { return ColumnType.DATE.equals(type); } if (LIKE_TO.equals(this)) { return ColumnType.LABEL.equals(type) || ColumnType.TEXT.equals(type); } if (IN.equals(this) || NOT_IN.equals(this)) { return !ColumnType.DATE.equals(type); } return true; }
protected List<CoreFunctionType> getAvailableFunctions(CoreFunctionFilter coreFilter) { ColumnType columnType = metadata.getColumnType(coreFilter.getColumnId()); List<CoreFunctionType> functionTypes = CoreFunctionType.getSupportedTypes(columnType); Iterator<CoreFunctionType> it = functionTypes.iterator(); while (it.hasNext()) { CoreFunctionType next = it.next(); if (next.equals(coreFilter.getType())) { it.remove(); } } return functionTypes; }
public static int getNumberOfParameters(String type) { CoreFunctionType ft = getByName(type); return ft.getParametersCount(); }
public static List createParameters(ColumnType columnType, CoreFunctionType functionType) { List result = new ArrayList(); if (CoreFunctionType.LIKE_TO.equals(functionType)) { result.add("%Text%"); result.add(true); return result; } int n = functionType.getParametersCount(); for (int i=0; i<n; i++) { if (ColumnType.NUMBER.equals(columnType)) { result.add(100000d * i); } else if (ColumnType.DATE.equals(columnType)) { if (CoreFunctionType.TIME_FRAME.equals(functionType)) { result.add("begin[year] till end[year]"); } else { Date d = new Date(); d.setYear(d.getYear()-n+i+1); result.add(d); } } else { result.add("value" + (i + 1)); } } return result; }
@Test public void getSupportedTypeTest() { CoreFunctionType[] dateFunctionTypesUnsupported = {LIKE_TO, IN, NOT_IN}; CoreFunctionType[] textLabelFunctionTypesUnsupported = {TIME_FRAME}; CoreFunctionType[] numericFunctionTypesUnsupported = {LIKE_TO, TIME_FRAME}; assertThat(CoreFunctionType.getSupportedTypes(ColumnType.DATE)) .doesNotContain(dateFunctionTypesUnsupported); assertThat(CoreFunctionType.getSupportedTypes(ColumnType.LABEL)) .doesNotContain(textLabelFunctionTypesUnsupported); assertThat(CoreFunctionType.getSupportedTypes(ColumnType.NUMBER)) .doesNotContain(numericFunctionTypesUnsupported); assertThat(CoreFunctionType.getSupportedTypes(ColumnType.TEXT)) .doesNotContain(textLabelFunctionTypesUnsupported); } }
coreFunctionFilter.getType().toString(), coreFunctionFilter.getParameters())); } else if (cFilter instanceof LogicalExprFilter) {
public static CoreFunctionType getByName(String type) { try { return valueOf(type.toUpperCase()); } catch (Exception e) { return null; } }
public static List<CoreFunctionType> getSupportedTypes(ColumnType columnType) { List<CoreFunctionType> result = new ArrayList<CoreFunctionType>(); for (CoreFunctionType funType : coreFunctionTypes) { if (funType.supportsType(columnType)) { result.add(funType); } } return result; } }
public int getIndex() { return ordinal(); }
public ColumnFilter parseColumnFilter(JsonObject columnFilterJson) { if (columnFilterJson == null) { return null; } String columnId = columnFilterJson.getString(keySet(COLUMN)); String functionType = columnFilterJson.getString(keySet(FUNCTION_TYPE)); JsonArray terms = columnFilterJson.getArray(keySet(FUNCTION_ARGS)); if (functionType == null) { throw new RuntimeException("Dataset lookup column filter null function type"); } if (isCoreFilter(functionType)) { CoreFunctionFilter cff = new CoreFunctionFilter(); cff.setColumnId(columnId); cff.setType(CoreFunctionType.getByName(functionType)); cff.setParameters(parseCoreFunctionParameters(terms)); return cff; } else if (isLogicalFilter(functionType)) { LogicalExprFilter lef = new LogicalExprFilter(); lef.setColumnId(columnId); lef.setLogicalOperator(LogicalExprType.getByName(functionType)); // Logical expression terms are an an array of column filters lef.setLogicalTerms(parseColumnFilters(terms)); return lef; } else { throw new RuntimeException("Dataset lookup column filter wrong type"); } }
public static List createParameters(ColumnType columnType, CoreFunctionType functionType) { List result = new ArrayList(); if (CoreFunctionType.LIKE_TO.equals(functionType)) { result.add("%Text%"); result.add(true); return result; } int n = functionType.getParametersCount(); for (int i=0; i<n; i++) { if (ColumnType.NUMBER.equals(columnType)) { result.add(100000d * i); } else if (ColumnType.DATE.equals(columnType)) { if (CoreFunctionType.TIME_FRAME.equals(functionType)) { result.add("begin[year] till end[year]"); } else { Date d = new Date(); d.setYear(d.getYear()-n+i+1); result.add(d); } } else { result.add("value" + (i + 1)); } } return result; }
@Test public void getSupportedTypeTest() { CoreFunctionType[] dateFunctionTypesUnsupported = {LIKE_TO, IN, NOT_IN}; CoreFunctionType[] textLabelFunctionTypesUnsupported = {TIME_FRAME}; CoreFunctionType[] numericFunctionTypesUnsupported = {LIKE_TO, TIME_FRAME}; assertThat(CoreFunctionType.getSupportedTypes(ColumnType.DATE)) .doesNotContain(dateFunctionTypesUnsupported); assertThat(CoreFunctionType.getSupportedTypes(ColumnType.LABEL)) .doesNotContain(textLabelFunctionTypesUnsupported); assertThat(CoreFunctionType.getSupportedTypes(ColumnType.NUMBER)) .doesNotContain(numericFunctionTypesUnsupported); assertThat(CoreFunctionType.getSupportedTypes(ColumnType.TEXT)) .doesNotContain(textLabelFunctionTypesUnsupported); } }
filterParams.add(new QueryParam(coreFunctionFilter.getColumnId(), coreFunctionFilter.getType().toString(), coreFunctionFilter.getParameters()));
public static int getNumberOfParameters(String type) { CoreFunctionType ft = getByName(type); return ft.getParametersCount(); }
public static CoreFunctionType getByName(String type) { try { return valueOf(type.toUpperCase()); } catch (Exception e) { return null; } }
public static List<CoreFunctionType> getSupportedTypes(ColumnType columnType) { List<CoreFunctionType> result = new ArrayList<CoreFunctionType>(); for (CoreFunctionType funType : coreFunctionTypes) { if (funType.supportsType(columnType)) { result.add(funType); } } return result; } }
public int getIndex() { return ordinal(); }
public ColumnFilter parseColumnFilter(JsonObject columnFilterJson) { if (columnFilterJson == null) { return null; } String columnId = columnFilterJson.getString(keySet(COLUMN)); String functionType = columnFilterJson.getString(keySet(FUNCTION_TYPE)); JsonArray terms = columnFilterJson.getArray(keySet(FUNCTION_ARGS)); if (functionType == null) { throw new RuntimeException("Dataset lookup column filter null function type"); } if (isCoreFilter(functionType)) { CoreFunctionFilter cff = new CoreFunctionFilter(); cff.setColumnId(columnId); cff.setType(CoreFunctionType.getByName(functionType)); cff.setParameters(parseCoreFunctionParameters(terms)); return cff; } else if (isLogicalFilter(functionType)) { LogicalExprFilter lef = new LogicalExprFilter(); lef.setColumnId(columnId); lef.setLogicalOperator(LogicalExprType.getByName(functionType)); // Logical expression terms are an an array of column filters lef.setLogicalTerms(parseColumnFilters(terms)); return lef; } else { throw new RuntimeException("Dataset lookup column filter wrong type"); } }
public boolean supportsType(ColumnType type) { if (TIME_FRAME.equals(this)) { return ColumnType.DATE.equals(type); } if (LIKE_TO.equals(this)) { return ColumnType.LABEL.equals(type) || ColumnType.TEXT.equals(type); } if (IN.equals(this) || NOT_IN.equals(this)) { return !ColumnType.DATE.equals(type); } return true; }