@Value.Lazy @Override public JsonValue toJson() { JsonValue object = Json.createObject(); object.put("formId", getFormId().asString()); if(getColumns().size() != 0) { JsonValue columnArray = Json.createArray(); for (TableColumn tableColumn : getColumns()) { columnArray.add(tableColumn.toJson()); } object.put("columns", columnArray); } if (getFilter().isPresent()) { object.put("filter", getFilter().get()); } if (getSorting().size() != 0) { JsonValue columnArray = Json.createArray(); for (SortModel sortModel : getSorting()) { columnArray.add(sortModel.toJson()); } object.put("columns", columnArray); } return object; }
public void update(TableModel updatedModel) { LOGGER.info("TableModel updated: " + updatedModel.toJson().toJson()); tableModel.updateIfNotEqual(updatedModel); }
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(); }
private QueryModel buildQuery(List<EffectiveTableColumn> columns) { QueryModel queryModel = new QueryModel(formTree.getRootFormId()); if(tableModel.getFilter().isPresent()) { queryModel.setFilter(tableModel.getFilter().get()); } for (SortModel sortModel : tableModel.getSorting()) { queryModel.addSortModel(sortModel); } queryModel.selectRecordId().as(ID_COLUMN_ID); for (EffectiveTableColumn column : columns) { queryModel.addColumns(column.getQueryModel()); } return queryModel; }
@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 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 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))); }
public ResourceId getFormId() { return tableModel.getFormId(); }
public EffectiveTableModel(FormSource formSource, FormTree formTree, TableModel tableModel, Optional<Observable<Optional<RecordRef>>> selectedParentRef) { this.formTree = formTree; this.tableModel = tableModel; this.selectedParentRef = selectedParentRef; this.columns = new ArrayList<>(); if(formTree.getRootState() == FormTree.State.VALID) { if (tableModel.getColumns().isEmpty()) { addDefaultColumns(formTree); } else { for (TableColumn tableColumn : tableModel.getColumns()) { columns.add(new EffectiveTableColumn(formTree, tableColumn)); } } } if(selectedParentRef.isPresent()) { // For sub form views, the columnset depends on the selection this.columnSet = selectedParentRef.get().join(parentRecord -> { if(parentRecord.isPresent()) { return formSource.query(buildQuery(columns, parentRecord.get())); } else { return Observable.just(emptyColumnSet(columns)); } }); } else { this.columnSet = formSource.query(buildQuery(columns)); } }
public Optional<String> getFilter() { return getModel().getFilter(); }
public List<SortModel> getSorting() { return getModel().getSorting(); }
public TableViewModel(final FormSource formStore, final TableModel tableModel) { this.formId = tableModel.getFormId(); this.formStore = formStore; this.formTree = formStore.getFormTree(formId); this.tableModel = new StatefulValue<>(tableModel); this.effectiveTable = computeEffectiveTableModel(this.tableModel); this.selectionViewModel = SelectionViewModel.compute(formStore, selectedRecordRef); this.columnSet = this.effectiveTable.join(table -> table.getColumnSet()); }
@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()); }
private HSSFWorkbook export(TableModel tableModel) throws IOException { TableViewModel viewModel = new TableViewModel(formSource, tableModel); EffectiveTableModel effectiveTableModel = viewModel.getEffectiveTable().waitFor(); if(effectiveTableModel.getRootFormState() != FormTree.State.VALID) { throw new IllegalStateException("Root Form has state: " + effectiveTableModel.getRootFormState()); } ColumnSet columnSet = effectiveTableModel.getColumnSet().waitFor(); XlsTableWriter writer = new XlsTableWriter(); writer.addSheet(effectiveTableModel, columnSet); writer.write(new FileOutputStream("build/" + tableModel.getFormId().asString() + ".xls")); return writer.getBook(); }
@Override public JsonValue toJson() { JsonValue object = createObject(); object.put("model", tableModel.toJson()); object.put("format", format.name()); return object; }
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); } }
if(formId.equals(tableModel.get().getFormId())) {
private void saveModel(Observable<TableModel> model) { if (model.isLoaded()) { storage.setObject(modelKey(place.getFormId()), model.get().toJson()); } }