Package com.cybozu.vmbkp.soap

Source Code of com.cybozu.vmbkp.soap.VirtualControllerManager

/**
* @file
* @brief VirtualControllerManager
*
* Copyright (C) 2009,2010 Cybozu Inc., all rights reserved.
*
* @author Takashi HOSHINO <hoshino@labs.cybozu.co.jp>
*/
package com.cybozu.vmbkp.soap;

import java.util.List;
import java.util.LinkedList;

import com.vmware.vim25.VirtualDeviceConfigSpec;
import com.vmware.vim25.VirtualDeviceConfigSpecOperation;
import com.vmware.vim25.VirtualController;
import com.vmware.vim25.VirtualIDEController;
import com.vmware.vim25.VirtualSCSIController;
import com.vmware.vim25.VirtualBusLogicController;
import com.vmware.vim25.VirtualLsiLogicController;
import com.vmware.vim25.VirtualLsiLogicSASController;
import com.vmware.vim25.VirtualSCSISharing;

import com.cybozu.vmbkp.util.AdapterType;

/**
* @brief Manage a virtual disk controller.
*
* This class is used to add disk controllers to a virtual machine.
*/
public class VirtualControllerManager
    implements Comparable<VirtualControllerManager>
{
    /**
     * Adapter type.
     */
    private AdapterType type_;

    /**
     * Controller key.
     */
    private int ckey_;
   
    /**
     * Bus number.
     */
    private int busNumber_;

    /**
     * List of disks.
     */
    private List<VirtualDiskManager> diskList_;

    /**
     * Constructor.
     */
    public VirtualControllerManager
        (AdapterType type, int ckey, int busNumber)
    {
        type_ = type;
        ckey_ = ckey;
        busNumber_ = busNumber;
        diskList_ = new LinkedList<VirtualDiskManager>();
    }

    /**
     * Comparator.
     *
     * Rule 1. IDE < SCSI.
     * Rule 2. busNumber_ order.
     */
    public int compareTo(VirtualControllerManager rht)
    {
        if (this.type_ == rht.type_ ||
            (this.type_ != AdapterType.IDE &&
             rht.type_ != AdapterType.IDE)) {

            return this.busNumber_ - rht.busNumber_;
        } else {
            if (this.type_ == AdapterType.IDE) {
                return -1;
            } else {
                assert rht.type_ == AdapterType.IDE;
                return 1;
            }
        }
    }
   
    /**
     * Add virtual disk manager and assign to this controller.
     */
    public void add(VirtualDiskManager diskm)
    {
        diskm.setController(this);
        diskList_.add(diskm);
    }

    /**
     * Get controller key.
     */
    protected Integer getCkey()
    {
        return new Integer(ckey_);
    }

    /**
     * Create scsi controller spec and all of its child disks.
     */
    public List<VirtualDeviceConfigSpec> createAll()
    {
        List<VirtualDeviceConfigSpec> specList =
            new LinkedList<VirtualDeviceConfigSpec>();

        /* Create spec of the controller. */
        specList.add(this.create());

        /* Create spec of all disks managed by the controller. */
        for (VirtualDiskManager diskm : diskList_) {
            VirtualDeviceConfigSpec diskSpec =
                diskm.create(true /* isThinProvisioned */);
            assert diskSpec != null;
            specList.add(diskSpec);
        }

        return specList;
    }

    /**
     * Create scsi controller spec, it does not create spec of disks.
     */
    private VirtualDeviceConfigSpec create()
    {
        VirtualDeviceConfigSpec controllerSpec =
            new VirtualDeviceConfigSpec();
        controllerSpec.setOperation(VirtualDeviceConfigSpecOperation.add);

        VirtualController ctrl = null;
        boolean isScsi = true;
       
        switch(type_) {
        case IDE:
            isScsi = false;
            ctrl = new VirtualIDEController();
            break;
        case BUSLOGIC:
            isScsi = true;
            ctrl = new VirtualBusLogicController();
            break;
        case LSILOGIC:
            isScsi = true;
            ctrl = new VirtualLsiLogicController();
            break;
        case LSILOGICSAS:
            isScsi = true;
            ctrl = new VirtualLsiLogicSASController();
            break;
        default:
            return null;
        }

        ctrl.setKey(ckey_);
        ctrl.setBusNumber(busNumber_);
        if (isScsi) {
            assert ctrl instanceof VirtualSCSIController;
            VirtualSCSIController scsiCtrl = (VirtualSCSIController) ctrl;
            scsiCtrl.setSharedBus(VirtualSCSISharing.noSharing);
        }
        controllerSpec.setDevice(ctrl);

        return controllerSpec;
    }

    /**
     * @return Number of disks the controller has.
     */
    public int getNumOfDisks()
    {
        assert diskList_ != null;
        return diskList_.size();
    }

    /**
     * Print information for debug.
     */
    public void print()
    {
        System.out.println(toString());
    }

    /**
     * Convert to string.
     */
    public String toString()
    {
        StringBuffer sb = new StringBuffer();

        sb.append(String.format
                  ("-----VirtualControllerManager-----\n" +
                   "type: %s, ckey: %d, busNumber: %d\n",
                   type_.toString(), ckey_, busNumber_));
        for (VirtualDiskManager vdm : diskList_) {
            sb.append(vdm.toString());
        }
        sb.append("----------------------------------------\n");

        return sb.toString();
    }
   
}
TOP

Related Classes of com.cybozu.vmbkp.soap.VirtualControllerManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.