use of org.apache.syncope.core.persistence.api.entity.task.PullTask in project syncope by apache.
the class TaskDataBinderImpl method fill.
private void fill(final ProvisioningTask task, final ProvisioningTaskTO taskTO) {
if (task instanceof PushTask && taskTO instanceof PushTaskTO) {
PushTask pushTask = (PushTask) task;
PushTaskTO pushTaskTO = (PushTaskTO) taskTO;
Implementation jobDelegate = pushTaskTO.getJobDelegate() == null ? implementationDAO.find(ImplementationType.TASKJOB_DELEGATE).stream().filter(impl -> PushJobDelegate.class.getName().equals(impl.getBody())).findFirst().orElse(null) : implementationDAO.find(pushTaskTO.getJobDelegate());
if (jobDelegate == null) {
jobDelegate = entityFactory.newEntity(Implementation.class);
jobDelegate.setKey(PushJobDelegate.class.getSimpleName());
jobDelegate.setEngine(ImplementationEngine.JAVA);
jobDelegate.setType(ImplementationType.TASKJOB_DELEGATE);
jobDelegate.setBody(PushJobDelegate.class.getName());
jobDelegate = implementationDAO.save(jobDelegate);
}
pushTask.setJobDelegate(jobDelegate);
pushTask.setSourceRealm(realmDAO.findByFullPath(pushTaskTO.getSourceRealm()));
pushTask.setMatchingRule(pushTaskTO.getMatchingRule() == null ? MatchingRule.LINK : pushTaskTO.getMatchingRule());
pushTask.setUnmatchingRule(pushTaskTO.getUnmatchingRule() == null ? UnmatchingRule.ASSIGN : pushTaskTO.getUnmatchingRule());
pushTaskTO.getFilters().forEach((type, fiql) -> {
AnyType anyType = anyTypeDAO.find(type);
if (anyType == null) {
LOG.debug("Invalid AnyType {} specified, ignoring...", type);
} else {
PushTaskAnyFilter filter = pushTask.getFilter(anyType).orElse(null);
if (filter == null) {
filter = entityFactory.newEntity(PushTaskAnyFilter.class);
filter.setAnyType(anyType);
filter.setPushTask(pushTask);
pushTask.add(filter);
}
filter.setFIQLCond(fiql);
}
});
// remove all filters not contained in the TO
pushTask.getFilters().removeIf(anyFilter -> !pushTaskTO.getFilters().containsKey(anyFilter.getAnyType().getKey()));
} else if (task instanceof PullTask && taskTO instanceof PullTaskTO) {
PullTask pullTask = (PullTask) task;
PullTaskTO pullTaskTO = (PullTaskTO) taskTO;
Implementation jobDelegate = pullTaskTO.getJobDelegate() == null ? implementationDAO.find(ImplementationType.TASKJOB_DELEGATE).stream().filter(impl -> PullJobDelegate.class.getName().equals(impl.getBody())).findFirst().orElse(null) : implementationDAO.find(pullTaskTO.getJobDelegate());
if (jobDelegate == null) {
jobDelegate = entityFactory.newEntity(Implementation.class);
jobDelegate.setKey(PullJobDelegate.class.getSimpleName());
jobDelegate.setEngine(ImplementationEngine.JAVA);
jobDelegate.setType(ImplementationType.TASKJOB_DELEGATE);
jobDelegate.setBody(PullJobDelegate.class.getName());
jobDelegate = implementationDAO.save(jobDelegate);
}
pullTask.setJobDelegate(jobDelegate);
pullTask.setPullMode(pullTaskTO.getPullMode());
if (pullTaskTO.getReconFilterBuilder() == null) {
pullTask.setReconFilterBuilder(null);
} else {
Implementation reconFilterBuilder = implementationDAO.find(pullTaskTO.getReconFilterBuilder());
if (reconFilterBuilder == null) {
LOG.debug("Invalid " + Implementation.class.getSimpleName() + " {}, ignoring...", pullTaskTO.getReconFilterBuilder());
} else {
pullTask.setReconFilterBuilder(reconFilterBuilder);
}
}
pullTask.setDestinationRealm(realmDAO.findByFullPath(pullTaskTO.getDestinationRealm()));
pullTask.setMatchingRule(pullTaskTO.getMatchingRule() == null ? MatchingRule.UPDATE : pullTaskTO.getMatchingRule());
pullTask.setUnmatchingRule(pullTaskTO.getUnmatchingRule() == null ? UnmatchingRule.PROVISION : pullTaskTO.getUnmatchingRule());
// validate JEXL expressions from templates and proceed if fine
templateUtils.check(pullTaskTO.getTemplates(), ClientExceptionType.InvalidPullTask);
pullTaskTO.getTemplates().forEach((type, template) -> {
AnyType anyType = anyTypeDAO.find(type);
if (anyType == null) {
LOG.debug("Invalid AnyType {} specified, ignoring...", type);
} else {
AnyTemplatePullTask anyTemplate = pullTask.getTemplate(anyType).orElse(null);
if (anyTemplate == null) {
anyTemplate = entityFactory.newEntity(AnyTemplatePullTask.class);
anyTemplate.setAnyType(anyType);
anyTemplate.setPullTask(pullTask);
pullTask.add(anyTemplate);
}
anyTemplate.set(template);
}
});
// remove all templates not contained in the TO
pullTask.getTemplates().removeIf(anyTemplate -> !pullTaskTO.getTemplates().containsKey(anyTemplate.getAnyType().getKey()));
pullTask.setRemediation(pullTaskTO.isRemediation());
}
// 3. fill the remaining fields
task.setPerformCreate(taskTO.isPerformCreate());
task.setPerformUpdate(taskTO.isPerformUpdate());
task.setPerformDelete(taskTO.isPerformDelete());
task.setSyncStatus(taskTO.isSyncStatus());
taskTO.getActions().forEach(action -> {
Implementation implementation = implementationDAO.find(action);
if (implementation == null) {
LOG.debug("Invalid " + Implementation.class.getSimpleName() + " {}, ignoring...", action);
} else {
task.add(implementation);
}
});
// remove all implementations not contained in the TO
task.getActions().removeIf(implementation -> !taskTO.getActions().contains(implementation.getKey()));
}
use of org.apache.syncope.core.persistence.api.entity.task.PullTask in project syncope by apache.
the class TaskTest method addPullTaskExecution.
@Test
public void addPullTaskExecution() {
PullTask task = taskDAO.find("c41b9b71-9bfa-4f90-89f2-84787def4c5c");
assertNotNull(task);
int executionNumber = task.getExecs().size();
TaskExec execution = entityFactory.newEntity(TaskExec.class);
execution.setStatus("Text-free status");
execution.setTask(task);
execution.setStart(new Date());
execution.setMessage("A message");
task.add(execution);
taskDAO.save(task);
taskDAO.flush();
task = taskDAO.find("c41b9b71-9bfa-4f90-89f2-84787def4c5c");
assertNotNull(task);
assertEquals(executionNumber + 1, task.getExecs().size());
}
use of org.apache.syncope.core.persistence.api.entity.task.PullTask in project syncope by apache.
the class TaskTest method savePullTask.
@Test
public void savePullTask() {
ExternalResource resource = resourceDAO.find("ws-target-resource-1");
assertNotNull(resource);
AnyTemplatePullTask template = entityFactory.newEntity(AnyTemplatePullTask.class);
template.set(new UserTO());
PullTask task = entityFactory.newEntity(PullTask.class);
task.setName("savePullTask");
task.setDescription("PullTask description");
task.setActive(true);
task.setPullMode(PullMode.FULL_RECONCILIATION);
task.add(template);
task.setCronExpression("BLA BLA");
task.setMatchingRule(MatchingRule.UPDATE);
task.setUnmatchingRule(UnmatchingRule.PROVISION);
// this save() fails because of an invalid Cron Expression
InvalidEntityException exception = null;
try {
taskDAO.save(task);
} catch (InvalidEntityException e) {
exception = e;
}
assertNotNull(exception);
task.setCronExpression(null);
// this save() fails because a PullTask requires a target resource
exception = null;
try {
taskDAO.save(task);
} catch (InvalidEntityException e) {
exception = e;
}
assertNotNull(exception);
task.setResource(resource);
Implementation pullActions = entityFactory.newEntity(Implementation.class);
pullActions.setKey("PullActions" + UUID.randomUUID().toString());
pullActions.setEngine(ImplementationEngine.JAVA);
pullActions.setType(ImplementationType.PULL_ACTIONS);
pullActions.setBody(PullActions.class.getName());
pullActions = implementationDAO.save(pullActions);
task.add(pullActions);
// this save() finally works
task = taskDAO.save(task);
assertNotNull(task);
PullTask actual = taskDAO.find(task.getKey());
assertEquals(task, actual);
}
Aggregations