private int getFirstFreeUnitNumberForController()

in src/main/java/com/vmware/vim25/mox/VirtualMachineDeviceManager.java [407:438]


    private int getFirstFreeUnitNumberForController(VirtualController controller) {
        // If there are some devices attached then search which nodes are free
        // otherwise all nodes are free so just return the first one.
        if (controller.device == null) {
            return 0;
        }

        int maxNodes = getMaxNodesPerControllerOfType(controller);

        if (controller.device.length < maxNodes) {
            List<Integer> usedNodeList = new ArrayList<Integer>();
            VirtualDevice[] devices = getAllVirtualDevices();

            // If this is SCSI controller then its controller also occupies one node.
            if (controller instanceof VirtualSCSIController) {
                usedNodeList.add(((VirtualSCSIController) controller).scsiCtlrUnitNumber);
            }

            for (VirtualDevice device : devices) {
                if (device.controllerKey != null && device.controllerKey == controller.key) {
                    usedNodeList.add(device.unitNumber);
                }
            }
            for (int i = 0; i < maxNodes; i++) {
                if (!usedNodeList.contains(i)) {
                    return i;
                }
            }
        }

        return -1;
    }