/* * * Copyright 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved. * * This file is part of jAPS software. * jAPS is a free software; * you can redistribute it and/or modify it * under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2. * * See the file License for the specific language governing permissions * and limitations under the License * * * * Copyright 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved. * */ package com.agiletec.apsadmin.portal.helper; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import com.agiletec.aps.system.ApsSystemUtils; import com.agiletec.aps.system.common.tree.ITreeNode; import com.agiletec.aps.system.common.tree.TreeNode; import com.agiletec.aps.system.exception.ApsSystemException; import com.agiletec.aps.system.services.baseconfig.ConfigInterface; import com.agiletec.aps.system.services.group.Group; import com.agiletec.aps.system.services.lang.Lang; import com.agiletec.aps.system.services.page.IPage; import com.agiletec.aps.system.services.page.IPageManager; import com.agiletec.aps.system.services.page.PageUtilizer; import com.agiletec.aps.system.services.user.UserDetails; import com.agiletec.aps.util.ApsWebApplicationUtils; import com.agiletec.apsadmin.portal.AbstractPortalAction; import com.agiletec.apsadmin.system.TreeNodeBaseActionHelper; /** * Classe Helper per la gestione pagine. * @author E.Santoboni */ public class PageActionHelper extends TreeNodeBaseActionHelper implements IPageActionHelper { @Override public List<Group> getAllowedGroups(UserDetails currentUser) { return super.getAllowedGroups(currentUser); } @Override public Map getReferencingObjects(IPage page, HttpServletRequest request) throws ApsSystemException { Map<String, List> references = new HashMap<String, List>(); try { String[] defNames = ApsWebApplicationUtils.getWebApplicationContext(request).getBeanNamesForType(PageUtilizer.class); for (int i=0; i<defNames.length; i++) { Object service = null; try { service = ApsWebApplicationUtils.getWebApplicationContext(request).getBean(defNames[i]); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "hasReferencingObjects"); service = null; } if (service != null) { PageUtilizer pageUtilizer = (PageUtilizer) service; List utilizers = pageUtilizer.getPageUtilizers(page.getCode()); if (utilizers != null && !utilizers.isEmpty()) { references.put(pageUtilizer.getName()+"Utilizers", utilizers); } } } } catch (Throwable t) { throw new ApsSystemException("Errore in hasReferencingObjects", t); } return references; } @Override @Deprecated (/** from jAPS 2.0 version jAPS 2.1 */) public ITreeNode getAllowedTreeRoot(UserDetails user) throws ApsSystemException { return this.getAllowedTreeRoot(user, false); } @Override public ITreeNode getAllowedTreeRoot(UserDetails user, boolean alsoFreeViewPages) throws ApsSystemException { List<String> groupCodes = new ArrayList<String>(); List<Group> groups = this.getAllowedGroups(user); for (int i=0; i<groups.size(); i++) { groupCodes.add(groups.get(i).getName()); } return this.getAllowedTreeRoot(groupCodes, alsoFreeViewPages); } @Override public ITreeNode getAllowedTreeRoot(Collection<String> groupCodes) throws ApsSystemException { return this.getAllowedTreeRoot(groupCodes, false); } @Override public ITreeNode getAllowedTreeRoot(Collection<String> groupCodes, boolean alsoFreeViewPages) throws ApsSystemException { ITreeNode root = null; if (groupCodes.contains(Group.ADMINS_GROUP_NAME)) { root = this.getRoot(); } else { IPage pageRoot = (IPage) this.getRoot(); if (groupCodes.contains(Group.FREE_GROUP_NAME) || (alsoFreeViewPages && null != pageRoot.getExtraGroups() && pageRoot.getExtraGroups().contains(Group.FREE_GROUP_NAME))) { root = new TreeNode(); this.fillTreeNode((TreeNode) root, null, this.getRoot()); } else { root = this.getVirtualRoot(); } this.addTreeWrapper((TreeNode) root, null, pageRoot, groupCodes, alsoFreeViewPages); } return root; } private void addTreeWrapper(TreeNode currentNode, TreeNode parent, IPage currentTreeNode, Collection<String> groupCodes, boolean alsoFreeViewPages) { IPage[] children = currentTreeNode.getChildren(); for (int i=0; i<children.length; i++) { IPage newCurrentTreeNode = children[i]; if (this.isPageAllowed(newCurrentTreeNode, groupCodes, alsoFreeViewPages)) { TreeNode newNode = new TreeNode(); this.fillTreeNode(newNode, currentNode, newCurrentTreeNode); currentNode.addChild(newNode); this.addTreeWrapper(newNode, currentNode, newCurrentTreeNode, groupCodes, alsoFreeViewPages); } else { this.addTreeWrapper(currentNode, currentNode, newCurrentTreeNode, groupCodes, alsoFreeViewPages); } } } /** * Metodo a servizio della costruzione dell'albero delle pagine. * Nel caso che l'utente corrente non sia abilitato alla visualizzazione del nodo * root, fornisce un nodo "virtuale" nel quale inserire gli eventuali nodi visibili. * @return Il nodo root virtuale. */ private TreeNode getVirtualRoot() { TreeNode virtualRoot = new TreeNode(); virtualRoot.setCode(AbstractPortalAction.VIRTUAL_ROOT_CODE); List<Lang> langs = this.getLangManager().getLangs(); for (int i=0; i<langs.size(); i++) { Lang lang = langs.get(i); virtualRoot.setTitle(lang.getCode(), "ROOT"); } return virtualRoot; } @Override protected void buildCheckNodes(ITreeNode treeNode, Set<String> checkNodes, Collection<String> groupCodes) { checkNodes.add(treeNode.getCode()); ITreeNode parent = treeNode.getParent(); IPage page = this.getPageManager().getPage(parent.getCode()); if (!this.isPageAllowed(page, groupCodes, false)) { checkNodes.add(AbstractPortalAction.VIRTUAL_ROOT_CODE); return; } if (parent != null && parent.getParent() != null && !parent.getCode().equals(treeNode.getCode())) { this.buildCheckNodes(parent, checkNodes, groupCodes); } } private boolean isPageAllowed(IPage page, Collection<String> groupCodes, boolean alsoFreeViewPages) { if (page == null) return false; String pageGroup = page.getGroup(); Collection<String> extraGroups = page.getExtraGroups(); boolean isAuth = (groupCodes.contains(pageGroup) || groupCodes.contains(Group.ADMINS_GROUP_NAME)) || (alsoFreeViewPages && null != extraGroups && extraGroups.contains(Group.FREE_GROUP_NAME)); return isAuth; } @Override protected boolean isNodeAllowed(String code, Collection<String> groupCodes) { if (null != code && code.equals(AbstractPortalAction.VIRTUAL_ROOT_CODE)) { return true; } IPage page = this.getPageManager().getPage(code); return this.isPageAllowed(page, groupCodes, false); } @Override protected ITreeNode getTreeNode(String code) { if (AbstractPortalAction.VIRTUAL_ROOT_CODE.equals(code)) { return this.getVirtualRoot(); } return this.getPageManager().getPage(code); } @Override protected ITreeNode getRoot() { return (ITreeNode) this.getPageManager().getRoot(); } protected IPageManager getPageManager() { return _pageManager; } public void setPageManager(IPageManager pageManager) { this._pageManager = pageManager; } protected ConfigInterface getConfigService() { return _configService; } public void setConfigService(ConfigInterface configService) { this._configService = configService; } private IPageManager _pageManager; private ConfigInterface _configService; }