forked from gooddata/gooddata-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFutureResult.java
More file actions
60 lines (51 loc) · 1.75 KB
/
Copy pathFutureResult.java
File metadata and controls
60 lines (51 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
* Copyright (C) 2007-2014, GoodData(R) Corporation. All rights reserved.
*/
package com.gooddata;
import java.util.concurrent.TimeUnit;
import static com.gooddata.Validate.notEmpty;
import static com.gooddata.Validate.notNull;
/**
* Represents the result retrieved by polling on the REST API.
*/
public class FutureResult<T> {
private final AbstractService service;
private final String pollingUri;
private final AbstractService.ConditionCallback condition;
private final Class<T> returnClass;
private volatile T result;
public FutureResult(final AbstractService service, final String pollingUri,
final AbstractService.ConditionCallback condition, final Class<T> returnClass) {
this.service = notNull(service, "service");
this.pollingUri = notEmpty(pollingUri, "pollingUri");
this.condition = notNull(condition, "condition");
this.returnClass = notNull(returnClass, "returnClass");
}
public boolean isDone() {
if (result != null) {
return true;
}
final PollResult<T> pollResult = service.pollOnce(pollingUri, condition, returnClass);
if (pollResult.isContinue()) {
return false;
} else {
result = pollResult.getResult();
return true;
}
}
public T get() {
if (result != null) {
return result;
}
return service.poll(pollingUri, condition, returnClass, 0, null);
}
public T get(final long timeout, final TimeUnit unit) {
if (result != null) {
return result;
}
return service.poll(pollingUri, condition, returnClass, timeout, unit);
}
public String getPollingUri() {
return pollingUri;
}
}