this._canWriteField(s, ns, priv);   Member  m       = MemberFinder.findBySubject(s, subj);
  public void grantPriv(    GrouperSession s, Stem ns, Subject subj, Privilege priv  )    throws  GrantPrivilegeException,             InsufficientPrivilegeException  {    // TODO Update per _Group.addMember()_    GrouperSession.validate(s);    String msg_gp = "unable to grant " + priv + " on " + ns.getName()       + " to " + subj.getId();    try {      this._canWriteField(s, ns, priv);      // Convert subject to a member      Member  m       = MemberFinder.findBySubject(s, subj);      // The objects that will need saving      Set     objects = new LinkedHashSet();      // Update group modify time      ns.setModified();      objects.add(ns);      // Create the immediate membership      objects.add(Membership.addMembership(s, ns, m, this._getField(priv)));      // Find effective memberships      objects.addAll( MemberOf.doMemberOf(s, ns, m) );      // And then save group and memberships      HibernateHelper.save(objects);    }    catch (HibernateException eH) {      throw new GrantPrivilegeException(ERR_GP + eH.getMessage());    }    catch (MemberAddException eMA) {      throw new GrantPrivilegeException(ERR_GP + eMA.getMessage());    }    catch (MemberNotFoundException eMNF) {      throw new GrantPrivilegeException(ERR_GP + eMNF.getMessage());    }    catch (SchemaException eS) {      throw new GrantPrivilegeException(ERR_GP + eS.getMessage());    }    catch (StemNotFoundException eSNF) {      throw new GrantPrivilegeException(ERR_GP + eSNF.getMessage());    }  } // public void grantPriv(s, ns, subj, priv)