use of org.apereo.portal.portlet.om.IPortletDefinition in project uPortal by Jasig.
the class FragmentListController method listFragments.
/**
* Returns a model of fragments --> List<FragmentBean> , sorted by precedence (default) or by
* fragment name depending on sort parameter, to be rendered by the jsonView.
*
* @param req the servlet request, bound via SpringWebMVC to GET method invocations of this
* controller.
* @param sortParam PRECEDENCE, NAME, or null.
* @return ModelAndView with a List of FragmentBeans to be rendered by the jsonView.
* @throws ServletException on Exception in underlying attempt to get at the fragments
* @throws AuthorizationException if request is for any user other than a Portal Administrator.
* @throws IllegalArgumentException if sort parameter has an unrecognized value
*/
@RequestMapping(method = RequestMethod.GET)
public ModelAndView listFragments(HttpServletRequest req, @RequestParam(value = "sort", required = false) String sortParam) throws ServletException {
// Verify that the user is allowed to use this service
IPerson user = personManager.getPerson(req);
if (!AdminEvaluator.isAdmin(user)) {
throw new AuthorizationException("User " + user.getUserName() + " not an administrator.");
}
Map<String, Document> fragmentLayoutMap = null;
if (userLayoutStore != null) {
try {
fragmentLayoutMap = userLayoutStore.getFragmentLayoutCopies();
} catch (Exception e) {
String msg = "Failed to access fragment layouts";
log.error(msg, e);
throw new ServletException(msg, e);
}
}
List<FragmentBean> fragments = new ArrayList<FragmentBean>();
for (FragmentDefinition frag : dlmConfig.getFragments()) {
Document layout = fragmentLayoutMap != null ? fragmentLayoutMap.get(frag.getOwnerId()) : null;
List<String> portlets = null;
if (layout != null) {
portlets = new ArrayList<String>();
NodeList channelFNames = this.xpathOperations.evaluate(CHANNEL_FNAME_XPATH, layout, XPathConstants.NODESET);
for (int i = 0; i < channelFNames.getLength(); i++) {
String fname = channelFNames.item(i).getTextContent();
IPortletDefinition pDef = portletRegistry.getPortletDefinitionByFname(fname);
if (null != pDef) {
portlets.add(pDef.getTitle());
}
}
}
fragments.add(FragmentBean.create(frag, portlets));
}
// Determine & follow sorting preference...
Sort sort = DEFAULT_SORT;
if (sortParam != null) {
sort = Sort.valueOf(sortParam);
}
Collections.sort(fragments, sort.getComparator());
return new ModelAndView("jsonView", "fragments", fragments);
}
use of org.apereo.portal.portlet.om.IPortletDefinition in project uPortal by Jasig.
the class UpdatePreferencesServlet method addFavorite.
@RequestMapping(method = RequestMethod.POST, params = "action=addFavorite")
public ModelAndView addFavorite(@RequestParam String channelId, HttpServletRequest request, HttpServletResponse response) throws IOException {
final IUserInstance ui = userInstanceManager.getUserInstance(request);
final IPerson person = getPerson(ui, response);
final IPortletDefinition pdef = portletDefinitionRegistry.getPortletDefinition(channelId);
final Locale locale = RequestContextUtils.getLocale(request);
final IAuthorizationPrincipal authPrincipal = this.getUserPrincipal(person.getUserName());
final String targetString = PermissionHelper.permissionTargetIdForPortletDefinition(pdef);
if (!authPrincipal.hasPermission(IPermission.PORTAL_SYSTEM, IPermission.PORTLET_FAVORITE_ACTIVITY, targetString)) {
logger.warn("Unauthorized attempt to favorite portlet '{}' through the REST API by user '{}'", pdef.getFName(), person.getUserName());
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
return new ModelAndView("jsonView", Collections.singletonMap("response", getMessage("error.favorite.not.permitted", "Favorite not permitted", locale)));
}
final UserPreferencesManager upm = (UserPreferencesManager) ui.getPreferencesManager();
final IUserLayoutManager ulm = upm.getUserLayoutManager();
final IUserLayoutChannelDescription channel = new UserLayoutChannelDescription(pdef);
// get favorite tab
final String favoriteTabNodeId = FavoritesUtils.getFavoriteTabNodeId(ulm.getUserLayout());
if (favoriteTabNodeId != null) {
// add portlet to favorite tab
final IUserLayoutNodeDescription node = addNodeToTab(ulm, channel, favoriteTabNodeId);
if (node == null) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
return new ModelAndView("jsonView", Collections.singletonMap("response", getMessage("error.add.portlet.in.tab", "Can''t add a new favorite", locale)));
}
try {
// save the user's layout
ulm.saveUserLayout();
} catch (PortalException e) {
return handlePersistError(request, response, e);
}
// document success for notifications
final Map<String, String> model = new HashMap<>();
final String channelTitle = channel.getTitle();
model.put("response", getMessage("favorites.added.favorite", channelTitle, "Added " + channelTitle + " as a favorite.", locale));
model.put("newNodeId", node.getId());
return new ModelAndView("jsonView", model);
} else {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return new ModelAndView("jsonView", Collections.singletonMap("response", getMessage("error.finding.favorite.tab", "Can''t find favorite tab", locale)));
}
}
use of org.apereo.portal.portlet.om.IPortletDefinition in project uPortal by Jasig.
the class UpdatePreferencesServlet method removeFavorite.
/**
* This method removes the channelId specified from favorites. Note that even if you pass in the
* layout channel id, it will always remove from the favorites.
*
* @param channelId The long channel ID that is used to determine which fname to remove from
* favorites
* @param request
* @param response
* @return returns a mav object with a response attribute for noty
* @throws IOException if it has problem reading the layout file.
*/
@RequestMapping(method = RequestMethod.POST, params = "action=removeFavorite")
public ModelAndView removeFavorite(@RequestParam String channelId, HttpServletRequest request, HttpServletResponse response) throws IOException {
UserPreferencesManager upm = (UserPreferencesManager) userInstanceManager.getUserInstance(request).getPreferencesManager();
IUserLayoutManager ulm = upm.getUserLayoutManager();
final Locale locale = RequestContextUtils.getLocale(request);
IPortletDefinition portletDefinition = portletDefinitionRegistry.getPortletDefinition(channelId);
if (portletDefinition != null && StringUtils.isNotBlank(portletDefinition.getFName())) {
String functionalName = portletDefinition.getFName();
List<IUserLayoutNodeDescription> favoritePortlets = FavoritesUtils.getFavoritePortlets(ulm.getUserLayout());
// search for the favorite to delete
EqualPredicate nameEqlPredicate = new EqualPredicate(functionalName);
Object result = CollectionUtils.find(favoritePortlets, new BeanPredicate("functionalName", nameEqlPredicate));
if (result != null && result instanceof UserLayoutChannelDescription) {
UserLayoutChannelDescription channelDescription = (UserLayoutChannelDescription) result;
try {
if (!ulm.deleteNode(channelDescription.getChannelSubscribeId())) {
logger.warn("Error deleting the node" + channelId + "from favorites for user " + (upm.getPerson() == null ? "unknown" : upm.getPerson().getID()));
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
return new ModelAndView("jsonView", Collections.singletonMap("response", getMessage("error.remove.favorite", "Can''t remove favorite", locale)));
}
// save the user's layout
ulm.saveUserLayout();
} catch (PortalException e) {
return handlePersistError(request, response, e);
}
// document success for notifications
Map<String, String> model = new HashMap<>();
model.put("response", getMessage("success.remove.portlet", "Removed from Favorites successfully", locale));
return new ModelAndView("jsonView", model);
}
}
// save the user's layout
ulm.saveUserLayout();
return new ModelAndView("jsonView", Collections.singletonMap("response", getMessage("error.finding.favorite", "Can''t find favorite", locale)));
}
use of org.apereo.portal.portlet.om.IPortletDefinition in project uPortal by Jasig.
the class UpdatePreferencesServlet method addPortlet.
/**
* Add a new channel.
*
* @param request
* @param response
* @throws IOException
* @throws PortalException
*/
@RequestMapping(method = RequestMethod.POST, params = "action=addPortlet")
public ModelAndView addPortlet(HttpServletRequest request, HttpServletResponse response) throws IOException, PortalException {
IUserInstance ui = userInstanceManager.getUserInstance(request);
UserPreferencesManager upm = (UserPreferencesManager) ui.getPreferencesManager();
IUserLayoutManager ulm = upm.getUserLayoutManager();
final Locale locale = RequestContextUtils.getLocale(request);
// gather the parameters we need to move a channel
String destinationId = request.getParameter("elementID");
String sourceId = request.getParameter("channelID");
String method = request.getParameter("position");
String fname = request.getParameter("fname");
if (destinationId == null) {
String tabName = request.getParameter("tabName");
if (tabName != null) {
destinationId = getTabIdFromName(ulm.getUserLayout(), tabName);
}
}
IPortletDefinition definition;
if (sourceId != null)
definition = portletDefinitionRegistry.getPortletDefinition(sourceId);
else if (fname != null)
definition = portletDefinitionRegistry.getPortletDefinitionByFname(fname);
else {
logger.error("SourceId or fname invalid when adding a portlet");
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return new ModelAndView("jsonView", Collections.singletonMap("error", "SourceId or fname invalid"));
}
IUserLayoutChannelDescription channel = new UserLayoutChannelDescription(definition);
IUserLayoutNodeDescription node;
if (isTab(ulm, destinationId)) {
node = addNodeToTab(ulm, channel, destinationId);
} else {
boolean isInsert = method != null && method.equals("insertBefore");
// If neither an insert or type folder - Can't "insert into" non-folder
if (!(isInsert || isFolder(ulm, destinationId))) {
logger.error("Cannot insert into portlet element");
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return new ModelAndView("jsonView", Collections.singletonMap("error", "Cannot insert into portlet element"));
}
String siblingId = isInsert ? destinationId : null;
String target = isInsert ? ulm.getParentId(destinationId) : destinationId;
// move the channel into the column
node = ulm.addNode(channel, target, siblingId);
}
if (node == null) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
return new ModelAndView("jsonView", Collections.singletonMap("error", getMessage("error.add.element", "Unable to add element", locale)));
}
String nodeId = node.getId();
try {
// save the user's layout
ulm.saveUserLayout();
if (addedWindowState != null) {
IPortletWindow portletWindow = this.portletWindowRegistry.getOrCreateDefaultPortletWindowByFname(request, channel.getFunctionalName());
portletWindow.setWindowState(addedWindowState);
this.portletWindowRegistry.storePortletWindow(request, portletWindow);
}
} catch (PortalException e) {
return handlePersistError(request, response, e);
}
Map<String, String> model = new HashMap<>();
model.put("response", getMessage("success.add.portlet", "Added a new channel", locale));
model.put("newNodeId", nodeId);
return new ModelAndView("jsonView", model);
}
use of org.apereo.portal.portlet.om.IPortletDefinition in project uPortal by Jasig.
the class PortletsRESTController method getPortlet.
/**
* Provides information about a single portlet in the registry. NOTE: Access to this API enpoint
* requires only <code>IPermission.PORTAL_SUBSCRIBE</code> permission.
*/
@RequestMapping(value = "/portlet/{fname}.json", method = RequestMethod.GET)
public ModelAndView getPortlet(HttpServletRequest request, HttpServletResponse response, @PathVariable String fname) throws Exception {
IAuthorizationPrincipal ap = getAuthorizationPrincipal(request);
IPortletDefinition portletDef = portletDefinitionRegistry.getPortletDefinitionByFname(fname);
if (portletDef != null && ap.canRender(portletDef.getPortletDefinitionId().getStringId())) {
LayoutPortlet portlet = new LayoutPortlet(portletDef);
return new ModelAndView("json", "portlet", portlet);
} else {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
return new ModelAndView("json");
}
}
Aggregations