use of io.takari.bpm.form.FormValidator in project concord by walmartlabs.
the class FormServiceV1 method submit.
public FormSubmitResult submit(ProcessKey processKey, String formName, Map<String, Object> data) {
Form form = get(processKey, formName);
if (form == null) {
throw new ProcessException(processKey, "Form not found: " + formName);
}
ResumeHandler resumeHandler = (f, args) -> {
String resource = path(Constants.Files.JOB_ATTACHMENTS_DIR_NAME, Constants.Files.JOB_STATE_DIR_NAME, Constants.Files.JOB_FORMS_DIR_NAME, formName);
stateManager.deleteFile(processKey, resource);
@SuppressWarnings("unchecked") Map<String, Object> clearedData = (Map<String, Object>) args.get(f.getFormDefinition().getName());
args.put(f.getFormDefinition().getName(), clearedData);
// TODO refactor into the process manager
Map<String, Object> m = new HashMap<>();
m.put(Constants.Request.ARGUMENTS_KEY, args);
if (data != null) {
m.put(Constants.Files.FORM_FILES, data.remove(Constants.Files.FORM_FILES));
}
Map<String, Object> opts = f.getOptions();
Object runAs = opts != null ? opts.get(Constants.Forms.RUN_AS_KEY) : null;
if (runAs != null) {
m.put(INTERNAL_RUN_AS_KEY, runAs);
}
resume(processKey, f.getEventName(), m);
};
Map<String, Object> merged = merge(form, data);
// optionally save the user who submitted the form
boolean saveSubmittedBy = MapUtils.getBoolean(form.getOptions(), Constants.Forms.SAVE_SUBMITTED_BY_KEY, false);
if (saveSubmittedBy) {
UserInfo i = userManager.getCurrentUserInfo();
merged.put(Constants.Forms.SUBMITTED_BY_KEY, i);
}
try {
FormValidator validator = createFormValidator(processKey, formName);
return toResult(processKey, form, DefaultFormService.submit(resumeHandler, validator, form, merged));
} catch (ExecutionException e) {
throw new ProcessException(processKey, "Form submit error: " + e.getMessage(), e);
}
}
Aggregations