/**
* Abiquo community edition
* cloud management application for hybrid clouds
* Copyright (C) 2008-2010 - Abiquo Holdings S.L.
*
* This application is free software; you can redistribute it and/or
* modify it under the terms of the GNU LESSER GENERAL PUBLIC
* LICENSE as published by the Free Software Foundation under
* version 3 of the License
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* LESSER GENERAL PUBLIC LICENSE v.3 for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
package com.abiquo.abiserver.services.flex;
import com.abiquo.abiserver.business.BusinessDelegateProxy;
import com.abiquo.abiserver.business.UserSessionException;
import com.abiquo.abiserver.commands.UserCommand;
import com.abiquo.abiserver.commands.VirtualApplianceCommand;
import com.abiquo.abiserver.commands.impl.UserCommandImpl;
import com.abiquo.abiserver.commands.impl.VirtualApplianceCommandImpl;
import com.abiquo.abiserver.commands.stub.APIStubFactory;
import com.abiquo.abiserver.commands.stub.VirtualApplianceResourceStub;
import com.abiquo.abiserver.commands.stub.impl.VirtualApplianceResourceStubImpl;
import com.abiquo.abiserver.pojo.authentication.UserSession;
import com.abiquo.abiserver.pojo.infrastructure.DataCenter;
import com.abiquo.abiserver.pojo.networking.NetworkConfiguration;
import com.abiquo.abiserver.pojo.result.BasicResult;
import com.abiquo.abiserver.pojo.result.DataResult;
import com.abiquo.abiserver.pojo.result.ListRequest;
import com.abiquo.abiserver.pojo.user.Enterprise;
import com.abiquo.abiserver.pojo.virtualappliance.VirtualAppliance;
import com.abiquo.abiserver.pojo.virtualappliance.VirtualDataCenter;
/**
* This class defines all services related to Virtual Appliances management
*
* @author Oliver
*/
public class VirtualApplianceService
{
/**
* The command to invoke.
*/
protected VirtualApplianceCommand virtualApplianceCommand;
protected UserCommand userCommand;
protected VirtualApplianceResourceStub virtualApplianceResourceStub;
/** The stub used to connect to the API. */
private VirtualApplianceResourceStub vappStub;
/**
* Default constructor.
*/
public VirtualApplianceService()
{
virtualApplianceResourceStub = new VirtualApplianceResourceStubImpl();
try
{
virtualApplianceCommand =
(VirtualApplianceCommand) Thread.currentThread().getContextClassLoader().loadClass(
"com.abiquo.abiserver.commands.impl.VirtualApplianceCommandPremiumImpl")
.newInstance();
}
catch (Exception e)
{
virtualApplianceCommand = new VirtualApplianceCommandImpl();
}
try
{
userCommand =
(UserCommand) Thread.currentThread().getContextClassLoader().loadClass(
"com.abiquo.abiserver.commands.impl.UserCommandPremiumImpl").newInstance();
}
catch (Exception e)
{
userCommand = new UserCommandImpl();
}
vappStub = new VirtualApplianceResourceStubImpl();
}
private VirtualApplianceCommand proxyCommand(final UserSession userSession)
{
return BusinessDelegateProxy.getInstance(userSession, virtualApplianceCommand,
VirtualApplianceCommand.class);
}
/**
* Proxies the stub to authenticate to the API.
*
* @param userSession user session.
* @return the stub to call the API.
*/
protected VirtualApplianceResourceStub proxyStub(final UserSession userSession)
{
return APIStubFactory
.getInstance(userSession, vappStub, VirtualApplianceResourceStub.class);
}
// /////////////////////////
// VirtualDataCenter
/**
* Retrieves a list of VirtualDataCenter that belongs to the same Enterprise
*
* @param userSession The UserSession with the user that called this method
* @param enterprise The Enterprise of which the VirtualDataCenter will be returned
* @param listRequest To filter the number of results
* @return a BasicResult object, containing an ArrayList<VirtualDataCenter>, with the
* VirtualDataCenter assigned to the enterprise
*/
public BasicResult getVirtualDataCentersByEnterprise(final UserSession userSession,
final Enterprise enterprise, final ListRequest listRequest)
{
VirtualApplianceCommand command = proxyCommand(userSession);
try
{
return command.getVirtualDataCentersByEnterprise(userSession, enterprise, listRequest);
}
catch (UserSessionException e)
{
return e.getResult();
}
}
public BasicResult getVirtualDataCentersByEnterpriseFaster(final UserSession userSession,
final Enterprise enterprise)
{
VirtualApplianceCommand command = proxyCommand(userSession);
try
{
return command.getVirtualDataCentersByEnterpriseFaster(userSession, enterprise);
}
catch (UserSessionException e)
{
return e.getResult();
}
}
/**
* Creates a new VirtualDataCenter in the Data Base
*
* @param userSession The UserSession with the user that called this method
* @param virtualDataCenter The VirtualDataCenter that will be created in Data Base
* @return a DataResult object containing the VirtualDataCenter that has been created
*/
@SuppressWarnings("unchecked")
public BasicResult createVirtualDataCenter(final UserSession userSession,
final VirtualDataCenter virtualDataCenter, final String networkName,
final NetworkConfiguration configuration)
{
VirtualApplianceCommand command = proxyCommand(userSession);
try
{
DataResult<VirtualDataCenter> dataResult =
command.createVirtualDataCenter(userSession, virtualDataCenter, networkName,
configuration.toPojoHB());
return dataResult;
}
catch (UserSessionException e)
{
return e.getResult();
}
}
/**
* Updates an existing VirtualDataCenter with new information
*
* @param userSession The UserSession with the user that called this method
* @param virtualDataCenter The VirtualDataCenter that will be updated
* @return a BasicResult object, with the success of the edition
*/
public BasicResult editVirtualDataCenter(final UserSession userSession,
final VirtualDataCenter virtualDataCenter)
{
VirtualApplianceCommand command = proxyCommand(userSession);
try
{
return command.editVirtualDataCenter(userSession, virtualDataCenter);
}
catch (UserSessionException e)
{
return e.getResult();
}
}
/**
* Deletes a VirtualDataCenter from the DataBase. A VirtualDataCenter can only be deleted if any
* of its Virtual Appliances are powered on
*
* @param userSession The UserSession with the user that called this method
* @param virtualDataCenter The VirtualDataCenter to be deleted
* @return A BasicResult object with the success of the deletion. BasicResult.success = false
* will be returned if the VirtualDataCenter has any assigned VirtualAppliance powered
* on
*/
public BasicResult deleteVirtualDataCenter(final UserSession userSession,
final VirtualDataCenter virtualDataCenter)
{
VirtualApplianceCommand command = proxyCommand(userSession);
try
{
return command.deleteVirtualDataCenter(userSession, virtualDataCenter);
}
catch (UserSessionException e)
{
return e.getResult();
}
}
// /////////////////////////
// VirtualAppliance
/**
* Retrieves a list of Virtual Appliances that belong to the same Enterprise The
* VirtualAppliance retrieved will not contain their Node list, for performance purposes It will
* also return those Virtual Appliance marked as public
*
* @param userSession The UserSession object with the user that called this method
* @param enterprise The Enterprise to retrieve the VirtualAppliance list
* @return a DataResult<ArrayList<VirtualAppliance>> object with the VirtualAppliance that
* belong to the given enterprise
* @see getVirtualApplianceNodes
*/
public BasicResult getVirtualAppliancesByEnterprise(final UserSession userSession,
final Enterprise enterprise)
{
// VirtualApplianceCommand command = proxyCommand(userSession);
return proxyVirtualApplianceResourceStub(userSession).getVirtualAppliancesByEnterprise(
userSession, enterprise);
// return command.getVirtualAppliancesByEnterprise(userSession, enterprise);
}
public BasicResult getVirtualAppliancesByEnterprise(final UserSession userSession,
final Enterprise enterprise, final ListRequest listRequest)
{
// VirtualApplianceCommand command = proxyCommand(userSession);
return proxyVirtualApplianceResourceStub(userSession).getVirtualAppliancesByEnterprise(
userSession, enterprise, listRequest);
// return command.getVirtualAppliancesByEnterprise(userSession, enterprise);
}
/**
* Retrieves a list of Virtual Appliances that belong to the same VirtualDataCenter. The
* VirtualAppliance retrieved will not contain their Node list, for performance purposes. It
* will also return those VirtualAppliance marked as public
*
* @param userSession The UserSession object with the user that called this method
* @param vdc The VirtualDataCenter to retrieve the VirtualAppliance list
* @return a DataResult<ArrayList<VirtualAppliance>> object with the VirtualAppliance that
* belong to the given enterprise
*/
public BasicResult getVirtualAppliancesByVirtualDatacenter(final UserSession userSession,
final VirtualDataCenter vdc, final ListRequest listRequest)
{
return proxyVirtualApplianceResourceStub(userSession)
.getVirtualAppliancesByVirtualDatacenter(userSession, vdc, listRequest);
}
public BasicResult getVirtualAppliancesByEnterpriseAndDatacenter(final UserSession userSession,
final Enterprise enterprise, final DataCenter datacenter)
{
return proxyVirtualApplianceResourceStub(userSession)
.getVirtualAppliancesByEnterpriseAndDatacenter(userSession, enterprise, datacenter);
}
/**
* Given a VirtualAppliance, retrieves its node list
*
* @param userSession The UserSession object with the user that called this method
* @param virtualAppliance The VirtualAppliance to retrieve the nodes
* @return a DataResult<ArrayList<Node>> object, containing the virtualAppliance's Nodes
*/
public BasicResult getVirtualApplianceNodes(final UserSession userSession,
final VirtualAppliance virtualAppliance)
{
// VirtualApplianceCommand command = proxyCommand(userSession);
return proxyVirtualApplianceResourceStub(userSession).getAppNodes(virtualAppliance);
// return command.getVirtualApplianceNodes(virtualAppliance);
}
/**
* Creates a new Virtual Appliance, that belongs to the user who called this method
*
* @param session
* @param virtualAppliance
* @return A DataResult object containing the VirtualAppliance created in the Data Base
*/
public BasicResult createVirtualAppliance(final UserSession userSession,
final VirtualAppliance virtualAppliance)
{
return proxyStub(userSession).createVirtualAppliance(virtualAppliance);
}
/**
* Modifies the information of a VirtualAppliance that already exists in the Data Base
*
* @param session
* @param virtualAppliance
* @return A DataResult object, containing an ArrayList of Node, with the Virtual Appliance's
* Nodes updated
*/
public DataResult editVirtualAppliance(final UserSession session,
final VirtualAppliance virtualAppliance)
{
// VirtualApplianceCommand command = proxyCommand(session);
return proxyVirtualApplianceResourceStub(session).updateVirtualApplianceNodes(
virtualAppliance.getVirtualDataCenter().getId(), virtualAppliance);
// BasicResult result = command.editVirtualAppliance(session, virtualAppliance);
// return result;
}
/**
* Deletes a VirtualAppliance that exists in the Data Base
*
* @param session
* @param virtualAppliance
* @return a BasicResult object, containing success = true if the deletion was successful
*/
public BasicResult deleteVirtualAppliance(final UserSession session,
final VirtualAppliance virtualAppliance)
{
// VirtualApplianceCommand command = proxyCommand(session);
//
// DataResult<User> dr = userCommand.getUser(session, session.getUserIdDb());
// if (dr.getSuccess())
// {
// BasicResult check =
// SecurityService.checkEnterpriseForPOSTMethods(dr.getData(),
// virtualAppliance.getEnterprise());
// if (!check.getSuccess())
// {
// BasicCommand.traceLog(SeverityType.CRITICAL, ComponentType.VIRTUAL_APPLIANCE,
// EventType.VAPP_DELETE, session, null, virtualAppliance.getName(),
// "Cannot delete a virtual appliance from other enterprise", null, null, null,
// null, null);
// return check;
// }
// }
// else
// {
// return dr;
// }
return proxyVirtualApplianceResourceStub(session).deleteVirtualAppliance(virtualAppliance,
false);
// return command.deleteVirtualAppliance(session, virtualAppliance);
}
/**
* Forces an state refresh in the virtual Appliance
*
* @param session
* @param virtualAppliance the virtual appliance to refresh
* @return A BasicResult object
*/
public BasicResult forceRefreshVirtualApplianceState(final UserSession session,
final VirtualAppliance virtualAppliance)
{
// VirtualApplianceCommand command = proxyCommand(session);
DataResult<VirtualAppliance> virtualApplianceNodes =
proxyVirtualApplianceResourceStub(session).getVirtualApplianceNodes(
virtualAppliance.getVirtualDataCenter().getId(), virtualAppliance.getId(),
"forceRefreshVirtualApplianceState");
return virtualApplianceNodes;
// return command.forceRefreshVirtualApplianceState(virtualAppliance);
}
protected VirtualApplianceResourceStub proxyVirtualApplianceResourceStub(
final UserSession userSession)
{
return APIStubFactory.getInstance(userSession, virtualApplianceResourceStub,
VirtualApplianceResourceStub.class);
}
}