Skip to content

Commit 1faa11e

Browse files
committed
Add load async operation
1 parent 3951333 commit 1faa11e

File tree

11 files changed

+160
-0
lines changed

11 files changed

+160
-0
lines changed

docker-java-api/src/main/java/com/github/dockerjava/api/DockerClient.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import com.github.dockerjava.api.command.ListSwarmNodesCmd;
4343
import com.github.dockerjava.api.command.ListTasksCmd;
4444
import com.github.dockerjava.api.command.ListVolumesCmd;
45+
import com.github.dockerjava.api.command.LoadImageAsyncCmd;
4546
import com.github.dockerjava.api.command.LoadImageCmd;
4647
import com.github.dockerjava.api.command.LogContainerCmd;
4748
import com.github.dockerjava.api.command.LogSwarmObjectCmd;
@@ -131,6 +132,8 @@ public interface DockerClient extends Closeable {
131132
*/
132133
LoadImageCmd loadImageCmd(@Nonnull InputStream imageStream);
133134

135+
LoadImageAsyncCmd loadImageAsyncCmd(@Nonnull InputStream imageStream);
136+
134137
SearchImagesCmd searchImagesCmd(@Nonnull String term);
135138

136139
RemoveImageCmd removeImageCmd(@Nonnull String imageId);

docker-java-api/src/main/java/com/github/dockerjava/api/DockerClientDelegate.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import com.github.dockerjava.api.command.ListSwarmNodesCmd;
4343
import com.github.dockerjava.api.command.ListTasksCmd;
4444
import com.github.dockerjava.api.command.ListVolumesCmd;
45+
import com.github.dockerjava.api.command.LoadImageAsyncCmd;
4546
import com.github.dockerjava.api.command.LoadImageCmd;
4647
import com.github.dockerjava.api.command.LogContainerCmd;
4748
import com.github.dockerjava.api.command.LogSwarmObjectCmd;
@@ -153,6 +154,11 @@ public LoadImageCmd loadImageCmd(@Nonnull InputStream imageStream) {
153154
return getDockerClient().loadImageCmd(imageStream);
154155
}
155156

157+
@Override
158+
public LoadImageAsyncCmd loadImageAsyncCmd(@Nonnull InputStream imageStream) {
159+
return getDockerClient().loadImageAsyncCmd(imageStream);
160+
}
161+
156162
@Override
157163
public SearchImagesCmd searchImagesCmd(@Nonnull String term) {
158164
return getDockerClient().searchImagesCmd(term);

docker-java-api/src/main/java/com/github/dockerjava/api/command/DelegatingDockerCmdExecFactory.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@ public LoadImageCmd.Exec createLoadImageCmdExec() {
7575
return getDockerCmdExecFactory().createLoadImageCmdExec();
7676
}
7777

78+
@Override
79+
public LoadImageAsyncCmd.Exec createLoadImageAsyncCmdExec() {
80+
return getDockerCmdExecFactory().createLoadImageAsyncCmdExec();
81+
}
82+
7883
@Override
7984
public SearchImagesCmd.Exec createSearchImagesCmdExec() {
8085
return getDockerCmdExecFactory().createSearchImagesCmdExec();

docker-java-api/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ public interface DockerCmdExecFactory extends Closeable {
2727

2828
LoadImageCmd.Exec createLoadImageCmdExec();
2929

30+
LoadImageAsyncCmd.Exec createLoadImageAsyncCmdExec();
31+
3032
SearchImagesCmd.Exec createSearchImagesCmdExec();
3133

3234
RemoveImageCmd.Exec createRemoveImageCmdExec();
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.github.dockerjava.api.command;
2+
3+
import com.github.dockerjava.api.model.LoadResponseItem;
4+
5+
import java.io.InputStream;
6+
7+
public interface LoadImageAsyncCmd extends AsyncDockerCmd<LoadImageAsyncCmd, LoadResponseItem> {
8+
InputStream getImageStream();
9+
10+
/**
11+
* @param imageStream the InputStream of the tar file
12+
*/
13+
LoadImageAsyncCmd withImageStream(InputStream imageStream);
14+
15+
@Override
16+
default LoadImageCallback start() {
17+
return exec(new LoadImageCallback());
18+
}
19+
20+
interface Exec extends DockerCmdAsyncExec<LoadImageAsyncCmd, LoadResponseItem> {
21+
}
22+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.github.dockerjava.api.command;
2+
3+
import com.github.dockerjava.api.async.ResultCallbackTemplate;
4+
import com.github.dockerjava.api.model.LoadResponseItem;
5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
7+
8+
public class LoadImageCallback extends ResultCallbackTemplate<LoadImageCallback, LoadResponseItem> {
9+
10+
private static final Logger LOGGER = LoggerFactory.getLogger(LoadImageCallback.class);
11+
12+
@Override
13+
public void onNext(LoadResponseItem item) {
14+
LOGGER.debug(item.toString());
15+
}
16+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.github.dockerjava.api.model;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnore;
4+
5+
public class LoadResponseItem extends ResponseItem {
6+
7+
private static final String IMPORT_SUCCESS = "Loaded image:";
8+
9+
/**
10+
* Returns whether the stream field indicates a successful build operation
11+
*/
12+
@JsonIgnore
13+
public boolean isBuildSuccessIndicated() {
14+
if (isErrorIndicated() || getStream() == null) {
15+
return false;
16+
}
17+
18+
return getStream().contains(IMPORT_SUCCESS);
19+
}
20+
}

docker-java-core/src/main/java/com/github/dockerjava/core/AbstractDockerCmdExecFactory.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import com.github.dockerjava.api.command.ListSwarmNodesCmd;
4545
import com.github.dockerjava.api.command.ListTasksCmd;
4646
import com.github.dockerjava.api.command.ListVolumesCmd;
47+
import com.github.dockerjava.api.command.LoadImageAsyncCmd;
4748
import com.github.dockerjava.api.command.LoadImageCmd;
4849
import com.github.dockerjava.api.command.LogContainerCmd;
4950
import com.github.dockerjava.api.command.LogSwarmObjectCmd;
@@ -101,6 +102,7 @@
101102
import com.github.dockerjava.core.exec.ExecStartCmdExec;
102103
import com.github.dockerjava.core.exec.InspectConfigCmdExec;
103104
import com.github.dockerjava.core.exec.ListConfigsCmdExec;
105+
import com.github.dockerjava.core.exec.LoadImageAsyncCmdExec;
104106
import com.github.dockerjava.core.exec.RemoveConfigCmdExec;
105107
import com.github.dockerjava.core.exec.ResizeContainerCmdExec;
106108
import com.github.dockerjava.core.exec.ResizeExecCmdExec;
@@ -255,6 +257,11 @@ public LoadImageCmd.Exec createLoadImageCmdExec() {
255257
return new LoadImageCmdExec(getBaseResource(), getDockerClientConfig());
256258
}
257259

260+
@Override
261+
public LoadImageAsyncCmd.Exec createLoadImageAsyncCmdExec() {
262+
return new LoadImageAsyncCmdExec(getBaseResource(), getDockerClientConfig());
263+
}
264+
258265
@Override
259266
public SearchImagesCmd.Exec createSearchImagesCmdExec() {
260267
return new SearchImagesCmdExec(getBaseResource(), getDockerClientConfig());

docker-java-core/src/main/java/com/github/dockerjava/core/DockerClientImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import com.github.dockerjava.api.command.ListSwarmNodesCmd;
4545
import com.github.dockerjava.api.command.ListTasksCmd;
4646
import com.github.dockerjava.api.command.ListVolumesCmd;
47+
import com.github.dockerjava.api.command.LoadImageAsyncCmd;
4748
import com.github.dockerjava.api.command.LoadImageCmd;
4849
import com.github.dockerjava.api.command.LogContainerCmd;
4950
import com.github.dockerjava.api.command.LogSwarmObjectCmd;
@@ -127,6 +128,7 @@
127128
import com.github.dockerjava.core.command.ListSwarmNodesCmdImpl;
128129
import com.github.dockerjava.core.command.ListTasksCmdImpl;
129130
import com.github.dockerjava.core.command.ListVolumesCmdImpl;
131+
import com.github.dockerjava.core.command.LoadImageAsyncCmdImpl;
130132
import com.github.dockerjava.core.command.LoadImageCmdImpl;
131133
import com.github.dockerjava.core.command.LogContainerCmdImpl;
132134
import com.github.dockerjava.core.command.LogSwarmObjectImpl;
@@ -350,6 +352,11 @@ public LoadImageCmd loadImageCmd(@Nonnull InputStream imageStream) {
350352
return new LoadImageCmdImpl(getDockerCmdExecFactory().createLoadImageCmdExec(), imageStream);
351353
}
352354

355+
@Override
356+
public LoadImageAsyncCmd loadImageAsyncCmd(@Nonnull InputStream imageStream) {
357+
return new LoadImageAsyncCmdImpl(getDockerCmdExecFactory().createLoadImageAsyncCmdExec(), imageStream);
358+
}
359+
353360
@Override
354361
public SearchImagesCmd searchImagesCmd(String term) {
355362
return new SearchImagesCmdImpl(getDockerCmdExecFactory().createSearchImagesCmdExec(), term);
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.github.dockerjava.core.command;
2+
3+
import com.github.dockerjava.api.command.LoadImageAsyncCmd;
4+
import com.github.dockerjava.api.model.LoadResponseItem;
5+
6+
import java.io.IOException;
7+
import java.io.InputStream;
8+
9+
import static com.google.common.base.Preconditions.checkNotNull;
10+
11+
public class LoadImageAsyncCmdImpl extends AbstrAsyncDockerCmd<LoadImageAsyncCmd, LoadResponseItem> implements LoadImageAsyncCmd {
12+
13+
private InputStream inputStream;
14+
15+
public LoadImageAsyncCmdImpl(LoadImageAsyncCmd.Exec exec, InputStream inputStream) {
16+
super(exec);
17+
this.inputStream = inputStream;
18+
}
19+
20+
@Override
21+
public InputStream getImageStream() {
22+
return this.inputStream;
23+
}
24+
25+
@Override
26+
public LoadImageAsyncCmd withImageStream(InputStream imageStream) {
27+
checkNotNull(imageStream, "imageStream was not specified");
28+
this.inputStream = imageStream;
29+
return this;
30+
}
31+
32+
@Override
33+
public void close() {
34+
super.close();
35+
36+
try {
37+
this.inputStream.close();
38+
} catch (IOException e) {
39+
throw new RuntimeException(e);
40+
}
41+
}
42+
}

0 commit comments

Comments
 (0)