public DimensionMapping(FormulaNode formula) { this.formId = null; this.formula = formula.asExpression(); this.type = Type.VALUE; }
@JsonProperty("formula") public String getFormulaAsString() { if(formula == null) { return null; } else { return formula.asExpression(); } }
@Override public String asExpression() { return value.asExpression() + "." + field.asExpression(); }
public String build() { List<SimpleCondition> conditions = new ArrayList<>(); for (RelevanceRow row : rows) { conditions.add(row.buildCondition()); } return new SimpleConditionList(getSelectedCriteria(), conditions) .toFormula() .asExpression(); }
private ImmutableTableColumn defaultColumnModel(FormulaNode formulaNode) { String formulaString = formulaNode.asExpression(); // We need stable ids for our default columns, otherwise // the views will get confused and refresh unnecessarily String id = formulaString.replace('.', 'd'); return ImmutableTableColumn.builder() .id(id) .formula(formulaString) .build(); }
private String resolveSymbol(FormulaNode formulaNode) throws XSymbolException { if (formulaNode instanceof SymbolNode) { return resolveSymbol((SymbolNode) formulaNode); } else if (formulaNode instanceof ConstantNode) { return resolveSymbol((ConstantNode) formulaNode); } throw new XSymbolException(formulaNode.asExpression()); }
@Override public Optional<TableColumn> newTableColumn() { return Optional.of(ImmutableTableColumn.builder() .label(getLabel()) .formula(formula.asExpression()) .build()); } }
@Override protected void onDragDrop(DndDropEvent event) { if(event.getData() instanceof FormulaElement) { FormulaElement element = (FormulaElement) event.getData(); String expression = element.getExpr().asExpression(); editor.insertAt(expression, insertPos); } } }
@Override public JsonValue toJson() { JsonValue object = createObject(); object.put("rowSources", Json.toJson(rowSources)); object.put("columns", Json.toJson(columns)); if(filter != null) { object.put("filter", filter.asExpression()); } if(!sortModels.isEmpty()) { object.put("sort", Json.toJson(sortModels)); } return object; }
@Override public void updateFilter(Optional<FormulaNode> filterNode) { Optional<String> filter = filterNode.transform(n -> n.asExpression()); tableModel.updateIfNotEqual( ImmutableTableModel.builder() .from(tableModel.get()) .filter(filter) .build()); }
@Override public MeasureModel newMeasure() { return ImmutableMeasureModel.builder() .label(getLabel()) .formId(rootFormId) .formula(measureFormula().asExpression()) .build(); }
@Override public MeasureModel newMeasure() { return ImmutableMeasureModel.builder() .label(getLabel()) .formId(formClass.getId()) .formula(formula.asExpression()) .build(); }
@Test public void singleSelectEqual() { SimpleConditionList conditionList = SimpleConditionParser.parse(FormulaParser.parse("{Q1717540673}=={t1717155924}")); FormulaNode formulaRoot = conditionList.toFormula(); System.out.println(formulaRoot.asExpression()); }
@Test public void list() { FilterConfig cfg = new FilterConfigBean(); cfg.setType("list"); cfg.setValue("Item1::Item2::Item3"); assertThat(toFormula(A, cfg).asExpression(), equalTo("A.Item1 || A.Item2 || A.Item3")); }
@Test public void string() { FilterConfig cfg = new FilterConfigBean(); cfg.setType("string"); cfg.setComparison("contains"); cfg.setValue("Bar"); assertThat(toFormula(A, cfg).asExpression(), equalTo("ISNUMBER(SEARCH(\"Bar\", A))")); }
@Test public void test() { FilterConfig c = new FilterConfigBean(); c.setComparison("on"); c.setType("date"); c.setValue("1505779200000"); assertThat(toFormula(A, c).asExpression(), equalTo("A == DATE(2017, 9, 19)")); }
@Test public void roundTrip() { FilterConfig config = new FilterConfigBean(); config.setType("numeric"); config.setComparison("eq"); config.setValue("1"); FormulaNode columnExpr = parse("IF(A && B, A * 42 / 3, CEIL(B / 99))"); String filterFormula = toFormula(columnExpr, config).asExpression(); ColumnFilterParser parser = new ColumnFilterParser(asList(A, columnExpr)); Multimap<Integer, FilterConfig> map = parser.parseFilter(parse(filterFormula)); assertThat(map.get(1), contains(numericFilter("eq", 1))); }
@Test public void numeric() { FilterConfig config = new FilterConfigBean(); config.setField("A"); config.setType("numeric"); config.setComparison("eq"); config.setValue("42"); assertThat(toFormula(A, config).asExpression(), equalTo("A == 42")); }
@Test public void overlappingHierarchiesParse() { TestingStorageProvider catalog = setup.getCatalog(); LocaliteForm localiteForm = catalog.getLocaliteForm(); FormTree formTree = setup.getFormTree(localiteForm.getFormId()); LookupKeySet lookupKeySet = new LookupKeySet(formTree, localiteForm.getAdminField()); Map<LookupKey, FormulaNode> formulas = lookupKeySet.getKeyFormulas(localiteForm.getAdminField().getId()); ParsedFormula province = new ParsedFormula(formTree, formulas.get(lookupKeySet.getKey(0)).asExpression()); assertThat(province.isValid(), equalTo(true)); assertThat(province.getResultType(), instanceOf(TextType.class)); }
@Test public void simpleRootFieldTest() { NfiForm nfiForm = setup.getCatalog().getNfiForm(); FormTree formTree = setup.getCatalog().getFormTree(nfiForm.getFormId()); FormPermissions permissions = new FormPermissions.Builder() .allowFilteredView(nfiForm.getVillageField().getId() + " == 'g12345'") .allowEdit(Optional.of(nfiForm.getVillageField().getId() + "=='g12345'")) .build(); PermissionFilters filters = new PermissionFilters(formTree, permissions, Operation.EDIT_RECORD); assertThat(filters.getReferenceBaseFilter(nfiForm.getVillageField().getId()).get().asExpression(), equalTo("[_id] == \"g12345\"")); }