use of org.openforis.collect.model.CollectRecord.Step in project collect by openforis.
the class CSVDataImportProcess method processLine.
private void processLine(DataLine line) throws RecordPersistenceException {
if (!validateRecordKey(line)) {
return;
}
if (settings.isInsertNewRecords()) {
// create new record
EntityDefinition rootEntityDefn = survey.getSchema().getRootEntityDefinition(parentEntityDefinitionId);
CollectRecord record = recordManager.instantiateRecord(survey, rootEntityDefn.getName(), adminUser, settings.getNewRecordVersionName(), Step.ENTRY);
NodeChangeSet changes = recordManager.initializeRecord(record);
if (nodeChangeBatchProcessor != null) {
nodeChangeBatchProcessor.add(changes, adminUser.getUsername());
}
setRecordKeys(line, record);
setValuesInRecord(line, record, Step.ENTRY);
insertRecord(record);
} else {
CollectRecordSummary recordSummary = loadRecordSummaryIfAny(line);
if (recordSummary != null) {
Step originalRecordStep = recordSummary.getStep();
if (step == null) {
// set values in each step data
for (Step currentStep : Step.values()) {
if (currentStep.beforeEqual(originalRecordStep)) {
CollectRecord record = loadRecord(recordSummary.getId(), currentStep);
setValuesInRecord(line, record, currentStep);
// always save record when updating multiple record steps in the same process
updateRecord(record, originalRecordStep, currentStep);
}
}
} else {
if (step.beforeEqual(originalRecordStep)) {
CollectRecord record;
boolean recordChanged = lastModifiedRecordSummary == null || !recordSummary.getId().equals(lastModifiedRecordSummary.getId());
if (recordChanged) {
// record changed
if (lastModifiedRecordSummary != null) {
saveLastModifiedRecord();
}
record = loadRecord(recordSummary.getId(), this.step);
} else {
record = lastModifiedRecord;
}
setValuesInRecord(line, record, step);
lastModifiedRecordSummary = recordSummary;
lastModifiedRecord = record;
} else {
status.addParsingError(new ParsingError(ErrorType.INVALID_VALUE, line.getLineNumber(), (String) null, RECORD_NOT_IN_SELECTED_STEP_MESSAGE_KEY));
}
}
}
}
status.addProcessedRow(line.getLineNumber());
}
use of org.openforis.collect.model.CollectRecord.Step in project collect by openforis.
the class CSVDataImportProcess method saveLastModifiedRecord.
private void saveLastModifiedRecord() throws RecordPersistenceException {
Step originalStep = lastModifiedRecordSummary.getStep();
updateRecord(lastModifiedRecord, originalStep, step);
if (step.compareTo(originalStep) < 0) {
// reset record step to the original one
CollectRecord record = recordManager.load(survey, lastModifiedRecordSummary.getId(), originalStep, settings.isRecordValidationEnabled());
record.setStep(originalStep);
updateRecord(record, originalStep, originalStep);
}
}
use of org.openforis.collect.model.CollectRecord.Step in project collect by openforis.
the class DataBackupTask method writeSummaryEntry.
private void writeSummaryEntry(CollectRecordSummary summary) {
Step lastStep = null;
for (Step step : steps) {
if (step.getStepNumber() <= summary.getStep().getStepNumber()) {
lastStep = step;
}
}
List<String> values = new ArrayList<String>(Arrays.asList(String.valueOf(summary.getId()), summary.getRootEntityDefinitionId().toString(), lastStep.name(), Dates.formatDateTime(summary.getCreationDate()), summary.getCreatedBy() == null ? "" : summary.getCreatedBy().getUsername(), Dates.formatDateTime(summary.getModifiedDate()), summary.getModifiedBy() == null ? "" : summary.getModifiedBy().getUsername()));
values.addAll(summary.getRootEntityKeyValues());
summaryCSVWriter.writeNext(values);
}
use of org.openforis.collect.model.CollectRecord.Step in project collect by openforis.
the class XMLDataExportProcess method backup.
private void backup(ZipOutputStream zipOutputStream, List<CollectRecordSummary> recordSummaries) {
int total = calculateTotal(recordSummaries);
status.setTotal(total);
if (includeIdm) {
includeIdml(zipOutputStream);
}
for (CollectRecordSummary summary : recordSummaries) {
if (status.isRunning()) {
int recordStepNumber = summary.getStep().getStepNumber();
for (Step step : steps) {
int stepNum = step.getStepNumber();
if (stepNum <= recordStepNumber) {
backup(zipOutputStream, summary, Step.valueOf(stepNum));
status.incrementProcessed();
}
}
} else {
break;
}
}
}
use of org.openforis.collect.model.CollectRecord.Step in project collect by openforis.
the class XMLDataImportProcess method importEntries.
private void importEntries(int recordId) throws IOException, DataImportExeption, RecordPersistenceException {
CollectRecord lastProcessedRecord = null;
Step originalRecordStep = null;
Step[] steps = Step.values();
for (Step step : steps) {
RecordEntry recordEntry = new RecordEntry(step, recordId);
String entryName = recordEntry.getName();
InputStream inputStream = backupFileExtractor.findEntryInputStream(entryName);
if (inputStream != null) {
InputStreamReader reader = OpenForisIOUtils.toReader(inputStream);
ParseRecordResult parseRecordResult = parseRecord(reader, validateRecords);
CollectRecord parsedRecord = parseRecordResult.getRecord();
if (parsedRecord == null) {
String message = parseRecordResult.getMessage();
state.addError(entryName, message);
} else {
parsedRecord.setStep(step);
List<CollectStoreQuery> queries;
if (lastProcessedRecord == null) {
CollectRecordSummary oldRecordSummary = findAlreadyExistingRecordSummary(parsedRecord);
if (oldRecordSummary != null) {
// overwrite existing record
originalRecordStep = oldRecordSummary.getStep();
parsedRecord.setId(oldRecordSummary.getId());
if (includesRecordFiles) {
recordFileManager.deleteAllFiles(parsedRecord);
}
int newWorkflowSequenceNumber = oldRecordSummary.getWorkflowSequenceNumber() + (step.getStepNumber() - originalRecordStep.getStepNumber());
parsedRecord.setDataWorkflowSequenceNumber(newWorkflowSequenceNumber);
parsedRecord.setWorkflowSequenceNumber(newWorkflowSequenceNumber);
if (step.after(originalRecordStep)) {
queries = Arrays.asList(recordManager.createDataInsertQuery(parsedRecord, oldRecordSummary.getId(), step, newWorkflowSequenceNumber));
} else {
queries = Arrays.asList(recordManager.createDataUpdateQuery(parsedRecord, oldRecordSummary.getId(), step, newWorkflowSequenceNumber));
}
} else {
parsedRecord.setId(nextRecordId++);
queries = recordManager.createNewRecordInsertQueries(parsedRecord);
}
lastProcessedRecord = parsedRecord;
} else {
replaceData(parsedRecord, lastProcessedRecord);
int sequenceNumber = parsedRecord.getWorkflowSequenceNumber() + 1;
parsedRecord.setDataWorkflowSequenceNumber(sequenceNumber);
if (step.after(originalRecordStep)) {
queries = Arrays.asList(recordManager.createDataInsertQuery(lastProcessedRecord, lastProcessedRecord.getId(), step, sequenceNumber));
} else {
queries = Arrays.asList(recordManager.createDataUpdateQuery(lastProcessedRecord, lastProcessedRecord.getId(), step, sequenceNumber));
}
}
appendQueries(queries);
// if ( parseRecordResult.hasWarnings() ) {
// state.addWarnings(entryName, parseRecordResult.getWarnings());
// }
}
}
}
if (lastProcessedRecord != null && originalRecordStep != null && originalRecordStep.compareTo(lastProcessedRecord.getStep()) > 0) {
// reset the step to the original one and revalidate the record
CollectSurvey survey = (CollectSurvey) lastProcessedRecord.getSurvey();
CollectRecord originalRecord = recordManager.load(survey, lastProcessedRecord.getId(), originalRecordStep, validateRecords);
originalRecord.setStep(originalRecordStep);
afterRecordUpdate(originalRecord);
appendQuery(recordManager.createSummaryUpdateQuery(originalRecord));
}
if (includesRecordFiles) {
importRecordFiles(lastProcessedRecord);
}
}
Aggregations