You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

Grouper rules

If an entity is going to be disabled from an employee group, send an email to the subject and an admin

Java example

     //add a rule on stem:a saying if you are about to be out of the group by all paths (flattened), then send an email
    AttributeAssign attributeAssign = groupEmployee
      .getAttributeDelegate().addAttribute(RuleUtils.ruleAttributeDefName()).getAttributeAssign();
   
    attributeAssign.getAttributeValueDelegate().assignValue(
        RuleUtils.ruleActAsSubjectSourceIdName(), "g:isa");
    attributeAssign.getAttributeValueDelegate().assignValue(
        RuleUtils.ruleActAsSubjectIdName(), "GrouperSystem");
    attributeAssign.getAttributeValueDelegate().assignValue(
        RuleUtils.ruleCheckTypeName(),
        RuleCheckType.membershipDisabledDate.name());

    //min days in advance to look for disabled memberships
    attributeAssign.getAttributeValueDelegate().assignValue(
        RuleUtils.ruleCheckArg0Name(), "6");

    //max number of days in advance to look for disabled memberships
    attributeAssign.getAttributeValueDelegate().assignValue(
        RuleUtils.ruleCheckArg1Name(), "8");
    attributeAssign.getAttributeValueDelegate().assignValue(
        RuleUtils.ruleThenEnumName(), RuleThenEnum.sendEmail.name());
    attributeAssign.getAttributeValueDelegate().assignValue(
        RuleUtils.ruleThenEnumArg0Name(), "a@b.c, ${safeSubject.emailAddress}");
    attributeAssign.getAttributeValueDelegate().assignValue(
        RuleUtils.ruleThenEnumArg1Name(), "You will be removed from group: ${groupDisplayExtension} on ${ruleElUtils.formatDate(membershipDisabledTimestamp, 'yyyy/MM/dd')}");
 
    //the to, subject, or body could be text with EL variables, or could be a template.  If template, it is
    //read from the classpath from package: grouperRulesEmailTemplates/theTemplateName.txt
    //or you could configure grouper.properties to keep them in an external folder, not in the classpath
    attributeAssign.getAttributeValueDelegate().assignValue(
        RuleUtils.ruleThenEnumArg2Name(), "Hello ${safeSubject.name},\n\nJust letting you know you will be removed from group ${groupDisplayExtension} on ${ruleElUtils.formatDate(membershipDisabledTimestamp, 'yyyy/MM/dd')} in the central Groups management system.  Please do not respond to this email.\n\nRegards.");
   
    //should be valid
    String isValidString = attributeAssign.getAttributeValueDelegate().retrieveValueString(
        RuleUtils.ruleValidName());
    assertEquals("T", isValidString);

GSH shorthand method

 RuleApi.emailOnFlattenedDisabledDate(Subject actAsSubject, 
      Group ruleGroup, Integer daysInFutureDisabledDateMin, 
      Integer daysInFutureDisabledDateMax, 
      String emailToValue, String emailSubjectValue, String emailBodyValue) 

GSH test case

gsh 0% grouperSession = GrouperSession.startRootSession();
edu.internet2.middleware.grouper.GrouperSession: a6ca2976e1a74c2295a8e9bb3e14746f,'GrouperSystem','application'

//two groups, one in the other
gsh 1% groupEmployee = new GroupSave(grouperSession).assignName("stem:employee").assignCreateParentStemsIfNotExist(true).save();
group: name='stem:employee' displayName='stem:employee' uuid='788af52ea4a3426f840714cd22227b9c'
gsh 2% groupProgrammer = new GroupSave(grouperSession).assignName("stem:programmer").assignCreateParentStemsIfNotExist(true).save();
group: name='stem:programmer' displayName='stem:programmer' uuid='eb3f81f6cf09426f9a72a655091e8111'
gsh 3% groupEmployee.addMember(groupProgrammer.toSubject());
gsh 4% subject0 = SubjectFinder.findByIdAndSource("test.subject.0", "jdbc", true);
subject: id='test.subject.0' type='person' source='jdbc' name='my name is test.subject.0'

//add a rule to email on memberships going to expire in one week
gsh 6% RuleApi.emailOnFlattenedDisabledDate(SubjectFinder.findRootSubject(), groupEmployee, 6, 8, "a@b.c, ${safeSubject.emailAddress}", "You will be removed from group: ${groupDisplayExtension} on ${ruleElUtils.formatDate(membershipDisabledTimestamp, 'yyyy/MM/dd')}", "Hello ${safeSubject.name},\n\nJust letting you know you will be removed from group ${groupDisplayExtension} on ${ruleElUtils.formatDate(membershipDisabledTimestamp, 'yyyy/MM/dd')} in the central Groups management system.  Please do not respond to this email.\n\nRegards.");
edu.internet2.middleware.grouper.attr.assign.AttributeAssign: AttributeAssign[id=4341245100cf4c95b30a212586b3b2cd,action=assign,attributeDefName=etc:attribute:rules:rule,
  group=Group[name=stem:employee,uuid=788af52ea4a3426f840714cd22227b9c]]

//no emails yet
gsh 7% initialEmailCount = GrouperEmail.testingEmailCount;
java.lang.Long: 0

gsh 8% groupEmployee.addMember(subject0, false);
true
gsh 10% edu.internet2.middleware.grouper.app.loader.GrouperLoader.runOnceByJobName(grouperSession, "MAINTENANCE__rules");
loader ran successfully: Ran rules daemon, changed 0 records
gsh 11% member0 = MemberFinder.findBySubject(grouperSession, subject0, false);
member: id='test.subject.0' type='person' source='jdbc' uuid='a603033b08d2403185153984bd524c89'

//set the disabled date to 1 week in the future
gsh 12% membership = groupEmployee.getImmediateMembership(Group.getDefaultList(), member0, true, true);
edu.internet2.middleware.grouper.Membership: Membership[createTime=1284179017233,creatorUuid=e568ae12357840198f98fa30d4ed0838,depth=0,listName=members,listType=list,memberUuid=a603033b08d2403185153984bd524c89,groupId=788af52ea4a3426f840714cd22227b9c,type=immediate,uuid=3cc204ff8bf24825b123f2837f65dbaa:baa0f45ed8ca44658f7672b5a013354e]
gsh 14% membership.setDisabledTime(new java.sql.Timestamp(System.currentTimeMillis() + (7 * 24 * 60 * 60 * 1000)));
gsh 15% membership.update();

//run the daemon
gsh 17% edu.internet2.middleware.grouper.app.loader.GrouperLoader.runOnceByJobName(grouperSession, "MAINTENANCE__rules");
loader ran successfully: Ran rules daemon, changed 0 records

//one email sent out
gsh 18% GrouperEmail.testingEmailCount
java.lang.Long: 1

//set it 5 days int he future (out of range)
gsh 19% membership.setDisabledTime(new java.sql.Timestamp(System.currentTimeMillis() + (5 * 24 * 60 * 60 * 1000)));
gsh 20% membership.update();
gsh 21% edu.internet2.middleware.grouper.app.loader.GrouperLoader.runOnceByJobName(grouperSession, "MAINTENANCE__rules");
loader ran successfully: Ran rules daemon, changed 0 records

//no more emails
gsh 21% GrouperEmail.testingEmailCount
java.lang.Long: 1

//nine days in the future
gsh 22% membership.setDisabledTime(new java.sql.Timestamp(System.currentTimeMillis() + (9 * 24 * 60 * 60 * 1000)));
gsh 23% membership.update();
gsh 24% edu.internet2.middleware.grouper.app.loader.GrouperLoader.runOnceByJobName(grouperSession, "MAINTENANCE__rules");
loader ran successfully: Ran rules daemon, changed 0 records

//did not email
gsh 25% GrouperEmail.testingEmailCount
java.lang.Long: 1

//7 days again, it emails
gsh 26% membership.setDisabledTime(new java.sql.Timestamp(System.currentTimeMillis() + (7 * 24 * 60 * 60 * 1000)));
gsh 27% membership.update();
gsh 28% edu.internet2.middleware.grouper.app.loader.GrouperLoader.runOnceByJobName(grouperSession, "MAINTENANCE__rules");
loader ran successfully: Ran rules daemon, changed 0 records
gsh 29% GrouperEmail.testingEmailCount
java.lang.Long: 2

//if there is a non disabled dated membership by another path, then dont send another email
gsh 30% groupProgrammer.addMember(subject0);
gsh 31% edu.internet2.middleware.grouper.app.loader.GrouperLoader.runOnceByJobName(grouperSession, "MAINTENANCE__rules");
loader ran successfully: Ran rules daemon, changed 0 records
gsh 32% GrouperEmail.testingEmailCount
java.lang.Long: 2
gsh 33%

Example email

From: noreply@school.edu [mailto:noreply@school.edu]

Sent: Friday, September 10, 2010 11:44 PM
To: a@b.c; test.subject.0@somewhere.someSchool.edu
Subject: TEST:You will be removed from group: employee on 2010/09/17

Hello my name is test.subject.0,

Just letting you know you will be removed from group employee on 2010/09/17 in the central Groups management system.  Please do not respond to this email.

Regards.

safd

  • No labels