package org.ohdsi.webapi.job; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobInstance; import org.springframework.batch.core.JobParameter; import org.springframework.batch.core.JobParameter.ParameterType; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.JobParametersBuilder; /** * */ public final class JobUtils { public static JobInstanceResource toJobInstanceResource(final JobInstance jobInstance) { final JobInstanceResource job = new JobInstanceResource(jobInstance.getId()); job.setName(jobInstance.getJobName()); return job; } public static JobExecutionResource toJobExecutionResource(final JobExecution jobExecution) { final JobExecutionResource execution = new JobExecutionResource( toJobInstanceResource(jobExecution.getJobInstance()), jobExecution.getId()); execution.setStatus(jobExecution.getStatus().name()); execution.setStartDate(jobExecution.getStartTime()); execution.setEndDate(jobExecution.getEndTime()); execution.setExitStatus(jobExecution.getExitStatus().getExitCode()); JobParameters jobParams = jobExecution.getJobParameters(); if (jobParams != null) { Map<String, JobParameter> params = jobParams.getParameters(); if (params != null && !params.isEmpty()) { Map<String, Object> jobParametersResource = new HashMap<String, Object>(); for (String key : params.keySet()) { jobParametersResource.put(key, params.get(key).getValue()); } execution.setJobParametersResource(jobParametersResource); } } return execution; } /** * Create List of JobExecutionResource objects containing job parameters. * <p> * See /resources/job/sql/jobExecutions.sql for ResultSet expectations. * * @param rs * @return * @throws SQLException */ public static List<JobExecutionResource> toJobExecutionResource(final ResultSet rs) throws SQLException { //TODO order by executionId List<JobExecutionResource> jobs = new ArrayList<JobExecutionResource>(); JobExecutionResource jobexec = null; JobParametersBuilder jpb = null; Map<String, Object> map = null; while (rs.next()) { Long id = rs.getLong(1); if (jobexec != null) {//possible continuation if (!jobexec.getExecutionId().equals(id)) { //no continuation jobexec.setJobParametersResource(map); jobs.add(jobexec); jobexec = null; map = null; } } if (jobexec == null) { map = new HashMap<String, Object>(); //JobParameters jobParameters = getJobParameters(id); JobInstance jobInstance = new JobInstance(rs.getLong(10), rs.getString(11)); JobExecution jobExecution = new JobExecution(jobInstance, null);//jobParameters); jobExecution.setId(id); jobExecution.setStartTime(rs.getTimestamp(2)); jobExecution.setEndTime(rs.getTimestamp(3)); jobExecution.setStatus(BatchStatus.valueOf(rs.getString(4))); jobExecution.setExitStatus(new ExitStatus(rs.getString(5), rs.getString(6))); jobExecution.setCreateTime(rs.getTimestamp(7)); jobExecution.setLastUpdated(rs.getTimestamp(8)); jobExecution.setVersion(rs.getInt(9)); jobexec = toJobExecutionResource(jobExecution); } //parameters starts at 12 ParameterType type = ParameterType.valueOf(rs.getString(13)); JobParameter value = null; if (type == ParameterType.STRING) { value = new JobParameter(rs.getString(14), rs.getString(18).equalsIgnoreCase("Y")); } else if (type == ParameterType.LONG) { value = new JobParameter(rs.getLong(16), rs.getString(18).equalsIgnoreCase("Y")); } else if (type == ParameterType.DOUBLE) { value = new JobParameter(rs.getDouble(17), rs.getString(18).equalsIgnoreCase("Y")); } else if (type == ParameterType.DATE) { value = new JobParameter(rs.getTimestamp(15), rs.getString(18).equalsIgnoreCase("Y")); } // No need to assert that value is not null because it's an enum map.put(rs.getString(12), value.getValue());//value); } if (jobexec.getExecutionId() != null) { jobexec.setJobParametersResource(map); jobs.add(jobexec); } return jobs; } }