/*
* 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.hypervisor.impl;
import java.net.URL;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.abiquo.abicloud.exception.VirtualMachineException;
import com.abiquo.abicloud.machine.impl.VirtualBoxMachine;
import com.abiquo.abicloud.model.AbsVirtualMachine;
import com.abiquo.abicloud.model.IHypervisor;
import com.abiquo.abicloud.model.config.VirtualMachineConfiguration;
import com.sun.xml.ws.commons.virtualbox.IConsole;
import com.sun.xml.ws.commons.virtualbox.ISession;
import com.sun.xml.ws.commons.virtualbox.IVirtualBox;
import com.sun.xml.ws.commons.virtualbox.IWebsessionManager;
/**
* The Class VirtualBoxHypervisor represents the VirtualBox hypervisor.
*/
public class VirtualBoxHypervisor implements IHypervisor
{
/** The Constant logger. */
private final static Logger logger =
LoggerFactory.getLogger(VirtualBoxHypervisor.class.getName());
/** The url. */
private URL url;
/** The mgr. */
private IWebsessionManager mgr;
/** The vbox. */
private IVirtualBox vbox;
/** The o session. */
private ISession oSession;
/**
* virtual box specific function to VirtualBoxMachine.
*
* @return the session
*/
public ISession getSession()
{
/*
* ISession remoteSession = mgr.getSessionObject(vbox); // reconnect(); String sessionRef =
* remoteSession.getRef(); if (!oSession.getRef().equals(sessionRef)) { reconnect();
* logger.info("Updating the session"); oSession = mgr.getSessionObject(vbox); }
*/
return oSession;
// return mgr.getSessionObject(vbox);
}
/**
* virtual box specific function to VirtualBoxMachine.
*
* @return the virtual box
*/
public IVirtualBox getVirtualBox()
{
return vbox;
}
/**
* Gets the console object
*
* @return the console
*/
public IConsole getConsole()
{
IConsole console = getSession().getConsole();
return console;
}
/*
* (non-Javadoc)
* @see com.abiquo.abicloud.model.IHypervisor#connect(java.net.URL)
*/
public void connect(URL url)
{
if (url == null)
{
logger.error("The url can not be null");
throw new RuntimeException("The url to connect to the hypervisor can not be null");
}
this.url = url;
mgr = new IWebsessionManager(url);
vbox = mgr.logon("test", "test");
oSession = mgr.getSessionObject(vbox);
logger.info("Initialized connection to VirtualBox address:" + url.toString()
+ "\t version " + vbox.getVersion());
}
/**
* Reconnects to the hypervisors
*/
public void reconnect()
{
connect(this.url);
}
/*
* (non-Javadoc)
* @see com.abiquo.abicloud.model.IHypervisor#logout()
*/
public void logout()
{
mgr.logoff(vbox);
logger.info("Logged out form VirtualBox at address:" + url.toString());
vbox = null;
mgr = null;
oSession = null;
}
/*
* (non-Javadoc)
* @see com.abiquo.abicloud.model.IHypervisor#login(java.lang.String, java.lang.String)
*/
public void login(String user, String password)
{
vbox = mgr.logon(user, password);
logger.info("Logged in with user " + user);
oSession = mgr.getSessionObject(vbox);
}
/*
* (non-Javadoc)
* @see com.abiquo.abicloud.model.IHypervisor#createMachine(com.abiquo.abicloud
* .model.VirtualMachineConfiguration)
*/
public AbsVirtualMachine createMachine(VirtualMachineConfiguration config)
throws VirtualMachineException // String
// machineName,
// UUID
// machineId
{
// config.setHypervisor(this); esto se hace en el model
return new VirtualBoxMachine(config);
}
/*
* (non-Javadoc)
* @see com.abiquo.abicloud.model.IHypervisor#getAddress()
*/
public URL getAddress()
{
return url;
}
/*
* (non-Javadoc)
* @see com.abiquo.abicloud.model.IHypervisor#getHypervisorType()
*/
public String getHypervisorType()
{
return "vBox";
}
@Override
public void init(URL url)
{
logger.info("VirtualBox Hypervisor initialized");
}
}