/** * Copyright (C) 2011 JTalks.org Team * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package org.jtalks.jcommune.plugin.api; import org.jtalks.common.model.permissions.JtalksPermission; import org.jtalks.jcommune.plugin.api.core.Plugin; import org.jtalks.jcommune.plugin.api.core.PluginWithBranchPermissions; import org.jtalks.jcommune.plugin.api.filters.PluginFilter; import org.jtalks.jcommune.plugin.api.filters.TypeFilter; import java.util.ArrayList; import java.util.List; /** * Class for managing permissions which provided by plugins * * @author Evgeniy Myslovets */ public class PluginPermissionManager { private PluginLoader pluginLoader; /** * Constructs {@link PluginPermissionManager} with given {@link PluginLoader} * * @param pluginLoader plugin loader instance */ public PluginPermissionManager(PluginLoader pluginLoader) { this.pluginLoader = pluginLoader; } /** * Gets all branch permissions provided by all <b>enabled</b> plugins * * @return list of branch permissions provided by plugins */ public List<JtalksPermission> getPluginsBranchPermissions() { PluginFilter filter = new TypeFilter(PluginWithBranchPermissions.class); List<Plugin> plugins = pluginLoader.getPlugins(filter); List<JtalksPermission> branchPermissions = new ArrayList<>(); for (Plugin plugin : plugins) { if (plugin.isEnabled()) { branchPermissions.addAll(((PluginWithBranchPermissions) plugin).getBranchPermissions()); } } return branchPermissions; } /** * Performs search permissions provided by <b>enabled</b> plugins by permission mask * * @param mask permission mask for search * @return permission with specified mask if it exist * <b>null</b> otherwise */ public JtalksPermission findPluginsBranchPermissionByMask(int mask) { PluginFilter filter = new TypeFilter(PluginWithBranchPermissions.class); List<Plugin> plugins = pluginLoader.getPlugins(filter); for (Plugin plugin : plugins) { if (plugin.isEnabled()) { JtalksPermission permission = ((PluginWithBranchPermissions) plugin).getBranchPermissionByMask(mask); if (permission != null) { return permission; } } } return null; } /** * Performs search permissions provided by <b>enabled</b> plugins by permission name * * @param name permission name for search * @return permission with specified name if it exist * <b>null</b> otherwise */ public JtalksPermission findPluginsBranchPermissionByName(String name) { PluginFilter filter = new TypeFilter(PluginWithBranchPermissions.class); List<Plugin> plugins = pluginLoader.getPlugins(filter); for (Plugin plugin : plugins) { if (plugin.isEnabled()) { JtalksPermission permission = ((PluginWithBranchPermissions)plugin).getBranchPermissionByName(name); if (permission != null) { return permission; } } } return null; } }