Skip to content

Commit 1f84a6e

Browse files
author
Marcus Linke
committed
Added model classes for exposed ports
1 parent 2bf3f82 commit 1f84a6e

8 files changed

Lines changed: 301 additions & 91 deletions

File tree

src/main/java/com/github/dockerjava/client/command/CreateContainerCmd.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.github.dockerjava.client.NotFoundException;
1414
import com.github.dockerjava.client.model.ContainerCreateResponse;
1515
import com.github.dockerjava.client.model.CreateContainerConfig;
16+
import com.github.dockerjava.client.model.ExposedPort;
1617
import com.google.common.base.Preconditions;
1718
import com.sun.jersey.api.client.UniformInterfaceException;
1819
import com.sun.jersey.api.client.WebResource;
@@ -73,13 +74,10 @@ public CreateContainerCmd withName(String name) {
7374
return this;
7475
}
7576

76-
public CreateContainerCmd withExposedPorts(String... exposedPorts) {
77+
public CreateContainerCmd withExposedPorts(ExposedPort... exposedPorts) {
7778
Preconditions.checkNotNull(exposedPorts, "exposedPorts was not specified");
78-
HashMap<String,String> ports = new HashMap<String,String>();
79-
for(String exposedPort: exposedPorts) {
80-
ports.put(exposedPort, "");
81-
}
82-
this.containerCreateConfig.withExposedPorts(ports);
79+
80+
this.containerCreateConfig.withExposedPorts(exposedPorts);
8381
return this;
8482
}
8583

src/main/java/com/github/dockerjava/client/model/ContainerConfig.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.github.dockerjava.client.model;
22

3+
import com.fasterxml.jackson.annotation.JsonIgnore;
34
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
45
import com.fasterxml.jackson.annotation.JsonProperty;
6+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
7+
58

69
import java.util.Arrays;
710
import java.util.Map;
@@ -37,14 +40,19 @@ public class ContainerConfig {
3740
@JsonProperty("Privileged") private boolean privileged = false;
3841
@JsonProperty("WorkingDir") private String workingDir = "";
3942
@JsonProperty("Domainname") private String domainName = "";
40-
// FIXME Is this the right type? -BJE
41-
@JsonProperty("ExposedPorts") private Map<String, ?> exposedPorts;
43+
@JsonProperty("ExposedPorts") private ExposedPorts exposedPorts;
4244

4345
@JsonProperty("OnBuild") private int[] onBuild;
4446

45-
public Map<String, ?> getExposedPorts() {
46-
return exposedPorts;
47+
@JsonIgnore
48+
public ExposedPort[] getExposedPorts() {
49+
return exposedPorts.getExposedPorts();
4750
}
51+
52+
@JsonIgnore
53+
public void setExposedPorts(ExposedPort[] exposedPorts) {
54+
this.exposedPorts = new ExposedPorts(exposedPorts);
55+
}
4856

4957
public boolean isNetworkDisabled() {
5058
return networkDisabled;

src/main/java/com/github/dockerjava/client/model/CreateContainerConfig.java

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package com.github.dockerjava.client.model;
22

33

4-
import com.fasterxml.jackson.annotation.JsonProperty;
5-
64
import java.util.Arrays;
75
import java.util.Map;
86

7+
import com.fasterxml.jackson.annotation.JsonIgnore;
8+
import com.fasterxml.jackson.annotation.JsonProperty;
9+
910
/**
1011
*
1112
* @author Konstantin Pelykh (kpelykh@gmail.com)
@@ -60,24 +61,23 @@ public class CreateContainerConfig {
6061
@JsonProperty("VolumesFrom") private String volumesFrom = "";
6162
@JsonProperty("WorkingDir") private String workingDir = "";
6263
@JsonProperty("DisableNetwork") private boolean disableNetwork = false;
63-
@JsonProperty("ExposedPorts") private Map<String, ?> exposedPorts;
64+
@JsonProperty("ExposedPorts") private ExposedPorts exposedPorts;
6465

65-
public Map<String, ?> getExposedPorts() {
66-
return exposedPorts;
66+
public CreateContainerConfig withExposedPorts(ExposedPort[] exposedPorts) {
67+
this.exposedPorts = new ExposedPorts(exposedPorts);
68+
return this;
6769
}
6870

69-
public CreateContainerConfig withExposedPorts(Map<String, ?> exposedPorts) {
70-
this.exposedPorts = exposedPorts;
71-
return this;
71+
@JsonIgnore
72+
public ExposedPort[] getExposedPorts() {
73+
return exposedPorts.getExposedPorts();
7274
}
7375

7476

7577
public boolean isDisableNetwork() {
7678
return disableNetwork;
7779
}
7880

79-
80-
8181
public String getWorkingDir() { return workingDir; }
8282

8383
public CreateContainerConfig withWorkingDir(String workingDir) {
@@ -245,11 +245,6 @@ public CreateContainerConfig withVolumesFrom(String volumesFrom) {
245245
return this;
246246
}
247247

248-
249-
250-
251-
252-
253248
@Override
254249
public String toString() {
255250
return "CreateContainerConfig{" +
@@ -274,4 +269,6 @@ public String toString() {
274269
", workingDir='" + workingDir + '\'' +
275270
'}';
276271
}
272+
273+
277274
}
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
package com.github.dockerjava.client.model;
2+
3+
import java.io.IOException;
4+
import java.util.Map.Entry;
5+
6+
import org.apache.commons.lang.builder.EqualsBuilder;
7+
import org.apache.commons.lang.builder.HashCodeBuilder;
8+
9+
import com.fasterxml.jackson.annotation.JsonCreator;
10+
import com.fasterxml.jackson.core.JsonGenerator;
11+
import com.fasterxml.jackson.core.JsonParser;
12+
import com.fasterxml.jackson.core.JsonProcessingException;
13+
import com.fasterxml.jackson.core.ObjectCodec;
14+
import com.fasterxml.jackson.databind.DeserializationContext;
15+
import com.fasterxml.jackson.databind.JsonDeserializer;
16+
import com.fasterxml.jackson.databind.JsonNode;
17+
import com.fasterxml.jackson.databind.JsonSerializer;
18+
import com.fasterxml.jackson.databind.SerializerProvider;
19+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
20+
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
21+
import com.fasterxml.jackson.databind.node.NullNode;
22+
23+
@JsonDeserialize(using = ExposedPort.Deserializer.class)
24+
@JsonSerialize(using = ExposedPort.Serializer.class)
25+
public class ExposedPort {
26+
27+
private String scheme;
28+
29+
private int port;
30+
31+
public ExposedPort(String scheme, int port) {
32+
this.scheme = scheme;
33+
this.port = port;
34+
}
35+
36+
public String getScheme() {
37+
return scheme;
38+
}
39+
40+
public int getPort() {
41+
return port;
42+
}
43+
44+
public static ExposedPort tcp(int port) {
45+
return new ExposedPort("tcp", port);
46+
}
47+
48+
public static ExposedPort parse(String serialized) {
49+
String[] parts = serialized.split("/");
50+
ExposedPort out = new ExposedPort(parts[1], Integer.valueOf(parts[0]));
51+
return out;
52+
}
53+
54+
@Override
55+
public boolean equals(Object obj) {
56+
if(obj instanceof ExposedPort) {
57+
ExposedPort other = (ExposedPort)obj;
58+
return new EqualsBuilder().append(scheme, other.getScheme()).append(port, other.getPort()).isEquals();
59+
} else
60+
return super.equals(obj);
61+
}
62+
63+
@Override
64+
public int hashCode() {
65+
return new HashCodeBuilder().append(scheme).append(port).toHashCode();
66+
}
67+
68+
69+
public static class KeySerializer extends JsonSerializer<ExposedPort> {
70+
71+
@Override
72+
public void serialize(ExposedPort exposedPort, JsonGenerator jsonGen,
73+
SerializerProvider serProvider) throws IOException,
74+
JsonProcessingException {
75+
76+
77+
78+
jsonGen.writeFieldName(exposedPort.getPort() + "/"
79+
+ exposedPort.getScheme());
80+
81+
82+
}
83+
84+
}
85+
86+
87+
public static class KeyDeserializer extends com.fasterxml.jackson.databind.KeyDeserializer {
88+
89+
@Override
90+
public Object deserializeKey(String key, DeserializationContext ctxt)
91+
throws IOException, JsonProcessingException {
92+
String[] parts = key.split("/");
93+
ExposedPort out = new ExposedPort(parts[1], Integer.valueOf(parts[0]));
94+
return out;
95+
}
96+
97+
}
98+
99+
100+
public static class Deserializer extends JsonDeserializer<ExposedPort> {
101+
@Override
102+
public ExposedPort deserialize(JsonParser jsonParser,
103+
DeserializationContext deserializationContext)
104+
throws IOException, JsonProcessingException {
105+
ObjectCodec oc = jsonParser.getCodec();
106+
JsonNode node = oc.readTree(jsonParser);
107+
if (!node.equals(NullNode.getInstance())) {
108+
Entry<String, JsonNode> field = node.fields().next();
109+
String[] parts = field.getKey().split("/");
110+
ExposedPort out = new ExposedPort(parts[1],
111+
Integer.valueOf(parts[0]));
112+
return out;
113+
} else {
114+
return null;
115+
}
116+
}
117+
}
118+
119+
public static class Serializer extends JsonSerializer<ExposedPort> {
120+
121+
@Override
122+
public void serialize(ExposedPort exposedPort, JsonGenerator jsonGen,
123+
SerializerProvider serProvider) throws IOException,
124+
JsonProcessingException {
125+
126+
jsonGen.writeStartObject();
127+
128+
jsonGen.writeFieldName(exposedPort.getPort() + "/"
129+
+ exposedPort.getScheme());
130+
131+
jsonGen.writeEndObject();
132+
}
133+
134+
}
135+
136+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.github.dockerjava.client.model;
2+
3+
import java.io.IOException;
4+
import java.util.ArrayList;
5+
import java.util.Iterator;
6+
import java.util.List;
7+
import java.util.Map;
8+
9+
import com.fasterxml.jackson.annotation.JsonIgnore;
10+
import com.fasterxml.jackson.core.JsonGenerator;
11+
import com.fasterxml.jackson.core.JsonParser;
12+
import com.fasterxml.jackson.core.JsonProcessingException;
13+
import com.fasterxml.jackson.core.ObjectCodec;
14+
import com.fasterxml.jackson.databind.DeserializationContext;
15+
import com.fasterxml.jackson.databind.JsonDeserializer;
16+
import com.fasterxml.jackson.databind.JsonNode;
17+
import com.fasterxml.jackson.databind.JsonSerializer;
18+
import com.fasterxml.jackson.databind.SerializerProvider;
19+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
20+
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
21+
import com.fasterxml.jackson.databind.node.NullNode;
22+
23+
24+
@JsonSerialize(using = ExposedPorts.Serializer.class)
25+
@JsonDeserialize(using = ExposedPorts.Deserializer.class)
26+
public class ExposedPorts {
27+
28+
private ExposedPort[] exposedPorts;
29+
30+
public ExposedPorts(ExposedPort... exposedPorts) {
31+
this.exposedPorts = exposedPorts;
32+
}
33+
34+
public ExposedPort[] getExposedPorts() {
35+
return exposedPorts;
36+
}
37+
38+
public static class Serializer extends JsonSerializer<ExposedPorts> {
39+
40+
@Override
41+
public void serialize(ExposedPorts exposedPorts, JsonGenerator jsonGen,
42+
SerializerProvider serProvider) throws IOException,
43+
JsonProcessingException {
44+
45+
jsonGen.writeStartObject();
46+
for (ExposedPort exposedPort : exposedPorts.getExposedPorts()) {
47+
jsonGen.writeFieldName(exposedPort.getPort() + "/"
48+
+ exposedPort.getScheme());
49+
jsonGen.writeStartObject();
50+
jsonGen.writeEndObject();
51+
}
52+
jsonGen.writeEndObject();
53+
}
54+
55+
}
56+
57+
public static class Deserializer extends JsonDeserializer<ExposedPorts> {
58+
@Override
59+
public ExposedPorts deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
60+
61+
List<ExposedPort> exposedPorts = new ArrayList<ExposedPort>();
62+
ObjectCodec oc = jsonParser.getCodec();
63+
JsonNode node = oc.readTree(jsonParser);
64+
for (Iterator<Map.Entry<String, JsonNode>> it = node.fields(); it.hasNext();) {
65+
66+
Map.Entry<String, JsonNode> field = it.next();
67+
if (!field.getValue().equals(NullNode.getInstance())) {
68+
exposedPorts.add(ExposedPort.parse(field.getKey()));
69+
}
70+
}
71+
return new ExposedPorts(exposedPorts.toArray(new ExposedPort[0]));
72+
}
73+
}
74+
75+
}

0 commit comments

Comments
 (0)