@Override public TypedFormRecord get() { ResourceId recordId = ids.recordId(schema.getId(), nextRecordIndex++); TypedFormRecord record = new TypedFormRecord(recordId, schema.getId()); for (Map.Entry<ResourceId, FieldValue> entry : ids.builtinValues().entrySet()) { record.set(entry.getKey(), entry.getValue()); } if(parentDistribution != null) { record.setParentRecordId(parentDistribution.get()); } for (Map.Entry<ResourceId, Supplier<FieldValue>> entry : generators.entrySet()) { record.set(entry.getKey(), entry.getValue().get()); } return record; } }
private TypedFormRecord newValueInstance() { TypedFormRecord newInstance = new TypedFormRecord(ResourceId.generateSubmissionId(subForm.getId()), subForm.getId()); newInstance.setParentRecordId(formModel.getWorkingRootInstance().getId()); FormModel.SubformValueKey key = key(); Set<TypedFormRecord> instances = formModel.getSubFormInstances().get(key); if (instances == null) { instances = Sets.newHashSet(); formModel.getSubFormInstances().put(key, instances); } instances.add(newInstance); formModel.getChangedInstances().add(newInstance); return newInstance; }
@Override public void update(TypedRecordUpdate update) { ensureWeHaveOwnCopy(); if(update.isDeleted()) { TypedFormRecord deleted = index.remove(update.getRecordId()); records.remove(deleted); } else if(!index.containsKey(update.getRecordId())) { // Create TypedFormRecord newRecord = new TypedFormRecord(update.getFormId(), update.getFormId()); newRecord.setParentRecordId(update.getParentId()); newRecord.setAll(update.getChangedFieldValues()); records.add(newRecord); } else { // Update throw new UnsupportedOperationException(); } version++; }
public Optional<TypedFormRecord> getWorkingInstance(ResourceId formFieldId, String keyId) { FormClass classByField = getClassByField(formFieldId); if (classByField.equals(rootFormClass)) { return Optional.of(getWorkingRootInstance()); } if (classByField.isSubForm()) { Optional<TypedFormRecord> valueInstance = getSubformValueInstance(classByField, getWorkingRootInstance(), keyId); if (valueInstance.isPresent()) { return valueInstance; } else { TypedFormRecord newInstance = new TypedFormRecord(ResourceId.generatedPeriodSubmissionId(getWorkingRootInstance().getId(), keyId), classByField.getId()); newInstance.setParentRecordId(getWorkingRootInstance().getId()); SubformValueKey valueKey = new SubformValueKey(classByField, getWorkingRootInstance()); Set<TypedFormRecord> allInstances = subFormInstances.get(valueKey); if (allInstances == null) { allInstances = Sets.newHashSet(); subFormInstances.put(valueKey, allInstances); } allInstances.add(newInstance); return Optional.of(newInstance); } } throw new RuntimeException("Failed to identify working instance for field: " + formFieldId + ", keyId: " + keyId); }
public static TypedFormRecord toTypedFormRecord(FormClass formClass, FormRecord record) { TypedFormRecord instance = new TypedFormRecord(ResourceId.valueOf(record.getRecordId()), formClass.getId()); if (record.getParentRecordId() != null) { instance.setParentRecordId(ResourceId.valueOf(record.getParentRecordId())); } JsonValue fieldsObject = record.getFields(); for (FormField field : formClass.getFields()) { if(fieldsObject.hasKey(field.getName())) { JsonValue fieldValue = fieldsObject.get(field.getName()); if (!fieldValue.isJsonNull()) { instance.set(field.getId(), field.getType().parseJsonValue(fieldValue)); } } } return instance; }