use of com.walmartlabs.concord.server.process.ProcessException in project concord by walmartlabs.
the class FormFilesStoringProcessor method process.
@Override
@SuppressWarnings("unchecked")
public Payload process(Chain chain, Payload payload) {
ProcessKey processKey = payload.getProcessKey();
Map<String, Object> cfg = payload.getHeader(Payload.CONFIGURATION);
if (cfg == null) {
return chain.process(payload);
}
Map<String, String> formFiles = (Map<String, String>) cfg.get(Constants.Files.FORM_FILES);
if (formFiles == null) {
return chain.process(payload);
}
Path workspace = payload.getHeader(Payload.WORKSPACE_DIR);
try {
for (Map.Entry<String, String> e : formFiles.entrySet()) {
Path formFile = workspace.resolve(e.getKey());
Path tmpFile = Paths.get(e.getValue());
Path p = formFile.getParent();
if (!Files.exists(p)) {
Files.createDirectories(p);
}
Files.move(tmpFile, formFile, StandardCopyOption.REPLACE_EXISTING);
}
} catch (IOException e) {
logManager.error(processKey, "Error while saving form files", e);
throw new ProcessException(processKey, "Error while saving form files", e);
}
return chain.process(payload);
}
use of com.walmartlabs.concord.server.process.ProcessException in project concord by walmartlabs.
the class ResumeMarkerStoringProcessor method process.
@Override
public Payload process(Chain chain, Payload payload) {
ProcessKey processKey = payload.getProcessKey();
Set<String> events = payload.getHeader(Payload.RESUME_EVENTS, Collections.emptySet());
if (events.isEmpty()) {
return chain.process(payload);
}
Path workspace = payload.getHeader(Payload.WORKSPACE_DIR);
Path stateDir = workspace.resolve(Constants.Files.JOB_ATTACHMENTS_DIR_NAME).resolve(Constants.Files.JOB_STATE_DIR_NAME);
try {
if (!Files.exists(stateDir)) {
Files.createDirectories(stateDir);
}
Path resumeMarker = stateDir.resolve(Constants.Files.RESUME_MARKER_FILE_NAME);
Files.write(resumeMarker, events);
} catch (IOException e) {
logManager.error(processKey, "Error while saving resume event", e);
throw new ProcessException(processKey, "Error while saving resume event", e);
}
return chain.process(payload);
}
use of com.walmartlabs.concord.server.process.ProcessException 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);
}
}
use of com.walmartlabs.concord.server.process.ProcessException in project concord by walmartlabs.
the class FormServiceV2 method submit.
public FormSubmitResult submit(ProcessKey processKey, String formName, Map<String, Object> data) throws FormUtils.ValidationException {
Form form = get(processKey, formName);
if (form == null) {
throw new ProcessException(processKey, "Form not found: " + formName);
}
FormValidatorLocale locale = new ExternalFileFormValidatorLocaleV2(processKey, formName, stateManager);
data = new LinkedHashMap<>(FormUtils.convert(locale, form, data));
// optionally save the user who submitted the form
boolean saveSubmittedBy = form.options().saveSubmittedBy();
if (saveSubmittedBy) {
UserInfo i = userManager.getCurrentUserInfo();
data.put(Constants.Forms.SUBMITTED_BY_KEY, i);
}
try {
FormValidator validator = new DefaultFormValidator(locale);
List<ValidationError> errors = validator.validate(form, data);
if (errors != null && !errors.isEmpty()) {
return new FormSubmitResult(processKey.getInstanceId(), form.name(), errors);
}
// the new form's values will be available under the form's name key
Map<String, Object> args = new LinkedHashMap<>();
args.put(form.name(), new LinkedHashMap<>(data));
// TODO refactor into the process manager
Map<String, Object> m = new HashMap<>();
m.put(Constants.Request.ARGUMENTS_KEY, args);
m.put(Constants.Files.FORM_FILES, data.remove(Constants.Files.FORM_FILES));
Object runAs = form.options().runAs();
if (runAs != null) {
m.put(INTERNAL_RUN_AS_KEY, runAs);
}
resume(processKey, form.eventName(), formName, m);
return new FormSubmitResult(processKey.getInstanceId(), form.name(), null);
} catch (Exception e) {
throw new ProcessException(processKey, "Form submit error: " + e.getMessage(), e);
}
}
use of com.walmartlabs.concord.server.process.ProcessException in project concord by walmartlabs.
the class PolicyProcessor method process.
@Override
public Payload process(Chain chain, Payload payload) {
ProcessKey processKey = payload.getProcessKey();
PolicyEngine policy = payload.getHeader(Payload.POLICY);
if (policy == null) {
return chain.process(payload);
}
logManager.info(processKey, "Applying policies...");
try {
// TODO merge check results
for (PolicyApplier a : appliers) {
a.apply(payload, policy);
}
} catch (ProcessException e) {
throw e;
} catch (Exception e) {
logManager.error(processKey, "Error while applying policy '{}': {}", policy.policyNames(), e);
throw new ProcessException(processKey, "Policy '" + policy.policyNames() + "' error", e);
}
return chain.process(payload);
}
Aggregations