use of org.activityinfo.store.hrd.entity.FormEntity in project activityinfo by bedatadriven.
the class FixSubForm method maybeFixForm.
private boolean maybeFixForm(PrintWriter logger, FormClass parentForm, FormField formField) {
SubFormReferenceType type = (SubFormReferenceType) formField.getType();
ResourceId subFormId = type.getClassId();
logger.println("Found subform " + formField.getLabel() + "(" + subFormId + ")");
ResourceId parentFormId = parentForm.getId();
FormSchemaEntity schemaEntity = Hrd.ofy().load().key(FormSchemaEntity.key(subFormId)).now();
if (schemaEntity == null) {
logger.println("Subform " + subFormId + " does not exist!!");
return false;
}
FormClass schema = schemaEntity.readFormClass();
if (schema.getParentFormId().get().equals(parentFormId)) {
logger.println("Parent is OK");
return false;
}
FormEntity root = Hrd.ofy().load().key(FormEntity.key(subFormId)).now();
logger.println("At version " + root.getVersion());
// Generate new subform id..
ResourceId newSubFormId = ResourceId.generateId();
schema.setId(newSubFormId);
schema.setParentFormId(parentFormId);
logger.println("Creating copy of subform => " + newSubFormId);
if (!DRY_RUN) {
new CreateOrUpdateForm(schema).run();
}
// Now find all records and update their schema
copyRecords(logger, parentFormId, subFormId, newSubFormId);
copySnapshots(logger, parentFormId, subFormId, newSubFormId);
// Update the root entity to match version numbers
FormEntity newRoot = new FormEntity();
newRoot.setId(newSubFormId);
newRoot.setVersion(root.getVersion());
newRoot.setSchemaVersion(root.getSchemaVersion());
if (!DRY_RUN) {
Hrd.ofy().save().entity(newRoot);
}
// Finally update the MySQL parent
formField.setType(new SubFormReferenceType(newSubFormId));
return true;
}
use of org.activityinfo.store.hrd.entity.FormEntity in project activityinfo by bedatadriven.
the class ProjectMigrator method map.
@Override
public void map(final Integer databaseId) {
try (MySqlQueryExecutor executor = new MySqlQueryExecutor()) {
ProjectTable table = new ProjectTable(new DatabaseCacheImpl(executor));
final TableMapping mapping = table.getMapping(executor, CuidAdapter.projectFormClass(databaseId));
final ResourceId formId = mapping.getFormClass().getId();
Hrd.run(new Work<Void>() {
@Override
public Void run() {
RecordCursor recordBuilder = new RecordCursor(mapping, executor);
Iterator<FormInstance> it = recordBuilder.execute();
// Only create if there is one or more projects....
if (!it.hasNext()) {
return null;
}
final List<Object> toSave = new ArrayList<>();
FormEntity formEntity = new FormEntity();
formEntity.setId(formId);
formEntity.setSchemaVersion(1L);
formEntity.setVersion(mapping.getVersion());
toSave.add(formEntity);
FormSchemaEntity schemaEntity = new FormSchemaEntity(mapping.getFormClass());
schemaEntity.setSchemaVersion(1L);
schemaEntity.setSchema(mapping.getFormClass());
toSave.add(schemaEntity);
Date updateTime = new Date();
long userId = -1L;
while (it.hasNext()) {
FormInstance record = it.next();
FormRecordEntity recordEntity = new FormRecordEntity(formId, record.getId());
recordEntity.setFieldValues(mapping.getFormClass(), record.getFieldValueMap());
recordEntity.setSchemaVersion(1L);
recordEntity.setVersion(1L);
FormRecordSnapshotEntity snapshot = new FormRecordSnapshotEntity(userId, RecordChangeType.CREATED, recordEntity);
snapshot.setTime(updateTime);
snapshot.setMigrated(true);
toSave.add(record);
toSave.add(snapshot);
}
Hrd.ofy().save().entities(toSave).now();
return null;
}
});
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
Aggregations