@Override public void updateSort(Optional<SortModel> sortModel) { TableModel model = this.tableModel.get(); tableModel.updateIfNotSame(ImmutableTableModel .builder() .from(model) .sorting(sortModel.isPresent() ? Collections.singleton(sortModel.get()) : Collections.EMPTY_LIST) .build()); }
private TableModel initialModel(ResourceId formId) { Optional<JsonValue> object = storage.getObjectIfPresent(modelKey(formId)); if(object.isPresent()) { try { return TableModel.fromJson(object.get()); } catch (Exception e) { LOGGER.log(Level.WARNING, "Failed to deserialize saved model: ", e); } } return ImmutableTableModel .builder() .formId(formId) .build(); }
public Observable<EffectiveTableModel> getEffectiveSubTable(final ResourceId subFormId) { Observable<EffectiveTableModel> effectiveSubTable = effectiveSubTables.get(subFormId); if(effectiveSubTable == null) { final TableModel subModel = ImmutableTableModel.builder() .formId(subFormId) .build(); effectiveSubTable = formTree .transform(tree -> tree.subTree(subFormId)) .transform(subTree -> new EffectiveTableModel(formStore, subTree, subModel, Optional.of(selectedRecordRef))); effectiveSubTables.put(subFormId, effectiveSubTable); } return effectiveSubTable; }
return model.build(); }); Observable<EffectiveTableModel> effectiveTableModel = computeEffectiveTableModel(exportTableModel);
@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())); }
@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()))); }
@Test public void test() { TableModel tableModel = ImmutableTableModel.builder() .formId(setup.getSurveyForm().getFormId()) .build(); TableViewModel viewModel = new TableViewModel(setup.getFormStore(), tableModel); Connection<EffectiveTableModel> view = setup.connect(viewModel.getEffectiveTable()); EffectiveTableModel effectiveTableModel = view.assertLoaded(); EffectiveTableColumn nameColumn = effectiveTableModel.getColumns().get(0); assertThat(nameColumn.getLabel(), equalTo("Respondent Name")); // Now verify that we can update the column label view.resetChangeCounter(); TableColumn updatedColumn = ImmutableTableColumn.builder() .from(nameColumn.getModel()) .label("MY column") .build(); viewModel.update(ImmutableTableModel.builder() .from(tableModel) .columns(Arrays.asList(updatedColumn)) .build()); setup.runScheduled(); // Should receive a change event... view.assertChanged(); EffectiveTableModel updatedModel = view.assertLoaded(); assertThat(updatedModel.getColumns().get(0).getLabel(), equalTo("MY column")); }
@Test public void testDeletedSelection() { TableModel tableModel = ImmutableTableModel.builder() .formId(setup.getSurveyForm().getFormId()) .build(); TableViewModel viewModel = new TableViewModel(setup.getFormStore(), tableModel); Connection<Optional<SelectionViewModel>> selection = connect(viewModel.getSelectionViewModel()); // Initially, we don't expect a selection assertThat(selection.assertLoaded().isPresent(), equalTo(false)); // Ensure that when the selection is changed, the observable changes... selection.resetChangeCounter(); RecordRef selectedRef = setup.getSurveyForm().getRecordRef(101); viewModel.select(selectedRef); selection.assertChanged(); setup.runScheduled(); assertThat(selection.assertLoaded().isPresent(), equalTo(true)); assertThat(selection.assertLoaded().get().isEditAllowed(), equalTo(true)); assertThat(selection.assertLoaded().get().isDeleteAllowed(), equalTo(true)); // Now delete the selected record... selection.resetChangeCounter(); DeleteRecordAction action = new DeleteRecordAction(setup.getFormStore(), "", selectedRef); Promise<Void> deleted = action.execute(); setup.runScheduled(); assertThat(deleted.getState(), equalTo(Promise.State.FULFILLED)); // And verify that the selection is changed to empty selection.assertChanged(); assertThat(selection.assertLoaded().isPresent(), equalTo(false)); }
@Test public void testSubFormPane() { IncidentForm incidentForm = setup.getCatalog().getIncidentForm(); TableModel tableModel = ImmutableTableModel.builder().formId(incidentForm.getFormId()).build(); TableViewModel viewModel = new TableViewModel(setup.getFormStore(), tableModel); Connection<EffectiveTableModel> subTableView = setup.connect(viewModel.getEffectiveSubTable(ReferralSubForm.FORM_ID)); Connection<ColumnSet> subTable = setup.connect(subTableView.assertLoaded().getColumnSet()); // The sub table should not include parent forms for (EffectiveTableColumn subColumn : subTableView.assertLoaded().getColumns()) { if(subColumn.getLabel().equals(incidentForm.getUrgencyField().getLabel())) { throw new AssertionError("Sub table should not include parent fields"); } } // Initially there should be no rows because there is no selection assertThat(subTable.assertLoaded().getNumRows(), equalTo(0)); // Once we make a selection, then the column set should update to show the sub records of the selected // parent record subTable.resetChangeCounter(); viewModel.select(incidentForm.getRecordRef(0)); setup.runScheduled(); subTable.assertChanged(); assertThat(subTable.assertLoaded().getNumRows(), equalTo(4)); }
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(); } }
public static ExportFormJob fromJson(JsonValue object) { TableModel tableModel; if(object.hasKey("formId")) { tableModel = ImmutableTableModel.builder() .formId(ResourceId.valueOf(object.get("formId").asString())) .build(); } else { tableModel = TableModel.fromJson(object.get("model")); } ExportFormat format; if (object.hasKey("format")) { format = ExportFormat.valueOf(object.get("format").asString()); } else { format = ExportFormat.CSV; } return new ExportFormJob(tableModel, format); } }
@Override public void updateColumnWidth(String columnId, int newWidth) { TableModel model = this.tableModel.get(); List<TableColumn> updatedColumns = new ArrayList<>(); for (TableColumn column : model.getColumns()) { if(column.getId().equals(columnId)) { updatedColumns.add(ImmutableTableColumn.builder().from(column).width(newWidth).build()); } else { updatedColumns.add(column); } } tableModel.updateIfNotSame(ImmutableTableModel.builder() .from(model) .columns(updatedColumns) .build()); }
@Test public void serializeModel() { ImmutableTableModel model = ImmutableTableModel.builder() .formId(ResourceId.valueOf("MY_FORM")) .addColumns(ImmutableTableColumn.builder().id("c1").label("Foo Squared").formula("foo*foo").build()) .addColumns(ImmutableTableColumn.builder().id("c2").formula("foo").build()) .build(); JsonValue object = model.toJson(); TableModel remodel = TableModel.fromJson(object); assertThat(remodel.getFormId(), equalTo(model.getFormId())); assertThat(remodel.getColumns(), hasSize(2)); assertThat(remodel.getColumns().get(0), equalTo(model.getColumns().get(0))); assertThat(remodel.getColumns().get(1), equalTo(model.getColumns().get(1))); }
@Override public String run() { TableModel tableModel = ImmutableTableModel.builder().formId(ResourceId.valueOf("FORM1")).build(); ExportFormJob exportForm = new ExportFormJob(tableModel, ExportFormat.XLS); JobRequest request = new JobRequest(exportForm, "en"); Response response = resource.start(request.toJsonObject().toJson()); JsonValue resultObject = parser.parse((String) response.getEntity()); JobStatus result = JobStatus.fromJson(resultObject); assertThat(result.getState(), equalTo(JobState.STARTED)); return result.getId(); } });
@Test public void testClassicAdminHierarchy() { LocaliteForm localiteForm = setup.getCatalog().getLocaliteForm(); TableModel tableModel = ImmutableTableModel.builder().formId(localiteForm.getFormId()).build(); TableViewModel viewModel = new TableViewModel(setup.getFormStore(), tableModel); EffectiveTableModel effectiveTable = setup.connect(viewModel.getEffectiveTable()).assertLoaded(); for (EffectiveTableColumn tableColumn : effectiveTable.getColumns()) { System.out.println(tableColumn.getLabel() + " => " + tableColumn.getFormula().getFormula()); } } }
@Test public void testDeletedForm() { TableModel tableModel = ImmutableTableModel.builder() .formId(setup.getSurveyForm().getFormId()) .build(); setup.deleteForm(setup.getSurveyForm().getFormId()); TableViewModel model = new TableViewModel(setup.getFormStore(), tableModel); Connection<EffectiveTableModel> view = setup.connect(model.getEffectiveTable()); EffectiveTableModel effectiveTableModel = view.assertLoaded(); assertThat(effectiveTableModel.getFormTree().getRootState(), equalTo(FormTree.State.DELETED)); }
@Test public void surveyForm() throws IOException { TableModel tableModel = ImmutableTableModel.builder() .formId(catalog.getSurvey().getFormId()) .build(); assertThat(export(tableModel), sameWorkbook(getWorkBook("survey-expected.xls"))); }
private TableModel buildUpdatedModel() { List<TableColumn> columns = new ArrayList<>(); for (TableColumnModel model : selectedStore.getAll()) { columns.add(model.updatedModel()); } return ImmutableTableModel.builder() .from(this.tableModel.getModel()) .columns(columns) .build(); }
@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()); }