Author: adamw Date: 2005-09-07 08:15:47 -0400 (Wed, 07 Sep 2005) New Revision: 1052 Added: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/permissions/AbstractRequestPermissionChecker.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/permissions/NullPermissionsChecker.java Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/FilesFromRepoFilter.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/blog/AbstractBlog.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/blog/BlogUpdaterNodeWatcher.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/portlet/ContentPortlet.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/DownloadsDescriptor.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectDescriptor.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/Projects.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandler.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandlerEmpty.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandlerIterSingleKey.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandlerStack.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementDescriptor.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementsDescriptor.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/OutsidePropertiesMap.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesElementValue.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesHandler.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesHandlerDefault.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesHandlerMultiValue.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesHandlerStack.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/permissions/ActionRequestPermissionsChecker.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/permissions/PermissionsChecker.java trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/permissions/RenderRequestPermissionsChecker.java trunk/forge/portal-extensions/forge-contributor/src/java/org/jboss/forge/contributor/ConDescriptor.java trunk/forge/portal-extensions/forge-contributor/src/java/org/jboss/forge/contributor/ConServer.java trunk/forge/portal-extensions/forge-file-access/src/java/org/jboss/forge/fileaccess/FileAccessFilter.java trunk/forge/portal-extensions/forge-forums/scripts/conv.sql trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java trunk/forge/portal-extensions/forge-map/src/java/org/jboss/forge/softwaremap/SoftwareMap.java trunk/forge/portal-extensions/forge-navigation/src/java/org/jbosslabs/portlet/navigation/NavigationPortlet.java trunk/forge/portal-extensions/forge-prj-downloads/src/java/org/jboss/forge/projects/downloads/Downloads.java trunk/forge/portal-extensions/forge-prj-info/src/java/org/jboss/forge/projects/info/Info.java trunk/forge/portal-extensions/forge-service/src/java/org/jboss/forge/service/ForgeService.java Log: JBLAB-379 and JBLAB-380: cleanup & permissions checking Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/FilesFromRepoFilter.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/FilesFromRepoFilter.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/FilesFromRepoFilter.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -52,13 +52,10 @@ private ContentManager contentReader; - private ForgeHelper forgeHelper; - public void init(FilterConfig conf) { - forgeHelper = new ForgeHelper(); separator = '/'; repoAccessDirLength = ForgeHelper.REPO_ACCESS_DIR.length(); - contentReader = forgeHelper.getContentManager(""); + contentReader = ForgeHelper.getContentManager(""); // Constructing the base path. basePath = conf.getServletContext().getRealPath("") + separator Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/ForgeHelper.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -71,9 +71,9 @@ */ public final static String FREEZONE_SEPARATOR = "+"; - private ForgeProperties props; + private static ForgeProperties props; - public ForgeHelper() { + static { // Reading forge properties. props = new ForgeProperties(); forgeManagement = null; @@ -84,14 +84,14 @@ * instance. This variable is filled with the correct value on first * call. */ - private ForgeManagement forgeManagement; + private static ForgeManagement forgeManagement; /** * Gets an instance of the ForgeManagement class. It is looked up as a * mbean, if this is the first invocation of this function. * @return An instance of the ForgeManagement class. */ - public ForgeManagement getForgeManagement() { + public static ForgeManagement getForgeManagement() { try { if (forgeManagement == null) forgeManagement = (ForgeManagement) MBeanProxyExt.create( @@ -137,7 +137,7 @@ * <code>prefix</code>-relative. * @return An instance of a ready-to-use content manager. */ - public ContentManager getContentManager(String prefix) { + public static ContentManager getContentManager(String prefix) { return new SvnContentManager(props.getSvnPath() + prefix, props.getLocalPath() + prefix, props.getSvnUsername(), props.getSvnPassword()); @@ -148,7 +148,7 @@ * resources. It is root-relative. * @return An instance of a ready-to-use content manager. */ - public ContentManager getContentManager() { + public static ContentManager getContentManager() { return getContentManager(""); } @@ -162,7 +162,7 @@ * Resource we want to access. * @return A repository-access path. */ - public String createRepoAccessPath(String portalName, String resource) { + public static String createRepoAccessPath(String portalName, String resource) { return "/" + ForgeHelper.REPO_ACCESS_DIR + "/" + portalName + "/" + resource; } @@ -177,7 +177,7 @@ * Resource we want to access. * @return A repository-access path. */ - public String createRepoAccessPath(JBossRenderRequest request, + public static String createRepoAccessPath(JBossRenderRequest request, String resource) { PortalContext portalCtx = request.getPortalContext(); String portalName = portalCtx @@ -265,7 +265,7 @@ * Content reader to use. * @return An initialized instance of the BlogUpdater class. */ - public BlogUpdater getBlogUpdater(ContentManager cm) { + public static BlogUpdater getBlogUpdater(ContentManager cm) { return new BlogUpdater(cm, props.getBlogPath()); } @@ -282,11 +282,11 @@ * Address of this message's author. * @throws MessagingException */ - public void postMail(String recipient, String subject, String message, + public static void postMail(String recipient, String subject, String message, String from) throws MessagingException { // Set the host smtp address Properties props = new Properties(); - props.put("mail.smtp.host", this.props.getSmtpServer()); + props.put("mail.smtp.host", ForgeHelper.props.getSmtpServer()); // Create some properties and get the default Session Session session = Session.getDefaultInstance(props, null); @@ -313,7 +313,7 @@ * Gets an instance of read ForgeProperties. * @return An instance of read ForgeProperties. */ - public ForgeProperties getForgeProperties() { + public static ForgeProperties getForgeProperties() { return props; } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/blog/AbstractBlog.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/blog/AbstractBlog.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/blog/AbstractBlog.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -45,15 +45,11 @@ /** The class logger */ public static final Logger log = Logger.getLogger(JBossPortlet.class); - private ForgeHelper forgeHelper; - /** * Init method of the portlet */ public void init() throws PortletException { super.init(); - - forgeHelper = new ForgeHelper(); } /** @@ -137,11 +133,11 @@ String cacheKey = AbstractBlog.class.getName()+"/"+projectId; - SyndFeed feed = (SyndFeed) forgeHelper.getForgeManagement().getFromCache( + SyndFeed feed = (SyndFeed) ForgeHelper.getForgeManagement().getFromCache( portalName, cacheKey); if (feed == null) { - feed = (SyndFeed) forgeHelper.getForgeManagement(). + feed = (SyndFeed) ForgeHelper.getForgeManagement(). addNodeWatcher(portalName, cacheKey, new BlogNodeWatcher(feedAddress)); } @@ -176,7 +172,7 @@ projectId, portalName, feedTypeFreeAddress); ProjectsHelper.prepareRequest(request); - writePage(request, response, forgeHelper.createRepoAccessPath( + writePage(request, response, ForgeHelper.createRepoAccessPath( portalName, getJsp())); response.setTitle("Blog"); } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/blog/BlogUpdaterNodeWatcher.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/blog/BlogUpdaterNodeWatcher.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/blog/BlogUpdaterNodeWatcher.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -8,8 +8,7 @@ public Object init(String portalName) { // Initializing blog updater. - ForgeHelper fh = new ForgeHelper(); - bu = fh.getBlogUpdater(fh.getContentManager()); + bu = ForgeHelper.getBlogUpdater(ForgeHelper.getContentManager()); // Dummy object. return new Object(); Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/portlet/ContentPortlet.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/portlet/ContentPortlet.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/portlet/ContentPortlet.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -36,8 +36,6 @@ protected ContentManager cm; - protected ForgeHelper forgeHelper; - /** * Gets the suffix to use in the content reader. * @@ -56,8 +54,7 @@ public ContentPortlet(String title, String id) { this.title = title; this.id = id; - this.forgeHelper = new ForgeHelper(); - this.cm = forgeHelper.getContentManager(getContentReaderSuffix()); + this.cm = ForgeHelper.getContentManager(getContentReaderSuffix()); } public void init() { @@ -234,11 +231,11 @@ && (!javax.portlet.WindowState.MAXIMIZED.equals(ws))) return; - content = forgeHelper.getForgeManagement().getFromCache(portalName, + content = ForgeHelper.getForgeManagement().getFromCache(portalName, cacheKey); if (content == null) - content = forgeHelper.getForgeManagement().addNodeWatcher( + content = ForgeHelper.getForgeManagement().addNodeWatcher( portalName, cacheKey, new NodeWatcher() { ResourceWatcher rw; Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/DownloadsDescriptor.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/DownloadsDescriptor.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/DownloadsDescriptor.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -28,6 +28,8 @@ import org.jboss.forge.common.projects.elements.PropertiesHandlerDefault; import org.jboss.forge.common.projects.elements.PropertiesHandlerStack; import org.jboss.forge.common.projects.elements.PropertiesMap; +import org.jboss.forge.common.projects.permissions.NullPermissionsChecker; +import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.portal.common.context.DelegateContext; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -195,11 +197,13 @@ } if (thisCategory != null) - thisCategory.fillContext(context); + thisCategory.fillContext(context, new NullPermissionsChecker()); if (categoriesDesc != null) - categoriesDesc.fillContext(context.next("hasCategories"), "categories"); + categoriesDesc.fillContext(context.next("hasCategories"), "categories", + new NullPermissionsChecker()); if (filesDesc != null) - filesDesc.fillContext(context.next("hasFiles"), "files"); + filesDesc.fillContext(context.next("hasFiles"), "files", + new NullPermissionsChecker()); // Creating the trace (for each category, a path from from the root to // that category). @@ -230,17 +234,12 @@ PropertiesHandlerStack stack = new PropertiesHandlerStack(); stack.addHandler(new PropertiesHandlerDefault()); stack.addHandler(new PropertiesHandler() { - public void fillContextShallow(PropertiesMap properties, - DelegateContext context) { + public void fillContext(PropertiesMap properties, + DelegateContext context, PermissionsChecker pc) { context.put("fullId", categoryContext + CAT_ID_SEPARATOR + properties.get("id").getFirstValue()); } - public void fillContext(PropertiesMap properties, - DelegateContext context) { - - } - public void processNode(ElementDescriptor thisElement, Node node) { String categoryId = thisElement.getId(); try { @@ -256,6 +255,11 @@ // category. } } + + public void collect(PropertiesMap properties, Object data, + PermissionsChecker pc) { + + } }); return stack; @@ -284,7 +288,8 @@ final String separator, final String portalName, final String projectId) { return new PropertiesHandler() { - public void fillContextShallow(PropertiesMap properties, DelegateContext context) { + public void fillContext(PropertiesMap properties, DelegateContext context, + PermissionsChecker pc) { String id = properties.get("id").getFirstValue(); if (isOutsideLink(id)) @@ -302,12 +307,13 @@ context.put("name", properties.get("name").getFirstValue()); } - public void fillContext(PropertiesMap properties, DelegateContext context) { + public void processNode(ElementDescriptor thisElement, Node node) { } - public void processNode(ElementDescriptor thisElement, Node node) { - + public void collect(PropertiesMap properties, Object data, + PermissionsChecker pc) { + } }; } @@ -319,8 +325,8 @@ PropertiesHandlerStack stack = new PropertiesHandlerStack(); stack.addHandler(new PropertiesHandlerDefault()); stack.addHandler(new PropertiesHandler() { - public void fillContextShallow(PropertiesMap properties, - DelegateContext context) { + public void fillContext(PropertiesMap properties, + DelegateContext context, PermissionsChecker pc) { String id = properties.get("id").getFirstValue(); String pathToFile = separator + projectId + separator + componentDir + separator @@ -365,14 +371,14 @@ getFileModification(isf, pathToFile))); } - public void fillContext(PropertiesMap properties, - DelegateContext context) { + public void processNode(ElementDescriptor thisElement, Node node) { } + + public void collect(PropertiesMap properties, Object data, + PermissionsChecker pc) { - public void processNode(ElementDescriptor thisElement, Node node) { - - } + } }); return stack; Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectDescriptor.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectDescriptor.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectDescriptor.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -21,6 +21,7 @@ import org.jboss.forge.common.projects.elements.PropertiesHandler; import org.jboss.forge.common.projects.elements.PropertiesHandlerStack; import org.jboss.forge.common.projects.elements.PropertiesMap; +import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.logging.Logger; import org.jboss.portal.common.context.DelegateContext; import org.w3c.dom.Document; @@ -37,7 +38,6 @@ private static final Logger log = Logger.getLogger(ProjectDescriptor.class); private DownloadsDescriptor downloads; - private DownloadsDescriptor docs; private String portalName; @@ -124,12 +124,7 @@ // And a custom one, which holds more information. stack.addHandler(new PropertiesHandler() { public void fillContext(PropertiesMap properties, - DelegateContext context) { - - } - - public void fillContextShallow(PropertiesMap properties, - DelegateContext context) { + DelegateContext context, PermissionsChecker pc) { context.put("companyname", properties.get("company-name") .getFirstValue()); context.put("info", properties.get("info").getFirstValue()); @@ -150,6 +145,11 @@ public void processNode(ElementDescriptor thisElement, Node node) { } + + public void collect(PropertiesMap properties, Object data, + PermissionsChecker pc) { + + } }); return stack; @@ -160,12 +160,7 @@ ph.addHandler(new PropertiesHandlerDefault()); ph.addHandler(new PropertiesHandler() { public void fillContext(PropertiesMap properties, - DelegateContext context) { - - } - - public void fillContextShallow(PropertiesMap properties, - DelegateContext context) { + DelegateContext context, PermissionsChecker pc) { context.put("link", ProjectsHelper.createFreezonePageLink( portalName, getId(), properties.get("id") .getFirstValue())); @@ -174,6 +169,11 @@ public void processNode(ElementDescriptor thisElement, Node node) { } + + public void collect(PropertiesMap properties, Object data, + PermissionsChecker pc) { + + } }); return ph; @@ -185,9 +185,11 @@ * * @param context * Context to fill. + * @param pc + * Permissions checker to use. */ - public void fillContextShallow(DelegateContext context) { - thisProject.fillContextShallow(context); + public void fillContextShallow(DelegateContext context, PermissionsChecker pc) { + thisProject.fillContextShallow(context, pc); } /** @@ -195,9 +197,11 @@ * * @param context * Context to fill. + * @param pc + * Permissions checker to use. */ - public void fillContext(DelegateContext context) { - thisProject.fillContext(context); + public void fillContext(DelegateContext context, PermissionsChecker pc) { + thisProject.fillContext(context, pc); } /** @@ -219,16 +223,6 @@ return downloads; } - /** - * Gets a downloads descriptor of this project. - * - * @return A component descriptor of this project or null, if the project - * has no components. - */ - public DownloadsDescriptor getDocsDescriptor() { - return docs; - } - /** * Fills the given set with names of resources from which this project * descriptor was generated. @@ -253,4 +247,15 @@ public String getProperty(String propertyName) { return thisProject.getProperty(propertyName); } + + /** + * Checks if permission to read this project is allowed with permissions + * set represented by the given permissions checker. + * + * @param pc Permissions checker to use. + * @return True iff permission is allowed. + */ + public boolean permissionAllowed(PermissionsChecker pc) { + return thisProject.permissionAllowed(pc); + } } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/Projects.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/Projects.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/Projects.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -10,6 +10,7 @@ import org.jboss.forge.common.ForgeHelper; import org.jboss.forge.common.content.ContentManager; +import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.portal.common.context.DelegateContext; /** @@ -21,7 +22,6 @@ public class Projects { private ContentManager cm; private String portalName; - private ForgeHelper forgeHelper; /** * @param cm A content manger suffixed with <portal-name>/memebers. @@ -30,8 +30,6 @@ public Projects(ContentManager cm, String portalName) { this.cm = cm; this.portalName = portalName; - - forgeHelper = new ForgeHelper(); } /** @@ -39,12 +37,12 @@ */ private synchronized ProjectsDescriptor getProjectsDescriptor() { ProjectsDescriptor pd = (ProjectsDescriptor) - forgeHelper.getForgeManagement().getFromCache(portalName, + ForgeHelper.getForgeManagement().getFromCache(portalName, ProjectsDescriptor.class.getName()); if (pd == null) { pd = (ProjectsDescriptor) - forgeHelper.getForgeManagement().addNodeWatcher(portalName, + ForgeHelper.getForgeManagement().addNodeWatcher(portalName, ProjectsDescriptor.class.getName(), new ProjectsNodeWatcher(cm)); } @@ -54,24 +52,30 @@ /** * Gets context of the given project. + * @param pc Permissions checker to use. + * @param id Id of the project to get. */ - public DelegateContext getProjectContext(String id) { - return getProjectsDescriptor().getProjectContext(id); + public DelegateContext getProjectContext(PermissionsChecker pc, String id) { + return getProjectsDescriptor().getProjectContext(pc, id); } /** * Gets context of the given category. + * @param pc Permissions checker to use. + * @param id Id of the category to get. */ - public DelegateContext getCategoryContext(String id) { + public DelegateContext getCategoryContext(PermissionsChecker pc, String id) { return getProjectsDescriptor() - .getOutsidePropertyContext("category", id); + .getOutsidePropertyContext(pc, "category", id); } /** * Gets a context describing all projects. + * + * @param pc Permissions checker to use. */ - public DelegateContext getProjectsContext() { - return getProjectsDescriptor().getContext(); + public DelegateContext getProjectsContext(PermissionsChecker pc) { + return getProjectsDescriptor().getContext(pc); } /** @@ -81,13 +85,14 @@ * Id of the selected project. * @param categoryId * Id of the selected category. + * @param pc Permissions checker to use. * @return Download context for the diven project and category or null if no * such context exists. */ - public DelegateContext getDownloadsContext(String projectId, - String categoryId) { + public DelegateContext getDownloadsContext(PermissionsChecker pc, + String projectId, String categoryId) { ProjectDescriptor pd = getProjectsDescriptor().getProjectDescriptor( - projectId); + pc, projectId); if (pd == null) return null; @@ -109,12 +114,13 @@ /** * Searches for the given string in project's names and descriptions. * + * @param pc Permissions checker to use. * @param searchFor * String to search for. * @return A context containing under the key "projects" contexts of found * projects. */ - public DelegateContext search(String searchFor) { - return getProjectsDescriptor().search(searchFor); + public DelegateContext search(PermissionsChecker pc, String searchFor) { + return getProjectsDescriptor().search(pc, searchFor); } } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsDescriptor.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -9,6 +9,8 @@ package org.jboss.forge.common.projects; import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; @@ -26,6 +28,8 @@ import org.jboss.forge.common.projects.elements.PropertiesHandlerDefault; import org.jboss.forge.common.projects.elements.PropertiesHandlerStack; import org.jboss.forge.common.projects.elements.PropertiesMap; +import org.jboss.forge.common.projects.permissions.NullPermissionsChecker; +import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.logging.Logger; import org.jboss.portal.common.context.DelegateContext; import org.w3c.dom.Document; @@ -41,11 +45,17 @@ private static final Logger log = Logger.getLogger(ProjectsDescriptor.class); /** - * project id --> Corresponding project descriptor object + * Project id --> Corresponding project descriptor object */ private Map<String, ProjectDescriptor> projects; - private DelegateContext context; + /** + * Permissions descriptor --> Corresponding global context + */ + private Map<String, DelegateContext> contexts; + /** + * Project id + permissions descriptor --> Corresponding project context + */ private Map<String, DelegateContext> projectsContexts; private OutsidePropertiesMap opm; @@ -65,10 +75,12 @@ */ public ProjectsDescriptor(XmlInputFactory isf, String portalName) { projects = new TreeMap<String, ProjectDescriptor>(); - context = new DelegateContext(); projectWithErrorsDescriptors = new HashSet<String>(); - projectsContexts = new TreeMap<String, DelegateContext>(); + projectsContexts = Collections.synchronizedMap( + new TreeMap<String, DelegateContext>()); + contexts = Collections.synchronizedMap( + new HashMap<String, DelegateContext>()); try { DomToXmlTransformer xht = new DomToXmlTransformer(); @@ -83,7 +95,7 @@ unmarshallProjects(node, isf, xht, portalName); - fillContexts(); + fillContext(new NullPermissionsChecker()); } catch (Exception e) { log.warn("Projects descriptor contructor: "+e); } @@ -121,19 +133,21 @@ PropertiesHandlerStack phs = new PropertiesHandlerStack(); phs.addHandler(new PropertiesHandlerDefault()); phs.addHandler(new PropertiesHandler() { - public void fillContextShallow(PropertiesMap properties, DelegateContext context) { + public void fillContext(PropertiesMap properties, DelegateContext context, + PermissionsChecker pc) { if (properties.get("id").getFirstValue().equals("wiki")) { context.next("useForgeWiki"); } else context.next("normalPage"); } - public void fillContext(PropertiesMap properties, DelegateContext context) { - - } - public void processNode(ElementDescriptor thisElement, Node node) { } + + public void collect(PropertiesMap properties, Object data, + PermissionsChecker pc) { + + } }); return phs; @@ -158,19 +172,35 @@ return opm; } - private void fillContexts() { + private DelegateContext fillContext(PermissionsChecker pc) { + String permDesc = pc.getPermissionsDescriptor(); + + DelegateContext context = new DelegateContext(); + for (Iterator iter = projects.keySet().iterator(); iter.hasNext();) { + String projectId = (String) iter.next(); + + ProjectDescriptor pd = (ProjectDescriptor) projects.get(projectId); + + /// Checking if we can read data from this project. + if (!pd.permissionAllowed(pc)) continue; + DelegateContext projectContext = context.next(PROJECTS_CTX_KEY); - String projectId = (String) iter.next(); - ((ProjectDescriptor) projects.get(projectId)).fillContext(projectContext); - projectsContexts.put(projectId, projectContext); + pd.fillContext(projectContext, pc); + projectsContexts.put( + ElementsDescriptor.getContextMapKey(projectId, permDesc), + projectContext); } for (int i=0; i<OUTSIDE_PROPERTIES.length; i++) { opm.getElementsDescriptor((String) OUTSIDE_PROPERTIES[i][1]).fillContext( - context, (String) OUTSIDE_PROPERTIES[i][2]); + context, (String) OUTSIDE_PROPERTIES[i][2], pc); } + + contexts.put(permDesc, context); + + return context; } /** @@ -210,11 +240,12 @@ /** * Searches for the given string in project's names and descriptions. + * @param pc Permissions checker to use. * @param searchFor String to search for. * @return A context containing under the key "projects" contexts of * found projects. */ - public DelegateContext search(String searchFor) { + public DelegateContext search(PermissionsChecker pc, String searchFor) { boolean found = false; DelegateContext context = new DelegateContext(); @@ -224,13 +255,15 @@ String projectId = (String) iter.next(); ProjectDescriptor project = (ProjectDescriptor) projects.get(projectId); + if (!project.permissionAllowed(pc)) continue; + if ((SearchTools.searchInString(project.getProperty("name"), tokens) || (SearchTools.searchInString(project.getProperty("description"), tokens)) || (SearchTools.searchInString(project.getProperty("companyname"), tokens)))) { found = true; - project.fillContextShallow(context.next("projects")); + project.fillContextShallow(context.next("projects"), pc); } } @@ -239,46 +272,83 @@ /** * Gets a descriptor of a specified project. + * @param pc Permissions checker to use. * @param projectId Id of the project for which to get the descriptor. - * @return A descriptor of the given project. + * @return A descriptor of the given project or null if access to the project is not + * allowed. */ - public ProjectDescriptor getProjectDescriptor(String projectId) { - return (ProjectDescriptor) projects.get(projectId); + public ProjectDescriptor getProjectDescriptor(PermissionsChecker pc, String projectId) { + ProjectDescriptor pd = (ProjectDescriptor) projects.get(projectId); + + // Checking if this project can be read. + if (!pd.permissionAllowed(pc)) + return null; + + return pd; } + /** - * Gets ids of all projects. - * @return A set of ids of all projects. + * Transforms the given permissions checker for internal use. If a user, who's + * permissions are represented by <code>pc</code>, isn't a project manager, then + * he won't be able to get customized contexts, and a <code>NullPermissionsChecker</code> + * is returned. Otherwise, <code>pc</code> is returned. + * + * @param pc Permissions checker to transform. + * @return A new null permissions checker or the given permissions checker. */ - public Set<String> getProjectsIds() { - return projects.keySet(); + private PermissionsChecker transformPermissionsChecker(PermissionsChecker pc) { + if (!pc.hasPermission("project-manager")) + return new NullPermissionsChecker(); + + return pc; } /** * Gets a context holding information about all projects. + * @param pc Permissions checker to use. * @return A context holding information about all projects. */ - public DelegateContext getContext() { + public DelegateContext getContext(PermissionsChecker pc) { + PermissionsChecker pcToUse = transformPermissionsChecker(pc); + DelegateContext context = contexts.get(pcToUse.getPermissionsDescriptor()); + + // If no context for the given permissions set is yet defined, we create a new one + // and return it. + if (context == null) { + return fillContext(pcToUse); + } + return context; } /** * Gets a context for a project with the given id. + * @param pc Permissions checker to use. * @param id Id of the project for which to get the context. * @return A context holding information about a specified project. */ - public DelegateContext getProjectContext(String id) { - return (DelegateContext) projectsContexts.get(id); + public DelegateContext getProjectContext(PermissionsChecker pc, String id) { + PermissionsChecker pcToUse = transformPermissionsChecker(pc); + String permDesc = pcToUse.getPermissionsDescriptor(); + + if (contexts.get(permDesc) == null) + fillContext(pcToUse); + + return (DelegateContext) projectsContexts.get( + ElementsDescriptor.getContextMapKey(id, permDesc)); } /** * Gets a context of an outside property of projects. + * @param pc Permissions checker to use. * @param propertyName Name of the outside property - * @param id - * @return + * @param id Id of the element for which to get the context. + * @return A context desciribing an outside property with the given id. */ - public DelegateContext getOutsidePropertyContext(String propertyName, String id) { - return opm.getContextForElement(propertyName, id); + public DelegateContext getOutsidePropertyContext(PermissionsChecker pc, + String propertyName, String id) { + return opm.getContextForElement(propertyName, id, pc); } /** Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/ProjectsHelper.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -12,6 +12,7 @@ import java.util.Map; import org.jboss.forge.common.ForgeHelper; +import org.jboss.forge.common.projects.permissions.RenderRequestPermissionsChecker; import org.jboss.portlet.JBossRenderRequest; /** @@ -45,8 +46,7 @@ /** * <code>projectsObjects</code> - portalName -> Projects object */ - private Map<String, Projects> projectsObjects; - private ForgeHelper forgeHelper; + private static Map<String, Projects> projectsObjects; protected final static String PAGES_DESC = "pages.xml"; protected final static String JEMS_DESC = "jems.xml"; @@ -65,9 +65,8 @@ public final static String BLOG_DIR = "blog"; public final static String FREEZONE_DIR = "freezone"; - public ProjectsHelper() { + static { projectsObjects = new HashMap<String, Projects>(); - forgeHelper = new ForgeHelper(); } /** @@ -77,11 +76,11 @@ * Name of the portal. * @return An appropriate instance of class Projects. */ - public synchronized Projects getProjects(String portalName) { + public static synchronized Projects getProjects(String portalName) { Projects projects = (Projects) projectsObjects.get(portalName); if (projects == null) { String suffix = "/" + portalName + "/" + MEMBERS_DIR; - projects = new Projects(forgeHelper.getContentManager(suffix), + projects = new Projects(ForgeHelper.getContentManager(suffix), portalName); projectsObjects.put(portalName, projects); } @@ -116,11 +115,15 @@ String projectId = ForgeHelper.getRequestParameter(request, PROJECT_URL_PARAM); - if ((withDefault) && (projectId == null)) + if ((withDefault) && (projectId == null)) { projectId = DEFAULT_PROJECT; - - if ((!withDefault) && (DEFAULT_PROJECT.equals(projectId))) + } else if ((!withDefault) && (DEFAULT_PROJECT.equals(projectId))) { projectId = null; + } else if (getProjects(ForgeHelper.getPortalName(request)).getProjectContext( + new RenderRequestPermissionsChecker(request), projectId) == null) { + // No project context --> project does not exist. + projectId = null; + } return projectId; } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandler.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandler.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandler.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -8,6 +8,7 @@ *****************************************/ package org.jboss.forge.common.projects.elements; +import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.portal.common.context.DelegateContext; /** @@ -25,6 +26,9 @@ * Bindingis to use. * @param context * Context to fill. + * @param pc + * Permissions checker to use. */ - public void fillContext(BindingsMap bindings, DelegateContext context); + public void fillContext(BindingsMap bindings, DelegateContext context, + PermissionsChecker pc); } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandlerEmpty.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandlerEmpty.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandlerEmpty.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -8,6 +8,7 @@ *****************************************/ package org.jboss.forge.common.projects.elements; +import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.portal.common.context.DelegateContext; /** @@ -15,7 +16,8 @@ * @author adamw */ public class BindingsHandlerEmpty implements BindingsHandler { - public void fillContext(BindingsMap bindings, DelegateContext context) { + public void fillContext(BindingsMap bindings, DelegateContext context, + PermissionsChecker pc) { } } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandlerIterSingleKey.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandlerIterSingleKey.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandlerIterSingleKey.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -10,6 +10,7 @@ import java.util.Iterator; +import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.portal.common.context.DelegateContext; /** @@ -34,10 +35,16 @@ this.contextKey = contextKey; } - public void fillContext(BindingsMap bindings, DelegateContext context) { + public void fillContext(BindingsMap bindings, DelegateContext context, + PermissionsChecker pc) { for (Iterator iter = bindings.get(key).iterator(); iter.hasNext();) { ElementDescriptor ed = (ElementDescriptor) iter.next(); - ed.fillContextShallow(context.next(contextKey)); + + // Checking permissions. + if (!ed.permissionAllowed(pc)) + continue; + + ed.fillContextShallow(context.next(contextKey), pc); } } } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandlerStack.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandlerStack.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/BindingsHandlerStack.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -12,6 +12,7 @@ import java.util.Iterator; import java.util.List; +import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.portal.common.context.DelegateContext; /** @@ -33,9 +34,10 @@ handlers.add(handler); } - public void fillContext(BindingsMap bindings, DelegateContext context) { + public void fillContext(BindingsMap bindings, DelegateContext context, + PermissionsChecker pc) { for (Iterator iter = handlers.iterator(); iter.hasNext();) ((BindingsHandler) iter.next()).fillContext(bindings, - context); + context, pc); } } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementDescriptor.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementDescriptor.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementDescriptor.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -10,6 +10,7 @@ import org.jboss.forge.common.projects.AbstractDescriptor; import org.jboss.forge.common.projects.DomToXmlTransformer; +import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.portal.common.context.DelegateContext; import org.w3c.dom.Node; import org.w3c.dom.NodeList; @@ -26,6 +27,10 @@ * @author adamw */ public class ElementDescriptor extends AbstractDescriptor { + // Special properties + private final static String PROP_ID = "id"; + private final static String PROP_PERM = "permission"; + private String id; private PropertiesHandler ph; private PropertiesMap properties; @@ -87,25 +92,41 @@ * * @param context * Context to fill. + * @param pc + * Permissions checker to use. */ - public void fillContextShallow(DelegateContext context) { - ph.fillContextShallow(properties, context); + public void fillContextShallow(DelegateContext context, + PermissionsChecker pc) { + ph.fillContext(properties, context, pc); } + + /** + * Collects data from this descriptor, passing to the properties handler + * the given object, which can be used to store the collected data. + * + * @param data Object to pass to the properties handler's collect method. + * @param pc + * Permissions checker to use. + */ + public void collect(Object data, PermissionsChecker pc) { + ph.collect(properties, data, pc); + } /** * Fills the given context with this element's information. * * @param context * Context to fill. + * @param pc + * Permissions checker to use. */ - public void fillContext(DelegateContext context) { - fillContextShallow(context); - ph.fillContext(properties, context); + public void fillContext(DelegateContext context, PermissionsChecker pc) { + fillContextShallow(context, pc); - bhStack.fillContext(bindings, context); + bhStack.fillContext(bindings, context, pc); - epm.getBindingsHandlersStack().fillContext(bindings, context); - opm.getBindingsHandlersStack().fillContext(bindings, context); + epm.getBindingsHandlersStack().fillContext(bindings, context, pc); + opm.getBindingsHandlersStack().fillContext(bindings, context, pc); } private void unmarshallElement(Node root, DomToXmlTransformer xht) { @@ -117,7 +138,7 @@ if (n.getNodeType() == Node.ELEMENT_NODE) { String nodeName = n.getNodeName(); - if (nodeName.equals("id")) + if (nodeName.equals(PROP_ID)) id = unmarshallText(n); // Adding the corresponding property. @@ -191,4 +212,26 @@ public String getProperty(String propertyName) { return properties.get(propertyName).getFirstValue(); } + + /** + * Checks if data from this element descriptor can be read by a user who's + * permissions can be checked using the provided permissions checker. + * @param pc Permissions checker with which permissions can be checked. + * @return True iff permission to read data from this element descriptor + * is allowed. + */ + public boolean permissionAllowed(PermissionsChecker pc) { + // No required permissions defined - returning true. + if (!properties.hasValues(PROP_PERM)) + return true; + + // Checking if any of the required permissions are satisfied. + for (String permission : properties.get(PROP_PERM).getAllValues()) { + if (pc.hasPermission(permission)) { + return true; + } + } + + return false; + } } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementsDescriptor.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementsDescriptor.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/ElementsDescriptor.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -9,6 +9,7 @@ package org.jboss.forge.common.projects.elements; import java.io.IOException; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -18,6 +19,7 @@ import org.jboss.forge.common.projects.AbstractDescriptor; import org.jboss.forge.common.projects.XmlInputFactory; import org.jboss.forge.common.projects.DomToXmlTransformer; +import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.portal.common.context.DelegateContext; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -35,8 +37,10 @@ private Map<String, DelegateContext> contexts; private ElementsDescriptor() { - elements = new LinkedHashMap<String, ElementDescriptor>(); - contexts = new HashMap<String, DelegateContext>(); + elements = Collections.synchronizedMap( + new LinkedHashMap<String, ElementDescriptor>()); + contexts = Collections.synchronizedMap( + new HashMap<String, DelegateContext>()); } /** @@ -194,18 +198,39 @@ * Name undeer which consecutive elements context's should be * placed. */ - public void fillContext(DelegateContext context, String name) { + public void fillContext(DelegateContext context, String name, PermissionsChecker pc) { for (Iterator iter = elements.keySet().iterator(); iter.hasNext();) { ElementDescriptor ed = (ElementDescriptor) elements .get(iter.next()); + + // Checking if we can read data from this elements descriptor. + if (!ed.permissionAllowed(pc)) continue; + DelegateContext nextContext = context.next(name); - ed.fillContext(nextContext); - + ed.fillContext(nextContext, pc); + // Storing the context for later usage. contexts.put(ed.getId(), nextContext); } } + + /** + * Collects data from elements contained in this descriptor, passing to + * the properties handler the given object, which can be used to store + * the collected data. + * + * @param data Object to pass to the properties handler's collect method + * of each remembered element. + */ + public void collect(Object data, PermissionsChecker pc) { + for (ElementDescriptor ed : elements.values()) { + if (!ed.permissionAllowed(pc)) continue; + + ed.collect(data, pc); + } + } + /** * Gets a context describing an element with the given id. * @@ -213,12 +238,16 @@ * Id for which to get the context. * @return A context describing an element with the given id. */ - public DelegateContext getContextForElement(String id) { - DelegateContext context = (DelegateContext) contexts.get(id); + public DelegateContext getContextForElement(String id, PermissionsChecker pc) { + String mapKey = getContextMapKey(id, pc); + + DelegateContext context = (DelegateContext) contexts.get(mapKey); if (context == null) { context = new DelegateContext(); - ((ElementDescriptor) elements.get(id)).fillContext(context); - contexts.put(id, context); + ElementDescriptor ed = (ElementDescriptor) elements.get(mapKey); + + ed.fillContext(context, pc); + contexts.put(mapKey, context); } return context; @@ -267,4 +296,25 @@ ((ElementDescriptor) elements.get(iter.next())) .addBindingsHandler(bh); } + + /** + * Gets a context map key for a given element id and permissions descriptor. + * @param id Id of an element. + * @param permDesc Permissions checker descriptor. + * @return A string (map key) using both <code>id</code> and <code>permDesc</code>. + */ + public static String getContextMapKey(String id, String permDesc) { + return id + "/" + permDesc; + } + + /** + * Gets a context map key for a given element id and permissions descriptor. + * @param id Id of an element. + * @param pc Permissions checker to get the descriptor from. + * @return A string (map key) using both <code>id</code> and + * <code>pc.getPermissionsDescriptor()</code>. + */ + public static String getContextMapKey(String id, PermissionsChecker pc) { + return getContextMapKey(id, pc.getPermissionsDescriptor()); + } } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/OutsidePropertiesMap.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/OutsidePropertiesMap.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/OutsidePropertiesMap.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -8,6 +8,7 @@ *****************************************/ package org.jboss.forge.common.projects.elements; +import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.portal.common.context.DelegateContext; /** @@ -85,8 +86,8 @@ * property and has a given id. */ public DelegateContext getContextForElement(String propertyName, - String elementId) { + String elementId, PermissionsChecker pc) { return getElementsDescriptor(propertyName).getContextForElement( - elementId); + elementId, pc); } } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesElementValue.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesElementValue.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesElementValue.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -79,7 +79,7 @@ * * @return A list of held values or null, if no values are held. */ - public List getAllValues() { + public List<String> getAllValues() { if (single != null) { multi = new ArrayList<String>(); multi.add(single); Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesHandler.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesHandler.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesHandler.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -8,6 +8,7 @@ *****************************************/ package org.jboss.forge.common.projects.elements; +import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.portal.common.context.DelegateContext; import org.w3c.dom.Node; @@ -15,33 +16,42 @@ * This interface should be implemented by classes which map properties of an * element read from a XML file into contexts which are later passed to JSP * pages. + * * @author adamw */ public interface PropertiesHandler { - /** - * Fills the given context based on information held in the properties map, - * without recursively calling fillContextXXX() for depended/ bound/ - * child elements. - * - * @param properties - * Properties to use. - * @param context - * Context to fill. - */ - public void fillContextShallow(PropertiesMap properties, - DelegateContext context); /** - * Fills the given context based on information held in the properties map. - * - * @param properties - * Properties to use. - * @param context - * Context to fill. - */ - public void fillContext(PropertiesMap properties, DelegateContext context); - /** - * Performs actions after processing a new node (adding a new property). - * @param node A processed node. - */ - public void processNode(ElementDescriptor thisElement, Node node); + * Fills the given context based on information held in the properties map. + * + * @param properties + * Properties to use. + * @param context + * Context to fill. + * @param pc + * Permissions checker to use. + */ + public void fillContext(PropertiesMap properties, DelegateContext context, + PermissionsChecker pc); + + /** + * Collects and transforms data contained in the properties map into the + * supplied data object. + * + * @param properties + * Properties to read data from. + * @param data + * Generic data that can be used to store transformed data. + * @param pc + * Permissions checker to use. + */ + public void collect(PropertiesMap properties, Object data, + PermissionsChecker pc); + + /** + * Performs actions after processing a new node (adding a new property). + * + * @param node + * A processed node. + */ + public void processNode(ElementDescriptor thisElement, Node node); } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesHandlerDefault.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesHandlerDefault.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesHandlerDefault.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -8,6 +8,7 @@ *****************************************/ package org.jboss.forge.common.projects.elements; +import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.portal.common.context.DelegateContext; import org.w3c.dom.Node; @@ -17,18 +18,19 @@ * @author adamw */ public class PropertiesHandlerDefault implements PropertiesHandler { - public void fillContextShallow(PropertiesMap properties, - DelegateContext context) { + public void fillContext(PropertiesMap properties, + DelegateContext context, PermissionsChecker pc) { context.put("id", properties.get("id").getFirstValue()); context.put("name", properties.get("name").getFirstValue()); context.put("description", properties.get("description").getFirstValue()); } - - public void fillContext(PropertiesMap properties, DelegateContext context) { - } - public void processNode(ElementDescriptor thisElement, Node node) { } + + public void collect(PropertiesMap properties, Object data, + PermissionsChecker pc) { + + } } Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesHandlerMultiValue.java =================================================================== --- trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesHandlerMultiValue.java 2005-09-06 20:52:10 UTC (rev 1051) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/elements/PropertiesHandlerMultiValue.java 2005-09-07 12:15:47 UTC (rev 1052) @@ -10,6 +10,7 @@ import java.util.Iterator; +import org.jboss.forge.common.projects.permissions.PermissionsChecker; import org.jboss.portal.common.context.DelegateContext; import org.w3c.dom.Node; @@ -37,19 +38,19 @@ this.propertyName = propertyName; } - public void fillContextShallow(PropertiesMap properties, - DelegateContext context) { + public void fillContext(PropertiesMap properties, + DelegateContext context, PermissionsChecker pc) { PropertiesElementValue ev = properties.get(propertyName); for (Iterator iter = ev.getAllValues().iterator(); iter.hasNext();) context.next(parentName).put(childName, (String) iter.next()); } - - pu... [truncated message content] |