private void createMembership(Session session, MembershipImpl membership, boolean broadcast)
      throws InvalidNameException, Exception
   {
      Node userNode;
      try
      {
         userNode = utils.getUserNode(session, membership.getUserName());
      }
      catch (PathNotFoundException e)
      {
         throw new InvalidNameException("The user " + membership.getUserName() + " does not exist");
      }

      Node groupNode;
      try
      {
         groupNode = utils.getGroupNode(session, membership.getGroupId());
      }
      catch (PathNotFoundException e)
      {
         throw new InvalidNameException("The group " + membership.getGroupId() + " does not exist");
      }

      Node typeNode;
      String membershipType =
         membership.getMembershipType().equals(MembershipTypeHandler.ANY_MEMBERSHIP_TYPE)
            ? JCROrganizationServiceImpl.JOS_MEMBERSHIP_TYPE_ANY : membership.getMembershipType();
      try
      {
         typeNode = utils.getMembershipTypeNode(session, membershipType);
      }
      catch (PathNotFoundException e)
      {
         throw new InvalidNameException("The membership type " + membership.getMembershipType() + " does not exist");
      }

      Node membershipStorageNode = groupNode.getNode(JCROrganizationServiceImpl.JOS_MEMBERSHIP);

      Node refUserNode;
      try
      {
         refUserNode = membershipStorageNode.addNode(membership.getUserName());
         refUserNode.setProperty(MembershipProperties.JOS_USER, userNode);
      }
      catch (ItemExistsException e)
      {
         refUserNode = membershipStorageNode.getNode(membership.getUserName());
      }

      Node refTypeNode;
      try
      {
         refTypeNode = refUserNode.addNode(membershipType);
         refTypeNode.setProperty(MembershipProperties.JOS_MEMBERSHIP_TYPE, typeNode);
      }
      catch (ItemExistsException e)
      {
         // the membership already exists
         return;
      }

      String id = utils.composeMembershipId(groupNode, refUserNode, refTypeNode);
      membership.setId(id);

      if (broadcast)
      {
         preSave(membership, true);
      }

      session.save();
      putInCache(membership);

      if (broadcast)
      {
         postSave(membership, true);
      }
   }
private void createMembership ( Session session , MembershipImpl membership , boolean broadcast ) throws InvalidNameException , Exception { Node userNode ; try { userNode = utils . getUserNode ( session , membership . getUserName ( ) ) ; } catch ( PathNotFoundException e ) { throw new InvalidNameException ( "The user " + membership . getUserName ( ) + " does not exist" ) ; } Node groupNode ; try { groupNode = utils . getGroupNode ( session , membership . getGroupId ( ) ) ; } catch ( PathNotFoundException e ) { throw new InvalidNameException ( "The group " + membership . getGroupId ( ) + " does not exist" ) ; } Node typeNode ; String membershipType = membership . getMembershipType ( ) . equals ( MembershipTypeHandler . ANY_MEMBERSHIP_TYPE ) ? JCROrganizationServiceImpl . JOS_MEMBERSHIP_TYPE_ANY : membership . getMembershipType ( ) ; try { typeNode = utils . getMembershipTypeNode ( session , membershipType ) ; } catch ( PathNotFoundException e ) { throw new InvalidNameException ( "The membership type " + membership . getMembershipType ( ) + " does not exist" ) ; } Node membershipStorageNode = groupNode . getNode ( JCROrganizationServiceImpl . JOS_MEMBERSHIP ) ; Node refUserNode ; try { refUserNode = membershipStorageNode . addNode ( membership . getUserName ( ) ) ; refUserNode . setProperty ( MembershipProperties . JOS_USER , userNode ) ; } catch ( ItemExistsException e ) { refUserNode = membershipStorageNode . getNode ( membership . getUserName ( ) ) ; } Node refTypeNode ; try { refTypeNode = refUserNode . addNode ( membershipType ) ; refTypeNode . setProperty ( MembershipProperties . JOS_MEMBERSHIP_TYPE , typeNode ) ; } catch ( ItemExistsException e ) { return ; } String id = utils . composeMembershipId ( groupNode , refUserNode , refTypeNode ) ; membership . setId ( id ) ; if ( broadcast ) { preSave ( membership , true ) ; } session . save ( ) ; putInCache ( membership ) ; if ( broadcast ) { postSave ( membership , true ) ; } }
Persist new membership.