/** * 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.portlets.importexport; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.portlet.PortletRequest; import javax.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apereo.portal.EntityIdentifier; import org.apereo.portal.io.xml.IPortalDataHandlerService; import org.apereo.portal.io.xml.IPortalDataType; import org.apereo.portal.security.IAuthorizationPrincipal; import org.apereo.portal.security.IPermission; import org.apereo.portal.security.IPerson; import org.apereo.portal.security.IPersonManager; import org.apereo.portal.services.AuthorizationService; import org.apereo.portal.url.IPortalRequestUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.portlet.ModelAndView; /** * ImportExportPortletController controls the display of the import/export portlet interface views. * */ @Controller @RequestMapping("VIEW") public class ImportExportPortletController { protected final Log log = LogFactory.getLog(getClass()); private IPersonManager personManager; private IPortalRequestUtils portalRequestUtils; private IPortalDataHandlerService portalDataHandlerService; @Autowired public void setPersonManager(IPersonManager personManager) { this.personManager = personManager; } @Autowired public void setPortalRequestUtils(IPortalRequestUtils portalRequestUtils) { this.portalRequestUtils = portalRequestUtils; } @Autowired public void setPortalDataHandlerService(IPortalDataHandlerService portalDataHandlerService) { this.portalDataHandlerService = portalDataHandlerService; } /** * Display the entity import form view. * * @param request * @return */ @RequestMapping public String getImportView(PortletRequest request) { return "/jsp/ImportExportPortlet/import"; } /** * Display the entity export form view. * * @param request * @return */ @RequestMapping(params = "action=export") public ModelAndView getExportView(PortletRequest request) { Map<String, Object> model = new HashMap<String, Object>(); // add a list of all permitted export types final Iterable<IPortalDataType> exportPortalDataTypes = this.portalDataHandlerService.getExportPortalDataTypes(); final List<IPortalDataType> types = getAllowedTypes(request, IPermission.EXPORT_ACTIVITY, exportPortalDataTypes); model.put("supportedTypes", types); return new ModelAndView("/jsp/ImportExportPortlet/export", model); } /** * Display the entity deletion form view. * * @param request * @return */ @RequestMapping(params = "action=delete") public ModelAndView getDeleteView(PortletRequest request) { Map<String, Object> model = new HashMap<String, Object>(); // add a list of all permitted deletion types final Iterable<IPortalDataType> deletePortalDataTypes = this.portalDataHandlerService.getDeletePortalDataTypes(); final List<IPortalDataType> types = getAllowedTypes(request, IPermission.DELETE_ACTIVITY, deletePortalDataTypes); model.put("supportedTypes", types); return new ModelAndView("/jsp/ImportExportPortlet/delete", model); } /** * Return a list of all permitted import/export types for the given permission and the current * user. * * @param request * @param activityName * @return */ protected List<IPortalDataType> getAllowedTypes( PortletRequest request, String activityName, Iterable<IPortalDataType> dataTypes) { // get the authorization principal representing the current user final HttpServletRequest httpServletRequest = this.portalRequestUtils.getPortletHttpRequest(request); final IPerson person = personManager.getPerson(httpServletRequest); final EntityIdentifier ei = person.getEntityIdentifier(); final IAuthorizationPrincipal ap = AuthorizationService.instance().newPrincipal(ei.getKey(), ei.getType()); // filter the list of configured import/export types by user permission final List<IPortalDataType> results = new ArrayList<IPortalDataType>(); for (IPortalDataType type : dataTypes) { final String typeId = type.getTypeId(); if (ap.hasPermission(IPermission.PORTAL_SYSTEM, activityName, typeId)) { results.add(type); } } return results; } }