Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

package com.github.dockerjava.client.command;

import javax.ws.rs.core.MediaType;
Expand All @@ -8,6 +9,7 @@
import com.github.dockerjava.client.DockerException;
import com.github.dockerjava.client.NotFoundException;
import com.github.dockerjava.client.model.Bind;
import com.github.dockerjava.client.model.Link;
import com.github.dockerjava.client.model.LxcConf;
import com.github.dockerjava.client.model.Ports;
import com.github.dockerjava.client.model.StartContainerConfig;
Expand Down Expand Up @@ -37,7 +39,14 @@ public StartContainerCmd withBinds(Bind... binds) {
return this;
}

public StartContainerCmd withLxcConf(LxcConf[] lxcConf) {
public StartContainerCmd withLinks(final Link... links)
{
startContainerConfig.setLinks(links);
return this;
}

public StartContainerCmd withLxcConf(final LxcConf[] lxcConf)
{
startContainerConfig.setLxcConf(lxcConf);
return this;
}
Expand Down
63 changes: 63 additions & 0 deletions src/main/java/com/github/dockerjava/client/model/Link.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@

package com.github.dockerjava.client.model;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

public class Link
{

private final String name;

private final String alias;

public Link(final String name, final String alias)
{
this.name = name;
this.alias = alias;
}

public String getName()
{
return name;
}

public String getAlias()
{
return alias;
}

public static Link parse(final String serialized)
{
try {
final String[] parts = serialized.split(":");
switch (parts.length) {
case 2: {
return new Link(parts[0], parts[1]);
}
default: {
throw new RuntimeException("Error parsing Link '" + serialized + "'");
}
}
} catch (final Exception e) {
throw new RuntimeException("Error parsing Link '" + serialized + "'");
}
}

@Override
public boolean equals(final Object obj)
{
if (obj instanceof Link) {
final Link other = (Link) obj;
return new EqualsBuilder().append(name, other.getName()).append(alias, other.getAlias()).isEquals();
} else
return super.equals(obj);
}

@Override
public int hashCode()
{
return new HashCodeBuilder().append(name).append(alias).toHashCode();
}

}
76 changes: 76 additions & 0 deletions src/main/java/com/github/dockerjava/client/model/Links.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@

package com.github.dockerjava.client.model;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.node.NullNode;

@JsonSerialize(using = Links.Serializer.class)
@JsonDeserialize(using = Links.Deserializer.class)
public class Links
{

private final Link[] links;

public Links(final Link... links)
{
this.links = links;
}

public Link[] getLinks()
{
return links;
}

public static class Serializer extends JsonSerializer<Links>
{

@Override
public void serialize(final Links links, final JsonGenerator jsonGen, final SerializerProvider serProvider) throws IOException, JsonProcessingException
{
jsonGen.writeStartArray();
for (final Link link : links.getLinks()) {
final String s = link.getName() + ":" + link.getAlias();
jsonGen.writeString(s);
}
jsonGen.writeEndArray();
}

}

public static class Deserializer extends JsonDeserializer<Links>
{

@Override
public Links deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException
{
final List<Link> binds = new ArrayList<Link>();
final ObjectCodec oc = jsonParser.getCodec();
final JsonNode node = oc.readTree(jsonParser);
for (final Iterator<Map.Entry<String, JsonNode>> it = node.fields(); it.hasNext();) {

final Map.Entry<String, JsonNode> field = it.next();
if (!field.getValue().equals(NullNode.getInstance())) {
binds.add(Link.parse(field.getKey()));
}
}
return new Links(binds.toArray(new Link[0]));
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ public class StartContainerConfig {
@JsonProperty("Binds")
private Binds binds = new Binds();

@JsonProperty("Links")
private Links links = new Links();

@JsonProperty("LxcConf")
private LxcConf[] lxcConf;

Expand Down Expand Up @@ -43,6 +46,16 @@ public void setBinds(Bind[] binds) {
this.binds = new Binds(binds);
}

@JsonIgnore
public Link[] getLinks() {
return links.getLinks();
}

@JsonIgnore
public void setLinks(Link[] links) {
this.links = new Links(links);
}

public LxcConf[] getLxcConf() {
return lxcConf;
}
Expand Down