// Path: src/main/java/org/jenkinsci/plugins/mesos/MesosAgentSpecTemplate.java
// public static class ContainerInfo extends AbstractDescribableImpl<ContainerInfo> {
// 
//   private final String type;
//   private final String dockerImage;
//   private final List<Volume> volumes;
//   private final Network networking;
//   private final boolean dockerPrivilegedMode;
//   private final boolean dockerForcePullImage;
//   private boolean isDind;
// 
//   @SuppressFBWarnings("UUF_UNUSED_FIELD")
//   private transient List<Object> portMappings;
// 
//   @SuppressFBWarnings("UUF_UNUSED_FIELD")
//   private transient boolean dockerImageCustomizable;
// 
//   @SuppressFBWarnings("UUF_UNUSED_FIELD")
//   private transient List<Object> parameters;
// 
//   @SuppressFBWarnings("UUF_UNUSED_FIELD")
//   private transient List<Object> networkInfos;
// 
//   @SuppressFBWarnings("UUF_UNUSED_FIELD")
//   private transient boolean useCustomDockerCommandShell;
// 
//   @SuppressFBWarnings("UUF_UNUSED_FIELD")
//   private transient String customDockerCommandShell;
// 
//   @DataBoundConstructor
//   public ContainerInfo(
//       String type,
//       String dockerImage,
//       boolean isDind,
//       boolean dockerPrivilegedMode,
//       boolean dockerForcePullImage,
//       List<Volume> volumes,
//       Network networking) {
//     this.type = type;
//     this.dockerImage = dockerImage;
//     this.dockerPrivilegedMode = dockerPrivilegedMode;
//     this.dockerForcePullImage = dockerForcePullImage;
//     this.volumes = volumes;
//     this.isDind = isDind;
//     this.networking =
//         (networking != null) ? networking : ContainerInfoTaskInfoBuilder.DEFAULT_NETWORKING;
//   }
// 
//   public boolean getIsDind() {
//     return this.isDind;
//   }
// 
//   public Network getNetworking() {
//     return this.networking;
//   }
// 
//   public String getType() {
//     return type;
//   }
// 
//   public String getDockerImage() {
//     return dockerImage;
//   }
// 
//   public boolean getDockerPrivilegedMode() {
//     return dockerPrivilegedMode;
//   }
// 
//   public boolean getDockerForcePullImage() {
//     return dockerForcePullImage;
//   }
// 
//   public List<Volume> getVolumes() {
//     return volumes;
//   }
// 
//   public List<Volume> getVolumesOrEmpty() {
//     return (this.volumes != null) ? this.volumes : Collections.emptyList();
//   }
// 
//   @Extension
//   public static final class DescriptorImpl extends Descriptor<ContainerInfo> {
// 
//     public DescriptorImpl() {
//       load();
//     }
//   }
// }


import com.google.common.annotations.VisibleForTesting;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import hudson.Extension;
import hudson.model.AbstractDescribableImpl;
import hudson.model.Descriptor;
import hudson.model.Node;
import java.util.Iterator;
import java.util.List;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import org.apache.commons.lang.StringUtils;
import org.jenkinsci.plugins.mesos.MesosAgentSpecTemplate.ContainerInfo;
import org.kohsuke.stapler.DataBoundConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
package org.jenkinsci.plugins.mesos;


/**
 * This POJO describes a Jenkins agent for Mesos on 0.x and 1.x of the plugin. It is used to migrate
 * older configurations to {@link MesosAgentSpecTemplate} during deserialization. See {@link
 * MesosCloud#readResolve()} for the full migration.
 */
public class MesosSlaveInfo {

  private static final Logger logger = LoggerFactory.getLogger(MesosSlaveInfo.class);

  private transient Node.Mode mode;
  private transient String labelString;
  private transient Double slaveCpus;
  private transient Double diskNeeded;
  private transient int slaveMem;
  private transient List<URI> additionalURIs;
// Path: src/main/java/org/jenkinsci/plugins/mesos/MesosAgentSpecTemplate.java
// public static class ContainerInfo extends AbstractDescribableImpl<ContainerInfo> {
// 
//   private final String type;
//   private final String dockerImage;
//   private final List<Volume> volumes;
//   private final Network networking;
//   private final boolean dockerPrivilegedMode;
//   private final boolean dockerForcePullImage;
//   private boolean isDind;
// 
//   @SuppressFBWarnings("UUF_UNUSED_FIELD")
//   private transient List<Object> portMappings;
// 
//   @SuppressFBWarnings("UUF_UNUSED_FIELD")
//   private transient boolean dockerImageCustomizable;
// 
//   @SuppressFBWarnings("UUF_UNUSED_FIELD")
//   private transient List<Object> parameters;
// 
//   @SuppressFBWarnings("UUF_UNUSED_FIELD")
//   private transient List<Object> networkInfos;
// 
//   @SuppressFBWarnings("UUF_UNUSED_FIELD")
//   private transient boolean useCustomDockerCommandShell;
// 
//   @SuppressFBWarnings("UUF_UNUSED_FIELD")
//   private transient String customDockerCommandShell;
// 
//   @DataBoundConstructor
//   public ContainerInfo(
//       String type,
//       String dockerImage,
//       boolean isDind,
//       boolean dockerPrivilegedMode,
//       boolean dockerForcePullImage,
//       List<Volume> volumes,
//       Network networking) {
//     this.type = type;
//     this.dockerImage = dockerImage;
//     this.dockerPrivilegedMode = dockerPrivilegedMode;
//     this.dockerForcePullImage = dockerForcePullImage;
//     this.volumes = volumes;
//     this.isDind = isDind;
//     this.networking =
//         (networking != null) ? networking : ContainerInfoTaskInfoBuilder.DEFAULT_NETWORKING;
//   }
// 
//   public boolean getIsDind() {
//     return this.isDind;
//   }
// 
//   public Network getNetworking() {
//     return this.networking;
//   }
// 
//   public String getType() {
//     return type;
//   }
// 
//   public String getDockerImage() {
//     return dockerImage;
//   }
// 
//   public boolean getDockerPrivilegedMode() {
//     return dockerPrivilegedMode;
//   }
// 
//   public boolean getDockerForcePullImage() {
//     return dockerForcePullImage;
//   }
// 
//   public List<Volume> getVolumes() {
//     return volumes;
//   }
// 
//   public List<Volume> getVolumesOrEmpty() {
//     return (this.volumes != null) ? this.volumes : Collections.emptyList();
//   }
// 
//   @Extension
//   public static final class DescriptorImpl extends Descriptor<ContainerInfo> {
// 
//     public DescriptorImpl() {
//       load();
//     }
//   }
// }


// Path: src/main/java/org/jenkinsci/plugins/mesos/MesosSlaveInfo.java
import com.google.common.annotations.VisibleForTesting;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import hudson.Extension;
import hudson.model.AbstractDescribableImpl;
import hudson.model.Descriptor;
import hudson.model.Node;
import java.util.Iterator;
import java.util.List;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import org.apache.commons.lang.StringUtils;
import org.jenkinsci.plugins.mesos.MesosAgentSpecTemplate.ContainerInfo;
import org.kohsuke.stapler.DataBoundConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

package org.jenkinsci.plugins.mesos;


/**
 * This POJO describes a Jenkins agent for Mesos on 0.x and 1.x of the plugin. It is used to migrate
 * older configurations to {@link MesosAgentSpecTemplate} during deserialization. See {@link
 * MesosCloud#readResolve()} for the full migration.
 */
public class MesosSlaveInfo {

  private static final Logger logger = LoggerFactory.getLogger(MesosSlaveInfo.class);

  private transient Node.Mode mode;
  private transient String labelString;
  private transient Double slaveCpus;
  private transient Double diskNeeded;
  private transient int slaveMem;
  private transient List<URI> additionalURIs;
  private transient ContainerInfo containerInfo;