public static TableModel fromJson(JsonValue object) { ImmutableTableModel.Builder model = ImmutableTableModel.builder(); model.formId(ResourceId.valueOf(object.getString("formId"))); if(object.hasKey("columns")) { JsonValue columnArray = object.get("columns"); for (int i = 0; i < columnArray.length(); i++) { model.addColumns(TableColumn.fromJson(columnArray.get(i))); } } if (object.hasKey("filter")) { model.filter(Optional.of(object.getString("filter"))); } else { model.filter(Optional.absent()); } if (object.hasKey("sort")) { JsonValue columnArray = object.get("sort"); for (int i = 0; i < columnArray.length(); i++) { model.addSorting(SortModel.fromJson(columnArray.get(i))); } } return model.build(); } }
@Test public void testSubFormExportWithFilter() { 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()) .filter(constructFilter()) .build(); TableViewModel viewModel = new TableViewModel(setup.getFormStore(), tableModel); Connection<TableModel> exportModel = setup.connect( viewModel.computeExportModel( Observable.just(ReferralSubForm.FORM_ID), Observable.just(ExportScope.SELECTED), Observable.just(ExportScope.SELECTED), Observable.just(ExportFormat.XLS)) .transform(ExportViewModel::getTableModel)); System.out.println(Json.stringify(exportModel.assertLoaded().toJson(), 2)); assertThat(exportModel.assertLoaded().getFormId(), equalTo(ReferralSubForm.FORM_ID)); assertThat(exportModel.assertLoaded().getColumns(), hasSize(3)); assertThat(exportModel.assertLoaded().getFilter(), equalTo(Optional.of(constructFilter()))); }
@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()); }