/* * This is eMonocot, a global online biodiversity information resource. * * Copyright © 2011–2015 The Board of Trustees of the Royal Botanic Gardens, Kew and The University of Oxford * * eMonocot is free software: you can redistribute it and/or modify it under the terms of the * GNU Affero General Public License as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * eMonocot is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * The complete text of the GNU Affero General Public License is in the source repository as the file * ‘COPYING’. It is also available from <http://www.gnu.org/licenses/>. */ package org.emonocot.portal.remoting; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.emonocot.persistence.dao.JobInstanceDao; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.batch.core.JobInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.stereotype.Repository; import org.springframework.web.client.RestTemplate; /** * * @author ben * */ @Repository public class JobInstanceDaoImpl implements JobInstanceDao { /** * Logger. */ private static Logger logger = LoggerFactory.getLogger(JobInstanceDaoImpl.class); protected static HttpHeaders httpHeaders = new HttpHeaders(); static { List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>(); acceptableMediaTypes.add(MediaType.APPLICATION_JSON); httpHeaders.setAccept(acceptableMediaTypes); httpHeaders.setContentType(MediaType.APPLICATION_JSON); } /** * */ private String baseUri; /** * */ private String resourceDir = "jobInstance"; /** * */ private RestTemplate restTemplate; /** * */ @Autowired public void setRestTemplate(RestTemplate restTemplate) { this.restTemplate = restTemplate; } /** * * @param newBaseUri * Set the base uri */ public final void setBaseUri(final String newBaseUri) { this.baseUri = newBaseUri; } /** * @param identifier the identifier of the job instance to load * @return a job instance */ public final JobInstance load(final Long identifier) { return restTemplate.getForObject(baseUri + "/" + resourceDir + "/" + identifier, JobInstance.class); } /** * @param id the id of the job instance to delete */ public final void delete(final Long id) { restTemplate.delete(baseUri + "/" + resourceDir + "/" + id); } /** * @param jobInstance the job execution to save */ public final void save(final JobInstance jobInstance) { logger.debug("POST: " + baseUri + "/"+ resourceDir); restTemplate.postForObject(baseUri+ "/" + resourceDir, jobInstance, JobInstance.class); } @Override public List<JobInstance> list(Integer page, Integer size) { HttpEntity<JobInstance> requestEntity = new HttpEntity<JobInstance>(httpHeaders); Map<String,Object> uriVariables = new HashMap<String,Object>(); uriVariables.put("resource", resourceDir); if(size == null) { uriVariables.put("limit", ""); } else { uriVariables.put("limit", size); } if(page == null) { uriVariables.put("start", ""); } else { uriVariables.put("start", page); } ParameterizedTypeReference<List<JobInstance>> typeRef = new ParameterizedTypeReference<List<JobInstance>>() {}; HttpEntity<List<JobInstance>> responseEntity = restTemplate.exchange(baseUri + "/{resource}?limit={limit}&start={start}", HttpMethod.GET, requestEntity, typeRef,uriVariables); return responseEntity.getBody(); } }