/*
* Title: CloudSim Toolkit
* Description: CloudSim (Cloud Simulation) Toolkit for Modeling and Simulation of Clouds
* Licence: GPL - http://www.gnu.org/copyleft/gpl.html
*
* Copyright (c) 2009-2012, The University of Melbourne, Australia
*/
package org.cloudbus.cloudsim.lists;
import java.util.List;
import org.cloudbus.cloudsim.Vm;
/**
* VmList is a collection of operations on lists of VMs.
*
* @author Anton Beloglazov
* @since CloudSim Toolkit 2.0
*/
public class VmList {
/**
* Gets a {@link Vm} with a given id.
*
* @param id ID of required VM
* @param vmList list of existing VMs
* @return a Vm with the given ID or $null if not found
* @pre $none
* @post $none
*
* @todo It may be considered the use of a HashMap in order to improve
* VM search, instead of a List. The map key can be the vm id
* and the value the VM itself. However, it has to be assessed
* the feasibility to have VMs with the same ID and the need
* to find VMs by its id and user id, as in the method
* {@link #getByIdAndUserId(java.util.List, int, int)}.
* The first concern could be dealt by ensuring that all
* VMs have different ID (in fact, I don't know if
* VM id uniqueness is a CloudSim requirement)
* and creating a map by VM id.
* The second concern could be dealt by creating
* a HashMap<UserID, List<VmIDs>>.
* The third concern is, that changing
* the class of these lists may have a potential
* effect on the entire project and in the creation of simulations
* that has to be priorly assessed.
*/
public static <T extends Vm> T getById(List<T> vmList, int id) {
for (T vm : vmList) {
if (vm.getId() == id) {
return vm;
}
}
return null;
}
/**
* Gets a {@link Vm} with a given id and owned by a given user.
*
* @param vmList list of existing VMs
* @param id ID of required VM
* @param userId the user ID of the VM's owner
* @return Vm with the given ID, $null if not found
* @pre $none
* @post $none
*/
public static <T extends Vm> T getByIdAndUserId(List<T> vmList, int id, int userId) {
for (T vm : vmList) {
if (vm.getId() == id && vm.getUserId() == userId) {
return vm;
}
}
return null;
}
}