Projet

Général

Profil

Bug #692 » patchBug692.patch

Nicolas Eysseric, 29/06/2010 15:45

Voir les différences:

src/main/java/com/stratelia/webactiv/beans/admin/Admin.java (working copy)
import com.stratelia.silverpeas.util.SilverpeasSettings;
import com.stratelia.webactiv.SilverpeasRole;
import com.stratelia.webactiv.beans.admin.cache.AdminCache;
import com.stratelia.webactiv.beans.admin.cache.GroupCache;
import com.stratelia.webactiv.beans.admin.cache.Space;
import com.stratelia.webactiv.beans.admin.cache.TreeCache;
import com.stratelia.webactiv.beans.admin.instance.control.Instanciateur;
......
String componentName = componentInst.getName();
String componentId = componentName + componentInst.getId();
String[] asCompoNames = {componentName};
String[] asCompoIds = {componentId};
String[] asCompoNames = { componentName };
String[] asCompoIds = { componentId };
instantiateComponents(sUserId, asCompoIds, asCompoNames, spaceInstFather.getId(),
connectionProd);
......
// Uninstantiate the components
String componentName = componentInst.getName();
String[] asCompoName = {componentName};
String[] asCompoId = {sClientComponentId};
String[] asCompoName = { componentName };
String[] asCompoId = { sClientComponentId };
unInstantiateComponents(sUserId, asCompoId, asCompoName,
getClientSpaceId(sFatherClientId), connectionProd);
......
m_Cache.resetComponentInst();
// reset treecache list in old and new spaces
TreeCache.setComponents(getDriverSpaceId(oldSpaceId), m_ComponentInstManager.getComponentsInSpace(Integer.parseInt(getDriverSpaceId(oldSpaceId))));
TreeCache.setComponents(getDriverSpaceId(spaceId), m_ComponentInstManager.getComponentsInSpace(Integer.parseInt(getDriverSpaceId(spaceId))));
TreeCache.setComponents(getDriverSpaceId(oldSpaceId), m_ComponentInstManager
.getComponentsInSpace(Integer.parseInt(getDriverSpaceId(oldSpaceId))));
TreeCache.setComponents(getDriverSpaceId(spaceId), m_ComponentInstManager
.getComponentsInSpace(Integer.parseInt(getDriverSpaceId(spaceId))));
} catch (Exception e) {
rollback();
throw new AdminException("Admin.moveComponentInst",
......
List<String> groups = getAllGroupsOfUser(userId);
return m_ProfiledObjectManager.getUserProfileNames(objectId, objectType, Integer.parseInt(getDriverComponentId(componentId)),
return m_ProfiledObjectManager.getUserProfileNames(objectId, objectType, Integer
.parseInt(getDriverComponentId(componentId)),
Integer.parseInt(userId), groups);
}
......
m_DDManager.startTransaction(false);
GroupProfileInst oldSpaceProfile =
m_GroupProfileInstManager.getGroupProfileInst(m_DDManager, null, groupProfileInstNew.getGroupId());
m_GroupProfileInstManager.getGroupProfileInst(m_DDManager, null, groupProfileInstNew
.getGroupId());
// Update the group profile in tables
m_GroupProfileInstManager.updateGroupProfileInst(oldSpaceProfile,
......
}
private List<String> getAllGroupsOfUser(String userId) throws AdminException {
List<String> allGroupsOfUser = new ArrayList<String>();
String[] directGroupIds = m_GroupManager.getDirectGroupsOfUser(m_DDManager, userId);
for (int g = 0; g < directGroupIds.length; g++) {
Group group = m_GroupManager.getGroup(directGroupIds[g], false); // TODO: cacher les groupes
if (group != null) {
allGroupsOfUser.add(group.getId());
while (StringUtil.isDefined(group.getSuperGroupId())) {
group = m_GroupManager.getGroup(group.getSuperGroupId(), false);
if (group != null) {
allGroupsOfUser.add(group.getId());
List<String> allGroupsOfUser = GroupCache.getAllGroupIdsOfUser(userId);
if (allGroupsOfUser == null) {
// group ids of user is not yet processed
// process it and store it in cache
allGroupsOfUser = new ArrayList<String>();
String[] directGroupIds = m_GroupManager.getDirectGroupsOfUser(m_DDManager, userId);
for (int g = 0; g < directGroupIds.length; g++) {
Group group = m_GroupManager.getGroup(directGroupIds[g], false);
if (group != null) {
allGroupsOfUser.add(group.getId());
while (StringUtil.isDefined(group.getSuperGroupId())) {
group = m_GroupManager.getGroup(group.getSuperGroupId(), false);
if (group != null) {
allGroupsOfUser.add(group.getId());
}
}
}
}
// store groupIds of user in cache
GroupCache.setAllGroupIdsOfUser(userId, allGroupsOfUser);
}
return allGroupsOfUser;
}
......
// All users by access level
if (domainId == null) {
userIds =
Arrays.asList(m_DDManager.organization.user.getUserIdsByAccessLevel(accessLevel));
Arrays.asList(m_DDManager.organization.user
.getUserIdsByAccessLevel(accessLevel));
} else {
userIds =
Arrays.asList(m_UserManager.getUserIdsOfDomainAndAccessLevel(m_DDManager,
......
// Available only for "domaine mixte"
if ("-1".equals(domainId)) {
userIds =
Arrays.asList(m_DDManager.organization.user.getUserIdsOfDomain(Integer.parseInt(dId)));
Arrays.asList(m_DDManager.organization.user.getUserIdsOfDomain(Integer
.parseInt(dId)));
}
}
} else if (rule.toLowerCase().startsWith("dc_")) {
......
}
}
if ((parentId == null)
&& ((parentSpecificIds.length > 0) || ((askedParentId != null) && (askedParentId.length() > 0)))) {// We
&&
((parentSpecificIds.length > 0) || ((askedParentId != null) && (askedParentId.length() > 0)))) {// We
// can't
// add
// the
......
existingGroupId = null;
try {
existingGroupId =
m_GroupManager.getGroupIdBySpecificIdAndDomainId(m_DDManager, childs[i].getSpecificId(), latestGroup.getDomainId());
m_GroupManager.getGroupIdBySpecificIdAndDomainId(m_DDManager, childs[i]
.getSpecificId(), latestGroup.getDomainId());
existingGroup = getGroup(existingGroupId);
if (existingGroup.getSuperGroupId().equals(latestGroup.getId())) { // Only
// synchronize
src/main/java/com/stratelia/webactiv/beans/admin/cache/GroupCache.java (revision 0)
/**
* Copyright (C) 2000 - 2009 Silverpeas
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* As a special exception to the terms and conditions of version 3.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* Open Source Software ("FLOSS") applications as described in Silverpeas's
* FLOSS exception. You should have received a copy of the text describing
* the FLOSS exception, and it is also available here:
* "http://repository.silverpeas.com/legal/licensing"
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.stratelia.webactiv.beans.admin.cache;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
public class GroupCache {
private static ConcurrentMap<String, List<String>> map =
new ConcurrentHashMap<String, List<String>>();
public static void clearCache() {
map.clear();
}
public static List<String> getAllGroupIdsOfUser(String userId) {
return map.get(userId);
}
public static void setAllGroupIdsOfUser(String userId, List<String> groupIds) {
map.put(userId, groupIds);
}
public static void removeCacheOfUser(String userId) {
map.remove(userId);
}
}
src/main/java/com/stratelia/webactiv/organization/GroupTable.java (working copy)
import com.stratelia.silverpeas.silvertrace.SilverTrace;
import com.stratelia.webactiv.beans.admin.SynchroGroupReport;
import com.stratelia.webactiv.beans.admin.SynchroReport;
import com.stratelia.webactiv.beans.admin.cache.GroupCache;
import com.stratelia.webactiv.util.exception.SilverpeasException;
/**
......
"Ajout de l'utilisateur d'ID " + userId + " dans le groupe d'ID "
+ groupId + ", requête : " + INSERT_A_GROUP_USER_REL, null);
updateRelation(INSERT_A_GROUP_USER_REL, params);
GroupCache.removeCacheOfUser(Integer.toString(userId));
}
/**
......
"Ajout de l'utilisateur d'ID " + userId + " dans le groupe d'ID "
+ groupId + ", requête : " + INSERT_A_GROUP_USER_REL, null);
updateRelation(INSERT_A_GROUP_USER_REL, params);
GroupCache.removeCacheOfUser(Integer.toString(userId));
}
}
}
......
"Retrait de l'utilisateur d'ID " + userId + " du groupe d'ID "
+ groupId + ", requête : " + DELETE_GROUP_USER_REL, null);
updateRelation(DELETE_GROUP_USER_REL, params);
GroupCache.removeCacheOfUser(Integer.toString(userId));
}
static final private String DELETE_GROUP_USER_REL =
......
"Retrait de l'utilisateur d'ID " + userId + " du groupe d'ID "
+ groupId + ", requête : " + DELETE_GROUP_USER_REL, null);
updateRelation(DELETE_GROUP_USER_REL, params);
GroupCache.removeCacheOfUser(Integer.toString(userId));
} else {
throw new AdminPersistenceException(
"GroupTable.removeUsersFromGroup()", SilverpeasException.ERROR,
    (1-1/1)