Search in sources :

Example 26 with Step

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());
}
Also used : EntityDefinition(org.openforis.idm.metamodel.EntityDefinition) CollectRecord(org.openforis.collect.model.CollectRecord) NodeChangeSet(org.openforis.collect.model.NodeChangeSet) ParsingError(org.openforis.collect.io.metadata.parsing.ParsingError) CollectRecordSummary(org.openforis.collect.model.CollectRecordSummary) Step(org.openforis.collect.model.CollectRecord.Step)

Example 27 with Step

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);
    }
}
Also used : CollectRecord(org.openforis.collect.model.CollectRecord) Step(org.openforis.collect.model.CollectRecord.Step)

Example 28 with Step

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);
}
Also used : ArrayList(java.util.ArrayList) Step(org.openforis.collect.model.CollectRecord.Step)

Example 29 with Step

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;
        }
    }
}
Also used : CollectRecordSummary(org.openforis.collect.model.CollectRecordSummary) Step(org.openforis.collect.model.CollectRecord.Step)

Example 30 with Step

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);
    }
}
Also used : CollectRecord(org.openforis.collect.model.CollectRecord) InputStreamReader(java.io.InputStreamReader) InputStream(java.io.InputStream) MainStep(org.openforis.collect.io.data.DataImportState.MainStep) SubStep(org.openforis.collect.io.data.DataImportState.SubStep) Step(org.openforis.collect.model.CollectRecord.Step) CollectStoreQuery(org.openforis.collect.persistence.jooq.JooqDaoSupport.CollectStoreQuery) CollectRecordSummary(org.openforis.collect.model.CollectRecordSummary) CollectSurvey(org.openforis.collect.model.CollectSurvey) ParseRecordResult(org.openforis.collect.persistence.xml.DataUnmarshaller.ParseRecordResult)

Aggregations

Step (org.openforis.collect.model.CollectRecord.Step)49 CollectRecord (org.openforis.collect.model.CollectRecord)24 CollectRecordSummary (org.openforis.collect.model.CollectRecordSummary)21 CollectSurvey (org.openforis.collect.model.CollectSurvey)11 ArrayList (java.util.ArrayList)9 RecordStep (org.openforis.collect.event.RecordStep)8 SessionState (org.openforis.collect.web.session.SessionState)8 StepSummary (org.openforis.collect.model.CollectRecordSummary.StepSummary)7 IOException (java.io.IOException)5 RecordFilter (org.openforis.collect.model.RecordFilter)5 NodeUnmarshallingError (org.openforis.collect.persistence.xml.NodeUnmarshallingError)5 MainStep (org.openforis.collect.io.data.DataImportState.MainStep)4 SubStep (org.openforis.collect.io.data.DataImportState.SubStep)4 User (org.openforis.collect.model.User)4 EntityDefinition (org.openforis.idm.metamodel.EntityDefinition)4 Schema (org.openforis.idm.metamodel.Schema)4 Date (java.util.Date)3 HashMap (java.util.HashMap)3 List (java.util.List)3 Secured (org.springframework.security.access.annotation.Secured)3