http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/config/DockerComputeServiceContextModule.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/config/DockerComputeServiceContextModule.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/config/DockerComputeServiceContextModule.java
new file mode 100644
index 0000000..063d6c9
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/config/DockerComputeServiceContextModule.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.compute.config;
+
+import com.google.common.base.Function;
+import com.google.inject.TypeLiteral;
+import org.jclouds.compute.ComputeServiceAdapter;
+import org.jclouds.compute.config.ComputeServiceAdapterContextModule;
+import org.jclouds.compute.domain.Hardware;
+import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.options.TemplateOptions;
+import org.jclouds.docker.compute.functions.ContainerToNodeMetadata;
+import org.jclouds.docker.compute.functions.ImageToImage;
+import org.jclouds.docker.compute.functions.StateToStatus;
+import org.jclouds.docker.compute.options.DockerTemplateOptions;
+import org.jclouds.docker.compute.strategy.DockerComputeServiceAdapter;
+import org.jclouds.docker.domain.Container;
+import org.jclouds.docker.domain.Image;
+import org.jclouds.docker.domain.State;
+import org.jclouds.domain.Location;
+import org.jclouds.functions.IdentityFunction;
+
+public class DockerComputeServiceContextModule extends
+        ComputeServiceAdapterContextModule<Container, Hardware, Image, 
Location> {
+
+   @SuppressWarnings("unchecked")
+   @Override
+   protected void configure() {
+      super.configure();
+      bind(new TypeLiteral<ComputeServiceAdapter<Container, Hardware, Image, 
Location>>() {
+      }).to(DockerComputeServiceAdapter.class);
+      bind(new TypeLiteral<Function<Container, NodeMetadata>>() {
+      }).to(ContainerToNodeMetadata.class);
+      bind(new TypeLiteral<Function<Image, 
org.jclouds.compute.domain.Image>>() {
+      }).to(ImageToImage.class);
+      bind(new TypeLiteral<Function<Hardware, Hardware>>() {
+      }).to(Class.class.cast(IdentityFunction.class));
+      bind(new TypeLiteral<Function<Location, Location>>() {
+      }).to(Class.class.cast(IdentityFunction.class));
+      bind(new TypeLiteral<Function<State, NodeMetadata.Status>>() {
+      }).to(StateToStatus.class);
+      bind(TemplateOptions.class).to(DockerTemplateOptions.class);
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java
new file mode 100644
index 0000000..72c16af
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.compute.functions;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.getOnlyElement;
+import java.net.URI;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.inject.Inject;
+
+import org.jclouds.collect.Memoized;
+import org.jclouds.compute.domain.HardwareBuilder;
+import org.jclouds.compute.domain.Image;
+import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.NodeMetadataBuilder;
+import org.jclouds.compute.domain.Processor;
+import org.jclouds.compute.functions.GroupNamingConvention;
+import org.jclouds.docker.domain.Container;
+import org.jclouds.docker.domain.Port;
+import org.jclouds.docker.domain.State;
+import org.jclouds.domain.Location;
+import org.jclouds.providers.ProviderMetadata;
+
+import com.google.common.base.Function;
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import com.google.inject.Singleton;
+
+@Singleton
+public class ContainerToNodeMetadata implements Function<Container, 
NodeMetadata> {
+
+   private final ProviderMetadata providerMetadata;
+   private final Function<State, NodeMetadata.Status> toPortableStatus;
+   private final GroupNamingConvention nodeNamingConvention;
+   private final Supplier<Map<String, ? extends Image>> images;
+   private final Supplier<Set<? extends Location>> locations;
+
+   @Inject
+   public ContainerToNodeMetadata(ProviderMetadata providerMetadata, 
Function<State,
+           NodeMetadata.Status> toPortableStatus, 
GroupNamingConvention.Factory namingConvention,
+                                  Supplier<Map<String, ? extends Image>> 
images,
+                                  @Memoized Supplier<Set<? extends Location>> 
locations) {
+      this.providerMetadata = checkNotNull(providerMetadata, 
"providerMetadata");
+      this.toPortableStatus = checkNotNull(toPortableStatus, "toPortableStatus 
cannot be null");
+      this.nodeNamingConvention = checkNotNull(namingConvention, 
"namingConvention").createWithoutPrefix();
+      this.images = checkNotNull(images, "images cannot be null");
+      this.locations = checkNotNull(locations, "locations");
+   }
+
+   @Override
+   public NodeMetadata apply(Container container) {
+      String name = cleanUpName(container.getName());
+      String group = nodeNamingConvention.extractGroup(name);
+      NodeMetadataBuilder builder = new NodeMetadataBuilder();
+      builder.ids(container.getId())
+              .name(name)
+              .group(group)
+              .hostname(container.getContainerConfig().getHostname())
+               // TODO Set up hardware
+              .hardware(new HardwareBuilder()
+                      .id("")
+                      .ram(container.getContainerConfig().getMemory())
+                      .processor(new 
Processor(container.getContainerConfig().getCpuShares(), 
container.getContainerConfig().getCpuShares()))
+                      .build());
+      builder.status(toPortableStatus.apply(container.getState()));
+      builder.imageId(container.getImage());
+      builder.loginPort(getLoginPort(container));
+      builder.publicAddresses(getPublicIpAddresses());
+      builder.privateAddresses(getPrivateIpAddresses(container));
+      builder.location(Iterables.getOnlyElement(locations.get()));
+      Image image = images.get().get(container.getImage());
+      builder.imageId(image.getId());
+      builder.operatingSystem(image.getOperatingSystem());
+
+      return builder.build();
+   }
+
+   private String cleanUpName(String name) {
+      return name.startsWith("/") ? name.substring(1) : name;
+   }
+
+   private Iterable<String> getPrivateIpAddresses(Container container) {
+      if (container.getNetworkSettings() == null) return ImmutableList.of();
+      return ImmutableList.of(container.getNetworkSettings().getIpAddress());
+   }
+
+   private List<String> getPublicIpAddresses() {
+      String dockerIpAddress = 
URI.create(providerMetadata.getEndpoint()).getHost();
+      return ImmutableList.of(dockerIpAddress);
+   }
+
+   protected static int getLoginPort(Container container) {
+      if (container.getNetworkSettings() != null) {
+          Map<String, List<Map<String, String>>> ports = 
container.getNetworkSettings().getPorts();
+          if (ports != null) {
+            return 
Integer.parseInt(getOnlyElement(ports.get("22/tcp")).get("HostPort"));
+          }
+      // this is needed in case the container list is coming from 
listContainers
+      } else if (container.getPorts() != null) {
+         for (Port port : container.getPorts()) {
+            if (port.getPrivatePort() == 22) {
+               return port.getPublicPort();
+            }
+         }
+      }
+      throw new IllegalStateException("Cannot determine the login port for " + 
container.getId());
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java
new file mode 100644
index 0000000..4e3358d
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.compute.functions;
+
+import com.google.common.base.Function;
+import com.google.common.base.Splitter;
+import com.google.common.collect.Iterables;
+import org.jclouds.compute.domain.Image;
+import org.jclouds.compute.domain.ImageBuilder;
+import org.jclouds.compute.domain.OperatingSystem;
+import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.compute.reference.ComputeServiceConstants;
+import org.jclouds.logging.Logger;
+
+import javax.annotation.Resource;
+import javax.inject.Named;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.get;
+
+public class ImageToImage implements Function<org.jclouds.docker.domain.Image, 
org.jclouds.compute.domain.Image> {
+
+   private static final String CENTOS = "centos";
+   private static final String UBUNTU = "ubuntu";
+
+   @Resource
+   @Named(ComputeServiceConstants.COMPUTE_LOGGER)
+   protected Logger logger = Logger.NULL;
+
+   @Override
+   public Image apply(org.jclouds.docker.domain.Image from) {
+      checkNotNull(from, "image");
+      String description = checkNotNull(Iterables.getFirst(from.getRepoTags(), 
"image must have at least one repo tag"));
+
+      OsFamily osFamily = osFamily().apply(description);
+      String osVersion = parseVersion(description);
+
+      OperatingSystem os = OperatingSystem.builder()
+              .description(description)
+              .family(osFamily)
+              .version(osVersion)
+              .is64Bit(is64bit(from))
+              .build();
+
+      return new ImageBuilder()
+              .ids(from.getId())
+              .name(get(Splitter.on(":").split(description), 0))
+              .description(description)
+              .operatingSystem(os)
+              .status(Image.Status.AVAILABLE)
+              .build();
+   }
+
+   private boolean is64bit(org.jclouds.docker.domain.Image inspectedImage) {
+      if (inspectedImage.getArchitecture() == null) return true;
+      return inspectedImage.getArchitecture().matches("x86_64|amd64");
+   }
+
+   /**
+    * Parses the item description to determine the OSFamily
+    *
+    * @return the @see OsFamily or OsFamily.UNRECOGNIZED
+    */
+   private Function<String, OsFamily> osFamily() {
+      return new Function<String, OsFamily>() {
+
+         @Override
+         public OsFamily apply(final String description) {
+            if (description != null) {
+               if (description.contains(CENTOS)) return OsFamily.CENTOS;
+               else if (description.contains(UBUNTU)) return OsFamily.UBUNTU;
+            }
+            return OsFamily.UNRECOGNIZED;
+         }
+      };
+   }
+
+   private String parseVersion(String description) {
+      String version = get(Splitter.on(":").split(description), 1);
+      logger.debug("os version for item: %s is %s", description, version);
+      return version;
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/functions/StateToStatus.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/functions/StateToStatus.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/functions/StateToStatus.java
new file mode 100644
index 0000000..2d87384
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/functions/StateToStatus.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.compute.functions;
+
+import javax.inject.Singleton;
+
+import org.jclouds.compute.domain.NodeMetadata.Status;
+import org.jclouds.docker.domain.State;
+
+import com.google.common.base.Function;
+
+/**
+ * Transforms an {@link org.jclouds.docker.domain.Container} to the jclouds 
portable model.
+ */
+@Singleton
+public class StateToStatus implements Function<State, Status> {
+
+   @Override
+   public Status apply(final State state) {
+      if (state == null) return Status.UNRECOGNIZED;
+      return state.isRunning() ? Status.RUNNING : Status.TERMINATED;
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/options/DockerTemplateOptions.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/options/DockerTemplateOptions.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/options/DockerTemplateOptions.java
new file mode 100644
index 0000000..5e4669b
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/options/DockerTemplateOptions.java
@@ -0,0 +1,485 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.compute.options;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import org.jclouds.compute.options.TemplateOptions;
+import org.jclouds.domain.LoginCredentials;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.scriptbuilder.domain.Statement;
+
+import java.util.List;
+import java.util.Map;
+
+import static com.google.common.base.Objects.equal;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Contains options supported in the {@code ComputeService#runNode} operation 
on the
+ * "docker" provider. <h2>Usage</h2> The recommended way to instantiate a
+ * DockerTemplateOptions object is to statically import 
DockerTemplateOptions.* and invoke a static
+ * creation method followed by an instance mutator (if needed):
+ * <p/>
+ * <code>
+ * import static 
org.jclouds.docker.compute.options.DockerTemplateOptions.Builder.*;
+ * <p/>
+ * ComputeService api = // get connection
+ * templateBuilder.options(inboundPorts(22, 80, 8080, 443));
+ * Set<? extends NodeMetadata> set = api.createNodesInGroup(tag, 2, 
templateBuilder.build());
+ * <code>
+ */
+public class DockerTemplateOptions extends TemplateOptions implements 
Cloneable {
+
+   protected Optional<String> dns = Optional.absent();
+   protected Optional<String> hostname = Optional.absent();
+   protected Optional<Integer> memory = Optional.absent();
+   protected Optional<Integer> cpuShares = Optional.absent();
+   protected Optional<List<String>> commands = Optional.absent();
+   protected Optional<Map<String, String>> volumes = Optional.absent();
+
+   @Override
+   public DockerTemplateOptions clone() {
+      DockerTemplateOptions options = new DockerTemplateOptions();
+      copyTo(options);
+      return options;
+   }
+
+   @Override
+   public void copyTo(TemplateOptions to) {
+      super.copyTo(to);
+      if (to instanceof DockerTemplateOptions) {
+         DockerTemplateOptions eTo = DockerTemplateOptions.class.cast(to);
+         if (volumes.isPresent()) {
+            eTo.volumes(getVolumes().get());
+         }
+         if (hostname.isPresent()) {
+            eTo.hostname(hostname.get());
+         }
+         if (dns.isPresent()) {
+            eTo.dns(dns.get());
+         }
+         if (memory.isPresent()) {
+            eTo.memory(memory.get());
+         }
+         if (commands.isPresent()) {
+            eTo.commands(commands.get());
+         }
+         if (cpuShares.isPresent()) {
+            eTo.cpuShares(cpuShares.get());
+         }
+      }
+   }
+
+   @Override
+   public boolean equals(Object o) {
+      if (this == o)
+         return true;
+      if (o == null || getClass() != o.getClass())
+         return false;
+      DockerTemplateOptions that = DockerTemplateOptions.class.cast(o);
+      return super.equals(that) && equal(this.volumes, that.volumes) &&
+              equal(this.hostname, that.hostname) &&
+              equal(this.dns, that.dns) &&
+              equal(this.memory, that.memory) &&
+              equal(this.commands, that.commands) &&
+              equal(this.cpuShares, that.cpuShares);
+   }
+
+   @Override
+   public int hashCode() {
+      return Objects.hashCode(super.hashCode(), volumes, hostname, dns, 
memory, commands, cpuShares);
+   }
+
+   @Override
+   public String toString() {
+      return Objects.toStringHelper(this)
+              .add("dns", dns)
+              .add("hostname", hostname)
+              .add("memory", memory)
+              .add("cpuShares", cpuShares)
+              .add("commands", commands)
+              .add("volumes", volumes)
+              .toString();
+   }
+
+   public static final DockerTemplateOptions NONE = new 
DockerTemplateOptions();
+
+   public DockerTemplateOptions volumes(Map<String, String> volumes) {
+      this.volumes = Optional.<Map<String, String>> 
of(ImmutableMap.copyOf(volumes));
+      return this;
+   }
+
+   public TemplateOptions dns(@Nullable String dns) {
+      this.dns = Optional.fromNullable(dns);
+      return this;
+   }
+
+   public TemplateOptions hostname(@Nullable String hostname) {
+      this.hostname = Optional.fromNullable(hostname);
+      return this;
+   }
+
+   public TemplateOptions memory(@Nullable Integer memory) {
+      this.memory = Optional.fromNullable(memory);
+      return this;
+   }
+
+   public TemplateOptions commands(Iterable<String> commands) {
+      for (String command : checkNotNull(commands, "commands"))
+         checkNotNull(command, "all commands must be non-empty");
+      this.commands = Optional.<List<String>> 
of(ImmutableList.copyOf(commands));
+      return this;
+   }
+
+   public TemplateOptions commands(String... commands) {
+      return commands(ImmutableList.copyOf(checkNotNull(commands, 
"commands")));
+   }
+
+   public TemplateOptions cpuShares(@Nullable Integer cpuShares) {
+      this.cpuShares = Optional.fromNullable(cpuShares);
+      return this;
+   }
+
+   public Optional<Map<String, String>> getVolumes() {
+      return volumes;
+   }
+
+   public Optional<String> getDns() { return dns; }
+
+   public Optional<String> getHostname() { return hostname; }
+
+   public Optional<Integer> getMemory() { return memory; }
+
+   public Optional<List<String>> getCommands() {
+      return commands;
+   }
+
+   public Optional<Integer> getCpuShares() { return cpuShares; }
+
+   public static class Builder {
+
+      /**
+       * @see DockerTemplateOptions#volumes(java.util.Map)
+       */
+      public static DockerTemplateOptions volumes(Map<String, String> volumes) 
{
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return DockerTemplateOptions.class.cast(options.volumes(volumes));
+      }
+
+      /**
+       * @see DockerTemplateOptions#dns(String)
+       */
+      public static DockerTemplateOptions dns(String dns) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return DockerTemplateOptions.class.cast(options.dns(dns));
+      }
+
+      /**
+       * @see DockerTemplateOptions#hostname(String)
+       */
+      public static DockerTemplateOptions hostname(String hostname) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return DockerTemplateOptions.class.cast(options.hostname(hostname));
+      }
+
+      /**
+       * @see DockerTemplateOptions#memory(int)
+       */
+      public static DockerTemplateOptions memory(int memory) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return DockerTemplateOptions.class.cast(options.memory(memory));
+      }
+
+      /**
+       * @see DockerTemplateOptions#commands(Iterable)
+       */
+      public static DockerTemplateOptions commands(String... commands) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return DockerTemplateOptions.class.cast(options.commands(commands));
+      }
+
+      public static DockerTemplateOptions commands(Iterable<String> commands) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return DockerTemplateOptions.class.cast(options.commands(commands));
+      }
+
+      /**
+       * @see DockerTemplateOptions#cpuShares(int)
+       */
+      public static DockerTemplateOptions cpuShares(int cpuShares) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return DockerTemplateOptions.class.cast(options.cpuShares(cpuShares));
+      }
+
+      // methods that only facilitate returning the correct object type
+
+      /**
+       * @see TemplateOptions#inboundPorts
+       */
+      public static DockerTemplateOptions inboundPorts(int... ports) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return DockerTemplateOptions.class.cast(options.inboundPorts(ports));
+      }
+
+      /**
+       * @see TemplateOptions#port
+       */
+      public static DockerTemplateOptions blockOnPort(int port, int seconds) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return DockerTemplateOptions.class.cast(options.blockOnPort(port, 
seconds));
+      }
+
+      /**
+       * @see TemplateOptions#installPrivateKey
+       */
+      public static DockerTemplateOptions installPrivateKey(String rsaKey) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return 
DockerTemplateOptions.class.cast(options.installPrivateKey(rsaKey));
+      }
+
+      /**
+       * @see TemplateOptions#authorizePublicKey
+       */
+      public static DockerTemplateOptions authorizePublicKey(String rsaKey) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return 
DockerTemplateOptions.class.cast(options.authorizePublicKey(rsaKey));
+      }
+
+      /**
+       * @see TemplateOptions#userMetadata
+       */
+      public static DockerTemplateOptions userMetadata(Map<String, String> 
userMetadata) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return 
DockerTemplateOptions.class.cast(options.userMetadata(userMetadata));
+      }
+
+      /**
+       * @see TemplateOptions#nodeNames(Iterable)
+       */
+      public static DockerTemplateOptions nodeNames(Iterable<String> 
nodeNames) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return DockerTemplateOptions.class.cast(options.nodeNames(nodeNames));
+      }
+
+      /**
+       * @see TemplateOptions#networks(Iterable)
+       */
+      public static DockerTemplateOptions networks(Iterable<String> networks) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return DockerTemplateOptions.class.cast(options.networks(networks));
+      }
+
+      /**
+       * @see TemplateOptions#overrideLoginUser
+       */
+      public static DockerTemplateOptions overrideLoginUser(String user) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return options.overrideLoginUser(user);
+      }
+
+      /**
+       * @see TemplateOptions#overrideLoginPassword
+       */
+      public static DockerTemplateOptions overrideLoginPassword(String 
password) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return options.overrideLoginPassword(password);
+      }
+
+      /**
+       * @see TemplateOptions#overrideLoginPrivateKey
+       */
+      public static DockerTemplateOptions overrideLoginPrivateKey(String 
privateKey) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return options.overrideLoginPrivateKey(privateKey);
+      }
+
+      /**
+       * @see TemplateOptions#overrideAuthenticateSudo
+       */
+      public static DockerTemplateOptions overrideAuthenticateSudo(boolean 
authenticateSudo) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return options.overrideAuthenticateSudo(authenticateSudo);
+      }
+
+      /**
+       * @see TemplateOptions#overrideLoginCredentials
+       */
+      public static DockerTemplateOptions 
overrideLoginCredentials(LoginCredentials credentials) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return options.overrideLoginCredentials(credentials);
+      }
+
+      /**
+       * @see TemplateOptions#blockUntilRunning
+       */
+      public static DockerTemplateOptions blockUntilRunning(boolean 
blockUntilRunning) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return options.blockUntilRunning(blockUntilRunning);
+      }
+
+   }
+
+   // methods that only facilitate returning the correct object type
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions blockOnPort(int port, int seconds) {
+      return DockerTemplateOptions.class.cast(super.blockOnPort(port, 
seconds));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions inboundPorts(int... ports) {
+      return DockerTemplateOptions.class.cast(super.inboundPorts(ports));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions authorizePublicKey(String publicKey) {
+      return 
DockerTemplateOptions.class.cast(super.authorizePublicKey(publicKey));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions installPrivateKey(String privateKey) {
+      return 
DockerTemplateOptions.class.cast(super.installPrivateKey(privateKey));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions blockUntilRunning(boolean blockUntilRunning) {
+      return 
DockerTemplateOptions.class.cast(super.blockUntilRunning(blockUntilRunning));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions dontAuthorizePublicKey() {
+      return DockerTemplateOptions.class.cast(super.dontAuthorizePublicKey());
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions nameTask(String name) {
+      return DockerTemplateOptions.class.cast(super.nameTask(name));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions runAsRoot(boolean runAsRoot) {
+      return DockerTemplateOptions.class.cast(super.runAsRoot(runAsRoot));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions runScript(Statement script) {
+      return DockerTemplateOptions.class.cast(super.runScript(script));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions overrideLoginCredentials(LoginCredentials 
overridingCredentials) {
+      return 
DockerTemplateOptions.class.cast(super.overrideLoginCredentials(overridingCredentials));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions overrideLoginPassword(String password) {
+      return 
DockerTemplateOptions.class.cast(super.overrideLoginPassword(password));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions overrideLoginPrivateKey(String privateKey) {
+      return 
DockerTemplateOptions.class.cast(super.overrideLoginPrivateKey(privateKey));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions overrideLoginUser(String loginUser) {
+      return 
DockerTemplateOptions.class.cast(super.overrideLoginUser(loginUser));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions overrideAuthenticateSudo(boolean 
authenticateSudo) {
+      return 
DockerTemplateOptions.class.cast(super.overrideAuthenticateSudo(authenticateSudo));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions userMetadata(Map<String, String> userMetadata) 
{
+      return 
DockerTemplateOptions.class.cast(super.userMetadata(userMetadata));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions userMetadata(String key, String value) {
+      return DockerTemplateOptions.class.cast(super.userMetadata(key, value));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions nodeNames(Iterable<String> nodeNames) {
+      return DockerTemplateOptions.class.cast(super.nodeNames(nodeNames));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public DockerTemplateOptions networks(Iterable<String> networks) {
+      return DockerTemplateOptions.class.cast(super.networks(networks));
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java
new file mode 100644
index 0000000..7bbead3
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java
@@ -0,0 +1,232 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.compute.strategy;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.find;
+
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Resource;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.jclouds.compute.ComputeServiceAdapter;
+import org.jclouds.compute.domain.Hardware;
+import org.jclouds.compute.domain.HardwareBuilder;
+import org.jclouds.compute.domain.Processor;
+import org.jclouds.compute.domain.Template;
+import org.jclouds.compute.reference.ComputeServiceConstants;
+import org.jclouds.docker.DockerApi;
+import org.jclouds.docker.compute.options.DockerTemplateOptions;
+import org.jclouds.docker.domain.Config;
+import org.jclouds.docker.domain.Container;
+import org.jclouds.docker.domain.HostConfig;
+import org.jclouds.docker.domain.Image;
+import org.jclouds.docker.options.ListContainerOptions;
+import org.jclouds.docker.options.RemoveContainerOptions;
+import org.jclouds.domain.Location;
+import org.jclouds.domain.LoginCredentials;
+import org.jclouds.logging.Logger;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
+/**
+ * defines the connection between the {@link org.jclouds.docker.DockerApi} 
implementation and
+ * the jclouds {@link org.jclouds.compute.ComputeService}
+ */
+@Singleton
+public class DockerComputeServiceAdapter implements
+        ComputeServiceAdapter<Container, Hardware, Image, Location> {
+
+   @Resource
+   @Named(ComputeServiceConstants.COMPUTE_LOGGER)
+   protected Logger logger = Logger.NULL;
+
+   private final DockerApi api;
+
+   @Inject
+   public DockerComputeServiceAdapter(DockerApi api) {
+      this.api = checkNotNull(api, "api");
+   }
+
+   @Override
+   public NodeAndInitialCredentials<Container> 
createNodeWithGroupEncodedIntoName(String group, String name,
+                                                                               
   Template template) {
+      checkNotNull(template, "template was null");
+      checkNotNull(template.getOptions(), "template options was null");
+
+      String imageId = checkNotNull(template.getImage().getId(), "template 
image id must not be null");
+      String loginUser = template.getImage().getDefaultCredentials().getUser();
+      String loginUserPassword = 
template.getImage().getDefaultCredentials().getPassword();
+
+      DockerTemplateOptions templateOptions = 
DockerTemplateOptions.class.cast(template.getOptions());
+      int[] inboundPorts = templateOptions.getInboundPorts();
+
+      Map<String, Object> exposedPorts = Maps.newHashMap();
+      for (int inboundPort : inboundPorts) {
+         exposedPorts.put(inboundPort + "/tcp", Maps.newHashMap());
+      }
+
+      Config.Builder containerConfigBuilder = Config.builder()
+              .imageId(imageId)
+              .exposedPorts(exposedPorts);
+
+      if (templateOptions.getCommands().isPresent()) {
+         containerConfigBuilder.cmd(templateOptions.getCommands().get());
+      }
+
+      if (templateOptions.getMemory().isPresent()) {
+         containerConfigBuilder.memory(templateOptions.getMemory().get());
+      }
+
+      if (templateOptions.getCpuShares().isPresent()) {
+         
containerConfigBuilder.cpuShares(templateOptions.getCpuShares().get());
+      }
+
+      if (templateOptions.getVolumes().isPresent()) {
+         Map<String, Object> volumes = Maps.newLinkedHashMap();
+         for (String containerDir : 
templateOptions.getVolumes().get().values()) {
+            volumes.put(containerDir, Maps.newHashMap());
+         }
+         containerConfigBuilder.volumes(volumes);
+      }
+      Config containerConfig = containerConfigBuilder.build();
+
+      logger.debug(">> creating new container with containerConfig(%s)", 
containerConfig);
+      Container container = api.getRemoteApi().createContainer(name, 
containerConfig);
+      logger.trace("<< container(%s)", container.getId());
+
+      HostConfig.Builder hostConfigBuilder = HostConfig.builder()
+              .publishAllPorts(true)
+              .privileged(true);
+
+      if (templateOptions.getDns().isPresent()) {
+         hostConfigBuilder.dns(templateOptions.getDns().get());
+      }
+      // set up for volume bindings
+      if (templateOptions.getVolumes().isPresent()) {
+         for (Map.Entry<String, String> entry : 
templateOptions.getVolumes().get().entrySet()) {
+            hostConfigBuilder.binds(ImmutableList.of(entry.getKey() + ":" + 
entry.getValue()));
+         }
+      }
+      HostConfig hostConfig = hostConfigBuilder.build();
+
+      api.getRemoteApi().startContainer(container.getId(), hostConfig);
+      container = api.getRemoteApi().inspectContainer(container.getId());
+      if (container.getState().getExitCode() != 0) {
+         destroyNode(container.getId());
+         throw new IllegalStateException(String.format("Container %s has not 
started correctly", container.getId()));
+      }
+      return new NodeAndInitialCredentials<Container>(container, 
container.getId(),
+              
LoginCredentials.builder().user(loginUser).password(loginUserPassword).build());
+   }
+
+   @Override
+   public Iterable<Hardware> listHardwareProfiles() {
+      Set<Hardware> hardware = Sets.newLinkedHashSet();
+      // todo they are only placeholders at the moment
+      hardware.add(new 
HardwareBuilder().ids("micro").hypervisor("lxc").name("micro").processor(new 
Processor(1, 1)).ram(512).build());
+      hardware.add(new 
HardwareBuilder().ids("small").hypervisor("lxc").name("small").processor(new 
Processor(1, 1)).ram(1024).build());
+      hardware.add(new 
HardwareBuilder().ids("medium").hypervisor("lxc").name("medium").processor(new 
Processor(1, 1)).ram(2048).build());
+      hardware.add(new 
HardwareBuilder().ids("large").hypervisor("lxc").name("large").processor(new 
Processor(1, 1)).ram(3072).build());
+      return hardware;
+   }
+
+   @Override
+   public Set<Image> listImages() {
+      Set<Image> images = Sets.newHashSet();
+      for (Image image : api.getRemoteApi().listImages()) {
+         // less efficient than just listImages but returns richer json that 
needs repoTags coming from listImages
+         Image inspected = api.getRemoteApi().inspectImage(image.getId());
+         if (inspected.getRepoTags().isEmpty()) {
+            inspected = 
Image.builder().fromImage(inspected).repoTags(image.getRepoTags()).build();
+         }
+         images.add(inspected);
+      }
+      return images;
+   }
+
+   @Override
+   public Image getImage(final String imageId) {
+      // less efficient than just inspectImage but listImages return repoTags
+      return find(listImages(), new Predicate<Image>() {
+
+         @Override
+         public boolean apply(Image input) {
+            return input.getId().equals(imageId);
+         }
+      }, null);
+   }
+
+   @Override
+   public Iterable<Container> listNodes() {
+      Set<Container> containers = Sets.newHashSet();
+      for (Container container : 
api.getRemoteApi().listContainers(ListContainerOptions.Builder.all(true))) {
+         // less efficient than just listNodes but returns richer json
+         
containers.add(api.getRemoteApi().inspectContainer(container.getId()));
+      }
+      return containers;
+   }
+
+   @Override
+   public Iterable<Container> listNodesByIds(final Iterable<String> ids) {
+      Set<Container> containers = Sets.newHashSet();
+      for (String id : ids) {
+         containers.add(api.getRemoteApi().inspectContainer(id));
+      }
+      return containers;
+   }
+
+   @Override
+   public Iterable<Location> listLocations() {
+      return ImmutableSet.of();
+   }
+
+   @Override
+   public Container getNode(String id) {
+      return api.getRemoteApi().inspectContainer(id);
+   }
+
+   @Override
+   public void destroyNode(String id) {
+      api.getRemoteApi().removeContainer(id, 
RemoveContainerOptions.Builder.force(true));
+   }
+
+   @Override
+   public void rebootNode(String id) {
+      api.getRemoteApi().stopContainer(id);
+      api.getRemoteApi().startContainer(id);
+   }
+
+   @Override
+   public void resumeNode(String id) {
+      throw new UnsupportedOperationException("resume not supported");
+   }
+
+   @Override
+   public void suspendNode(String id) {
+      throw new UnsupportedOperationException("suspend not supported");
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/config/DockerHttpApiModule.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/config/DockerHttpApiModule.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/config/DockerHttpApiModule.java
new file mode 100644
index 0000000..e6da554
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/config/DockerHttpApiModule.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.config;
+
+import org.jclouds.docker.DockerApi;
+import org.jclouds.docker.handlers.DockerErrorHandler;
+import org.jclouds.http.HttpErrorHandler;
+import org.jclouds.http.annotation.ClientError;
+import org.jclouds.http.annotation.Redirection;
+import org.jclouds.http.annotation.ServerError;
+import org.jclouds.rest.ConfiguresHttpApi;
+import org.jclouds.rest.config.HttpApiModule;
+
+/**
+ * Configures the Docker connection.
+ */
+@ConfiguresHttpApi
+public class DockerHttpApiModule extends HttpApiModule<DockerApi> {
+
+   @Override
+   protected void bindErrorHandlers() {
+      
bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(DockerErrorHandler.class);
+      
bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(DockerErrorHandler.class);
+      
bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(DockerErrorHandler.class);
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/config/DockerParserModule.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/config/DockerParserModule.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/config/DockerParserModule.java
new file mode 100644
index 0000000..533184f
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/config/DockerParserModule.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.config;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParseException;
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+import org.jclouds.docker.domain.Container;
+import org.jclouds.json.config.GsonModule;
+
+import javax.inject.Singleton;
+import java.lang.reflect.Type;
+import java.util.Map;
+
+public class DockerParserModule extends AbstractModule {
+
+   @Override
+   protected void configure() {
+      
bind(GsonModule.DateAdapter.class).to(GsonModule.Iso8601DateAdapter.class);
+   }
+
+   @Provides
+   @Singleton
+   public Map<Type, Object> provideCustomAdapterBindings() {
+      return new ImmutableMap.Builder<Type, Object>()
+              .put(Container.class, new ContainerTypeAdapter())
+              .build();
+   }
+
+   protected static class ContainerTypeAdapter implements 
JsonDeserializer<Container> {
+
+      @Override
+      public Container deserialize(JsonElement json, Type typeOfT, 
JsonDeserializationContext context) throws
+              JsonParseException {
+         Gson gson = new GsonBuilder().serializeNulls().create();
+         final JsonObject jsonObject = json.getAsJsonObject();
+         return gson.fromJson(jsonObject, Container.class);
+      }
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/config/DockerProperties.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/config/DockerProperties.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/config/DockerProperties.java
new file mode 100644
index 0000000..b870fea
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/config/DockerProperties.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.config;
+
+public class DockerProperties {
+
+   /**
+    * default Docker host password
+    */
+   public static final String HOST_PASSWORD = "jclouds.docker.host.password";
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Config.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Config.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Config.java
new file mode 100644
index 0000000..9c80472
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Config.java
@@ -0,0 +1,457 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.domain;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.gson.annotations.SerializedName;
+import org.jclouds.javax.annotation.Nullable;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+import java.util.Map;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class Config {
+
+   @SerializedName("Hostname")
+   private final String hostname;
+   @SerializedName("Domainname")
+   private final String domainName;
+   @SerializedName("User")
+   private final String user;
+   @SerializedName("Memory")
+   private final int memory;
+   @SerializedName("MemorySwap")
+   private final int memorySwap;
+   @SerializedName("CpuShares")
+   private final int cpuShares;
+   @SerializedName("AttachStdin")
+   private final boolean attachStdin;
+   @SerializedName("AttachStdout")
+   private final boolean attachStdout;
+   @SerializedName("AttachStderr")
+   private final boolean attachStderr;
+   @SerializedName("ExposedPorts")
+   private final Map<String, ?> exposedPorts;
+   @SerializedName("Tty")
+   private final boolean tty;
+   @SerializedName("OpenStdin")
+   private final boolean openStdin;
+   @SerializedName("StdinOnce")
+   private final boolean stdinOnce;
+   @SerializedName("Env")
+   private final List<String> env;
+   @SerializedName("Cmd")
+   private final List<String> cmd;
+   @SerializedName("Dns")
+   private final List<String> dns;
+   @SerializedName("Image")
+   private final String imageId;
+   @SerializedName("Volumes")
+   private final Map<String, ?> volumes;
+   @SerializedName("VolumesFrom")
+   private final String volumesFrom;
+   @SerializedName("WorkingDir")
+   private final String workingDir;
+   @SerializedName("Entrypoint")
+   private final String entrypoint;
+   @SerializedName("NetworkDisabled")
+   private final boolean networkDisabled;
+   @SerializedName("OnBuild")
+   private final List<String> onBuild;
+
+
+   @ConstructorProperties({ "Hostname", "Domainname", "User", "Memory", 
"MemorySwap", "CpuShares", "AttachStdin",
+           "AttachStdout", "AttachStderr", "ExposedPorts", "Tty", "OpenStdin", 
"StdinOnce", "Env", "Cmd",
+           "Dns", "Image", "Volumes", "VolumesFrom", "WorkingDir", 
"Entrypoint", "NetworkDisabled", "OnBuild" })
+   protected Config(@Nullable String hostname, @Nullable String domainName, 
@Nullable String user,
+                             int memory, int memorySwap, int cpuShares, 
boolean attachStdin, boolean attachStdout,
+                             boolean attachStderr, Map<String, ?> 
exposedPorts, boolean tty, boolean openStdin,
+                             boolean stdinOnce, @Nullable List<String> env, 
@Nullable List<String> cmd,
+                             @Nullable List<String> dns, String imageId, 
@Nullable Map<String, ?> volumes,
+                             @Nullable String volumesFrom, @Nullable String 
workingDir, @Nullable String entrypoint,
+                             @Nullable boolean networkDisabled, @Nullable 
List<String> onBuild) {
+      this.hostname = hostname;
+      this.domainName = domainName;
+      this.user = user;
+      this.memory = checkNotNull(memory, "memory");
+      this.memorySwap = checkNotNull(memorySwap, "memorySwap");
+      this.cpuShares = checkNotNull(cpuShares, "cpuShares");
+      this.attachStdin = checkNotNull(attachStdin, "attachStdin");
+      this.attachStdout = checkNotNull(attachStdout, "attachStdout");
+      this.attachStderr = checkNotNull(attachStderr, "attachStderr");
+      this.exposedPorts = exposedPorts != null ? 
ImmutableMap.copyOf(exposedPorts) : ImmutableMap.<String, Object> of();
+      this.tty = checkNotNull(tty, "tty");
+      this.openStdin = checkNotNull(openStdin, "openStdin");
+      this.stdinOnce = checkNotNull(stdinOnce, "stdinOnce");
+      this.env = env != null ? ImmutableList.copyOf(env) : 
ImmutableList.<String> of();
+      this.cmd = cmd != null ? ImmutableList.copyOf(cmd) : 
ImmutableList.<String> of();
+      this.dns = dns != null ? ImmutableList.copyOf(dns) : 
ImmutableList.<String> of();
+      this.imageId = checkNotNull(imageId, "imageId");
+      this.volumes = volumes != null ? ImmutableMap.copyOf(volumes) : 
ImmutableMap.<String, Object> of();
+      this.volumesFrom = volumesFrom;
+      this.workingDir = workingDir;
+      this.entrypoint = entrypoint;
+      this.networkDisabled = networkDisabled;
+      this.onBuild = onBuild != null ? ImmutableList.copyOf(onBuild) : 
ImmutableList.<String> of();
+   }
+
+   public String getHostname() {
+      return hostname;
+   }
+
+   public String getDomainName() {
+      return domainName;
+   }
+
+   public String getUser() {
+      return user;
+   }
+
+   public int getMemory() {
+      return memory;
+   }
+
+   public int getMemorySwap() {
+      return memorySwap;
+   }
+
+   public int getCpuShares() {
+      return cpuShares;
+   }
+
+   public boolean isAttachStdin() {
+      return attachStdin;
+   }
+
+   public boolean isAttachStdout() {
+      return attachStdout;
+   }
+
+   public boolean isAttachStderr() {
+      return attachStderr;
+   }
+
+   public Map<String, ?> getExposedPorts() {
+      return exposedPorts;
+   }
+
+   public boolean isTty() {
+      return tty;
+   }
+
+   public boolean isOpenStdin() {
+      return openStdin;
+   }
+
+   public boolean isStdinOnce() {
+      return stdinOnce;
+   }
+
+   public List<String> getEnv() {
+      return env;
+   }
+
+   public List<String> getCmd() {
+      return cmd;
+   }
+
+   public List<String> getDns() {
+      return dns;
+   }
+
+   public String getImageId() {
+      return imageId;
+   }
+
+   public Map<String, ?> getVolumes() {
+      return volumes;
+   }
+
+   public String getVolumesFrom() {
+      return volumesFrom;
+   }
+
+   public String getWorkingDir() {
+      return workingDir;
+   }
+
+   public String getEntrypoint() {
+      return entrypoint;
+   }
+
+   public boolean isNetworkDisabled() {
+      return networkDisabled;
+   }
+
+   public List<String> getOnBuild() {
+      return onBuild;
+   }
+
+   @Override
+   public boolean equals(Object o) {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      Config that = (Config) o;
+
+      return Objects.equal(this.hostname, that.hostname) &&
+              Objects.equal(this.domainName, that.domainName) &&
+              Objects.equal(this.user, that.user) &&
+              Objects.equal(this.memory, that.memory) &&
+              Objects.equal(this.memorySwap, that.memorySwap) &&
+              Objects.equal(this.cpuShares, that.cpuShares) &&
+              Objects.equal(this.attachStdin, that.attachStdin) &&
+              Objects.equal(this.attachStdout, that.attachStdout) &&
+              Objects.equal(this.attachStderr, that.attachStderr) &&
+              Objects.equal(this.exposedPorts, that.exposedPorts) &&
+              Objects.equal(this.tty, that.tty) &&
+              Objects.equal(this.openStdin, that.openStdin) &&
+              Objects.equal(this.stdinOnce, that.stdinOnce) &&
+              Objects.equal(this.env, that.env) &&
+              Objects.equal(this.cmd, that.cmd) &&
+              Objects.equal(this.dns, that.dns) &&
+              Objects.equal(this.imageId, that.imageId) &&
+              Objects.equal(this.volumes, that.volumes) &&
+              Objects.equal(this.volumesFrom, that.volumesFrom) &&
+              Objects.equal(this.workingDir, that.workingDir) &&
+              Objects.equal(this.entrypoint, that.entrypoint) &&
+              Objects.equal(this.onBuild, that.onBuild);
+   }
+
+   @Override
+   public int hashCode() {
+      return Objects.hashCode(hostname, domainName, user, memory, memorySwap, 
cpuShares, attachStdin, attachStdout,
+              attachStderr, exposedPorts, tty, openStdin, stdinOnce, env, cmd, 
dns, imageId, volumes,
+              volumesFrom, workingDir, entrypoint, networkDisabled, onBuild);
+   }
+
+   @Override
+   public String toString() {
+      return Objects.toStringHelper(this)
+              .add("hostname", hostname)
+              .add("domainName", domainName)
+              .add("user", user)
+              .add("memory", memory)
+              .add("memorySwap", memorySwap)
+              .add("cpuShares", cpuShares)
+              .add("attachStdin", attachStdin)
+              .add("attachStdout", attachStdout)
+              .add("attachStderr", attachStderr)
+              .add("exposedPorts", exposedPorts)
+              .add("tty", tty)
+              .add("openStdin", openStdin)
+              .add("stdinOnce", stdinOnce)
+              .add("env", env)
+              .add("cmd", cmd)
+              .add("dns", dns)
+              .add("imageId", imageId)
+              .add("volumes", volumes)
+              .add("volumesFrom", volumesFrom)
+              .add("workingDir", workingDir)
+              .add("entrypoint", entrypoint)
+              .add("networkDisabled", networkDisabled)
+              .add("onBuild", onBuild)
+              .toString();
+   }
+
+   public static Builder builder() {
+      return new Builder();
+   }
+
+   public Builder toBuilder() {
+      return builder().fromConfig(this);
+   }
+
+   public static final class Builder {
+      private String hostname;
+      private String domainName;
+      private String user;
+      private int memory;
+      private int memorySwap;
+      private int cpuShares;
+      private boolean attachStdin;
+      private boolean attachStdout;
+      private boolean attachStderr;
+      private Map<String, ?> exposedPorts = ImmutableMap.of();
+      private boolean tty;
+      private boolean openStdin;
+      private boolean stdinOnce;
+      private List<String> env = ImmutableList.of();
+      private List<String> cmd = ImmutableList.of();
+      private List<String> dns = ImmutableList.of();
+      private String imageId;
+      private Map<String, ?> volumes = ImmutableMap.of();
+      private String volumesFrom;
+      private String workingDir;
+      private String entrypoint;
+      private boolean networkDisabled;
+      private List<String> onBuild = ImmutableList.of();
+
+      public Builder hostname(String hostname) {
+         this.hostname = hostname;
+         return this;
+      }
+
+      public Builder domainName(String domainName) {
+         this.domainName = domainName;
+         return this;
+      }
+
+      public Builder user(String user) {
+         this.user = user;
+         return this;
+      }
+
+      public Builder memory(int memory) {
+         this.memory = memory;
+         return this;
+      }
+
+      public Builder memorySwap(int memorySwap) {
+         this.memorySwap = memorySwap;
+         return this;
+      }
+
+      public Builder cpuShares(int cpuShares) {
+         this.cpuShares = cpuShares;
+         return this;
+      }
+
+      public Builder attachStdin(boolean attachStdin) {
+         this.attachStdin = attachStdin;
+         return this;
+      }
+
+      public Builder attachStdout(boolean attachStdout) {
+         this.attachStdout = attachStdout;
+         return this;
+      }
+
+      public Builder attachStderr(boolean attachStderr) {
+         this.attachStderr = attachStderr;
+         return this;
+      }
+
+      public Builder exposedPorts(Map<String, ?> exposedPorts) {
+         this.exposedPorts = ImmutableMap.copyOf(checkNotNull(exposedPorts, 
"exposedPorts"));
+         return this;
+      }
+
+      public Builder tty(boolean tty) {
+         this.tty = tty;
+         return this;
+      }
+
+      public Builder openStdin(boolean openStdin) {
+         this.openStdin = openStdin;
+         return this;
+      }
+
+      public Builder stdinOnce(boolean stdinOnce) {
+         this.stdinOnce = stdinOnce;
+         return this;
+      }
+
+      public Builder env(List<String> env) {
+         this.env = env;
+         return this;
+      }
+
+      public Builder cmd(List<String> cmd) {
+         this.cmd = ImmutableList.copyOf(checkNotNull(cmd, "cmd"));
+         return this;
+      }
+
+      public Builder dns(List<String> dns) {
+         this.dns = ImmutableList.copyOf(checkNotNull(dns, "dns"));
+         return this;
+      }
+
+      public Builder imageId(String imageId) {
+         this.imageId = imageId;
+         return this;
+      }
+
+      public Builder volumes(Map<String, ?> volumes) {
+         this.volumes = ImmutableMap.copyOf(checkNotNull(volumes, "volumes"));
+         return this;
+      }
+
+      public Builder volumesFrom(String volumesFrom) {
+         this.volumesFrom = volumesFrom;
+         return this;
+      }
+
+      public Builder workingDir(String workingDir) {
+         this.workingDir = workingDir;
+         return this;
+      }
+
+      public Builder entrypoint(String entrypoint) {
+         this.entrypoint = entrypoint;
+         return this;
+      }
+
+      public Builder networkDisabled(boolean networkDisabled) {
+         this.networkDisabled = networkDisabled;
+         return this;
+      }
+
+      public Builder onBuild(List<String> onBuild) {
+         this.onBuild = ImmutableList.copyOf(checkNotNull(onBuild, "onBuild"));
+         return this;
+      }
+
+      public Config build() {
+         return new Config(hostname, domainName, user, memory, memorySwap, 
cpuShares, attachStdin, attachStdout,
+                 attachStderr, exposedPorts, tty, openStdin, stdinOnce, env, 
cmd, dns, imageId, volumes,
+                 volumesFrom, workingDir, entrypoint, networkDisabled, 
onBuild);
+      }
+
+      public Builder fromConfig(Config in) {
+         return this
+                 .hostname(in.getHostname())
+                 .domainName(in.getDomainName())
+                 .user(in.getUser())
+                 .memory(in.getMemory())
+                 .memorySwap(in.getMemorySwap())
+                 .cpuShares(in.getCpuShares())
+                 .attachStdin(in.isAttachStdin())
+                 .attachStdout(in.isAttachStdout())
+                 .attachStderr(in.isAttachStderr())
+                 .exposedPorts(in.getExposedPorts())
+                 .tty(in.isTty())
+                 .openStdin(in.isOpenStdin())
+                 .stdinOnce(in.isStdinOnce())
+                 .env(in.getEnv())
+                 .cmd(in.getCmd())
+                 .dns(in.getDns())
+                 .imageId(in.getImageId())
+                 .volumes(in.getVolumes())
+                 .volumesFrom(in.getVolumesFrom())
+                 .workingDir(in.getWorkingDir())
+                 .entrypoint(in.getEntrypoint())
+                 .networkDisabled(in.isNetworkDisabled())
+                 .onBuild(in.getOnBuild());
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Container.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Container.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Container.java
new file mode 100644
index 0000000..2752529
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Container.java
@@ -0,0 +1,389 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.domain;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.gson.annotations.SerializedName;
+import org.jclouds.javax.annotation.Nullable;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+import java.util.Map;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class Container {
+
+   @SerializedName("Id")
+   private final String id;
+   @SerializedName("Name")
+   private final String name;
+   @SerializedName("Created")
+   private final String created;
+   @SerializedName("Path")
+   private final String path;
+   @SerializedName("Args")
+   private final String[] args;
+   @SerializedName("Config")
+   private final Config containerConfig;
+   @SerializedName("State")
+   private final State state;
+   @SerializedName("Image")
+   private final String image;
+   @SerializedName("NetworkSettings")
+   private final NetworkSettings networkSettings;
+   @SerializedName("ResolvConfPath")
+   private final String resolvConfPath;
+   @SerializedName("Driver")
+   private final String driver;
+   @SerializedName("ExecDriver")
+   private final String execDriver;
+   @SerializedName("Volumes")
+   private final Map<String, String> volumes;
+   @SerializedName("VolumesRW")
+   private final Map<String, Boolean> volumesRW;
+   @SerializedName("Command")
+   private final String command;
+   @SerializedName("Status")
+   private final String status;
+   @SerializedName("HostConfig")
+   private final HostConfig hostConfig;
+   @SerializedName("Ports")
+   private final List<Port> ports;
+   @SerializedName("HostnamePath")
+   private final String hostnamePath;
+
+   @ConstructorProperties({ "Id", "Name", "Created", "Path", "Args", "Config", 
"State", "Image", "NetworkSettings",
+           "ResolvConfPath", "Driver", "ExecDriver", "Volumes", "VolumesRW", 
"Command", "Status", "HostConfig",
+           "Ports", "HostnamePath" })
+   protected Container(String id, @Nullable String name, @Nullable String 
created, @Nullable String path, @Nullable String[] args,
+                       @Nullable Config containerConfig, @Nullable State 
state, @Nullable String image, @Nullable NetworkSettings networkSettings,
+                       @Nullable String resolvConfPath, @Nullable String 
driver, @Nullable String execDriver, @Nullable Map<String, String> volumes,
+                       @Nullable Map<String, Boolean> volumesRW, @Nullable 
String command, @Nullable String status,
+                       @Nullable HostConfig hostConfig, @Nullable List<Port> 
ports, @Nullable String hostnamePath) {
+      this.id = checkNotNull(id, "id");
+      this.name = name;
+      this.created = created;
+      this.path = path;
+      this.args = args;
+      this.containerConfig = containerConfig;
+      this.state = state;
+      this.image = image;
+      this.networkSettings = networkSettings;
+      this.resolvConfPath = resolvConfPath;
+      this.driver = driver;
+      this.execDriver = execDriver;
+      this.volumes = volumes != null ? ImmutableMap.copyOf(volumes) : 
ImmutableMap.<String, String>of();
+      this.volumesRW = volumesRW != null ? ImmutableMap.copyOf(volumesRW) : 
ImmutableMap.<String, Boolean>of();
+      this.command = command;
+      this.status = status;
+      this.hostConfig = hostConfig;
+      this.ports = ports != null ? ImmutableList.copyOf(ports) : 
ImmutableList.<Port>of();
+      this.hostnamePath = hostnamePath;
+   }
+
+   public String getId() {
+      return id;
+   }
+
+   public String getName() {
+      return name;
+   }
+
+   public String getCreated() {
+      return created;
+   }
+
+   public String getPath() {
+      return path;
+   }
+
+   public String[] getArgs() {
+      return args;
+   }
+
+   public Config getContainerConfig() {
+      return containerConfig;
+   }
+
+   public State getState() {
+      return state;
+   }
+
+   public String getImage() {
+      return image;
+   }
+
+   public NetworkSettings getNetworkSettings() {
+      return networkSettings;
+   }
+
+   public String getResolvConfPath() {
+      return resolvConfPath;
+   }
+
+   public String getDriver() {
+      return driver;
+   }
+
+   public String getExecDriver() {
+      return execDriver;
+   }
+
+   public Map<String, String> getVolumes() {
+      return volumes;
+   }
+
+   public Map<String, Boolean> getvolumesRW() {
+      return volumesRW;
+   }
+
+   public String getCommand() {
+      return command;
+   }
+
+   public String getStatus() {
+      return status;
+   }
+
+   public HostConfig getHostConfig() {
+      return hostConfig;
+   }
+
+   public List<Port> getPorts() {
+      return ports;
+   }
+
+   public String getHostnamePath() {
+      return hostnamePath;
+   }
+
+   @Override
+   public boolean equals(Object o) {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      Container that = (Container) o;
+
+      return Objects.equal(this.id, that.id) &&
+              Objects.equal(this.name, that.name) &&
+              Objects.equal(this.created, that.created) &&
+              Objects.equal(this.path, that.path) &&
+              Objects.equal(this.args, that.args) &&
+              Objects.equal(this.containerConfig, that.containerConfig) &&
+              Objects.equal(this.state, that.state) &&
+              Objects.equal(this.image, that.image) &&
+              Objects.equal(this.networkSettings, that.networkSettings) &&
+              Objects.equal(this.resolvConfPath, that.resolvConfPath) &&
+              Objects.equal(this.driver, that.driver) &&
+              Objects.equal(this.execDriver, that.execDriver) &&
+              Objects.equal(this.volumes, that.volumes) &&
+              Objects.equal(this.volumesRW, that.volumesRW) &&
+              Objects.equal(this.command, that.command) &&
+              Objects.equal(this.status, that.status) &&
+              Objects.equal(this.hostConfig, that.hostConfig) &&
+              Objects.equal(this.ports, that.ports) &&
+              Objects.equal(this.hostnamePath, that.hostnamePath);
+   }
+
+   @Override
+   public int hashCode() {
+      return Objects.hashCode(id, name, created, path, args, containerConfig, 
state, image, networkSettings, resolvConfPath,
+              driver, execDriver, volumes, volumesRW, command, status, 
hostConfig, ports, hostnamePath);
+   }
+
+   @Override
+   public String toString() {
+      return Objects.toStringHelper(this)
+              .add("id", id)
+              .add("name", name)
+              .add("created", created)
+              .add("path", path)
+              .add("args", args)
+              .add("containerConfig", containerConfig)
+              .add("state", state)
+              .add("image", image)
+              .add("networkSettings", networkSettings)
+              .add("resolvConfPath", resolvConfPath)
+              .add("driver", driver)
+              .add("execDriver", execDriver)
+              .add("volumes", volumes)
+              .add("volumesRW", volumesRW)
+              .add("command", command)
+              .add("status", status)
+              .add("hostConfig", hostConfig)
+              .add("ports", ports)
+              .add("hostnamePath", hostnamePath)
+              .toString();
+   }
+
+   public static Builder builder() {
+      return new Builder();
+   }
+
+   public Builder toBuilder() {
+      return builder().fromContainer(this);
+   }
+
+   public static final class Builder {
+
+      private String id;
+      private String name;
+      private String created;
+      private String path;
+      private String[] args;
+      private Config containerConfig;
+      private State state;
+      private String image;
+      private NetworkSettings networkSettings;
+      private String resolvConfPath;
+      private String driver;
+      private String execDriver;
+      private Map<String, String> volumes = ImmutableMap.of();
+      private Map<String, Boolean> volumesRW = ImmutableMap.of();
+      private String command;
+      private String status;
+      private HostConfig hostConfig;
+      private List<Port> ports = ImmutableList.of();
+      private String hostnamePath;
+
+      public Builder id(String id) {
+         this.id = id;
+         return this;
+      }
+
+      public Builder name(String name) {
+         this.name = name;
+         return this;
+      }
+
+      public Builder created(String created) {
+         this.created = created;
+         return this;
+      }
+
+      public Builder path(String path) {
+         this.path = path;
+         return this;
+      }
+
+      public Builder args(String[] args) {
+         this.args = args;
+         return this;
+      }
+
+      public Builder containerConfig(Config containerConfig) {
+         this.containerConfig = containerConfig;
+         return this;
+      }
+
+      public Builder state(State state) {
+         this.state = state;
+         return this;
+      }
+
+      public Builder image(String imageName) {
+         this.image = imageName;
+         return this;
+      }
+
+      public Builder networkSettings(NetworkSettings networkSettings) {
+         this.networkSettings = networkSettings;
+         return this;
+      }
+
+      public Builder resolvConfPath(String resolvConfPath) {
+         this.resolvConfPath = resolvConfPath;
+         return this;
+      }
+
+      public Builder driver(String driver) {
+         this.driver = driver;
+         return this;
+      }
+
+      public Builder execDriver(String execDriver) {
+         this.execDriver = execDriver;
+         return this;
+      }
+
+      public Builder volumes(Map<String, String> volumes) {
+         this.volumes = volumes;
+         return this;
+      }
+
+      public Builder volumesRW(Map<String, Boolean> volumesRW) {
+         this.volumesRW = volumesRW;
+         return this;
+      }
+
+      public Builder command(String command) {
+         this.command = command;
+         return this;
+      }
+
+      public Builder status(String status) {
+         this.status = status;
+         return this;
+      }
+
+      public Builder hostConfig(HostConfig hostConfig) {
+         this.hostConfig = hostConfig;
+         return this;
+      }
+
+      public Builder ports(List<Port> ports) {
+         this.ports = ports;
+         return this;
+      }
+
+      public Builder hostnamePath(String hostnamePath) {
+         this.hostnamePath = hostnamePath;
+         return this;
+      }
+
+      public Container build() {
+         return new Container(id, name, created, path, args, containerConfig, 
state, image, networkSettings, resolvConfPath,
+                 driver, execDriver, volumes, volumesRW, command, status, 
hostConfig, ports, hostnamePath);
+      }
+
+      public Builder fromContainer(Container in) {
+         return this
+                 .id(in.getId())
+                 .name(in.getName())
+                 .created(in.getCreated())
+                 .path(in.getPath())
+                 .args(in.getArgs())
+                 .containerConfig(in.getContainerConfig())
+                 .state(in.getState())
+                 .image(in.getImage())
+                 .networkSettings(in.getNetworkSettings())
+                 .resolvConfPath(in.getResolvConfPath())
+                 .driver(in.getDriver())
+                 .execDriver(in.getExecDriver())
+                 .volumes(in.getVolumes())
+                 .volumesRW(in.getvolumesRW())
+                 .command(in.getCommand())
+                 .status(in.getStatus())
+                 .hostConfig(in.getHostConfig())
+                 .ports(in.getPorts())
+                 .hostnamePath(in.getHostnamePath());
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/ExposedPorts.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/ExposedPorts.java
 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/ExposedPorts.java
new file mode 100644
index 0000000..b7a831a
--- /dev/null
+++ 
b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/ExposedPorts.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import java.beans.ConstructorProperties;
+import java.util.Set;
+
+import org.jclouds.javax.annotation.Nullable;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableSet;
+import com.google.gson.annotations.SerializedName;
+
+public class ExposedPorts {
+
+   @SerializedName("PortAndProtocol")
+   private final String portAndProtocol;
+   @SerializedName("HostPorts")
+   private final Set<String> hostPorts;
+
+   @ConstructorProperties({ "PortAndProtocol", "HostPorts" })
+   protected ExposedPorts(String portAndProtocol, @Nullable Set<String> 
hostPorts) {
+      this.portAndProtocol = checkNotNull(portAndProtocol, "portAndProtocol");
+      this.hostPorts = hostPorts != null ? ImmutableSet.copyOf(hostPorts) : 
ImmutableSet.<String> of();
+   }
+
+   public String getPortAndProtocol() {
+      return portAndProtocol;
+   }
+
+   public Set<String> getHostPorts() {
+      return hostPorts;
+   }
+
+   @Override
+   public boolean equals(Object o) {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      ExposedPorts that = (ExposedPorts) o;
+
+      return Objects.equal(this.portAndProtocol, that.portAndProtocol) &&
+             Objects.equal(this.hostPorts, that.hostPorts);
+   }
+
+   @Override
+   public int hashCode() {
+      return Objects.hashCode(portAndProtocol, hostPorts);
+   }
+
+   @Override
+   public String toString() {
+      return Objects.toStringHelper(this)
+              .add("portAndProtocol", portAndProtocol)
+              .add("hostPorts", hostPorts)
+              .toString();
+   }
+
+   public static Builder builder() {
+      return new Builder();
+   }
+
+   public Builder toBuilder() {
+      return builder().fromExposedPorts(this);
+   }
+
+   public static final class Builder {
+
+      private String portAndProtocol;
+      private Set<String> hostPorts = ImmutableSet.of();
+
+      public Builder portAndProtocol(String portAndProtocol) {
+         this.portAndProtocol = portAndProtocol;
+         return this;
+      }
+
+      public Builder hostPorts(Set<String> hostPorts) {
+         this.hostPorts = ImmutableSet.copyOf(checkNotNull(hostPorts, 
"hostPorts"));
+         return this;
+      }
+
+      public ExposedPorts build() {
+         return new ExposedPorts(portAndProtocol, hostPorts);
+      }
+
+      public Builder fromExposedPorts(ExposedPorts in) {
+         return this.portAndProtocol(in.getPortAndProtocol())
+                 .hostPorts(in.getHostPorts());
+      }
+   }
+}

Reply via email to