use of org.pentaho.platform.web.http.api.resources.JobScheduleParam in project pentaho-platform by pentaho.
the class ScheduleExportUtilTest method testCreateJobScheduleRequest_MultipleTypesJobParam.
@Test
public void testCreateJobScheduleRequest_MultipleTypesJobParam() throws Exception {
String jobName = "JOB";
Long l = Long.MAX_VALUE;
Date d = new Date();
Boolean b = true;
Map<String, Serializable> params = new HashMap<>();
params.put("NumberValue", l);
params.put("DateValue", d);
params.put("BooleanValue", b);
Job job = mock(Job.class);
CronJobTrigger trigger = mock(CronJobTrigger.class);
when(job.getJobTrigger()).thenReturn(trigger);
when(job.getJobName()).thenReturn(jobName);
when(job.getJobParams()).thenReturn(params);
JobScheduleRequest jobScheduleRequest = ScheduleExportUtil.createJobScheduleRequest(job);
for (JobScheduleParam jobScheduleParam : jobScheduleRequest.getJobParameters()) {
assertTrue(jobScheduleParam.getValue().equals(l) || jobScheduleParam.getValue().equals(d) || jobScheduleParam.getValue().equals(b));
}
}
use of org.pentaho.platform.web.http.api.resources.JobScheduleParam in project pentaho-platform by pentaho.
the class SchedulerService method getJobInfo.
public JobScheduleRequest getJobInfo() {
JobScheduleRequest jobRequest = new JobScheduleRequest();
ComplexJobTriggerProxy proxyTrigger = new ComplexJobTriggerProxy();
proxyTrigger.setDaysOfMonth(new int[] { 1, 2, 3 });
proxyTrigger.setDaysOfWeek(new int[] { 1, 2, 3 });
proxyTrigger.setMonthsOfYear(new int[] { 1, 2, 3 });
proxyTrigger.setYears(new int[] { 2012, 2013 });
proxyTrigger.setStartTime(new Date());
jobRequest.setComplexJobTrigger(proxyTrigger);
jobRequest.setInputFile("aaaaa");
jobRequest.setOutputFile("bbbbb");
ArrayList<JobScheduleParam> jobParams = new ArrayList<>();
jobParams.add(new JobScheduleParam("param1", "aString"));
jobParams.add(new JobScheduleParam("param2", 1));
jobParams.add(new JobScheduleParam("param3", true));
jobParams.add(new JobScheduleParam("param4", new Date()));
jobRequest.setJobParameters(jobParams);
return jobRequest;
}
use of org.pentaho.platform.web.http.api.resources.JobScheduleParam in project pentaho-platform by pentaho.
the class SchedulerService method updateJob.
public Job updateJob(JobScheduleRequest scheduleRequest) throws IllegalAccessException, IOException, SchedulerException {
Job job = getScheduler().getJob(scheduleRequest.getJobId());
if (job != null) {
scheduleRequest.getJobParameters().add(new JobScheduleParam(QuartzScheduler.RESERVEDMAPKEY_ACTIONUSER, job.getUserName()));
}
Job newJob = createJob(scheduleRequest);
removeJob(scheduleRequest.getJobId());
return newJob;
}
use of org.pentaho.platform.web.http.api.resources.JobScheduleParam in project pentaho-platform by pentaho.
the class SchedulerService method createJob.
public Job createJob(JobScheduleRequest scheduleRequest) throws IOException, SchedulerException, IllegalAccessException {
// Used to determine if created by a RunInBackgroundCommand
boolean runInBackground = scheduleRequest.getSimpleJobTrigger() == null && scheduleRequest.getComplexJobTrigger() == null && scheduleRequest.getCronJobTrigger() == null;
if (!runInBackground && !getPolicy().isAllowed(SchedulerAction.NAME)) {
throw new SecurityException();
}
boolean hasInputFile = !StringUtils.isEmpty(scheduleRequest.getInputFile());
RepositoryFile file = null;
if (hasInputFile) {
try {
file = getRepository().getFile(scheduleRequest.getInputFile());
} catch (UnifiedRepositoryException ure) {
hasInputFile = false;
logger.warn(ure.getMessage(), ure);
}
}
// if we have an inputfile, generate job name based on that if the name is not passed in
if (hasInputFile && StringUtils.isEmpty(scheduleRequest.getJobName())) {
// $NON-NLS-1$
scheduleRequest.setJobName(file.getName().substring(0, file.getName().lastIndexOf(".")));
} else if (!StringUtils.isEmpty(scheduleRequest.getActionClass())) {
String actionClass = scheduleRequest.getActionClass().substring(scheduleRequest.getActionClass().lastIndexOf(".") + 1);
// $NON-NLS-1$
scheduleRequest.setJobName(actionClass);
} else if (!hasInputFile && StringUtils.isEmpty(scheduleRequest.getJobName())) {
// just make up a name
// $NON-NLS-1$
scheduleRequest.setJobName("" + System.currentTimeMillis());
}
if (hasInputFile) {
if (file == null) {
logger.error("Cannot find input source file " + scheduleRequest.getInputFile() + " Aborting schedule...");
throw new SchedulerException(new ServiceException("Cannot find input source file " + scheduleRequest.getInputFile()));
}
Map<String, Serializable> metadata = getRepository().getFileMetadata(file.getId());
if (metadata.containsKey(RepositoryFile.SCHEDULABLE_KEY)) {
boolean schedulable = BooleanUtils.toBoolean((String) metadata.get(RepositoryFile.SCHEDULABLE_KEY));
if (!schedulable) {
throw new IllegalAccessException();
}
}
}
if (scheduleRequest.getTimeZone() != null) {
updateStartDateForTimeZone(scheduleRequest);
}
Job job = null;
IJobTrigger jobTrigger = SchedulerResourceUtil.convertScheduleRequestToJobTrigger(scheduleRequest, scheduler);
HashMap<String, Serializable> parameterMap = new HashMap<>();
for (JobScheduleParam param : scheduleRequest.getJobParameters()) {
parameterMap.put(param.getName(), param.getValue());
}
if (isPdiFile(file)) {
parameterMap = handlePDIScheduling(file, parameterMap, scheduleRequest.getPdiParameters());
}
parameterMap.put(LocaleHelper.USER_LOCALE_PARAM, LocaleHelper.getLocale());
if (scheduleRequest.getUseWorkerNodes() != null && !scheduleRequest.getUseWorkerNodes().trim().isEmpty()) {
parameterMap.put("useWorkerNodes", scheduleRequest.getUseWorkerNodes().trim());
}
if (hasInputFile) {
SchedulerOutputPathResolver outputPathResolver = getSchedulerOutputPathResolver(scheduleRequest);
String outputFile = outputPathResolver.resolveOutputFilePath();
String actionId = SchedulerResourceUtil.resolveActionId(scheduleRequest.getInputFile());
final String inputFile = scheduleRequest.getInputFile();
parameterMap.put(ActionUtil.QUARTZ_STREAMPROVIDER_INPUT_FILE, inputFile);
job = getScheduler().createJob(scheduleRequest.getJobName(), actionId, parameterMap, jobTrigger, new RepositoryFileStreamProvider(inputFile, outputFile, getAutoCreateUniqueFilename(scheduleRequest), getAppendDateFormat(scheduleRequest)));
} else {
// need to locate actions from plugins if done this way too (but for now, we're just on main)
String actionClass = scheduleRequest.getActionClass();
try {
@SuppressWarnings("unchecked") Class<IAction> iaction = getAction(actionClass);
job = getScheduler().createJob(scheduleRequest.getJobName(), iaction, parameterMap, jobTrigger);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
return job;
}
use of org.pentaho.platform.web.http.api.resources.JobScheduleParam in project pentaho-platform by pentaho.
the class SchedulerServiceTest method testCreateJobException.
@Test
public void testCreateJobException() throws Exception {
List<JobScheduleParam> jobParameters = new ArrayList<>();
JobScheduleParam jobScheduleParam1 = mock(JobScheduleParam.class);
doReturn("name1").when(jobScheduleParam1).getName();
doReturn("value1").when(jobScheduleParam1).getValue();
jobParameters.add(jobScheduleParam1);
Job job = mock(Job.class);
JobScheduleRequest scheduleRequest = mock(JobScheduleRequest.class);
doReturn("className").when(scheduleRequest).getActionClass();
doReturn("jobName").when(scheduleRequest).getJobName();
doReturn(jobParameters).when(scheduleRequest).getJobParameters();
doNothing().when(scheduleRequest).setJobName(anyString());
doReturn(true).when(schedulerService).isPdiFile(any(RepositoryFile.class));
SchedulerOutputPathResolver schedulerOutputPathResolver = mock(SchedulerOutputPathResolver.class);
doReturn("outputFile").when(schedulerOutputPathResolver).resolveOutputFilePath();
SimpleJobTrigger simpleJobTrigger = mock(SimpleJobTrigger.class);
ComplexJobTriggerProxy complexJobTriggerProxy = mock(ComplexJobTriggerProxy.class);
CronJobTrigger cronJobTrigger = mock(CronJobTrigger.class);
RepositoryFile repositoryFile = mock(RepositoryFile.class);
doReturn("file.ext").when(repositoryFile).getName();
Map<String, Serializable> metadata = mock(Map.class);
doReturn(metadata).when(schedulerService.repository).getFileMetadata(anyString());
doReturn(true).when(metadata).containsKey(RepositoryFile.SCHEDULABLE_KEY);
doReturn("True").when(metadata).get(RepositoryFile.SCHEDULABLE_KEY);
doReturn(simpleJobTrigger).when(scheduleRequest).getSimpleJobTrigger();
doReturn(complexJobTriggerProxy).when(scheduleRequest).getComplexJobTrigger();
doReturn(cronJobTrigger).when(scheduleRequest).getCronJobTrigger();
doReturn(false).when(schedulerService.policy).isAllowed(SchedulerAction.NAME);
doReturn("file.ext").when(scheduleRequest).getInputFile();
doReturn(repositoryFile).when(schedulerService.repository).getFile(anyString());
doReturn("ext.backgroundExecution").when(schedulerService).resolveActionId(anyString());
doReturn(true).when(schedulerService).getAutoCreateUniqueFilename(any(JobScheduleRequest.class));
doReturn(job).when(schedulerService.scheduler).createJob(anyString(), anyString(), any(Map.class), any(IJobTrigger.class), any(IBackgroundExecutionStreamProvider.class));
doReturn(Class.class).when(schedulerService).getAction(anyString());
doReturn(job).when(schedulerService.scheduler).createJob(anyString(), any(Class.class), any(Map.class), any(IJobTrigger.class));
// Test 1
try {
schedulerService.createJob(scheduleRequest);
fail();
} catch (SecurityException e) {
// Should catch it
}
// Test 2
doReturn(true).when(schedulerService.policy).isAllowed(SchedulerAction.NAME);
doReturn("false").when(metadata).get(RepositoryFile.SCHEDULABLE_KEY);
try {
schedulerService.createJob(scheduleRequest);
fail();
} catch (IllegalAccessException e) {
// Should catch it
}
// Test 3
doReturn("").when(scheduleRequest).getInputFile();
doThrow(new ClassNotFoundException()).when(schedulerService).getAction(anyString());
try {
schedulerService.createJob(scheduleRequest);
fail();
} catch (RuntimeException e) {
// Should catch it
}
verify(scheduleRequest, times(7)).getSimpleJobTrigger();
verify(scheduleRequest, times(3)).getInputFile();
verify(schedulerService.policy, times(3)).isAllowed(SchedulerAction.NAME);
verify(schedulerService.repository, times(1)).getFile(anyString());
verify(scheduleRequest, times(1)).getJobName();
verify(scheduleRequest, times(2)).setJobName(anyString());
verify(scheduleRequest, times(7)).getActionClass();
verify(schedulerService.repository, times(1)).getFileMetadata(anyString());
verify(schedulerService, times(1)).isPdiFile(any(RepositoryFile.class));
verify(schedulerService, times(1)).handlePDIScheduling(any(RepositoryFile.class), any(HashMap.class), any(HashMap.class));
verify(scheduleRequest, times(7)).getActionClass();
verify(schedulerService).getAction(anyString());
}
Aggregations