/* ===============================================================================
*
* Part of the InfoGlue Content Management Platform (www.infoglue.org)
*
* ===============================================================================
*
* Copyright (C)
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2, as published by the
* Free Software Foundation. See the file LICENSE.html for more information.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
* Place, Suite 330 / Boston, MA 02111-1307 / USA.
*
* ===============================================================================
*/
package org.infoglue.cms.controllers.kernel.impl.simple;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.exolab.castor.jdo.Database;
import org.infoglue.cms.entities.kernel.BaseEntityVO;
import org.infoglue.cms.entities.management.GroupVO;
import org.infoglue.cms.exception.ConstraintException;
import org.infoglue.cms.exception.SystemException;
import org.infoglue.cms.security.AuthorizationModule;
import org.infoglue.cms.security.InfoGlueAuthenticationFilter;
import org.infoglue.cms.security.InfoGlueGroup;
import org.infoglue.cms.security.InfoGluePrincipal;
import org.infoglue.cms.util.sorters.ReflectionComparator;
/**
* @author Mattias Bogeblad
*
* This class acts as the proxy for getting the right groups.
*/
public class GroupControllerProxy extends BaseController
{
private AuthorizationModule authorizationModule = null;
private Database transactionObject = null;
public GroupControllerProxy(Database transactionObject)
{
this.transactionObject = transactionObject;
}
public static GroupControllerProxy getController()
{
return new GroupControllerProxy(null);
}
public static GroupControllerProxy getController(Database transactionObject)
{
return new GroupControllerProxy(transactionObject);
}
/**
* This method instantiates the AuthorizationModule.
*/
private AuthorizationModule getAuthorizationModule()
{
//if(authorizationModule == null)
//{
try
{
authorizationModule = (AuthorizationModule)Class.forName(InfoGlueAuthenticationFilter.authorizerClass).newInstance();
authorizationModule.setExtraProperties(InfoGlueAuthenticationFilter.extraProperties);
authorizationModule.setTransactionObject(this.transactionObject);
}
catch(Exception e)
{
e.printStackTrace();
}
//}
return authorizationModule;
}
/**
* This method return whether the module in question supports updates to the values.
*/
public boolean getSupportUpdate() throws ConstraintException, SystemException, Exception
{
return getAuthorizationModule().getSupportUpdate();
}
/**
* This method return whether the module in question supports deletes of users.
*/
public boolean getSupportDelete() throws ConstraintException, SystemException, Exception
{
return getAuthorizationModule().getSupportDelete();
}
/**
* This method return whether the module in question supports creation of new users.
*/
public boolean getSupportCreate() throws ConstraintException, SystemException, Exception
{
return getAuthorizationModule().getSupportCreate();
}
/**
* This method returns a specific content-object
*/
public List getAllGroups() throws ConstraintException, SystemException, Exception
{
List groups = new ArrayList();
groups = getAuthorizationModule().getGroups();
Collections.sort(groups, new ReflectionComparator("displayName"));
return groups;
}
/**
* This method returns a certain group
*/
public InfoGlueGroup getGroup(String groupName) throws ConstraintException, SystemException, Exception
{
InfoGlueGroup infoGlueGroup = null;
infoGlueGroup = getAuthorizationModule().getAuthorizedInfoGlueGroup(groupName);
return infoGlueGroup;
}
/**
* This method returns if a role exists
*/
public boolean groupExists(String groupName) throws ConstraintException, SystemException, Exception
{
return getAuthorizationModule().groupExists(groupName);
}
/**
* This method returns a list of InfoGlue Principals which are part of this group
*/
public List getInfoGluePrincipals(String groupName) throws ConstraintException, SystemException, Exception
{
List infoGluePrincipals = new ArrayList();
infoGluePrincipals = getAuthorizationModule().getGroupUsers(groupName);
Collections.sort(infoGluePrincipals, new ReflectionComparator("name"));
return infoGluePrincipals;
}
/**
* This method returns a list of InfoGlue Principals which are part of this group
*/
public List<InfoGluePrincipal> getInfoGluePrincipals(String groupName, Integer offset, Integer limit, String sortProperty, String direction, String searchString) throws ConstraintException, SystemException, Exception
{
List infoGluePrincipals = new ArrayList();
infoGluePrincipals = getAuthorizationModule().getGroupUsers(groupName, offset, limit, sortProperty, direction, searchString);
return infoGluePrincipals;
}
/**
* This method returns a list of InfoGlue Principals which are part of this group
*/
public Integer getInfoGluePrincipalsCount(String groupName, String searchString) throws ConstraintException, SystemException, Exception
{
Integer count = getAuthorizationModule().getGroupUserCount(groupName, searchString);
return count;
}
/**
* This method returns a list of InfoGlue Principals which are part of this group
*/
public List<InfoGluePrincipal> getInfoGluePrincipalsNotInGroup(String groupName, Integer offset, Integer limit, String sortProperty, String direction, String searchString) throws ConstraintException, SystemException, Exception
{
List infoGluePrincipals = new ArrayList();
infoGluePrincipals = getAuthorizationModule().getGroupUsersInverted(groupName, offset, limit, sortProperty, direction, searchString);
return infoGluePrincipals;
}
/**
* This method returns a list of InfoGlue Principals which are part of this group
*/
public Integer getInfoGluePrincipalsNotInGroupCount(String groupName, String searchString) throws ConstraintException, SystemException, Exception
{
Integer count = getAuthorizationModule().getGroupUserInvertedCount(groupName, searchString);
return count;
}
/**
* This method creates a new group
*/
public InfoGlueGroup createGroup(GroupVO groupVO) throws ConstraintException, SystemException, Exception
{
InfoGlueGroup infoGlueGroup = null;
getAuthorizationModule().createInfoGlueGroup(groupVO);
return getGroup(groupVO.getGroupName());
}
/**
* This method updates an existing group
*/
public void updateGroup(GroupVO groupVO, String[] userNames) throws ConstraintException, SystemException, Exception
{
getAuthorizationModule().updateInfoGlueGroup(groupVO, userNames);
}
/**
* This method updates an existing group
*/
public void addUser(String groupName, String userName) throws ConstraintException, SystemException, Exception
{
getAuthorizationModule().addUserToGroup(groupName, userName);
}
/**
* This method removes a user from group
*/
public void removeUser(String groupName, String userName) throws ConstraintException, SystemException, Exception
{
getAuthorizationModule().removeUserFromGroup(groupName, userName);
}
/**
* This method deletes an existing group and all the entities that are connected to that group.
*/
public void deleteGroup(String groupName) throws ConstraintException, SystemException, Exception
{
Database db = CastorDatabaseService.getDatabase();
try
{
beginTransaction(db);
this.transactionObject = db;
getAuthorizationModule().deleteInfoGlueGroup(groupName);
AccessRightController.getController().deleteAccessRightGroup(groupName, db);
GroupPropertiesController.getController().delete(groupName, db);
GroupPropertiesController.getController().deleteContentTypeDefinitions(groupName, db);
commitTransaction(db);
}
catch (Exception e)
{
rollbackTransaction(db);
throw new SystemException(e);
}
}
public BaseEntityVO getNewVO()
{
return null;
}
public List getAvailableGroups(InfoGluePrincipal infoGluePrincipal, String interceptionPointName) throws ConstraintException, SystemException, Exception
{
List availableGroups = new ArrayList();
List allGroups = getAuthorizationModule().getGroups();
if(this.transactionObject == null)
{
Database db = CastorDatabaseService.getDatabase();
try
{
beginTransaction(db);
Iterator allRolesIterator = allGroups.iterator();
while(allRolesIterator.hasNext())
{
InfoGlueGroup group = (InfoGlueGroup)allRolesIterator.next();
boolean hasAccess = AccessRightController.getController().getIsPrincipalAuthorized(db, infoGluePrincipal, interceptionPointName, "" + group.getName());
if(hasAccess)
availableGroups.add(group);
}
commitTransaction(db);
}
catch (Exception e)
{
rollbackTransaction(db);
throw new SystemException(e);
}
}
else
{
Iterator allRolesIterator = allGroups.iterator();
while(allRolesIterator.hasNext())
{
InfoGlueGroup group = (InfoGlueGroup)allRolesIterator.next();
boolean hasAccess = AccessRightController.getController().getIsPrincipalAuthorized(this.transactionObject, infoGluePrincipal, interceptionPointName, "" + group.getName());
if(hasAccess)
availableGroups.add(group);
}
}
return availableGroups;
}
}