Hooks Introduction
Proof of concept (A veto hook)
Hooks Example - Assign a Unix id to each new group

Instructions to get started with Grouper and hooks.

package test;

import edu.internet2.middleware.grouper.Group;
import edu.internet2.middleware.grouper.GroupType;
import edu.internet2.middleware.grouper.GroupTypeFinder;
import edu.internet2.middleware.grouper.hooks.beans.HooksContext;
import edu.internet2.middleware.grouper.hooks.beans.HooksGroupBean;

/**
 * add a type after a group insert
 */
public class GroupAddFubHook extends
    edu.internet2.middleware.grouper.hooks.GroupHooks {

  /**
   *
   * @see edu.internet2.middleware.grouper.hooks.GroupHooks#groupPostInsert(edu.internet2.middleware.grouper.hooks.beans.HooksContext, edu.internet2.middleware.grouper.hooks.beans.HooksGroupBean)
   */
  @SuppressWarnings("unchecked")
  @Override
  public void groupPostInsert(HooksContext hooksContext,
      HooksGroupBean postInsertBean) {

    super.groupPostInsert(hooksContext, postInsertBean);

    try {
      Group group = postInsertBean.getGroup();
      GroupType fubGroup = GroupTypeFinder.find("fubGroup");
      group.addType(fubGroup);
      group.setAttribute("gid", "2");
      group.store();

    } catch (Exception e) {
      throw new RuntimeException(e.getMessage(), e);
    }
  }

}

[mchyzer@flash2 grouper]$ ant dist

gsh 0% group = addGroup("aStem", "aGroup5", "aGroup5");
group: name='aStem:aGroup5' displayName='aStem:aGroup5' uuid='b5552545-2ad2-462c-b5df-67586c987992'
gsh 1% group.getTypes();
type: 'base'
type: 'fubGroup'
gsh 2% group.getAttributes();
java.util.HashMap: {extension=aGroup5, displayExtension=aGroup5, gid=2, name=aStem:aGroup5, displayName=aStem:aGroup5}
gsh 3%

*

Grouper UI

<tomcat-users>
  <role rolename="grouper_user"/>
  <user username="mchyzer" password="whateveryouwant" roles="grouper_user"/>
</tomcat-users>