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

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

/*
* 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.Arrays;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.jbpm.api.JbpmException;
import org.jbpm.api.identity.Group;
import org.jbpm.api.identity.User;
import org.jbpm.pvm.internal.identity.spi.IdentitySession;

/**
* @author Tom Baeyens
*/
public class IdentitySessionImpl implements IdentitySession {

  protected Session session;

  public String createUser(String userName, String givenName, String familyName,
      String businessEmail) {
    UserImpl user = new UserImpl(userName, givenName, familyName);
    user.setBusinessEmail(businessEmail);
    session.save(user);

    return user.getId();
  }

  public User findUserById(String userId) {
    return (User) session.createCriteria(UserImpl.class)
        .add(Restrictions.eq("id", userId))
        .uniqueResult();
  }

  public List<User> findUsersById(String... userIds) {
    List<User> users = session.createCriteria(UserImpl.class)
        .add(Restrictions.in("id", userIds))
        .list();
    if (userIds.length != users.size()) {
      throw new JbpmException("not all users were found: " + Arrays.toString(userIds));
    }
    return users;
  }

  public List<User> findUsers() {
    return session.createCriteria(UserImpl.class).list();
  }

  public void deleteUser(String userId) {
    // lookup the user
    User user = findUserById(userId);

    // cascade the deletion to the memberships
    List<MembershipImpl> memberships = session.createCriteria(MembershipImpl.class)
        .add(Restrictions.eq("user", user))
        .list();

    // delete the related memberships
    for (MembershipImpl membership : memberships) {
      session.delete(membership);
    }

    // delete the user
    session.delete(user);
  }

  public String createGroup(String groupName, String groupType, String parentGroupId) {
    GroupImpl group = new GroupImpl();
    String groupId = groupType != null ? groupType + "." + groupName : groupName;
    group.setId(groupId);
    group.setName(groupName);
    group.setType(groupType);

    if (parentGroupId != null) {
      GroupImpl parentGroup = findGroupById(parentGroupId);
      group.setParent(parentGroup);
    }

    session.save(group);

    return group.getId();
  }

  public List<User> findUsersByGroup(String groupId) {
    return session.createCriteria(MembershipImpl.class)
        .createAlias("group", "g")
        .add(Restrictions.eq("g.id", groupId))
        .setProjection(Projections.property("user"))
        .list();
  }

  public GroupImpl findGroupById(String groupId) {
    return (GroupImpl) session.createCriteria(GroupImpl.class)
        .add(Restrictions.eq("id", groupId))
        .uniqueResult();
  }

  public List<Group> findGroupsByUserAndGroupType(String userId, String groupType) {
    return session.createQuery("select distinct m.group"
        + " from "
        + MembershipImpl.class.getName()
        + " as m where m.user.id = :userId"
        + " and m.group.type = :groupType")
        .setString("userId", userId)
        .setString("groupType", groupType)
        .list();
  }

  public List<Group> findGroupsByUser(String userId) {
    return session.createQuery("select distinct m.group"
        + " from "
        + MembershipImpl.class.getName()
        + " as m where m.user.id = :userId").setString("userId", userId).list();
  }

  public List<Group> findGroups() {
    return session.createCriteria(GroupImpl.class).list();
  }

  public void deleteGroup(String groupId) {
    // look up the group
    GroupImpl group = findGroupById(groupId);

    // cascade the deletion to the memberships
    List<MembershipImpl> memberships = session.createCriteria(MembershipImpl.class)
        .add(Restrictions.eq("group", group))
        .list();

    // delete the related memberships
    for (MembershipImpl membership : memberships) {
      session.delete(membership);
    }

    // delete the group
    session.delete(group);
  }

  public void createMembership(String userId, String groupId, String role) {
    User user = findUserById(userId);
    if (user == null) {
      throw new JbpmException("user " + userId + " doesn't exist");
    }
    Group group = findGroupById(groupId);
    if (group == null) {
      throw new JbpmException("group " + groupId + " doesn't exist");
    }

    MembershipImpl membership = new MembershipImpl();
    membership.setUser(user);
    membership.setGroup(group);
    membership.setRole(role);

    session.save(membership);
  }

  public void deleteMembership(String userId, String groupId, String role) {
    MembershipImpl membership = (MembershipImpl) session.createCriteria(MembershipImpl.class)
        .createAlias("user", "u")
        .createAlias("group", "g")
        .add(Restrictions.eq("u.id", userId))
        .add(Restrictions.eq("g.id", groupId))
        .uniqueResult();
    session.delete(membership);
  }

  public void setSession(Session session) {
    this.session = session;
  }

}
TOP

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

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.