/**
* 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.commands.impl;
import java.util.ArrayList;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.abiquo.abiserver.business.hibernate.pojohb.user.EnterpriseHB;
import com.abiquo.abiserver.commands.BasicCommand;
import com.abiquo.abiserver.commands.UserCommand;
import com.abiquo.abiserver.commands.stub.APIStubFactory;
import com.abiquo.abiserver.commands.stub.EnterprisesResourceStub;
import com.abiquo.abiserver.commands.stub.UsersResourceStub;
import com.abiquo.abiserver.commands.stub.impl.EnterprisesResourceStubImpl;
import com.abiquo.abiserver.commands.stub.impl.UsersResourceStubImpl;
import com.abiquo.abiserver.persistence.hibernate.HibernateUtil;
import com.abiquo.abiserver.pojo.authentication.UserSession;
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.user.EnterpriseListResult;
import com.abiquo.abiserver.pojo.user.PrivilegeListResult;
import com.abiquo.abiserver.pojo.user.Role;
import com.abiquo.abiserver.pojo.user.RoleListResult;
import com.abiquo.abiserver.pojo.user.User;
import com.abiquo.abiserver.pojo.user.UserListOptions;
import com.abiquo.abiserver.pojo.user.UserListResult;
import com.abiquo.abiserver.scheduler.limit.exception.HardLimitExceededException;
import com.abiquo.tracer.ComponentType;
import com.abiquo.tracer.EventType;
import com.abiquo.tracer.SeverityType;
/**
* This command collects all actions related to users management
*
* @author Oliver
*/
public class UserCommandImpl extends BasicCommand implements UserCommand
{
/*
* (non-Javadoc)
* @see
* com.abiquo.abiserver.commands.UserCommand#getUsers(com.abiquo.abiserver.pojo.authentication
* .UserSession, com.abiquo.abiserver.pojo.user.UserListOptions)
*/
@Override
public DataResult<UserListResult> getUsers(final UserSession userSession,
final UserListOptions userListOptions)
{
UsersResourceStub proxy =
APIStubFactory.getInstance(userSession, new UsersResourceStubImpl(),
UsersResourceStub.class);
return proxy.getUsers(userListOptions);
}
/*
* (non-Javadoc)
* @see
* com.abiquo.abiserver.commands.UserCommand#getUser(com.abiquo.abiserver.pojo.authentication
* .UserSession, java.lang.Integer)
*/
@Override
public DataResult<User> getUser(final UserSession userSession, final Integer idUser)
{
UsersResourceStub proxy =
APIStubFactory.getInstance(userSession, new UsersResourceStubImpl(),
UsersResourceStub.class);
return proxy.getUser(idUser);
}
/*
* (non-Javadoc)
* @see
* com.abiquo.abiserver.commands.UserCommand#createUser(com.abiquo.abiserver.pojo.authentication
* .UserSession, com.abiquo.abiserver.pojo.user.User)
*/
@Override
public DataResult<User> createUser(final UserSession userSession, final User user)
{
DataResult<User> dataResult = null;
UsersResourceStub proxy =
APIStubFactory.getInstance(userSession, new UsersResourceStubImpl(),
UsersResourceStub.class);
dataResult = proxy.createUser(user);
if (dataResult.getSuccess())
{
dataResult.setMessage(resourceManager.getMessage("createUser.success"));
}
return dataResult;
}
/*
* (non-Javadoc)
* @see
* com.abiquo.abiserver.commands.UserCommand#editUser(com.abiquo.abiserver.pojo.authentication
* .UserSession, java.util.ArrayList)
*/
@Override
public BasicResult editUser(final UserSession userSession, final ArrayList<User> users)
{
BasicResult basicResult = new BasicResult();
UsersResourceStub proxy =
APIStubFactory.getInstance(userSession, new UsersResourceStubImpl(),
UsersResourceStub.class);
for (User user : users)
{
basicResult = proxy.updateUser(user);
if (basicResult.getSuccess())
{
basicResult.setMessage(resourceManager.getMessage("editUser.success"));
}
else
{
break;
}
}
return basicResult;
}
/*
* (non-Javadoc)
* @see
* com.abiquo.abiserver.commands.UserCommand#deleteUser(com.abiquo.abiserver.pojo.authentication
* .UserSession, com.abiquo.abiserver.pojo.user.User)
*/
@Override
public BasicResult deleteUser(final UserSession userSession, final User user)
{
BasicResult basicResult = new BasicResult();
UsersResourceStub proxy =
APIStubFactory.getInstance(userSession, new UsersResourceStubImpl(),
UsersResourceStub.class);
basicResult = proxy.deleteUser(user);
if (basicResult.getSuccess())
{
basicResult.setMessage(resourceManager.getMessage("deleteUser.success"));
}
else
{
traceLog(SeverityType.CRITICAL, ComponentType.USER, EventType.USER_DELETE, userSession,
null, null, basicResult.getMessage(), null, null, null, user.getUser(), user
.getEnterprise().getName());
}
return basicResult;
}
/*
* (non-Javadoc)
* @seecom.abiquo.abiserver.commands.UserCommand#closeSessionUsers(com.abiquo.abiserver.pojo.
* authentication.UserSession, java.util.ArrayList)
*/
@Override
public BasicResult closeSessionUsers(final UserSession userSession, final ArrayList<User> users)
{
BasicResult basicResult = new BasicResult();
Session session = null;
Transaction transaction = null;
try
{
session = HibernateUtil.getSession();
transaction = session.beginTransaction();
// Generating the list of users for the query
if (users.size() > 0)
{
String userNames = "(";
User user;
for (int i = 0; i < users.size(); i++)
{
user = users.get(i);
if (i > 0)
{
userNames = userNames + "," + "'" + user.getUser() + "'";
}
else
{
userNames = userNames + "'" + user.getUser() + "'";
}
}
userNames = userNames + ")";
// TODO use an HQL query instead of an SQL query
session.createSQLQuery("DELETE FROM session WHERE user IN " + userNames)
.executeUpdate();
}
transaction.commit();
// Generating result
basicResult.setSuccess(true);
basicResult.setMessage(resourceManager.getMessage("closeSessionUsers.success"));
}
catch (Exception e)
{
if (transaction != null && transaction.isActive())
{
transaction.rollback();
}
// Generating error
errorManager.reportError(resourceManager, basicResult, "closeSessionUsers", e);
}
return basicResult;
}
/*
* (non-Javadoc)
* @seecom.abiquo.abiserver.commands.UserCommand#closeSessionUsers(com.abiquo.abiserver.pojo.
* authentication.UserSession)
*/
@Override
public BasicResult closeSessionUsers(final UserSession userSession)
{
BasicResult basicResult = new BasicResult();
Session session = null;
Transaction transaction = null;
try
{
session = HibernateUtil.getSession();
transaction = session.beginTransaction();
// Generating a custom query to delete all sessions, except userSession
String hqlDelete =
"delete UserSession uS where uS.user != :notUser and uS.key != :notKey";
session.createQuery(hqlDelete).setString("notUser", userSession.getUser())
.setString("notKey", userSession.getKey()).executeUpdate();
transaction.commit();
// Generating result
basicResult.setSuccess(true);
basicResult.setMessage(resourceManager.getMessage("closeSessionUsers.success"));
}
catch (Exception e)
{
if (transaction != null && transaction.isActive())
{
transaction.rollback();
}
// Generating error
errorManager.reportError(resourceManager, basicResult, "closeSessionUsers", e);
}
return basicResult;
}
// ///////////////////////////////////////
// ENTERPRISES
/*
* (non-Javadoc)
* @see
* com.abiquo.abiserver.commands.UserCommand#getEnterprises(com.abiquo.abiserver.pojo.authentication
* .UserSession, com.abiquo.abiserver.pojo.result.ListRequest)
*/
@Override
public DataResult<EnterpriseListResult> getEnterprises(final UserSession userSession,
final ListRequest enterpriseListOptions)
{
EnterprisesResourceStub proxy = getEnterpriseStubProxy(userSession);
DataResult<EnterpriseListResult> dataResult = proxy.getEnterprises(enterpriseListOptions);
if (dataResult.getSuccess())
{
dataResult.setMessage(resourceManager.getMessage("getEnterprises.success"));
}
return dataResult;
}
/*
* (non-Javadoc)
* @seecom.abiquo.abiserver.commands.UserCommand#createEnterprise(com.abiquo.abiserver.pojo.
* authentication.UserSession, com.abiquo.abiserver.pojo.user.Enterprise)
*/
@Override
public DataResult<Enterprise> createEnterprise(final UserSession userSession,
final Enterprise enterprise)
{
EnterprisesResourceStub proxy = getEnterpriseStubProxy(userSession);
DataResult<Enterprise> dataResult = proxy.createEnterprise(enterprise);
// if (dataResult.getSuccess())
// {
// traceLog(SeverityType.INFO, ComponentType.ENTERPRISE, EventType.ENTERPRISE_CREATE,
// userSession, null, null, "Enterprise '" + enterprise.getName()
// + "' has been created", null, null, null, null, enterprise.getName());
// }
return dataResult;
}
protected EnterprisesResourceStub getEnterpriseStubProxy(final UserSession userSession)
{
EnterprisesResourceStub proxy =
APIStubFactory.getInstance(userSession, new EnterprisesResourceStubImpl(),
EnterprisesResourceStub.class);
return proxy;
}
/*
* (non-Javadoc)
* @see
* com.abiquo.abiserver.commands.UserCommand#editEnterprise(com.abiquo.abiserver.pojo.authentication
* .UserSession, com.abiquo.abiserver.pojo.user.Enterprise)
*/
@Override
@SuppressWarnings("unchecked")
public BasicResult editEnterprise(final UserSession userSession, final Enterprise enterprise)
{
// Getting the enterprise that will be edited
Session session = HibernateUtil.getSession();
Transaction transaction = session.beginTransaction();
EnterpriseHB enterpriseHB =
(EnterpriseHB) session.get(EnterpriseHB.class, enterprise.getId());
// Checked in API
// try
// {
// checkEditLimits(enterpriseHB, enterprise, userSession);
// }
// catch (HardLimitExceededException e)
// {
// BasicResult basicResult = new BasicResult();
// basicResult.setSuccess(false);
// basicResult.setMessage(resourceManager.getMessage("editEnterprise.limitExceeded"));
//
// return basicResult;
//
// }
// finally
// {
// transaction.commit();
// }
EnterprisesResourceStub proxy = getEnterpriseStubProxy(userSession);
DataResult<Enterprise> result = new DataResult<Enterprise>();
result = proxy.editEnterprise(enterprise);
if (result.getSuccess())
{
// Building result
result.setSuccess(true);
result.setMessage(resourceManager.getMessage("editEnterprise.success"));
// Log the event
// traceLog(SeverityType.INFO, ComponentType.ENTERPRISE, EventType.ENTERPRISE_MODIFY,
// userSession, null, null, "Enterprise '" + enterprise.getName()
// + "' has been modified [Name: " + enterprise.getName() + "]", null, null, null,
// null, enterprise.getName());
}
else
{
// result.setSuccess(false);
// result.setMessage(resourceManager.getMessage("editEnterprise.limitExceeded"));
//
// errorManager.reportError(resourceManager, result, "editEnterprise",
// result.getMessage());
traceLog(SeverityType.CRITICAL, ComponentType.ENTERPRISE, EventType.ENTERPRISE_MODIFY,
userSession, null, null, result.getMessage(), null, null, null, null,
enterprise.getName());
}
return result;
}
protected void checkEditLimits(final EnterpriseHB currentEnterprise,
final Enterprise newEnterprise, final UserSession userSession)
throws HardLimitExceededException
{
// community impl (no limits at all)
}
/*
* (non-Javadoc)
* @seecom.abiquo.abiserver.commands.UserCommand#deleteEnterprise(com.abiquo.abiserver.pojo.
* authentication.UserSession, com.abiquo.abiserver.pojo.user.Enterprise)
*/
@Override
public BasicResult deleteEnterprise(final UserSession userSession, final Enterprise enterprise)
{
EnterprisesResourceStub proxy = getEnterpriseStubProxy(userSession);
BasicResult result = proxy.deleteEnterprise(enterprise.getId());
if (result.getSuccess())
{
result.setMessage(resourceManager.getMessage("deleteEnterprise.success"));
// traceLog(SeverityType.INFO, ComponentType.ENTERPRISE, EventType.ENTERPRISE_DELETE,
// userSession, null, null, null, null, null, null, null, enterprise.getName());
}
else
{
traceLog(SeverityType.CRITICAL, ComponentType.ENTERPRISE, EventType.ENTERPRISE_DELETE,
userSession, null, null, result.getMessage(), null, null, null, null,
enterprise.getName());
}
return result;
}
@Override
public DataResult<Enterprise> getEnterprise(final UserSession userSession,
final Integer enterpriseId)
{
EnterprisesResourceStub proxy = getEnterpriseStubProxy(userSession);
DataResult<Enterprise> dataResult = proxy.getEnterprise(enterpriseId);
return dataResult;
}
@Override
public DataResult<Role> getRole(final UserSession userSession, final Integer roleId)
{
UsersResourceStub proxy =
APIStubFactory.getInstance(userSession, new UsersResourceStubImpl(),
UsersResourceStub.class);
DataResult<Role> dataResult = proxy.getRole(roleId);
return dataResult;
}
@Override
public DataResult<RoleListResult> getRoles(final UserSession userSession,
final ListRequest roleListOptions, final Enterprise enterprise)
{
UsersResourceStub proxy =
APIStubFactory.getInstance(userSession, new UsersResourceStubImpl(),
UsersResourceStub.class);
return proxy.getRoles(roleListOptions, enterprise);
}
@Override
public DataResult<PrivilegeListResult> getPrivilegesByRole(final UserSession userSession,
final int roleId)
{
UsersResourceStub proxy =
APIStubFactory.getInstance(userSession, new UsersResourceStubImpl(),
UsersResourceStub.class);
return proxy.getPrivilegesByRole(roleId);
}
/*
* (non-Javadoc)
* @see
* com.abiquo.abiserver.commands.com.abiquo.abiserver.commands.UserCommandPremium#checkRolePrivilege
* (com.abiquo.abiserver.pojo.authentication.UserSession, java.lang.Integer, java.lang.String)
*/
@Override
public BasicResult checkRolePrivilege(final UserSession userSession, final Integer idRole,
final String namePrivilege)
{
BasicResult basicResult = new BasicResult();
UsersResourceStub proxy =
APIStubFactory.getInstance(userSession, new UsersResourceStubImpl(),
UsersResourceStub.class);
basicResult = proxy.checkRolePrivilege(idRole, namePrivilege);
if (basicResult.getSuccess())
{
basicResult.setMessage(resourceManager.getMessage("checkRolePrivilege.success"));
}
return basicResult;
}
@Override
public BasicResult checkRoleAccess(final UserSession userSession, final Integer idRole)
{
BasicResult basicResult = new BasicResult();
UsersResourceStub proxy =
APIStubFactory.getInstance(userSession, new UsersResourceStubImpl(),
UsersResourceStub.class);
basicResult = proxy.checkRoleAccess(idRole);
if (basicResult.getSuccess())
{
basicResult.setMessage(resourceManager.getMessage("checkRoleAccess.success"));
}
return basicResult;
}
}