For reprieve groups (e.g. for status or training or two step), when added to group, maybe you want an automatic 7 day in future end date on membership
Add this rule to a group where the membership is added and should have disabled date.
Note: the end of the script adds GrouperSystem to the group, sees the expire date, and then removed GrouperSystem. If you dont want to do that, then remove that part starting at group.addMember().
String groupName = "penn:apps:ngss:knowledgeLink:prod:ngssProdHasTakenTrainingReprieve"; String expireAfterDays = "7"; grouperSession = GrouperSession.startRootSession(); group = GroupFinder.findByName(grouperSession, groupName); AttributeAssign attributeAssign = group.getAttributeDelegate().addAttribute(RuleUtils.ruleAttributeDefName()).getAttributeAssign(); AttributeValueDelegate attributeValueDelegate = attributeAssign.getAttributeValueDelegate(); attributeValueDelegate.assignValue(RuleUtils.ruleActAsSubjectSourceIdName(), SubjectFinder.findRootSubject().getSourceId()); attributeValueDelegate.assignValue(RuleUtils.ruleActAsSubjectIdName(), SubjectFinder.findRootSubject().getId()); attributeValueDelegate.assignValue(RuleUtils.ruleCheckTypeName(),RuleCheckType.membershipAdd.name()); attributeValueDelegate.assignValue(RuleUtils.ruleThenEnumName(), RuleThenEnum.assignMembershipDisabledDaysForOwnerGroupId.name()); attributeValueDelegate.assignValue(RuleUtils.ruleThenEnumArg0Name(), expireAfterDays); attributeValueDelegate.assignValue(RuleUtils.ruleThenEnumArg1Name(), "F"); attributeValueDelegate.assignValue(RuleUtils.ruleValidName(), "T"); String isValidString = attributeValueDelegate.retrieveValueString(RuleUtils.ruleValidName()); if (!"T".equals(isValidString)) {throw new RuntimeException("Not valid! " + isValidString);} group.addMember(SubjectFinder.findRootSubject()); Member member = MemberFinder.findBySubject(grouperSession, SubjectFinder.findRootSubject(), true); Membership membership = group.getImmediateMembership(Group.getDefaultList(), member, true, true); java.sql.Timestamp disabledTime = membership.getDisabledTime(); group.deleteMember(SubjectFinder.findRootSubject()); if (disabledTime == null) {throw new RuntimeException("Rule didnt set the disabled time");} |