@Override public FieldValue get() { return new SerialNumber(next ++); } }
@Override public SerialNumber parseJsonValue(JsonValue jsonElement) { if(jsonElement.isJsonPrimitive()) { JsonValue value = jsonElement; if (value.isNumber()) { return new SerialNumber(value.asInt()); } } else if(jsonElement.isJsonObject()) { JsonValue jsonObject = jsonElement; return new SerialNumber( jsonObject.get("prefix").asString(), jsonObject.get("number").asInt()); } throw new IllegalArgumentException(); }
/** * Update a block with a new field value * @param blockEntity the data store entity for the block * @param recordOffset the zero-based index of the record, relative to the start of the block * @param fieldValue the new field value */ public Entity update(Entity blockEntity, int recordOffset, @Nullable FieldValue fieldValue) { // Serial numbers cannot be changed if(fieldValue == null) { // no change return null; } SerialNumber serialNumber = (SerialNumber) fieldValue; char prefixOffset = StringPools.findOrInsertStringInPool(blockEntity, PREFIX_POOL_PROPERTY, serialNumber.getPrefix()); OffsetArray.updateOffset(blockEntity, PREFIX_OFFSET_PROPERTY, recordOffset, prefixOffset); IntValueArray.update(blockEntity, NUMBER_PROPERTY, recordOffset, serialNumber.getNumber()); return blockEntity; }
@VisibleForTesting void generateSerialNumber(FormClass formClass, FormField formField, TypedFormRecord effectiveRecord, TypedRecordUpdate update) { SerialNumberType type = (SerialNumberType) formField.getType(); String prefix = computeSerialNumberPrefix(formClass, type, effectiveRecord); int serialNumber = serialNumberProvider.next(formClass.getId(), formField.getId(), prefix); update.set(formField.getId(), new SerialNumber(prefix, serialNumber)); }
@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")); }
@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")); }
@Test public void testSerialNumberEdit() { IntakeForm intakeForm = setup.getCatalog().getIntakeForm(); RecordRef ref = intakeForm.getRecords().get(0).getRef(); FormStructure structure = fetchStructure(ref); FormInputViewModelBuilder builder = builderFor(structure); FormInputModel model = new FormInputModel(ref); FormInputViewModel viewModel = builder.build(model, structure.getExistingRecord()); assertThat(viewModel.getField(intakeForm.getProtectionCodeFieldId()), equalTo(new SerialNumber(1))); }
@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))); }
assertThat(created.get(serialNumField.getId()), equalTo((FieldValue)new SerialNumber(1))); assertThat(updated.get(serialNumField.getId()), equalTo((FieldValue)new SerialNumber(1)));
@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))); }
takhar = client.getTypedRecord(formClass, takhar.getId()); assertThat(kunduz1.get(fileNumberField.getId()), equalTo((FieldValue) new SerialNumber("KUNDUZ", 1))); assertThat(kunduz2.get(fileNumberField.getId()), equalTo((FieldValue) new SerialNumber("KUNDUZ", 2))); assertThat(takhar.get(fileNumberField.getId()), equalTo((FieldValue) new SerialNumber("TAKHAR", 1)));