use of org.openforis.collect.model.CollectRecord.Step in project collect by openforis.
the class ValidationController method validateAllRecords.
@RequestMapping(value = "/validateAllRecords.htm", method = RequestMethod.GET)
public void validateAllRecords(HttpServletRequest request, HttpServletResponse response, @RequestParam String s, @RequestParam String r) throws IOException {
final ServletOutputStream outputStream = response.getOutputStream();
try {
if (s == null || r == null) {
outputStream.println("Wrong parameters: please specify 's' (survey) and 'r' (root entity name).");
return;
}
SessionState sessionState = getSessionState(request);
final User user = sessionState.getUser();
final String sessionId = sessionState.getSessionId();
print(outputStream, "Starting validation of all records: ");
final CollectSurvey survey = surveyManager.get(s);
if (survey == null) {
print(outputStream, "Survey not found");
return;
}
RecordFilter filter = new RecordFilter(survey);
filter.setRootEntityId(survey.getSchema().getRootEntityDefinition(r).getId());
final ValidationMessageBuilder validationMessageHelper = ValidationMessageBuilder.createInstance(messageContextHolder);
recordManager.visitSummaries(filter, null, new Visitor<CollectRecordSummary>() {
public void visit(CollectRecordSummary summary) {
try {
String recordKey = validationMessageHelper.getRecordKey(summary);
long start = System.currentTimeMillis();
print(outputStream, "Start validating record: " + recordKey);
Integer id = summary.getId();
Step step = summary.getStep();
recordManager.validateAndSave(survey, user, sessionId, id, step);
long elapsedMillis = System.currentTimeMillis() - start;
print(outputStream, "Validation of record " + recordKey + " completed in " + elapsedMillis + " millis");
} catch (Exception e) {
try {
String message = "ERROR validating record " + summary.getId();
outputStream.println(message);
LOG.error(message);
} catch (IOException e1) {
}
}
}
});
print(outputStream, "End of validation of all records.");
} catch (Exception e) {
outputStream.println("ERROR - Validation of records not completed: " + e.getMessage());
LOG.error(e.getMessage(), e);
throw new RuntimeException(e);
}
}
use of org.openforis.collect.model.CollectRecord.Step in project collect by openforis.
the class RecordManager method performPromote.
private void performPromote(CollectRecord record, User user) {
/**
* 1. clear node states
* 2. update record step
* 3. update all validation states
*/
Date now = new Date();
record.setModifiedBy(user);
record.setModifiedDate(now);
record.setDataCreatedBy(user);
record.setDataCreationDate(now);
record.setDataModifiedBy(user);
record.setDataModifiedDate(now);
record.setState(null);
record.clearNodeStates();
// change step and update the record
Step currentStep = record.getStep();
Step nextStep = currentStep.getNext();
if (accessControlManager.isOwnerToBeResetAfterPromoting(user, currentStep)) {
record.setOwner(null);
}
record.setStep(nextStep);
int workflowSequenceNumber = record.getDataWorkflowSequenceNumber() + 1;
record.setDataWorkflowSequenceNumber(workflowSequenceNumber);
record.setWorkflowSequenceNumber(workflowSequenceNumber);
validate(record);
recordDao.execute(Arrays.asList(recordDao.createRecordDataInsertQuery(record, record.getId(), nextStep, workflowSequenceNumber), recordDao.createSummaryUpdateQuery(record)));
}
use of org.openforis.collect.model.CollectRecord.Step in project collect by openforis.
the class RecordManager method demote.
@Transactional(readOnly = false, propagation = REQUIRED)
public CollectRecord demote(CollectSurvey survey, int recordId, Step currentStep, User user) throws RecordPersistenceException {
Step prevStep = currentStep.getPrevious();
recordDao.updateStepDataState(survey, recordId, currentStep, State.REJECTED);
Step newStep = recordDao.duplicateLatestNotRejectedStepData(survey, recordId, prevStep);
if (newStep != prevStep) {
throw new IllegalStateException(String.format("Unexpected step after demote: expected %s found %s", prevStep, newStep));
}
CollectRecord record = recordDao.load(survey, recordId, prevStep);
loadDetachedObjects(record);
record.setModifiedBy(user);
record.setModifiedDate(new Date());
record.setStep(prevStep);
record.setOwner(user);
record.setState(State.REJECTED);
validate(record);
recordDao.updateSummary(record);
return record;
}
use of org.openforis.collect.model.CollectRecord.Step in project collect by openforis.
the class RecordValidationProcess method startProcessing.
@Override
@Transactional(propagation = Propagation.SUPPORTS)
public void startProcessing() throws Exception {
super.startProcessing();
validateParameters();
status.setTotal(recordManager.countRecords(new RecordFilter(survey)));
Schema schema = survey.getSchema();
List<EntityDefinition> rootEntities = schema.getRootEntityDefinitions();
for (EntityDefinition rootEntityDef : rootEntities) {
RecordFilter filter = new RecordFilter(survey, rootEntityDef.getId());
List<CollectRecordSummary> summaries = recordManager.loadSummaries(filter);
for (CollectRecordSummary summary : summaries) {
// print(outputStream, "Start validating record: " + recordKey);
if (status.isRunning()) {
Step step = summary.getStep();
Integer recordId = summary.getId();
recordManager.validateAndSave(survey, user, sessionId, recordId, step);
status.incrementProcessed();
// long elapsedMillis = System.currentTimeMillis() - start;
// print(outputStream, "Validation of record " + recordKey + " completed in " + elapsedMillis + " millis");
}
}
}
if (status.isRunning()) {
status.complete();
}
}
use of org.openforis.collect.model.CollectRecord.Step in project collect by openforis.
the class CSVDataExportProcess method exportData.
// private String calculateOutputFileName() {
// return "data.zip";
// /*
// StringBuilder sb = new StringBuilder();
// sb.append(survey.getName());
// sb.append("_");
// sb.append(rootEntityName);
// sb.append("_");
// sb.append("csv_data");
// SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
// String today = formatter.format(new Date());
// sb.append(today);
// sb.append(".zip");
// return sb.toString();
// */
// }
private void exportData(OutputStream outputStream, int entityDefId) throws InvalidExpressionException, IOException, RecordPersistenceException {
Writer outputWriter = new OutputStreamWriter(outputStream, OpenForisIOUtils.UTF_8);
CSVDataExportColumnProviderGenerator csvDataExportColumnProviderGenerator = new CSVDataExportColumnProviderGenerator(recordFilter.getSurvey(), configuration);
DataTransformation transform = csvDataExportColumnProviderGenerator.generateDataTransformation(entityDefId);
@SuppressWarnings("resource") ModelCsvWriter // closing modelWriter will close referenced output stream
modelWriter = new ModelCsvWriter(outputWriter, transform);
modelWriter.printColumnHeadings();
CollectSurvey survey = recordFilter.getSurvey();
Step step = recordFilter.getStepGreaterOrEqual();
List<CollectRecordSummary> summaries = recordManager.loadSummaries(recordFilter);
for (CollectRecordSummary s : summaries) {
if (status.isRunning()) {
try {
CollectRecord record = recordManager.load(survey, s.getId(), step, false);
modelWriter.printData(record);
} catch (Exception e) {
LOG.error(e.getMessage(), e);
}
status.incrementProcessed();
} else {
break;
}
}
modelWriter.flush();
}
Aggregations