/*
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is available at http://www.abiquo.com/.....
*
* The Initial Developer of the Original Code is Soluciones Grid, S.L. (www.abiquo.com),
* Consell de Cent 296 principal 2�, 08007 Barcelona, Spain.
* No portions of the Code have been created by third parties.
* All Rights Reserved.
*
* Contributor(s): ______________________________________.
*
* Graphical User Interface of this software may be used under the terms
* of the Common Public Attribution License Version 1.0 (the "CPAL License",
* available at http://cpal.abiquo.com), in which case the provisions of CPAL
* License are applicable instead of those above. In relation of this portions
* of the Code, a Legal Notice according to Exhibits A and B of CPAL Licence
* should be provided in any distribution of the corresponding Code to Graphical
* User Interface.
*/
package com.abiquo.abicloud.model;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.abiquo.abicloud.exception.VirtualMachineException;
import com.abiquo.abicloud.model.config.VirtualMachineConfiguration;
/**
* This class represents a Virtual Appliance.
*/
public class VirtualAppliance
{
/** The logger */
private final static Logger logger = LoggerFactory.getLogger(VirtualAppliance.class);
/** The machines. */
private Collection<AbsVirtualMachine> machines;
/** The virtual appliance id. */
private String virtualApplianceId;
/**
* Instantiates a new virtual appliance.
*/
public VirtualAppliance()
{
machines = new ArrayList<AbsVirtualMachine>();
}
/**
* Gets the Virtual Appliance Id.
*
* @return the Virtual Appliance Id
*/
public String getVirtualApplianceId()
{
return virtualApplianceId;
}
/**
* Sets the Virtual Appliance Id.
*
* @param virtualApplianceId the new Virtual Appliance Id
*/
public void setVirtualApplianceId(String virtualApplianceId)
{
this.virtualApplianceId = virtualApplianceId;
}
/**
* Adds a virtual machine.
*
* @param type the virtual machine type
* @param address the hypervisor addres where the machine shall be deployed
* @param config the configuration object with other parameters
* @throws VirtualMachineException the virtual machine exception
*/
public void addMachine(String type, URL address, VirtualMachineConfiguration config)
throws VirtualMachineException
{
AbsVirtualMachine newMachine =
VirtualSystemModel.getModel().createVirtualMachine(type, address, config);
machines.add(newMachine);
}
/**
* Gets the machines list.
*
* @return the machines list
*/
public Collection<AbsVirtualMachine> getMachines()
{
return machines;
}
/**
* Updates the virtual appliance with the specific virtual machines list and removes the older
* ones
*
* @param vappMachines the updated list of virtual machines
* @throws Exception
*/
public void updateMachines(List<AbsVirtualMachine> vappMachines) throws Exception
{
List<AbsVirtualMachine> machinesToRemove = new ArrayList<AbsVirtualMachine>();
machinesToRemove.addAll(machines);
machinesToRemove.removeAll(vappMachines);
// Deleting the removed machines
for (AbsVirtualMachine virtualMachine : machinesToRemove)
{
logger.info("Removing the machine: {}", virtualMachine.getConfiguration()
.getMachineId());
virtualMachine.powerOffMachine();
VirtualSystemModel.getModel().deleteMachine(
virtualMachine.getConfiguration().getMachineId());
}
// Updating the machines list of the virtual appliance
machines = vappMachines;
}
}