Package org.jbpm.pvm.internal.identity.impl

Source Code of org.jbpm.pvm.internal.identity.impl.JBossIdmIdentitySessionImpl

/*
* JBoss, Home of Professional Open Source
* Copyright 2005, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This 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; either version 2.1 of
* the License, or (at your option) any later version.
*
* 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 for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jbpm.pvm.internal.identity.impl;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.StringTokenizer;

import org.jboss.identity.idm.api.Attribute;
import org.jboss.identity.idm.api.AttributesManager;
import org.jboss.identity.idm.api.IdentitySearchCriteria;
import org.jboss.identity.idm.api.IdentitySession;
import org.jboss.identity.idm.api.RoleType;
import org.jboss.identity.idm.common.exception.FeatureNotSupportedException;
import org.jboss.identity.idm.common.exception.IdentityException;
import org.jboss.identity.idm.common.p3p.P3PConstants;
import org.jboss.identity.idm.impl.api.SimpleAttribute;
import org.jboss.identity.idm.impl.api.model.GroupId;
import org.jbpm.api.JbpmException;
import org.jbpm.api.identity.Group;
import org.jbpm.api.identity.User;

/**
* @author Tom Baeyens
* @author Jeff Yu
*/
public class JBossIdmIdentitySessionImpl implements org.jbpm.pvm.internal.identity.spi.IdentitySession {

  protected IdentitySession identitySession;

  public String DEFAULT_JBPM_MEMBER_ROLE = "default_jBPM_member_role";
 
  public String DEFAUL_JBPM_GROUP_TYPE = "default_jBPM_Group_Type";
 
  public JBossIdmIdentitySessionImpl(IdentitySession identitySession) {
    this.identitySession = identitySession;
  }

  public String createUser(String userName, String givenName, String familyName, String businessEmail) {
    try {
     
      org.jboss.identity.idm.api.User idUser= identitySession.getPersistenceManager().createUser(userName);
     
      List<Attribute> attrs = new ArrayList<Attribute>();
      if (givenName != null) {
        attrs.add(new SimpleAttribute(P3PConstants.INFO_USER_NAME_GIVEN, givenName));
      }
      if (familyName != null) {
        attrs.add(new SimpleAttribute(P3PConstants.INFO_USER_NAME_FAMILY, familyName));
      }
      if (businessEmail != null) {
        attrs.add(new SimpleAttribute(P3PConstants.INFO_USER_BUSINESS_INFO_ONLINE_EMAIL, businessEmail));
      }
           
      identitySession.getAttributesManager().addAttributes(idUser, attrs.toArray(new Attribute[attrs.size()]));
      return idUser.getId();
     
    } catch (IdentityException e) {
      throw new JbpmException("couldn't create user "+userName, e);
    }

  }
 

  public List<User> findUsers() {
    try {
      Collection<org.jboss.identity.idm.api.User> idUsers =
        identitySession.getPersistenceManager().findUser((IdentitySearchCriteria)null);   
     
      List<User> users = new ArrayList<User>();
      for (org.jboss.identity.idm.api.User idUser : idUsers) {
        users.add(getUserInfo(idUser));
      }
     
      return users;
     
    } catch (IdentityException e) {
      throw new JbpmException("couldn't get users from identity component", e);
    }
  }

  public User findUserById(String userId) {
    try {
    org.jboss.identity.idm.api.User idUser = identitySession.getPersistenceManager().findUser(userId);
    if (idUser != null) {
        return getUserInfo(idUser);
    }
    return null;
  } catch (IdentityException e) {
    throw new JbpmException("couldn't get user from id of " + userId, e);
  }
  }

private User getUserInfo(org.jboss.identity.idm.api.User idUser) throws IdentityException {
  String name = idUser.getId();
  String givenName = getAttributeString(idUser, P3PConstants.INFO_USER_NAME_GIVEN);
  String familyName = getAttributeString(idUser, P3PConstants.INFO_USER_NAME_FAMILY);     
  String businessEmail = getAttributeString(idUser, P3PConstants.INFO_USER_BUSINESS_INFO_ONLINE_EMAIL);
 
  UserImpl user = new UserImpl(name, givenName, familyName);
  user.setBusinessEmail(businessEmail);
  return user;
}

  public List<User> findUsersById(String... userIds) {
    List<User> users = new ArrayList<User>();
  for (String userId : userIds){
    User user = findUserById(userId);
    if (user != null) {
      users.add(user);
    }
  }
   
    return users;
  }

  public List<User> findUsersByGroup(String groupId) {
  try {
    List<User> users = new ArrayList<User>();
    org.jboss.identity.idm.api.Group idGroup = findIdmGroupByIdmGroupId(convertjbpmGroupId2IdmGroupId(groupId));
    if (idGroup == null){
      return users;
    }
    Collection<org.jboss.identity.idm.api.User> idusers =
        identitySession.getRoleManager().findUsersWithRelatedRole(idGroup, null);
    for (org.jboss.identity.idm.api.User iduser : idusers) {
      users.add(findUserById(iduser.getId()));
    }
   
    return users;
  } catch (IdentityException e) {
    throw new JbpmException("couldn't find users by groupid: " + groupId, e);
  } catch (FeatureNotSupportedException e) {
    throw new JbpmException("couldn't find users by groupid: " + groupId, e);
  }
   
  }

  public void deleteUser(String userName) {
    try {     
      identitySession.getPersistenceManager().removeUser(userName, true);   
    } catch (IdentityException e) {
      throw new JbpmException("couldn't delete user ["+userName + "]", e);
    }
  }

  public String createGroup(String groupName, String groupType, String parentGroupId) {
   
    try {
      String gtype = groupType;
      if (gtype == null) {
        gtype = DEFAUL_JBPM_GROUP_TYPE;
      }
      org.jboss.identity.idm.api.Group group = identitySession.getPersistenceManager().createGroup(groupName, gtype);
      String groupId = group.getId();
     
      if (parentGroupId!=null) {
        org.jboss.identity.idm.api.Group parentGroup = findIdmGroupByIdmGroupId(convertjbpmGroupId2IdmGroupId(parentGroupId));
        if (parentGroup==null) {
          throw new JbpmException("parent group "+parentGroupId+" doesn't exist");
        }
        identitySession.getRelationshipManager().associateGroups(parentGroup, group);
      }
     return convertIdmGroupId2jbpmGroupId(groupId);
    
    } catch (IdentityException e) {
      throw new JbpmException("couldn't create group "+groupName, e);
    }
   
  }
 
  public Group findGroupById(String groupId) {
  try {
    org.jboss.identity.idm.api.Group idGroup = findIdmGroupByIdmGroupId(convertjbpmGroupId2IdmGroupId(groupId));
    if (idGroup == null) {
      return null;
    }
    GroupImpl group = new GroupImpl();
    group.setId(convertIdmGroupId2jbpmGroupId(idGroup.getId()));
    group.setType(idGroup.getGroupType());
    group.setName(idGroup.getName());
   
    Collection<org.jboss.identity.idm.api.Group> idParentGroups =
      identitySession.getRelationshipManager().findAssociatedGroups(idGroup, null, false, false);
   
    if (idParentGroups.size() > 0) {
      org.jboss.identity.idm.api.Group idParent = idParentGroups.iterator().next();
      GroupImpl parentGroup = new GroupImpl();
      parentGroup.setId(convertIdmGroupId2jbpmGroupId(idParent.getId()));
      parentGroup.setType(idParent.getGroupType());
      parentGroup.setName(idParent.getName());
     
      group.setParent(parentGroup);
    }
   
    return group;
   
  } catch (IdentityException e) {
    throw new JbpmException("couldn't find group by id [" + groupId + "]", e);
 
  }

  public List<Group> findGroupsByGroupType(String groupType) {
    try {
     Collection<org.jboss.identity.idm.api.Group> idGroups = identitySession.getPersistenceManager().
                                   findGroup(groupType)
   
      List<Group> groups = new ArrayList<Group>();
      for (org.jboss.identity.idm.api.Group idGroup: idGroups) {
        groups.add(findGroupById(convertIdmGroupId2jbpmGroupId(idGroup.getId())));
      }
     
      return groups;
     
    } catch (IdentityException e) {
      throw new JbpmException("couldn't get groups from identity component, groupType [" + groupType + "]", e);
    }
  }
 
  public List<Group> findGroupsByUser(String userId) {
   
    try {
    Collection<org.jboss.identity.idm.api.Group> idGroups = identitySession.getRoleManager()
                                  .findGroupsWithRelatedRole(userId, null);
   
    List<Group> groups = new ArrayList<Group>();
    for (org.jboss.identity.idm.api.Group idGroup : idGroups) {
      groups.add(findGroupById(convertIdmGroupId2jbpmGroupId(idGroup.getId())));
    }
    return groups;
  } catch (Exception e) {
    throw new JbpmException("Couldn't get Groups by userId [" + userId + "]", e);
   
  }
  }

  public List<Group> findGroupsByUserAndGroupType(String userName, String groupType) {
    try {
      org.jboss.identity.idm.api.User idUser = identitySession.getPersistenceManager().findUser(userName);
     
      Collection<org.jboss.identity.idm.api.Group> idGroups = identitySession.getRoleManager()
                                  .findGroupsWithRelatedRole(idUser, groupType, null);
      List<Group> groups = new ArrayList<Group>();
     
      for (org.jboss.identity.idm.api.Group idGroup : idGroups) {
        groups.add(findGroupById(convertIdmGroupId2jbpmGroupId(idGroup.getId())));
      }
      return groups;
    } catch (Exception e) {
      throw new JbpmException("couldn't get groups for user "+userName+" and groupType "+groupType, e);
    }
  }

  public void deleteGroup(String groupId) {
    try {
      org.jboss.identity.idm.api.Group group = findIdmGroupByIdmGroupId(convertjbpmGroupId2IdmGroupId(groupId));

      if (group==null) {
        return;
      }

      identitySession.getPersistenceManager().removeGroup(group, true);
   
    } catch (IdentityException e) {
      throw new JbpmException("couldn't delete group "+groupId, e);
    }
  }

  public void createMembership(String userId, String groupId, String role) {
    try {
      org.jboss.identity.idm.api.Group group = findIdmGroupByIdmGroupId(convertjbpmGroupId2IdmGroupId(groupId));
      if (group==null) {
        throw new JbpmException("group "+groupId+" doesn't exist");
      }
 
      org.jboss.identity.idm.api.User idUser = identitySession.getPersistenceManager().findUser(userId);
      if (idUser==null) {
        throw new JbpmException("user "+userId+" doesn't exist");
      }
     
      if (role == null) {
        role = DEFAULT_JBPM_MEMBER_ROLE;
      }
    RoleType roleType = identitySession.getRoleManager().getRoleType(role);
    System.out.println("The Role Type is: " + roleType);
    if (roleType == null) {
      roleType = identitySession.getRoleManager().createRoleType(role);
    }
      identitySession.getRoleManager().createRole(roleType, idUser, group);
     
    } catch (Exception e) {
      throw new JbpmException("couldn't create membership "+userId+", "+groupId+", "+role, e);
    }
  }
 
  public void deleteMembership(String userId, String groupId, String role) {
  try {
    RoleType rtype = identitySession.getRoleManager().getRoleType(role);
    identitySession.getRoleManager().removeRole(rtype.getName(), userId, convertjbpmGroupId2IdmGroupId(groupId));
  } catch (Exception e) {
    throw new JbpmException("couldn't delete the membership [" + userId + "," + groupId + "," + role + "]", e);
 
 
  }

  protected org.jboss.identity.idm.api.Group findIdmGroupByIdmGroupId(String groupId) {
  try {
    return identitySession.getPersistenceManager().findGroupById(groupId);
  } catch (IdentityException e) {
    throw new JbpmException("couldn't find the group by groupId: " + groupId, e);
 
  }

  protected String getAttributeString(org.jboss.identity.idm.api.User idUser, String attributeName) throws IdentityException {
    return getAttributeString(idUser, null, attributeName);
  }

  protected String getAttributeString(org.jboss.identity.idm.api.Group idGroup, String attributeName) throws IdentityException {
    return getAttributeString(null, idGroup, attributeName);
  }

  protected String getAttributeString(org.jboss.identity.idm.api.User idUser, org.jboss.identity.idm.api.Group idGroup, String attributeName) throws IdentityException {
    AttributesManager attributesManager = identitySession.getAttributesManager();
    Attribute attribute = null;
    if (idUser !=null) {
      attribute = attributesManager.getAttribute(idUser, attributeName);
    } else {
      attribute = attributesManager.getAttribute(idGroup, attributeName);
    }
    if (attribute!=null) {
      return (String) attribute.getValue();
    }
    return null;
  }
 
 
  /**
   * Return jBPM groupId, which is: GroupType.GroupName, from IDM GroupId
   *
   * @param groupId
   * @return
   */
  private String convertIdmGroupId2jbpmGroupId(String groupId) {
  GroupId theGroupId = new GroupId(groupId);
  if (this.DEFAUL_JBPM_GROUP_TYPE.equals(theGroupId.getType()) || theGroupId.getType() == null) {
    return theGroupId.getName();
  }
  return theGroupId.getType() + "." + theGroupId.getName();
  }
 
  /**
   * Convert the jBPM GroupId to IDM GroupId.
   *
   * @param jbpmGroupId
   * @return
   */
  private String convertjbpmGroupId2IdmGroupId(String jbpmGroupId) {
    StringTokenizer st = new StringTokenizer(jbpmGroupId, ".");
    String type = DEFAUL_JBPM_GROUP_TYPE;
    if (st.countTokens() > 1) {
      type = st.nextToken();
    }
    String name = st.nextToken();
   
    return new GroupId(name, type).getId();
  }
 
  public IdentitySession getIdentitySession() {
    return identitySession;
  }
 
  public void setIdentitySession(IdentitySession identitySession) {
    this.identitySession = identitySession;
  }


}
TOP

Related Classes of org.jbpm.pvm.internal.identity.impl.JBossIdmIdentitySessionImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.