@Override public FieldType createType() { return new SerialNumberType(); }
@Override public String readString(FieldValue value) { if(value instanceof SerialNumber) { SerialNumber serialNumber = (SerialNumber) value; return type.format(serialNumber); } return null; } }
@Override protected void show(SerialNumberType type) { prefixFormulaBox.setText(type.getPrefixFormula()); validateFormula(type.getPrefixFormula()); }
public String label(TypedFormRecord record) { if(fieldId.getName().equals(ColumnModel.RECORD_ID_SYMBOL)) { return record.getId().asString(); } FieldValue fieldValue = record.get(ResourceId.valueOf(fieldId.getName())); if(fieldValue == null) { return record.getId().asString(); } if(fieldValue instanceof SerialNumber) { SerialNumberType type = new SerialNumberType(); return type.format(((SerialNumber) fieldValue)); } else { return ((HasStringValue) fieldValue).asString(); } }
private String computeSerialNumberPrefix( FormClass formClass, SerialNumberType type, TypedFormRecord effectiveRecord) { if(!type.hasPrefix()) { return null; } try { FormEvalContext evalContext = new FormEvalContext(formClass); evalContext.setInstance(effectiveRecord); FormulaNode formula = FormulaParser.parse(type.getPrefixFormula()); FieldValue prefixValue = formula.evaluate(evalContext); if(prefixValue instanceof TextValue) { return ((TextValue) prefixValue).asString(); } else { throw new IllegalStateException("Prefix " + type.getPrefixFormula() + " resolves to type " + prefixValue.getTypeClass().getId()); } } catch (Exception e) { LOGGER.log(Level.SEVERE, "Failed to compute prefix for serial number", e); return null; } }
@UiHandler("prefixFormulaBox") public void onFormulaChange(KeyUpEvent event) { String updatedFormula = prefixFormulaBox.getValue(); SerialNumberType updatedType = currentType().withPrefixFormula(updatedFormula); updateType(updatedType); validateFormula(updatedFormula); }
public SerialNumberType withPrefixFormula(String formula) { return new SerialNumberType(formula, this.digits); }
@Override public void init(FieldValue value) { field.setText(type.format(((SerialNumber) value))); }
@Override public FieldType deserializeType(JsonValue parametersObject) { SerialNumberType type = new SerialNumberType(); if(parametersObject.hasKey("prefixFormula")) { type.prefixFormula = parametersObject.get("prefixFormula").asString(); } if(parametersObject.hasKey("digits")) { type.digits = parametersObject.get("digits").asInt(); } return type; } };
@Override public Promise<Void> setValue(SerialNumber value) { box.setValue(type.format(value)); return Promise.resolved(null); }
@Test public void noPrefixes() { SerialNumberBlock block = new SerialNumberBlock(new SerialNumberType()); Entity blockEntity = new Entity("Block", 1); block.update(blockEntity, 0, new SerialNumber(1)); block.update(blockEntity, 2, new SerialNumber(2)); block.update(blockEntity, 1, new SerialNumber(3)); block.update(blockEntity, 8, new SerialNumber(4)); FormEntity header = new FormEntity(); header.setNumberedRecordCount(10); TombstoneIndex tombstoneIndex = new TombstoneIndex(header); ColumnView view = block.buildView(header, tombstoneIndex, Arrays.asList(blockEntity).iterator()); assertThat(view.numRows(), equalTo(10)); assertThat(view.getString(0), equalTo("00001")); assertThat(view.getString(1), equalTo("00003")); assertThat(view.getString(2), equalTo("00002")); assertThat(view.isMissing(3), equalTo(true)); assertThat(view.isMissing(4), equalTo(true)); assertThat(view.isMissing(5), equalTo(true)); assertThat(view.getString(8), equalTo("00004")); }
public String format(SerialNumber value) { return format(value.getPrefix(), value.getNumber()); }
@Test public void prefixes() { SerialNumberBlock block = new SerialNumberBlock(new SerialNumberType()); Entity blockEntity = new Entity("Block", 1); block.update(blockEntity, 0, new SerialNumber("ABC", 1)); block.update(blockEntity, 1, new SerialNumber("XYZ", 1)); block.update(blockEntity, 2, new SerialNumber("ABC", 2)); block.update(blockEntity, 3, new SerialNumber("XYZ", 3)); block.update(blockEntity, 4, new SerialNumber("ABC", 3)); block.update(blockEntity, 5, new SerialNumber("ATC", 1)); FormEntity header = new FormEntity(); header.setNumberedRecordCount(6); TombstoneIndex tombstoneIndex = new TombstoneIndex(header); ColumnView view = block.buildView(header, tombstoneIndex, Arrays.asList(blockEntity).iterator()); assertThat(view.numRows(), equalTo(6)); assertThat(view.getString(0), equalTo("ABC-00001")); assertThat(view.getString(1), equalTo("XYZ-00001")); assertThat(view.getString(2), equalTo("ABC-00002")); assertThat(view.getString(3), equalTo("XYZ-00003")); assertThat(view.getString(4), equalTo("ABC-00003")); assertThat(view.getString(5), equalTo("ATC-00001")); }
@Override public void renderTo(FieldValue fieldValue, SafeHtmlBuilder html) { SerialNumber serialNumber = ((SerialNumber) fieldValue); String serial = fieldType.format(serialNumber); html.appendHtmlConstant("<p>"); html.appendEscaped(serial); html.appendHtmlConstant("</p>"); } }
@Test public void serialNumber() throws JsonMappingException { FormClass formClass = new FormClass(ResourceId.valueOf("FORM1")); formClass.addField(ResourceId.valueOf("FIELD0")) .setType(TextType.SIMPLE) .setLabel("Province Code") .setCode("PROVINCE") .setRequired(true); FormField serialNumberField = formClass.addField(ResourceId.valueOf("FIELD1")) .setType(new SerialNumberType("PROVINCE", 5)) .setRequired(true) .setLabel("File Number") .setCode("SN"); JsonValue fields = Json.createObject(); fields.put("PROVINCE", "KUNDUZ"); JsonValue change = createObject(); change.put("recordId", "A"); change.put("formId", "FORM1"); change.put("fields", fields); TypedRecordUpdate update = Updater.parseChange(formClass, change, userId); TypedFormRecord effectiveRecord = updater.computeEffectiveRecord(formClass, Optional.<FormRecord>absent(), update); updater.generateSerialNumber(formClass, serialNumberField, effectiveRecord, update); FieldValue serialValue = update.getChangedFieldValues().get(serialNumberField.getId()); assertThat(serialValue, equalTo((FieldValue)new SerialNumber("KUNDUZ", 1))); }
values[targetIndex] = type.format(prefix, number);
formClass.setLabel("New Form"); FormField serialNumField = new FormField(CuidAdapter.generateIndicatorId()) .setType(new SerialNumberType()) .setLabel("NUM") .setRequired(true);
@Test public void simpleTest() { ApplicationDriver driver = harness.newUser(); TestDatabase database = driver.createDatabase(); ActivityInfoClient client = driver.getClient(); FormClass formClass = new FormClass(harness.newFormId()); formClass.setLabel("Test Form"); formClass.setDatabaseId(database.getId()); FormField partnerField = CuidAdapter.partnerField(formClass); formClass.addElement(partnerField); FormField fileNumberField = formClass.addField(harness.newFieldId()) .setType(new SerialNumberType()) .setLabel("Record Number"); FormField nameField = formClass.addField(harness.newFieldId()) .setType(TextType.SIMPLE) .setLabel("Name"); client.createForm(formClass); TypedFormRecord record1 = new TypedFormRecord(harness.newRecordId(), formClass.getId()); record1.set(nameField.getId(), "Sue"); record1.set(partnerField.getId(), database.getDefaultPartner()); TypedFormRecord record2 = new TypedFormRecord(harness.newRecordId(), formClass.getId()); record2.set(nameField.getId(), "Bob"); record2.set(partnerField.getId(), database.getDefaultPartner()); client.createRecord(record1); client.createRecord(record2); record1 = client.getTypedRecord(formClass, record1.getId()); record2 = client.getTypedRecord(formClass, record2.getId()); assertThat(record1.get(fileNumberField.getId()), equalTo((FieldValue) new SerialNumber(1))); assertThat(record2.get(fileNumberField.getId()), equalTo((FieldValue) new SerialNumber(2))); }
.setType(new SerialNumberType("PROVINCE", 5)) .setLabel("Record Number");
.setLabel("Protection Code") .setRequired(true) .setType(new SerialNumberType());