use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.
the class AbstractScheduledTaskInitializer method initScheduledTask.
/**
* Method initial default long running tasks. Task will be loaded from
* resources.
*
* @param tasksInputStream
*/
protected void initScheduledTask(InputStream tasksInputStream) {
if (tasksInputStream == null) {
LOG.warn("For module: [{}] is empty parameter 'tasksInputStream', skip init tasks for this module.", getModule());
}
Unmarshaller jaxbUnmarshaller = null;
//
try {
jaxbUnmarshaller = jaxbContext.createUnmarshaller();
} catch (JAXBException e) {
throw new ResultCodeException(CoreResultCode.XML_JAXB_INIT_ERROR, e);
}
try {
IdmScheduledTasksType tasks = (IdmScheduledTasksType) jaxbUnmarshaller.unmarshal(tasksInputStream);
List<Task> allExistingTasks = schedulerService.getAllTasks();
if (tasks != null) {
for (IdmScheduledTaskType taskType : tasks.getTasks()) {
try {
Task task = typeToTask(taskType);
LOG.debug("Task with type [{}] is successfully initialized. Try to save.", taskType.getTaskType());
if (existSimilarTask(task, allExistingTasks)) {
LOG.debug("Task with type [{}] already exist, skip save this task.", taskType.getTaskType());
continue;
}
LOG.info("Create new task with type [{}].", taskType.getTaskType());
task = schedulerService.createTask(task);
createAndSaveTriggers(task, taskType);
} catch (ClassNotFoundException e) {
LOG.error("Scheduled task with task type [{}] can't be init. Skip this task. Error message: [{}]", taskType.getTaskType(), e.getMessage());
}
}
}
} catch (JAXBException e) {
LOG.error("Scheduled task type validation failed, file name: {}, module: {}, error message: {}", getTasksXmlPath(), getModule(), e.getLocalizedMessage());
}
}
use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.
the class SchedulerController method find.
/**
* Finds scheduled tasks
*
* @return all tasks
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
@ResponseBody
@RequestMapping(method = RequestMethod.GET)
@PreAuthorize("hasAuthority('" + CoreGroupPermission.SCHEDULER_READ + "')")
@ApiOperation(value = "Search scheduled tasks", nickname = "searchSchedulerTasks", tags = { SchedulerController.TAG }, authorizations = { @Authorization(value = SwaggerConfig.AUTHENTICATION_BASIC, scopes = { @AuthorizationScope(scope = CoreGroupPermission.SCHEDULER_READ, description = "") }), @Authorization(value = SwaggerConfig.AUTHENTICATION_CIDMST, scopes = { @AuthorizationScope(scope = CoreGroupPermission.SCHEDULER_READ, description = "") }) })
@ApiImplicitParams({ @ApiImplicitParam(name = "page", dataType = "string", paramType = "query", value = "Results page you want to retrieve (0..N)"), @ApiImplicitParam(name = "size", dataType = "string", paramType = "query", value = "Number of records per page."), @ApiImplicitParam(name = "sort", allowMultiple = true, dataType = "string", paramType = "query", value = "Sorting criteria in the format: property(,asc|desc). " + "Default sort order is ascending. " + "Multiple sort criteria are supported.") })
public Resources<Task> find(@RequestParam(required = false) MultiValueMap<String, Object> parameters, @PageableDefault Pageable pageable) {
String text = getParameterConverter().toString(parameters, DataFilter.PARAMETER_TEXT);
List<Task> tasks = schedulerService.getAllTasks().stream().filter(task -> {
// filter - like name or description only
return StringUtils.isEmpty(text) || task.getTaskType().getSimpleName().toLowerCase().contains(text.toLowerCase()) || (task.getDescription() != null && task.getDescription().toLowerCase().contains(text.toLowerCase()));
}).sorted((taskOne, taskTwo) -> {
Sort sort = pageable.getSort();
if (pageable.getSort() == null) {
return 0;
}
int compareAscValue = 0;
boolean asc = true;
// "naive" sort implementation
if (sort.getOrderFor(PROPERTY_TASK_TYPE) != null) {
asc = sort.getOrderFor(PROPERTY_TASK_TYPE).isAscending();
compareAscValue = taskOne.getTaskType().getSimpleName().compareTo(taskTwo.getTaskType().getSimpleName());
}
if (sort.getOrderFor(PROPERTY_DESCRIPTION) != null) {
asc = sort.getOrderFor(PROPERTY_DESCRIPTION).isAscending();
compareAscValue = taskOne.getDescription().compareTo(taskTwo.getDescription());
}
if (sort.getOrderFor(PROPERTY_INSTANCE_ID) != null) {
asc = sort.getOrderFor(PROPERTY_INSTANCE_ID).isAscending();
compareAscValue = taskOne.getInstanceId().compareTo(taskTwo.getInstanceId());
}
return asc ? compareAscValue : compareAscValue * -1;
}).collect(Collectors.toList());
// "naive" pagination
int first = pageable.getPageNumber() * pageable.getPageSize();
int last = pageable.getPageSize() + first;
List<Task> taskPage = tasks.subList(first < tasks.size() ? first : tasks.size() > 0 ? tasks.size() - 1 : 0, last < tasks.size() ? last : tasks.size());
//
return pageToResources(new PageImpl(taskPage, pageable, tasks.size()), Task.class);
}
use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.
the class AbstractScheduledTaskInitializerTest method testInitTask.
@Test
public void testInitTask() {
List<Task> tasks = schedulerService.getAllTasks();
// found test task, other will be skip
for (Task task : tasks) {
if (task.getTaskType().equals(TestTaskExecutor.class)) {
assertEquals(TEST_DESCRIPTION, task.getDescription());
assertEquals(TEST_INSTANCE, task.getInstanceId());
// assertEquals(InitTestScheduledTask.TEST_MODULE, task.getModule()); // module not working in Task
Map<String, String> parameters = task.getParameters();
assertEquals(3, parameters.size());
String value1 = parameters.get(KEY_1);
assertEquals(VALUE_1, value1);
String value2 = parameters.get(KEY_2);
assertEquals(VALUE_2, value2);
String value3 = parameters.get(KEY_3);
assertEquals(VALUE_3, value3);
List<AbstractTaskTrigger> triggers = task.getTriggers();
assertEquals(2, triggers.size());
for (AbstractTaskTrigger trigger : triggers) {
assertEquals(TaskTriggerState.ACTIVE, trigger.getState());
if (trigger.getClass().equals(CronTaskTrigger.class)) {
CronTaskTrigger cronTrigger = (CronTaskTrigger) trigger;
assertEquals(TEST_CRON, cronTrigger.getCron());
} else if (trigger.getClass().equals(SimpleTaskTrigger.class)) {
SimpleTaskTrigger simpleTrigger = (SimpleTaskTrigger) trigger;
assertEquals(TEST_FIRE_TIME, simpleTrigger.getFireTime());
} else {
fail();
}
}
// success
return;
}
}
// test task is not initialized
fail();
}
use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.
the class DefaultSchedulerManagerIntegrationTest method testTaskRegistration.
@Test
public void testTaskRegistration() {
List<Task> tasks = manager.getSupportedTasks();
//
assertTrue(tasks.size() > 0);
boolean testTaskIsRegisterd = false;
for (Task task : tasks) {
if (TestRegistrableSchedulableTask.class.equals(task.getTaskType())) {
testTaskIsRegisterd = true;
break;
}
}
assertTrue(testTaskIsRegisterd);
}
use of eu.bcvsolutions.idm.core.scheduler.api.dto.Task in project CzechIdMng by bcvsolutions.
the class DefaultSchedulerManagerIntegrationTest method testCreateAndRunSimpleTrigger.
@Test
public void testCreateAndRunSimpleTrigger() throws InterruptedException, ExecutionException {
helper.setConfigurationValue(SchedulerConfiguration.PROPERTY_TASK_ASYNCHRONOUS_ENABLED, false);
try {
String result = "TEST_SCHEDULER_TWO";
Task task = createTask(result);
//
manager.createTrigger(task.getId(), getSimpleTrigger(task));
//
helper.waitForResult(getContinueFunction());
//
List<FutureTask<?>> taskList = getFutureTaskList(TestSchedulableTask.class);
assertEquals(result, taskList.get(0).get());
//
checkScheduledTask(task);
} finally {
helper.setConfigurationValue(SchedulerConfiguration.PROPERTY_TASK_ASYNCHRONOUS_ENABLED, true);
}
}
Aggregations