public TableColumn updatedModel() { TableColumn updatedModel = model; // Only updated the label if it has been explicitly changed. // Otherwise leave it implicit so that it will reflect changes to the // field's label if(updatedLabel != null && !updatedLabel.equals(effectiveLabel)) { updatedModel = ImmutableTableColumn.builder() .from(updatedModel) .label(updatedLabel) .build(); } return updatedModel; } }
@Override public Optional<TableColumn> newTableColumn() { return Optional.of(ImmutableTableColumn.builder() .label(getLabel()) .formula("1") .build()); } }
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(); }
@Override public Optional<TableColumn> newTableColumn() { return Optional.of(ImmutableTableColumn.builder() .label(getLabel()) .formula(formula.asExpression()) .build()); } }
@Override public Optional<TableColumn> newTableColumn() { return Optional.of( ImmutableTableColumn.builder() .label(getLabel()) .formula(field.getId().asString()) .build()); } }
@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 void addKeyColumns(List<EffectiveTableColumn> columns, FormTree.Node node) { LookupKeySet lookupKeySet = new LookupKeySet(formTree, node.getField()); Map<LookupKey, FormulaNode> formulas = lookupKeySet.getKeyFormulas(node.getFieldId()); for (LookupKey lookupKey : lookupKeySet.getLookupKeys()) { ImmutableTableColumn tableColumn = ImmutableTableColumn.builder() .id(node.getFieldId().asString() + "_k" + lookupKey.getKeyIndex()) .formula(formulas.get(lookupKey).toString()) .label(lookupKey.getKeyLabel()) .build(); columns.add(new EffectiveTableColumn(formTree, tableColumn)); } }
public static TableColumn fromJson(JsonValue object) { ImmutableTableColumn.Builder tableColumn = ImmutableTableColumn.builder(); tableColumn.id(object.getString("id")); if(object.hasKey("label")) { tableColumn.label(object.getString("label")); } if(object.hasKey("width")) { tableColumn.width((int)object.getNumber("width")); } tableColumn.formula(object.getString("formula")); return tableColumn.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))); }
if(columns == ExportScope.SELECTED ) { for (EffectiveTableColumn tableColumn : parent.getColumns()) { model.addColumns(ImmutableTableColumn.builder() .label(tableColumn.getLabel()) .formula(parentFormula(tableColumn.getFormula())) model.addColumns(ImmutableTableColumn.builder() .label(tableColumn.getLabel()) .formula(tableColumn.getFormulaString()) if(columns == ExportScope.SELECTED) { for (EffectiveTableColumn tableColumn : parent.getColumns()) { model.addColumns(ImmutableTableColumn.builder() .label(tableColumn.getLabel()) .formula(tableColumn.getFormulaString())
@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 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 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()))); }