/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the License at the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package org.apereo.portal.io.xml.pags; import java.util.HashSet; import java.util.Set; import org.apereo.portal.groups.pags.dao.IPersonAttributesGroupDefinition; import org.apereo.portal.groups.pags.dao.IPersonAttributesGroupDefinitionDao; import org.apereo.portal.groups.pags.dao.IPersonAttributesGroupTestDefinitionDao; import org.apereo.portal.groups.pags.dao.IPersonAttributesGroupTestGroupDefinition; import org.apereo.portal.groups.pags.dao.IPersonAttributesGroupTestGroupDefinitionDao; /** * Helper class called from crn to handle the object creation and updates during PAGS import * */ public class PersonAttributesGroupImportHelper { private IPersonAttributesGroupDefinitionDao personAttributesGroupDefinitionDao; private IPersonAttributesGroupTestDefinitionDao personAttributesGroupTestDefinitionDao; private IPersonAttributesGroupTestGroupDefinitionDao personAttributesGroupTestGroupDefinitionDao; public PersonAttributesGroupImportHelper( IPersonAttributesGroupDefinitionDao personAttributesGroupDefinitionDao, IPersonAttributesGroupTestDefinitionDao personAttributesGroupTestDefinitionDao, IPersonAttributesGroupTestGroupDefinitionDao personAttributesGroupTestGroupDefinitionDao) { super(); this.personAttributesGroupDefinitionDao = personAttributesGroupDefinitionDao; this.personAttributesGroupTestDefinitionDao = personAttributesGroupTestDefinitionDao; this.personAttributesGroupTestGroupDefinitionDao = personAttributesGroupTestGroupDefinitionDao; } public IPersonAttributesGroupDefinition addGroup(String name, String description) { return getOrCreateGroup(name, description); } private IPersonAttributesGroupDefinition getOrCreateGroup(String name, String description) { Set<IPersonAttributesGroupDefinition> groups = personAttributesGroupDefinitionDao.getPersonAttributesGroupDefinitionByName(name); if (groups.size() == 0) { return personAttributesGroupDefinitionDao.createPersonAttributesGroupDefinition( name, description); } else { IPersonAttributesGroupDefinition group = groups.iterator().next(); group.setDescription(description); return personAttributesGroupDefinitionDao.updatePersonAttributesGroupDefinition(group); } } public IPersonAttributesGroupTestGroupDefinition addTestGroup(String groupName) { Set<IPersonAttributesGroupDefinition> groups = personAttributesGroupDefinitionDao.getPersonAttributesGroupDefinitionByName( groupName); return personAttributesGroupTestGroupDefinitionDao .createPersonAttributesGroupTestGroupDefinition(groups.iterator().next()); } public void addTest( IPersonAttributesGroupTestGroupDefinition testGroup, String attributeName, String testerClass, String testValue) { /* * For version 5.0, all uPortal sources were repackaged from 'org.jasig.portal' * to 'org.apereo.portal'. *.pags-group.xml files exported from earlier * versions of uPortal will contain the old tester-class name. We can detect that * and intervene here. */ testerClass = testerClass.replace("org.jasig.portal", "org.apereo.portal"); personAttributesGroupTestDefinitionDao.createPersonAttributesGroupTestDefinition( testGroup, attributeName, testerClass, testValue); } public void addGroupMember(String groupName, String member) { Set<IPersonAttributesGroupDefinition> groups = personAttributesGroupDefinitionDao.getPersonAttributesGroupDefinitionByName( groupName); Set<IPersonAttributesGroupDefinition> attemptingToAddMembers = personAttributesGroupDefinitionDao.getPersonAttributesGroupDefinitionByName(member); if (groups.isEmpty() || attemptingToAddMembers.isEmpty()) { throw new RuntimeException( "Group: " + groupName + " or member: " + member + " does not exist"); } else { IPersonAttributesGroupDefinition group = groups.iterator().next(); IPersonAttributesGroupDefinition attemptingToAddMember = attemptingToAddMembers.iterator().next(); Set<IPersonAttributesGroupDefinition> groupMembers = group.getMembers(); for (IPersonAttributesGroupDefinition groupMember : groupMembers) { if (groupMember.getName().equalsIgnoreCase(attemptingToAddMember.getName())) { return; } } groupMembers.add(attemptingToAddMember); group.setMembers(groupMembers); personAttributesGroupDefinitionDao.updatePersonAttributesGroupDefinition(group); } } public void dropGroupMembers(String groupName) { Set<IPersonAttributesGroupDefinition> groups = personAttributesGroupDefinitionDao.getPersonAttributesGroupDefinitionByName( groupName); IPersonAttributesGroupDefinition group = groups.iterator().next(); group.setMembers(new HashSet<IPersonAttributesGroupDefinition>(0)); personAttributesGroupDefinitionDao.updatePersonAttributesGroupDefinition(group); } public void dropTestGroupsAndTests(String groupName) { Set<IPersonAttributesGroupDefinition> groups = personAttributesGroupDefinitionDao.getPersonAttributesGroupDefinitionByName( groupName); IPersonAttributesGroupDefinition group = groups.iterator().next(); Set<IPersonAttributesGroupTestGroupDefinition> testGroups = group.getTestGroups(); // Disconnect the test groups group.setTestGroups(new HashSet<IPersonAttributesGroupTestGroupDefinition>()); personAttributesGroupDefinitionDao.updatePersonAttributesGroupDefinition(group); // Cascade the test group delete to the tests for (IPersonAttributesGroupTestGroupDefinition testGroup : testGroups) { personAttributesGroupTestGroupDefinitionDao .deletePersonAttributesGroupTestGroupDefinition(testGroup); } } }