// Path: app/edu/indiana/d2i/htrc/sloan/bean/VMImageDetails.java
// public class VMImageDetails {
//     private String vmImageName;
//     private String vmImageDescription;
//     private String vmImageStatus;
// 
//     public VMImageDetails(String imageName, String imageDescription, String imageStatus){
//         this.vmImageName = imageName;
//         this.vmImageDescription = imageDescription;
//         this.vmImageStatus = imageStatus;
//     }
// 
//     public String getVmImageName() {
//         return vmImageName;
//     }
// 
//     public void setVmImageName(String vmImageName) {
//         this.vmImageName = vmImageName;
//     }
// 
//     public String getVmImageDescription() {
//         return vmImageDescription;
//     }
// 
//     public void setVmImageDescription(String vmImageDescription) {
//         this.vmImageDescription = vmImageDescription;
//     }
// 
//     public String getVmImageStatus() {
//         return vmImageStatus;
//     }
// 
//     public void setVmImageStatus(String vmImageStatus) {
//         this.vmImageStatus = vmImageStatus;
//     }
// }
// 
// Path: app/edu/indiana/d2i/htrc/sloan/bean/VMStatus.java
// public class VMStatus {
//     private String vmId;
//     private String mode;
//     private String state;
//     private long vncPort;
//     private long sshPort;
//     private String publicIp;
//     private long vcpu;
//     private long memory;
//     private long volumeSize;
//     private String imageName;
//     private String vmIntialLogingId;
//     private String vmInitialLogingPassword;
// 
//     public String getVmId() {
//         return vmId;
//     }
// 
//     public void setVmId(String vmId) {
//         this.vmId = vmId;
//     }
// 
//     public String getMode() {
//         return mode;
//     }
// 
//     public void setMode(String mode) {
//         this.mode = mode;
//     }
// 
//     public String getState() {
//         return state;
//     }
// 
//     public void setState(String state) {
//         this.state = state;
//     }
// 
//     public long getVncPort() {
//         return vncPort;
//     }
// 
//     public void setVncPort(long vncPort) {
//         this.vncPort = vncPort;
//     }
// 
//     public long getSshPort() {
//         return sshPort;
//     }
// 
//     public void setSshPort(long sshPort) {
//         this.sshPort = sshPort;
//     }
// 
//     public String getPublicIp() {
//         return publicIp;
//     }
// 
//     public void setPublicIp(String publicIp) {
//         this.publicIp = publicIp;
//     }
// 
//     public long getVcpu() {
//         return vcpu;
//     }
// 
//     public void setVcpu(long vcpu) {
//         this.vcpu = vcpu;
//     }
// 
//     public long getMemory() {
//         return memory;
//     }
// 
//     public void setMemory(long memory) {
//         this.memory = memory;
//     }
// 
//     public long getVolumeSize() {
//         return volumeSize;
//     }
// 
//     public void setVolumeSize(long volumeSize) {
//         this.volumeSize = volumeSize;
//     }
// 
//     public String getImageName() {
//         return imageName;
//     }
// 
//     public void setImageName(String imageName) {
//         this.imageName = imageName;
//     }
// 
//     public String getVmIntialLogingId() {
//         return vmIntialLogingId;
//     }
// 
//     public void setVmIntialLogingId(String vmIntialLogingId) {
//         this.vmIntialLogingId = vmIntialLogingId;
//     }
// 
//     public String getVmInitialLogingPassword() {
//         return vmInitialLogingPassword;
//     }
// 
//     public void setVmInitialLogingPassword(String vmInitialLogingPassword) {
//         this.vmInitialLogingPassword = vmInitialLogingPassword;
//     }
// }


import edu.indiana.d2i.htrc.sloan.bean.VMImageDetails;
import edu.indiana.d2i.htrc.sloan.bean.VMStatus;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.protocol.Protocol;
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import play.Logger;
import play.mvc.Http;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
        if (response == 200) {
            String jsonStr = getMethod.getResponseBodyAsString();
            log.info(Arrays.toString(getMethod.getRequestHeaders()));
            JSONParser parser = new JSONParser();
            try {
                Object obj = parser.parse(jsonStr);
                JSONObject jsonObject = (JSONObject) obj;
                JSONArray jsonArray = (JSONArray) jsonObject.get("imageInfo");

                for (Object aJsonArray : jsonArray) {
                    JSONObject infoObject = (JSONObject) aJsonArray;
                    String name = (String) infoObject.get("imageName");
                    String description = (String) infoObject.get("imageDescription");
                    String status = (String) infoObject.get("imageStatus");
                    VMImageDetails vmDetails = new VMImageDetails(name, description,status);
                    if (!vmDetailsList.contains(vmDetails)) {
                        vmDetailsList.add(vmDetails);
                    }
                }
            } catch (ParseException e) {
                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
            }
            return vmDetailsList;
        } else {
            this.responseCode = response;
            throw new IOException("Response code " + response + " for " + listVMImageUrl + " message: \n " + getMethod.getResponseBodyAsString());
        }

    }

// Path: app/edu/indiana/d2i/htrc/sloan/bean/VMImageDetails.java
// public class VMImageDetails {
//     private String vmImageName;
//     private String vmImageDescription;
//     private String vmImageStatus;
// 
//     public VMImageDetails(String imageName, String imageDescription, String imageStatus){
//         this.vmImageName = imageName;
//         this.vmImageDescription = imageDescription;
//         this.vmImageStatus = imageStatus;
//     }
// 
//     public String getVmImageName() {
//         return vmImageName;
//     }
// 
//     public void setVmImageName(String vmImageName) {
//         this.vmImageName = vmImageName;
//     }
// 
//     public String getVmImageDescription() {
//         return vmImageDescription;
//     }
// 
//     public void setVmImageDescription(String vmImageDescription) {
//         this.vmImageDescription = vmImageDescription;
//     }
// 
//     public String getVmImageStatus() {
//         return vmImageStatus;
//     }
// 
//     public void setVmImageStatus(String vmImageStatus) {
//         this.vmImageStatus = vmImageStatus;
//     }
// }
// 
// Path: app/edu/indiana/d2i/htrc/sloan/bean/VMStatus.java
// public class VMStatus {
//     private String vmId;
//     private String mode;
//     private String state;
//     private long vncPort;
//     private long sshPort;
//     private String publicIp;
//     private long vcpu;
//     private long memory;
//     private long volumeSize;
//     private String imageName;
//     private String vmIntialLogingId;
//     private String vmInitialLogingPassword;
// 
//     public String getVmId() {
//         return vmId;
//     }
// 
//     public void setVmId(String vmId) {
//         this.vmId = vmId;
//     }
// 
//     public String getMode() {
//         return mode;
//     }
// 
//     public void setMode(String mode) {
//         this.mode = mode;
//     }
// 
//     public String getState() {
//         return state;
//     }
// 
//     public void setState(String state) {
//         this.state = state;
//     }
// 
//     public long getVncPort() {
//         return vncPort;
//     }
// 
//     public void setVncPort(long vncPort) {
//         this.vncPort = vncPort;
//     }
// 
//     public long getSshPort() {
//         return sshPort;
//     }
// 
//     public void setSshPort(long sshPort) {
//         this.sshPort = sshPort;
//     }
// 
//     public String getPublicIp() {
//         return publicIp;
//     }
// 
//     public void setPublicIp(String publicIp) {
//         this.publicIp = publicIp;
//     }
// 
//     public long getVcpu() {
//         return vcpu;
//     }
// 
//     public void setVcpu(long vcpu) {
//         this.vcpu = vcpu;
//     }
// 
//     public long getMemory() {
//         return memory;
//     }
// 
//     public void setMemory(long memory) {
//         this.memory = memory;
//     }
// 
//     public long getVolumeSize() {
//         return volumeSize;
//     }
// 
//     public void setVolumeSize(long volumeSize) {
//         this.volumeSize = volumeSize;
//     }
// 
//     public String getImageName() {
//         return imageName;
//     }
// 
//     public void setImageName(String imageName) {
//         this.imageName = imageName;
//     }
// 
//     public String getVmIntialLogingId() {
//         return vmIntialLogingId;
//     }
// 
//     public void setVmIntialLogingId(String vmIntialLogingId) {
//         this.vmIntialLogingId = vmIntialLogingId;
//     }
// 
//     public String getVmInitialLogingPassword() {
//         return vmInitialLogingPassword;
//     }
// 
//     public void setVmInitialLogingPassword(String vmInitialLogingPassword) {
//         this.vmInitialLogingPassword = vmInitialLogingPassword;
//     }
// }


// Path: app/edu/indiana/d2i/htrc/portal/HTRCExperimentalAnalysisServiceClient.java
import edu.indiana.d2i.htrc.sloan.bean.VMImageDetails;
import edu.indiana.d2i.htrc.sloan.bean.VMStatus;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.protocol.Protocol;
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import play.Logger;
import play.mvc.Http;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

        if (response == 200) {
            String jsonStr = getMethod.getResponseBodyAsString();
            log.info(Arrays.toString(getMethod.getRequestHeaders()));
            JSONParser parser = new JSONParser();
            try {
                Object obj = parser.parse(jsonStr);
                JSONObject jsonObject = (JSONObject) obj;
                JSONArray jsonArray = (JSONArray) jsonObject.get("imageInfo");

                for (Object aJsonArray : jsonArray) {
                    JSONObject infoObject = (JSONObject) aJsonArray;
                    String name = (String) infoObject.get("imageName");
                    String description = (String) infoObject.get("imageDescription");
                    String status = (String) infoObject.get("imageStatus");
                    VMImageDetails vmDetails = new VMImageDetails(name, description,status);
                    if (!vmDetailsList.contains(vmDetails)) {
                        vmDetailsList.add(vmDetails);
                    }
                }
            } catch (ParseException e) {
                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
            }
            return vmDetailsList;
        } else {
            this.responseCode = response;
            throw new IOException("Response code " + response + " for " + listVMImageUrl + " message: \n " + getMethod.getResponseBodyAsString());
        }

    }

    public List<VMStatus> listVMs(Http.Session session) throws GeneralSecurityException, IOException {