private FormulaNode join(@Nullable FormulaNode base, @Nullable SymbolNode field) { if(base == null && field == null) { return null; } else if (base == null) { return field; } else if (field == null) { return base; } else { return new CompoundExpr(base, field); } }
public QueryPath(CompoundExpr expr) { path = new LinkedList<>(); // Recursively convert the compound expr to a linked list of symbols while(true) { path.add(0, expr.getField().getName()); if(expr.getValue() instanceof CompoundExpr) { expr = (CompoundExpr) expr.getValue(); } else if(expr.getValue() instanceof SymbolNode) { path.add(0, ((SymbolNode) expr.getValue()).getName()); break; } } }
private String constructFilter() { return new CompoundExpr(IncidentForm.URGENCY, IncidentForm.HIGH.asString()).asExpression(); }
@Override public FieldValue evaluate(EvalContext context) { FieldValue baseValue = value.evaluate(context); if(baseValue instanceof EnumValue) { EnumValue enumValue = (EnumValue) baseValue; return evaluateEnumValue(enumValue); } return BooleanFieldValue.FALSE; }
@Override public FormulaNode transform(Function<FormulaNode, FormulaNode> function) { return function.apply(new CompoundExpr( value.transform(function), field)); }
@Override public MeasureModel newMeasure() { return ImmutableMeasureModel.builder() .label(I18N.MESSAGES.countDistinctMeasure(formClass.getLabel())) .formId(rootFormId) .formula(new CompoundExpr(formClass.getId(), ColumnModel.RECORD_ID_SYMBOL).asExpression()) .addStatistics(Statistic.COUNT_DISTINCT) .build(); } }
public FormulaNode toExpr() { Iterator<ResourceId> it = path.iterator(); FormulaNode expr = new SymbolNode(it.next()); while(it.hasNext()) { expr = new CompoundExpr(expr, new SymbolNode(it.next())); } return expr; }
Integer firstColumnIndex = findColumnIndex(firstCompoundExpr.getValue()); if(firstColumnIndex == null) { return false; enumItemIds.add(firstCompoundExpr.getField().getName()); Integer columnIndex = findColumnIndex(compoundExpr.getValue()); if(columnIndex == null || columnIndex != firstColumnIndex) { return false; enumItemIds.add(compoundExpr.getField().getName());
@Test public void testSubFormExport() { IncidentForm incidentForm = setup.getCatalog().getIncidentForm(); TableModel tableModel = ImmutableTableModel.builder().formId(incidentForm.getFormId()) .addColumns(ImmutableTableColumn.builder() .label("My PCODE") .formula(IncidentForm.PROTECTION_CODE_FIELD_ID.asString()) .build()) .build(); TableViewModel viewModel = new TableViewModel(setup.getFormStore(), tableModel); Observable<ExportViewModel> exportModel = viewModel.computeExportModel( Observable.just(ReferralSubForm.FORM_ID), Observable.just(ExportScope.SELECTED)); Connection<TableModel> exportModelConnection = setup.connect(exportModel.transform(ExportViewModel::getTableModel)); Connection<Boolean> columnLimitConnection = setup.connect(exportModel.transform(ExportViewModel::isColumnLimitExceeded)); System.out.println(Json.stringify(exportModelConnection.assertLoaded().toJson(), 2)); assertThat(exportModelConnection.assertLoaded().getFormId(), equalTo(ReferralSubForm.FORM_ID)); assertThat(exportModelConnection.assertLoaded().getColumns(), hasSize(3)); assertThat(columnLimitConnection.assertLoaded(), equalTo(false)); TableColumn firstColumn = exportModelConnection.assertLoaded().getColumns().get(0); assertThat(firstColumn.getLabel(), equalTo(Optional.of("My PCODE"))); assertThat(firstColumn.getFormula(), equalTo( new CompoundExpr(new SymbolNode(ColumnModel.PARENT_SYMBOL), IncidentForm.PROTECTION_CODE_FIELD_ID).asExpression())); }
private static FormulaNode toExpr(List<FormTree.Node> partition) { Iterator<FormTree.Node> it = partition.iterator(); FormulaNode expr = new SymbolNode(it.next().getFieldId()); while(it.hasNext()) { expr = new CompoundExpr(expr, new SymbolNode(it.next().getFieldId())); } return expr; }
private static FormulaNode toListFormula(FormulaNode field, FilterConfig filter) { // Shockingly, the gxt filterconfig for list is generated by concatenating // ids together with "::" String[] enumItemIds = filter.getValue().split("::"); List<FormulaNode> enumConditions = new ArrayList<>(); for (String enumItemId : enumItemIds) { enumConditions.add(new CompoundExpr(field, new SymbolNode(enumItemId))); } return Formulas.anyTrue(enumConditions); }
private List<ResourceId> getFieldIds(FormulaNode formulaNode) { List<ResourceId> fieldIds = new ArrayList<>(); if (formulaNode instanceof FunctionCallNode) { FunctionCallNode functionCall = (FunctionCallNode) formulaNode; for(FormulaNode arg : functionCall.getArguments()) { fieldIds.addAll(getFieldIds(arg)); } } else if (formulaNode instanceof SymbolNode) { SymbolNode symbolNode = (SymbolNode) formulaNode; fieldIds.add(ResourceId.valueOf(symbolNode.getName())); } else if (formulaNode instanceof ConstantNode) { ConstantNode constantNode = (ConstantNode) formulaNode; if (constantNode.getType() instanceof EnumType) { fieldIds.add(ResourceId.valueOf(constantNode.toString())); } } else if (formulaNode instanceof CompoundExpr) { CompoundExpr compoundExpr = (CompoundExpr) formulaNode; fieldIds.addAll(getFieldIds(compoundExpr.getValue())); fieldIds.addAll(getFieldIds(compoundExpr.getField())); } else if (formulaNode instanceof GroupNode) { GroupNode groupNode = (GroupNode) formulaNode; fieldIds.addAll(getFieldIds(groupNode.getExpr())); } return fieldIds; }
public Map<LookupKey, FormulaNode> getKeyFormulas(FormulaNode baseField) { if(leafKeyMap.size() == 1) { return Iterables.getOnlyElement(getLeafKeys()).getKeyFormulas(baseField); } else { // For the case where a field can refer to one of several different forms, // query the keys using the syntax [formId].[keyFieldId] Map<LookupKey, FormulaNode> keyMap = new HashMap<>(); for (LookupKey lookupKey : lookupKeys) { keyMap.put(lookupKey, new CompoundExpr(new SymbolNode(lookupKey.getFormId()), lookupKey.getKeyField())); } return keyMap; } }
private FormulaNode measureFormula() { if (rootFormId.equals(formId)) { return new SymbolNode(field.getId()); } else { return new CompoundExpr(formId, field.getName()); } }
@Override public List<ColumnModel> getColumnModels() { List<ColumnModel> columns = new ArrayList<>(); for (EnumItem enumItem : enumType.getValues()) { ColumnModel model = new ColumnModel(); model.setId(getItemId(enumItem)); model.setFormula(new CompoundExpr(formula, new SymbolNode(enumItem.getId()))); columns.add(model); } return columns; }
@Override public DimensionModel dimensionModel() { return ImmutableDimensionModel.builder() .id(ResourceId.generateCuid()) .label(field.getLabel()) .addMappings(new DimensionMapping(new CompoundExpr(formId, field.getName()))) .build(); }
public FormulaNode toFormula() { switch (operator) { case EQUALS: return binaryFunction(EqualFunction.INSTANCE); case NOT_EQUALS: return binaryFunction(NotEqualFunction.INSTANCE); case GREATER_THAN: return binaryFunction(GreaterFunction.INSTANCE); case GREATER_THAN_EQUAL: return binaryFunction(GreaterOrEqualFunction.INSTANCE); case LESS_THAN: return binaryFunction(LessFunction.INSTANCE); case LESS_THAN_EQUAL: return binaryFunction(LessOrEqualFunction.INSTANCE); case INCLUDES: return new CompoundExpr(fieldId, getEnumId().asString()); case NOT_INCLUDES: return new FunctionCallNode(NotFunction.INSTANCE, new CompoundExpr(fieldId, getEnumId().asString())); default: throw new IllegalStateException(); } }
@Override public List<ColumnModel> getColumnModels() { ColumnModel latitudeModel = new ColumnModel(); latitudeModel.setId(getLatitudeId()); latitudeModel.setFormula(new CompoundExpr(formula, new SymbolNode("latitude"))); ColumnModel longitudeModel = new ColumnModel(); longitudeModel.setId(getLongitudeId()); longitudeModel.setFormula(new CompoundExpr(formula, new SymbolNode("longitude"))); return Arrays.asList(latitudeModel, longitudeModel); }