/** * Validates and executes a {@code ResourceUpdate} encoded as a json object. The object * must have a changes property that takes the value of an array. * * @throws InvalidUpdateException if the given update * is not a validate update. */ public void execute(JsonValue transactionObject) { try { execute(Json.fromJson(RecordTransaction.class, transactionObject)); } catch (JsonMappingException e) { throw new InvalidUpdateException(e); } }
private void generateSerialNumbers(FormClass formClass, Optional<FormRecord> existingRecord, TypedRecordUpdate update) { TypedFormRecord effectiveRecord = computeEffectiveRecord(formClass, existingRecord, update); for (FormField formField : formClass.getFields()) { if(formField.getType() instanceof SerialNumberType) { if(!effectiveRecord.getFieldValueMap().containsKey(formField.getId())) { generateSerialNumber(formClass, formField, effectiveRecord, update); } } } }
public void executeChange(RecordUpdate update) { Optional<FormStorage> storage = catalog.getForm(update.getFormId()); if(!storage.isPresent()) { throw new InvalidUpdateException(format("Form '%s' does not exist.", update.getFormId())); } FormClass formClass = storage.get().getFormClass(); TypedRecordUpdate typedUpdate = parseChange(formClass, update, this.userId); executeUpdate(storage.get(), typedUpdate); }
private Updater updater() { return new Updater(catalog, databaseProvider, new BlobAuthorizerStub(), new HrdSerialNumberProvider(), userId); }
@Override public Promise<Void> createRecord(String formId, NewFormRecordBuilder query) { try { FormStorageProvider catalog = newCatalog(); Updater updater = new Updater(catalog, databaseProvider, blobAuthorizer, new SerialNumberProviderStub(), currentUserId()); updater.create(ResourceId.valueOf(formId), query.toJsonObject()); return Promise.resolved(null); } catch (Exception e) { return Promise.rejected(e); } }
@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))); }
public void execute(RecordTransaction tx) { TransactionalStorageProvider txStorageProvider = (TransactionalStorageProvider) catalog; txStorageProvider.begin(); try { for (RecordUpdate change : tx.getChanges()) { executeChange(change); } txStorageProvider.commit(); } catch (Exception e) { txStorageProvider.rollback(); throw e; } }
@VisibleForTesting static TypedRecordUpdate parseChange(FormClass formClass, JsonValue changeObject, int userId) throws JsonMappingException { return parseChange(formClass, Json.fromJson(RecordUpdate.class, changeObject), userId); }
@Test public void deleteAdminEntity() { RecordUpdate changeObject = new RecordUpdate(); changeObject.setRecordId(entity(21).asString()); changeObject.setFormId(adminLevelFormClass(2).asString()); changeObject.setDeleted(true); Updater updater = updater(); updater.setEnforcePermissions(false); updater.executeChange(changeObject); query(adminLevelFormClass(2), "_id", "name"); assertThat(column("name"), hasValues("Bukavu", "Walungu", "Shabunda", "Kalehe")); }
@Before public void setUp() { MockFormStorageProvider catalog = new MockFormStorageProvider(); MockDatabaseProvider databaseProvider = new MockDatabaseProvider(); updater = new Updater(catalog, databaseProvider, new BlobAuthorizerStub(), new SerialNumberProviderStub(), userId); }
@Test public void updateLocation() throws SQLException { ResourceId recordId = CuidAdapter.cuid(LOCATION_DOMAIN, 1); ResourceId formId = CuidAdapter.locationFormClass(1); RecordUpdate update = new RecordUpdate(); update.setFormId(formId); update.setRecordId(recordId); update.setFieldValue(CuidAdapter.field(formId, CuidAdapter.NAME_FIELD), TextValue.valueOf("New Name")); Updater updater = updater(); updater.executeChange(update); newRequest(); FormStorage formStorage = catalog.getForm(formId).get(); FormRecord record = formStorage.get(recordId).get(); TypedFormRecord typedRecord = TypedFormRecord.toTypedFormRecord(formStorage.getFormClass(), record); GeoPoint point = (GeoPoint) typedRecord.get(CuidAdapter.field(formId, CuidAdapter.GEOMETRY_FIELD)); assertThat(point, not(nullValue())); } }
@Test public void parsedQuantity() throws JsonMappingException { ResourceId fieldId = ResourceId.valueOf("Q1"); FormClass formClass = new FormClass(ResourceId.valueOf("XYZ123")); formClass.addElement(new FormField(fieldId).setType(new QuantityType("meters"))); JsonValue fields = Json.createObject(); fields.put("Q1", "41.3"); JsonValue change = createObject(); change.put("recordId", "A"); change.put("formId", "XYZ123"); change.put("fields", fields); TypedRecordUpdate update = Updater.parseChange(formClass, change, userId); assertThat(update.getChangedFieldValues().get(fieldId), equalTo((FieldValue)new Quantity(41.3))); }
@Test public void updateAdminEntity() throws JsonMappingException { RecordUpdate changeObject = new RecordUpdate(); changeObject.setRecordId(entity(21).asString()); changeObject.setFormId(adminLevelFormClass(2).asString()); changeObject.setFieldValue("name", "Nouveau Irumu"); Updater updater = updater(); updater.setEnforcePermissions(false); updater.executeChange(changeObject); query(adminLevelFormClass(2), "_id", "name"); assertThat(column("_id"), hasValues("z0000000010", "z0000000011", "z0000000012", "z0000000013", "z0000000021")); assertThat(column("name"), hasValues("Bukavu", "Walungu", "Shabunda", "Kalehe", "Nouveau Irumu")); }
public void execute(TypedFormRecord typedFormRecord) { RecordTransaction tx = new RecordTransactionBuilder() .create(typedFormRecord) .build(); execute(tx); }
@Override public Promise<Void> updateRecord(String formId, String recordId, FormRecordUpdateBuilder query) { try { FormStorageProvider catalog = newCatalog(); Updater updater = new Updater(catalog, databaseProvider, blobAuthorizer, new SerialNumberProviderStub(), currentUserId()); updater.execute(ResourceId.valueOf(formId), ResourceId.valueOf(recordId), query.toJsonObject()); return Promise.resolved(null); } catch (Exception e) { return Promise.rejected(e); } }
@Test public void deleteSite() { RecordUpdate changeObject = new RecordUpdate(); changeObject.setRecordId("s0000000001"); changeObject.setFormId(activityFormClass(1).asString()); changeObject.setDeleted(true); Updater updater = updater(); updater.executeChange(changeObject); newRequest(); query(activityFormClass(1), "_id"); assertThat(column("_id"), hasValues("s0000000002", "s0000000003")); }
@Test public void validQuantity() throws JsonMappingException { ResourceId fieldId = ResourceId.valueOf("Q1"); FormClass formClass = new FormClass(ResourceId.valueOf("XYZ123")); formClass.addElement(new FormField(fieldId).setType(new QuantityType("meters"))); JsonValue fields = createObject(); fields.put("Q1", 41.3); JsonValue change = createObject(); change.put("recordId", "A"); change.put("formId", "XYZ123"); change.put("fields", fields); TypedRecordUpdate update = Updater.parseChange(formClass, change, userId); assertThat(update.getChangedFieldValues().get(fieldId), equalTo((FieldValue)new Quantity(41.3))); }
private void executeUpdate(TypedFormRecord creation) { Updater updater = updater(); updater.execute(creation); }