@Override public Iterator<IEntityGroup> findMemberGroups(IEntityGroup group) throws GroupsException { /* * The GaP system prevents this method from being called with a nn-PAGS group. */ IPersonAttributesGroupDefinition pagsGroup = getPagsGroupDefByName(group.getName()); List<IEntityGroup> results = new ArrayList<IEntityGroup>(); for (IPersonAttributesGroupDefinition member : pagsGroup.getMembers()) { results.add(convertPagsGroupToEntity(member)); } return results.iterator(); }
private IEntityGroup convertPagsGroupToEntity(IPersonAttributesGroupDefinition group) { final String cacheKey = group.getName(); Element element = entityGroupCache.get(cacheKey); if (element == null) { final IEntityGroup entityGroup = new EntityTestingGroupImpl(group.getName(), IPERSON_CLASS); entityGroup.setName(group.getName()); entityGroup.setDescription(group.getDescription()); element = new Element(cacheKey, entityGroup); entityGroupCache.put(element); } return (IEntityGroup) element.getObjectValue(); }
private PagsGroup initGroupDef(IPersonAttributesGroupDefinition group) { Element element = this.pagsGroupCache.get(group.getName()); if (element != null) { return (PagsGroup) element.getObjectValue(); } PagsGroup groupDef = new PagsGroup(); groupDef.setKey(group.getName()); groupDef.setName(group.getName()); groupDef.setDescription(group.getDescription()); addMemberKeys(groupDef, group.getMembers()); Set<IPersonAttributesGroupTestGroupDefinition> testGroups = group.getTestGroups(); for (IPersonAttributesGroupTestGroupDefinition testGroup : testGroups) { TestGroup tg = new TestGroup(); Set<IPersonAttributesGroupTestDefinition> tests = testGroup.getTests(); for (IPersonAttributesGroupTestDefinition test : tests) { IPersonTester testerInst = initializeTester(test); if (testerInst == null) { /* * A tester was intended that we cannot now recreate. This * is a potentially dangerous situation, since tests in PAGS * are "or-ed" together; a functioning group with a missing * test would have a wider membership, not narrower. (And * remember -- permissions are tied to groups.) We need to * play it safe and keep this group out of the mix. */ return null; } tg.addTest(testerInst); } groupDef.addTestGroup(tg); } element = new Element(group.getName(), groupDef); this.pagsGroupCache.put(element); return groupDef; }
private Set<IEntityGroup> getParentGroups(String name, Set<IEntityGroup> groups) throws GroupsException { logger.debug("Looking up containing groups for {}", name); IPersonAttributesGroupDefinition pagsGroup = getPagsGroupDefByName(name); Set<IPersonAttributesGroupDefinition> pagsParentGroups = personAttributesGroupDefinitionDao.getParentPersonAttributesGroupDefinitions(pagsGroup); for (IPersonAttributesGroupDefinition pagsParent : pagsParentGroups) { IEntityGroup parent = convertPagsGroupToEntity(pagsParent); if (!groups.contains(parent)) { groups.add(parent); getParentGroups(pagsParent.getName(), groups); } else { throw new RuntimeException( "Recursive grouping detected! for " + name + " and parent " + pagsParent.getName()); } } return groups; }
private void addMemberKeys(PagsGroup groupDef, Set<IPersonAttributesGroupDefinition> members) { for (IPersonAttributesGroupDefinition member : members) { groupDef.addMember(member.getName()); } }