content: // 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 com.cloud.ovm.object;
  
  import java.util.ArrayList;
  import java.util.List;
  import java.util.Map;
  
  import org.apache.xmlrpc.XmlRpcException;
  
  public class OvmVm extends OvmObject {
      public static final String CD = "CD";
      public static final String HDD = "HDD";
      public static final String HVM = "HVM";
      public static final String PV = "PV";
      public static final String FROMCONFIGFILE = "FROMCONFIGFILE";
  
      public static class Details {
          public int cpuNum;
          public long memory;
          public OvmDisk.Details rootDisk;
          public List<OvmDisk.Details> disks;
          public List<OvmVif.Details> vifs;
          public String name;
          public String uuid;
          public String powerState;
          public String bootDev;
          public String type;
  
          public Details() {
              disks = new ArrayList<OvmDisk.Details>();
              vifs = new ArrayList<OvmVif.Details>();
          }
  
          public String toJson() {
              return Coder.toJson(this);
          }
      }
  
      public OvmVm() {
      }
  
      /*********** XML RPC Call **************/
      public static void create(Connection c, Details d) throws XmlRpcException {
          Object[] params = {d.toJson()};
          c.call("OvmVm.create", params);
      }
  
      public static Map<String, String> reboot(Connection c, String vmName) throws XmlRpcException {
          Object[] params = {vmName};
          String res = (String)c.call("OvmVm.reboot", params);
          return Coder.mapFromJson(res);
      }
  
      public static void stop(Connection c, String vmName) throws XmlRpcException {
          Object[] params = {vmName};
          /* Agent will destroy vm if vm shutdowns failed due to timeout after 10 mins, so we set timeout to 20 mins here*/
          c.callTimeoutInSec("OvmVm.stop", params, 1200);
      }
  
      public static Details getDetails(Connection c, String vmName) throws XmlRpcException {
          Object[] params = {vmName};
          String res = (String)c.call("OvmVm.getDetails", params);
          return Coder.fromJson(res, OvmVm.Details.class);
      }
  
      public static Map<String, String> getVmStats(Connection c, String vmName) throws XmlRpcException {
          Object[] params = {vmName};
          String res = (String)c.call("OvmVm.getVmStats", params);
          return Coder.mapFromJson(res);
      }
  
      public static void migrate(Connection c, String vmName, String dest) throws XmlRpcException {
          Object[] params = {vmName, dest};
          c.call("OvmVm.migrate", params);
      }
  
      public static Map<String, String> register(Connection c, String vmName) throws XmlRpcException {
          Object[] params = {vmName};
          String res = (String)c.call("OvmVm.register", params);
          return Coder.mapFromJson(res);
      }
  
      public static Integer getVncPort(Connection c, String vmName) throws XmlRpcException {
          Object[] params = {vmName};
          String res = (String)c.call("OvmVm.getVncPort", params);
          Map<String, String> result = Coder.mapFromJson(res);
          return Integer.parseInt(result.get("vncPort"));
      }
  
      public static void detachOrAttachIso(Connection c, String vmName, String iso, Boolean isAttach) throws XmlRpcException {
          Object[] params = {vmName, iso, isAttach};
          c.call("OvmVm.detachOrAttachIso", params);
      }
  
  }
  