in core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java [500:661]
public <T extends TaskTO> T getTaskTO(final Task<?> task, final TaskUtils taskUtils, final boolean details) {
T taskTO = taskUtils.newTaskTO();
taskTO.setKey(task.getKey());
taskExecDAO.findLatestStarted(taskUtils.getType(), task).ifPresentOrElse(
latestExec -> {
taskTO.setLatestExecStatus(latestExec.getStatus());
taskTO.setStart(latestExec.getStart());
taskTO.setEnd(latestExec.getEnd());
taskTO.setLastExecutor(latestExec.getExecutor());
},
() -> taskTO.setLatestExecStatus(StringUtils.EMPTY));
if (details) {
task.getExecs().stream().
filter(Objects::nonNull).
forEach(execution -> taskTO.getExecutions().add(getExecTO(execution)));
}
switch (taskUtils.getType()) {
case PROPAGATION -> {
PropagationTask propagationTask = (PropagationTask) task;
PropagationTaskTO propagationTaskTO = (PropagationTaskTO) taskTO;
propagationTaskTO.setOperation(propagationTask.getOperation());
propagationTaskTO.setConnObjectKey(propagationTask.getConnObjectKey());
propagationTaskTO.setOldConnObjectKey(propagationTask.getOldConnObjectKey());
propagationTaskTO.setPropagationData(propagationTask.getSerializedPropagationData());
propagationTaskTO.setResource(propagationTask.getResource().getKey());
propagationTaskTO.setObjectClassName(propagationTask.getObjectClassName());
propagationTaskTO.setAnyTypeKind(propagationTask.getAnyTypeKind());
propagationTaskTO.setAnyType(propagationTask.getAnyType());
propagationTaskTO.setEntityKey(propagationTask.getEntityKey());
}
case SCHEDULED -> {
SchedTask schedTask = (SchedTask) task;
SchedTaskTO schedTaskTO = (SchedTaskTO) taskTO;
fill(schedTaskTO, schedTask);
}
case MACRO -> {
MacroTask macroTask = (MacroTask) task;
MacroTaskTO macroTaskTO = (MacroTaskTO) taskTO;
fill(macroTaskTO, macroTask);
macroTaskTO.setRealm(macroTask.getRealm().getFullPath());
macroTask.getCommands().forEach(mct -> macroTaskTO.getCommands().add(
new CommandTO.Builder(mct.getCommand().getKey()).args(mct.getArgs()).build()));
macroTaskTO.setContinueOnError(macroTask.isContinueOnError());
macroTaskTO.setSaveExecs(macroTask.isSaveExecs());
macroTask.getFormPropertyDefs().forEach(fpd -> {
FormPropertyDefTO fpdTO = new FormPropertyDefTO();
fpdTO.setKey(fpd.getKey());
fpdTO.setName(fpd.getName());
fpdTO.getLabels().putAll(fpd.getLabels());
fpdTO.setType(fpd.getType());
fpdTO.setReadable(fpd.isReadable());
fpdTO.setWritable(fpd.isWritable());
fpdTO.setRequired(fpd.isRequired());
fpdTO.setStringRegEx(fpd.getStringRegEx());
fpdTO.setDatePattern(fpd.getDatePattern());
fpdTO.getEnumValues().putAll(fpd.getEnumValues());
fpdTO.setDropdownSingleSelection(fpd.isDropdownSingleSelection());
fpdTO.setDropdownFreeForm(fpd.isDropdownFreeForm());
macroTaskTO.getFormPropertyDefs().add(fpdTO);
});
Optional.ofNullable(macroTask.getMacroActions()).
ifPresent(fv -> macroTaskTO.setMacroActions(fv.getKey()));
}
case LIVE_SYNC -> {
LiveSyncTask liveSyncTask = (LiveSyncTask) task;
LiveSyncTaskTO liveSyncTaskTO = (LiveSyncTaskTO) taskTO;
fill(liveSyncTaskTO, liveSyncTask);
liveSyncTaskTO.setDestinationRealm(liveSyncTask.getDestinationRealm().getFullPath());
liveSyncTaskTO.setMatchingRule(liveSyncTask.getMatchingRule() == null
? MatchingRule.UPDATE : liveSyncTask.getMatchingRule());
liveSyncTaskTO.setUnmatchingRule(liveSyncTask.getUnmatchingRule() == null
? UnmatchingRule.PROVISION : liveSyncTask.getUnmatchingRule());
liveSyncTaskTO.setDelaySecondsAcrossInvocations(liveSyncTask.getDelaySecondsAcrossInvocations());
liveSyncTaskTO.setLiveSyncDeltaMapper(liveSyncTask.getLiveSyncDeltaMapper().getKey());
liveSyncTask.getTemplates().
forEach(template -> liveSyncTaskTO.getTemplates().
put(template.getAnyType().getKey(), template.get()));
}
case PULL -> {
PullTask pullTask = (PullTask) task;
PullTaskTO pullTaskTO = (PullTaskTO) taskTO;
fill(pullTaskTO, pullTask);
pullTaskTO.setDestinationRealm(pullTask.getDestinationRealm().getFullPath());
pullTaskTO.setMatchingRule(pullTask.getMatchingRule() == null
? MatchingRule.UPDATE : pullTask.getMatchingRule());
pullTaskTO.setUnmatchingRule(pullTask.getUnmatchingRule() == null
? UnmatchingRule.PROVISION : pullTask.getUnmatchingRule());
pullTaskTO.setPullMode(pullTask.getPullMode());
Optional.ofNullable(pullTask.getReconFilterBuilder()).
ifPresent(rfb -> pullTaskTO.setReconFilterBuilder(rfb.getKey()));
pullTask.getTemplates().
forEach(template -> pullTaskTO.getTemplates().
put(template.getAnyType().getKey(), template.get()));
pullTaskTO.setRemediation(pullTask.isRemediation());
}
case PUSH -> {
PushTask pushTask = (PushTask) task;
PushTaskTO pushTaskTO = (PushTaskTO) taskTO;
fill(pushTaskTO, pushTask);
pushTaskTO.setSourceRealm(pushTask.getSourceRealm().getFullPath());
pushTaskTO.setMatchingRule(pushTask.getMatchingRule() == null
? MatchingRule.LINK : pushTask.getMatchingRule());
pushTaskTO.setUnmatchingRule(pushTask.getUnmatchingRule() == null
? UnmatchingRule.ASSIGN : pushTask.getUnmatchingRule());
pushTaskTO.getFilters().putAll(pushTask.getFilters());
}
case NOTIFICATION -> {
NotificationTask notificationTask = (NotificationTask) task;
NotificationTaskTO notificationTaskTO = (NotificationTaskTO) taskTO;
notificationTaskTO.setNotification(notificationTask.getNotification().getKey());
notificationTaskTO.setAnyTypeKind(notificationTask.getAnyTypeKind());
notificationTaskTO.setEntityKey(notificationTask.getEntityKey());
notificationTaskTO.setSender(notificationTask.getSender());
notificationTaskTO.getRecipients().addAll(notificationTask.getRecipients());
notificationTaskTO.setSubject(notificationTask.getSubject());
notificationTaskTO.setHtmlBody(notificationTask.getHtmlBody());
notificationTaskTO.setTextBody(notificationTask.getTextBody());
notificationTaskTO.setExecuted(notificationTask.isExecuted());
if (notificationTask.isExecuted() && StringUtils.isBlank(taskTO.getLatestExecStatus())) {
taskTO.setLatestExecStatus("[EXECUTED]");
}
notificationTaskTO.setTraceLevel(notificationTask.getTraceLevel());
}
default -> {
}
}
return taskTO;
}