/** * 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.permission; import com.google.common.base.Function; import com.google.common.collect.Lists; import java.util.Collections; import java.util.List; import java.util.Set; import org.apereo.portal.io.xml.AbstractJaxbDataHandler; import org.apereo.portal.io.xml.IPortalData; import org.apereo.portal.io.xml.IPortalDataType; import org.apereo.portal.io.xml.PortalDataKey; import org.apereo.portal.io.xml.SimpleStringPortalData; import org.apereo.portal.permission.IPermissionActivity; import org.apereo.portal.permission.IPermissionOwner; import org.apereo.portal.permission.dao.IPermissionOwnerDao; import org.apereo.portal.utils.SafeFilenameUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; /** * Handles import and export of Permission Owner data * */ public class PermissionOwnerImporterExporter extends AbstractJaxbDataHandler<ExternalPermissionOwner> { private PermissionOwnerPortalDataType portalDataType; private IPermissionOwnerDao permissionOwnerDao; @Autowired public void setPortalDataType(PermissionOwnerPortalDataType portalDataType) { this.portalDataType = portalDataType; } @Autowired public void setPermissionOwnerDao(IPermissionOwnerDao permissionOwnerDao) { this.permissionOwnerDao = permissionOwnerDao; } /* (non-Javadoc) * @see org.apereo.portal.io.xml.IDataImporter#getImportDataKeys() */ @Override public Set<PortalDataKey> getImportDataKeys() { return Collections.singleton(PermissionOwnerPortalDataType.IMPORT_40_DATA_KEY); } /* (non-Javadoc) * @see org.apereo.portal.io.xml.IDataExporter#getPortalDataType() */ @Override public IPortalDataType getPortalDataType() { return this.portalDataType; } /* (non-Javadoc) * @see org.apereo.portal.io.xml.IDataExporter#getPortalData() */ @Override public Iterable<? extends IPortalData> getPortalData() { final List<IPermissionOwner> permissionOwners = this.permissionOwnerDao.getAllPermissionOwners(); return Lists.transform( permissionOwners, new Function<IPermissionOwner, IPortalData>() { /* (non-Javadoc) * @see com.google.common.base.Function#apply(java.lang.Object) */ @Override public IPortalData apply(IPermissionOwner permissionOwner) { return new SimpleStringPortalData( permissionOwner.getFname(), permissionOwner.getName(), permissionOwner.getDescription()); } }); } /* (non-Javadoc) * @see org.apereo.portal.io.xml.IDataImporter#importData(java.lang.Object) */ @Override @Transactional public void importData(ExternalPermissionOwner externalPermissionOwner) { final String name = externalPermissionOwner.getName(); final String fname = externalPermissionOwner.getFname(); final IPermissionOwner permissionOwner = this.permissionOwnerDao.getOrCreatePermissionOwner(name, fname); final String desc = externalPermissionOwner.getDesc(); permissionOwner.setDescription(desc); for (final ExternalActivity externalActivity : externalPermissionOwner.getActivities()) { final String activityName = externalActivity.getName(); final String activityFname = externalActivity.getFname(); final String targetProvider = externalActivity.getTargetProvider(); final IPermissionActivity permissionActivity = this.permissionOwnerDao.getOrCreatePermissionActivity( permissionOwner, activityName, activityFname, targetProvider); final String activityDesc = externalActivity.getDesc(); permissionActivity.setDescription(activityDesc); } this.permissionOwnerDao.saveOwner(permissionOwner); } /* (non-Javadoc) * @see org.apereo.portal.io.xml.IDataExporter#exportData(java.lang.String) */ @Override public ExternalPermissionOwner exportData(String fname) { final IPermissionOwner permissionOwner = this.permissionOwnerDao.getPermissionOwner(fname); return convert(permissionOwner); } /* (non-Javadoc) * @see org.apereo.portal.io.xml.IDataExporter#getFileName(java.lang.Object) */ @Override public String getFileName(ExternalPermissionOwner data) { return SafeFilenameUtils.makeSafeFilename(data.getFname()); } /* (non-Javadoc) * @see org.apereo.portal.io.xml.IDataDeleter#deleteData(java.lang.String) */ @Override public ExternalPermissionOwner deleteData(String id) { throw new UnsupportedOperationException(); } protected ExternalPermissionOwner convert(final IPermissionOwner permissionOwner) { if (permissionOwner == null) { return null; } final ExternalPermissionOwner externalPermissionOwner = new ExternalPermissionOwner(); externalPermissionOwner.setName(permissionOwner.getName()); externalPermissionOwner.setFname(permissionOwner.getFname()); externalPermissionOwner.setDesc(permissionOwner.getDescription()); final List<ExternalActivity> externalActivities = externalPermissionOwner.getActivities(); final Set<IPermissionActivity> activities = permissionOwner.getActivities(); for (final IPermissionActivity permissionActivity : activities) { final ExternalActivity externalActivity = new ExternalActivity(); externalActivity.setName(permissionActivity.getName()); externalActivity.setFname(permissionActivity.getFname()); externalActivity.setDesc(permissionActivity.getDescription()); externalActivity.setTargetProvider(permissionActivity.getTargetProviderKey()); externalActivities.add(externalActivity); } Collections.sort(externalActivities, ExternalActivityFnameComparator.INSTANCE); return externalPermissionOwner; } }