private void waitForAsyncJobCompletion(Map<String, Object> jobResponse) { long timeout = System.currentTimeMillis() + JOB_TIMEOUT; while (System.currentTimeMillis() < timeout) { CloudJob job = resourceMapper.mapResource(jobResponse, CloudJob.class); if (job.getStatus() == CloudJob.Status.FINISHED) { return; } if (job.getStatus() == CloudJob.Status.FAILED) { throw new CloudOperationException(job.getErrorDetails().getDescription()); } try { Thread.sleep(JOB_POLLING_PERIOD); } catch (InterruptedException e) { return; } jobResponse = getRestTemplate().exchange(getUrl(job.getMeta().getUrl()), HttpMethod.GET, HttpEntity.EMPTY, new ParameterizedTypeReference<Map<String, Object>>() {}).getBody(); } }
private void processAsyncJob(Map<String, Object> jobResource, UploadStatusCallback callback) { CloudJob job = resourceMapper.mapResource(jobResource, CloudJob.class); do { boolean unsubscribe = callback.onProgress(job.getStatus().toString()); if (unsubscribe) { return; } if (job.getStatus() == CloudJob.Status.FAILED) { return; } try { Thread.sleep(JOB_POLLING_PERIOD); } catch (InterruptedException ex) { return; } ResponseEntity<Map<String, Object>> jobProgressEntity = getRestTemplate().exchange(getUrl(job.getMeta().getUrl()), HttpMethod.GET, HttpEntity.EMPTY, new ParameterizedTypeReference<Map<String, Object>>() {}); job = resourceMapper.mapResource(jobProgressEntity.getBody(), CloudJob.class); } while (job.getStatus() != CloudJob.Status.FINISHED); }
protected String getUrl(CloudJob job) { Meta meta = job.getMeta(); return getUrl(meta.getUrl()); }