use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.
the class DefaultSchedulerManagerIntegrationTest method testCreateTask.
@Test
public void testCreateTask() {
String result = "TEST_SCHEDULER_ONE";
Task task = createTask(result);
//
assertNotNull(task.getId());
assertEquals(task.getId(), manager.getTask(task.getId()).getId());
//
manager.deleteTask(task.getId());
//
assertNull(manager.getTask(task.getId()));
}
use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.
the class ContractSynchronizationExecutor method findTask.
/**
* Find quartz task for given task type. If existed more then one task for same
* type, then is using that with name "Default". If none with this name exists,
* then is used first.
*
* @param taskType
* @return
*/
private Task findTask(Class<? extends SchedulableTaskExecutor<?>> taskType) {
List<Task> tasks = schedulerService.getAllTasksByType(taskType);
if (tasks.size() == 1) {
return tasks.get(0);
}
if (tasks.isEmpty()) {
return null;
}
Task defaultTask = tasks.stream().filter(task -> {
return task.getDescription().equals(DEFAULT_TASK);
}).findFirst().orElse(null);
if (defaultTask != null) {
return defaultTask;
}
return tasks.get(0);
}
use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.
the class ContractSynchronizationExecutor method save.
/**
* Save entity
*
* @param entity
* @param skipProvisioning
* @return
*/
@Override
protected IdmIdentityContractDto save(IdmIdentityContractDto entity, boolean skipProvisioning) {
if (entity.getIdentity() == null) {
throw new ProvisioningException(AccResultCode.SYNCHRONIZATION_IDM_FIELD_CANNOT_BE_NULL, ImmutableMap.of("property", CONTRACT_IDENTITY_FIELD));
}
EntityEvent<IdmIdentityContractDto> event = new IdentityContractEvent(contractService.isNew(entity) ? IdentityContractEventType.CREATE : IdentityContractEventType.UPDATE, entity, ImmutableMap.of(ProvisioningService.SKIP_PROVISIONING, skipProvisioning));
// We do not want execute HR processes for every contract. We need start
// them for every identity only once.
// For this we skip them now. HR processes must be start after whole
// sync finished (by using dependent scheduled task)!
event.getProperties().put(IdmIdentityContractService.SKIP_HR_PROCESSES, Boolean.TRUE);
//
// We don't want recalculate automatic role by attribute recalculation for every contract.
// Recalculation will be started only once.
event.getProperties().put(IdmAutomaticRoleAttributeService.SKIP_RECALCULATION, Boolean.TRUE);
IdmIdentityContractDto contract = contractService.publish(event).getContent();
if (entity.getEmbedded().containsKey(SYNC_CONTRACT_FIELD)) {
SyncIdentityContractDto syncContract = (SyncIdentityContractDto) entity.getEmbedded().get(SYNC_CONTRACT_FIELD);
IdmContractGuaranteeFilter guaranteeFilter = new IdmContractGuaranteeFilter();
guaranteeFilter.setIdentityContractId(contract.getId());
List<IdmContractGuaranteeDto> currentGuarantees = guaranteeService.find(guaranteeFilter, null).getContent();
// Search guarantees to delete
List<IdmContractGuaranteeDto> guaranteesToDelete = currentGuarantees.stream().filter(sysImplementer -> {
return sysImplementer.getGuarantee() != null && !syncContract.getGuarantees().contains(new IdmIdentityDto(sysImplementer.getGuarantee()));
}).collect(Collectors.toList());
// Search guarantees to add
List<IdmIdentityDto> guaranteesToAdd = syncContract.getGuarantees().stream().filter(identity -> {
return !currentGuarantees.stream().filter(currentGuarrantee -> {
return identity.getId().equals(currentGuarrantee.getGuarantee());
}).findFirst().isPresent();
}).collect(Collectors.toList());
// Delete guarantees
guaranteesToDelete.forEach(guarantee -> {
EntityEvent<IdmContractGuaranteeDto> guaranteeEvent = new ContractGuaranteeEvent(ContractGuaranteeEventType.DELETE, guarantee, ImmutableMap.of(ProvisioningService.SKIP_PROVISIONING, skipProvisioning));
guaranteeService.publish(guaranteeEvent);
});
// Create new guarantees
guaranteesToAdd.forEach(identity -> {
IdmContractGuaranteeDto guarantee = new IdmContractGuaranteeDto();
guarantee.setIdentityContract(contract.getId());
guarantee.setGuarantee(identity.getId());
//
EntityEvent<IdmContractGuaranteeDto> guaranteeEvent = new ContractGuaranteeEvent(ContractGuaranteeEventType.CREATE, guarantee, ImmutableMap.of(ProvisioningService.SKIP_PROVISIONING, skipProvisioning));
guaranteeService.publish(guaranteeEvent);
});
}
return contract;
}
use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.
the class AbstractScheduledTaskInitializer method typeToTask.
/**
* Transform {@link IdmScheduledTaskType} to {@link Task}.
*
* @param type
* @return
* @throws ClassNotFoundException
*/
private Task typeToTask(IdmScheduledTaskType type) throws ClassNotFoundException {
Task task = new Task();
task.setDescription(type.getDescription());
// TODO: module attribute not working in Task
task.setModule(getModule());
task.setInstanceId(type.getInstanceId());
@SuppressWarnings("unchecked") Class<? extends SchedulableTaskExecutor<?>> classType = (Class<? extends SchedulableTaskExecutor<?>>) Class.forName(type.getTaskType());
task.setTaskType(classType);
// parameters
if (type.getParameters() != null && type.getParameters().getParameters() != null) {
Map<String, String> parameters = new HashMap<>();
for (IdmScheduledTaskParameterType param : type.getParameters().getParameters()) {
parameters.put(param.getKey(), param.getValue());
}
if (!parameters.isEmpty()) {
task.setParameters(parameters);
}
}
return task;
}
use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.
the class DefaultSchedulerManager method getTask.
/**
* Returns task by given key
*
* @param jobKey
* @return
*/
@SuppressWarnings("unchecked")
private Task getTask(JobKey jobKey) {
try {
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
if (jobDetail == null) {
// job does not exists
return null;
}
Task task = new Task();
// task setting
task.setId(jobKey.getName());
// AutowireHelper is not needed here
SchedulableTaskExecutor<?> taskExecutor = (SchedulableTaskExecutor<?>) jobDetail.getJobClass().newInstance();
task.setTaskType((Class<? extends SchedulableTaskExecutor<?>>) taskExecutor.getClass());
task.setSupportsDryRun(taskExecutor.supportsDryRun());
task.setDescription(jobDetail.getDescription());
task.setInstanceId(jobDetail.getJobDataMap().getString(SchedulableTaskExecutor.PARAMETER_INSTANCE_ID));
task.setTriggers(new ArrayList<>());
// task properties
for (Entry<String, Object> entry : jobDetail.getJobDataMap().entrySet()) {
task.getParameters().put(entry.getKey(), entry.getValue() == null ? null : entry.getValue().toString());
}
// scheduled triggers - native
for (Trigger trigger : scheduler.getTriggersOfJob(jobKey)) {
TriggerState state = scheduler.getTriggerState(trigger.getKey());
if (trigger instanceof CronTrigger) {
task.getTriggers().add(new CronTaskTrigger(task.getId(), (CronTrigger) trigger, TaskTriggerState.convert(state)));
} else if (trigger instanceof SimpleTrigger) {
task.getTriggers().add(new SimpleTaskTrigger(task.getId(), (SimpleTrigger) trigger, TaskTriggerState.convert(state)));
} else {
LOG.warn("Job '{}' ({}) has registered trigger of unsupported type {}", jobKey, jobDetail.getJobClass(), trigger);
}
}
// dependent tasks
dependentTaskTriggerRepository.findByDependentTaskId(jobKey.getName()).forEach(dependentTask -> {
task.getTriggers().add(new DependentTaskTrigger(task.getId(), dependentTask.getId(), dependentTask.getInitiatorTaskId()));
});
return task;
} catch (org.quartz.SchedulerException ex) {
if (ex.getCause() instanceof ClassNotFoundException) {
deleteTask(jobKey.getName());
LOG.warn("Job [{}] inicialization failed, job class was removed, scheduled task is removed.", jobKey, ex);
return null;
}
throw new CoreException(ex);
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException ex) {
deleteTask(jobKey.getName());
LOG.warn("Job [{}] inicialization failed, scheduled task is removed", jobKey, ex);
return null;
}
}
Aggregations