From: <jbo...@li...> - 2005-11-10 20:16:56
|
Author: adamw Date: 2005-11-10 15:16:39 -0500 (Thu, 10 Nov 2005) New Revision: 1551 Modified: trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/Projects.java trunk/forge/portal-extensions/forge-feeds/src/java/org/jboss/forge/feeds/FeedsDescriptor.java trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java Log: http://jira.jboss.com/jira/browse/JBLAB-408 : Shotoku feeds cntd 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-11-10 17:24:35 UTC (rev 1550) +++ trunk/forge/portal-extensions/forge-common/src/java/org/jboss/forge/common/projects/Projects.java 2005-11-10 20:16:39 UTC (rev 1551) @@ -137,7 +137,7 @@ } /** - * Gets the name of the project with the given id. + * Gets a link to the project with the given id. */ public String getProjectLink(String projectId) { return getProjectsDescriptor().getProjectLink(projectId); Modified: trunk/forge/portal-extensions/forge-feeds/src/java/org/jboss/forge/feeds/FeedsDescriptor.java =================================================================== --- trunk/forge/portal-extensions/forge-feeds/src/java/org/jboss/forge/feeds/FeedsDescriptor.java 2005-11-10 17:24:35 UTC (rev 1550) +++ trunk/forge/portal-extensions/forge-feeds/src/java/org/jboss/forge/feeds/FeedsDescriptor.java 2005-11-10 20:16:39 UTC (rev 1551) @@ -59,35 +59,44 @@ /** * Class which handles parsing feed descriptions, generates the feeds and * provides access to them. + * * @author adamw */ public class FeedsDescriptor { private static final Logger log = Logger.getLogger(FeedsDescriptor.class); - + /** * <code>FEEDS_DIRECTORY</code> - shotoku directory in which feed * definitions are stored. */ - protected final static String FEEDS_DIRECTORY = "feeds"; + protected final static String FEEDS_DIRECTORY = "feeds"; + /** * <code>FEEDS_NODE_ENDING</code> - node with names ending with this * string are parsed and feed definitons are read from them. */ - private final static String FEEDS_NODE_ENDING = "-feeds.xml"; - private final static String REM_FEED_TAG = "remote-feed"; - private final static String AGG_FEED_TAG = "aggregated-feed"; - private final static String SHO_FEED_TAG = "shotoku-feed"; - - private final static String SHOTOKU_CONFIG = "shotoku-config.properties"; - - private final static String ALL_TOKENS = "*"; - private final static String TOKENS_DELIMITER = ","; - - private final static String TYPE_PARAM = "${type}"; - private final static String PROJECT_PARAM = "${project}"; - - protected final static String FEEDS_FILE_PREFIX = "forge-feeds"; - + private final static String FEEDS_NODE_ENDING = "-feeds.xml"; + + private final static String REM_FEED_TAG = "remote-feed"; + + private final static String AGG_FEED_TAG = "aggregated-feed"; + + private final static String SHO_FEED_TAG = "shotoku-feed"; + + private final static String SHOTOKU_CONFIG = "shotoku-config.properties"; + + private final static String ALL_TOKENS = "*"; + + private final static String TOKENS_DELIMITER = ","; + + private final static String TYPE_PARAM = "${type}"; + + private final static String PROJECT_PARAM = "${project}"; + + private final static String PROJECT_NAME_PARAM = "${project-name}"; + + protected final static String FEEDS_FILE_PREFIX = "forge-feeds"; + static synchronized FeedsDescriptor getInstance(final String portalName, final String baseServerAddress) { FeedsDescriptor desc = (FeedsDescriptor) ForgeHelper @@ -102,54 +111,54 @@ return desc; } - + /** - * <code>feeds</code> - a map of ready feeds: - * feed name -> (feed type -> feed)). + * <code>feeds</code> - a map of ready feeds: feed name -> (feed type -> + * feed)). */ private Map<String, Map<String, Feed>> feeds; - + /** - * <code>feedGroups</code> - map: - * feed group display name -> set of feed names. + * <code>feedGroups</code> - map: feed group display name -> set of feed + * names. */ private Map<String, Set<String>> feedGroups; - + /** - * <code>feedDisplayNames</code> - map: feed name -> - * feed display name. + * <code>feedDisplayNames</code> - map: feed name -> feed display name. */ private Map<String, String> feedDisplayNames; - + private DelegateContext context; - + private String baseServerAddress; - + public FeedsDescriptor(String portalName, String baseServerAddress) { this.baseServerAddress = baseServerAddress; - - ContentManager cm = ContentManager.getContentManager(portalName - + "/" + FEEDS_DIRECTORY); - + + ContentManager cm = ContentManager.getContentManager(portalName + "/" + + FEEDS_DIRECTORY); + // Creating the maps that will hold the feeds. feeds = new HashMap<String, Map<String, Feed>>(); feedGroups = new LinkedHashMap<String, Set<String>>(); feedDisplayNames = new HashMap<String, String>(); - + // Preparing maps which will hold feed definitions. Map<String, Node> remoteFeedDefs = new HashMap<String, Node>(); Map<String, Node> aggregatedFeedDefs = new HashMap<String, Node>(); Map<String, Node> shotokuFeedDefs = new HashMap<String, Node>(); - + Map<String, Map<String, Node>> allFeedDefs = new HashMap<String, Map<String, Node>>(); - + allFeedDefs.put(REM_FEED_TAG, remoteFeedDefs); allFeedDefs.put(AGG_FEED_TAG, aggregatedFeedDefs); allFeedDefs.put(SHO_FEED_TAG, shotokuFeedDefs); - + // Looking for file containing feed definitons and filling the maps. - for (org.jboss.shotoku.Node feedNode : cm.getRootDirectory().getNodes().toList()) { + for (org.jboss.shotoku.Node feedNode : cm.getRootDirectory().getNodes() + .toList()) { if (feedNode.getName().endsWith(FEEDS_NODE_ENDING)) { try { addFeedDefinitions(portalName, allFeedDefs, feedNode); @@ -159,10 +168,10 @@ } } } - + // Firstly - the remote feeds. generateRemoteFeeds(portalName, remoteFeedDefs); - + // Then, shotoku feeds. Properties props = new Properties(); try { @@ -170,64 +179,91 @@ } catch (Exception e) { log.warn("Error loading shotoku feeds configuration.", e); } - + generateShotokuFeeds(portalName, shotokuFeedDefs, props); - + // After that, we can create the aggregated feeds. generateAggregatedFeeds(portalName, aggregatedFeedDefs); - + // Finally, filling the context. fillContext(); } - + private void addFeed(String name, String type, Feed feed) { Map<String, Feed> typesMap = feeds.get(name); if (typesMap == null) { typesMap = new HashMap<String, Feed>(); feeds.put(name, typesMap); } - + typesMap.put(type, feed); - } - - private String[] getProjectNames(String portalName, String projectLevelAttr) { + } + + private String[] getProjectsIds(String portalName, String projectLevelAttr) { if (projectLevelAttr != null) { - return ProjectsHelper.getProjects( - portalName).getProjectIds(new NullPermissionsChecker(), - ALL_TOKENS.equals(projectLevelAttr) ? - null : projectLevelAttr).toArray( - new String[0]); + return ProjectsHelper.getProjects(portalName).getProjectIds( + new NullPermissionsChecker(), + ALL_TOKENS.equals(projectLevelAttr) ? null + : projectLevelAttr).toArray(new String[0]); } else { return new String[] { "" }; } } - - private SearchParameter generateSearchParameter(Node n, Properties props, Set parametrized) - throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, - InvocationTargetException, NoSuchMethodException, ClassNotFoundException { + + private String getProjectName(String portalName, String projectId) { + return ProjectsHelper.getProjects(portalName).getProjectName(projectId); + } + + private String[] getTypes(String typesAttr) { + if (ALL_TOKENS.equals(typesAttr)) { + return FeedFactory.getAllFeedTypes(); + } else { + return typesAttr.split("[" + TOKENS_DELIMITER + "]"); + } + } + + private Map<String, String> replaceInMapValues(Map<String, String> map, + String replaceWhat, String replaceTo) { + for (String key : map.keySet()) { + map.put(key, map.get(key).replace(replaceWhat, replaceTo)); + } + + return map; + } + + private SearchParameter generateSearchParameter(Node n, Properties props, + Set parametrized, String portalName, String projectId) + throws IllegalArgumentException, SecurityException, + InstantiationException, IllegalAccessException, + InvocationTargetException, NoSuchMethodException, + ClassNotFoundException { String paramName = n.getNodeName(); String paramClass = props.getProperty(paramName); - + if (paramClass == null) - throw new RuntimeException("Unknown parameter name: " + paramName + "."); - + throw new RuntimeException("Unknown parameter name: " + paramName + + "."); + SearchParameter param; if (parametrized.contains(paramName)) { param = (SearchParameter) Class.forName(paramClass).getConstructor( - new Class[] { Map.class }).newInstance(new Object[] { - XmlTools.getMapFromNodeAttributes(n) }); + new Class[] { Map.class }).newInstance( + new Object[] { replaceInMapValues(replaceInMapValues( + XmlTools.getMapFromNodeAttributes(n), + PROJECT_PARAM, projectId), PROJECT_NAME_PARAM, + getProjectName(portalName, projectId)) }); } else { param = (SearchParameter) Class.forName(paramClass).newInstance(); } - + NodeList nodeList = n.getChildNodes(); - for (int i=0; i<nodeList.getLength(); i++) { + for (int i = 0; i < nodeList.getLength(); i++) { Node child = nodeList.item(i); - + if (child.getNodeType() == Node.ELEMENT_NODE) { - SearchParameter childParam = generateSearchParameter( - child, props, parametrized); - + SearchParameter childParam = generateSearchParameter(child, + props, parametrized, portalName, projectId); + Method[] methods = param.getClass().getMethods(); for (Method method : methods) { if ("add".equals(method.getName())) { @@ -237,129 +273,161 @@ } } } - + return param; } - - private void generateShotokuFeeds(String portalName, Map<String, Node> feedDefs, - Properties props) { - Set parametrized = new HashSet<String>( - Arrays.asList(props.getProperty("parametrized").split("[,]"))); - + + private void generateShotokuFeeds(String portalName, + Map<String, Node> feedDefs, Properties props) { + Set parametrized = new HashSet<String>(Arrays.asList(props.getProperty( + "parametrized").split("[,]"))); + for (String feedName : feedDefs.keySet()) { Node feedNode = feedDefs.get(feedName); - String templateAttr = XmlTools.getAttributeValue(feedNode, "template"); + String templateAttr = XmlTools.getAttributeValue(feedNode, + "template"); String prefixAttr = XmlTools.getAttributeValue(feedNode, "prefix"); String idAttr = XmlTools.getAttributeValue(feedNode, "id"); String typesAttr = XmlTools.getAttributeValue(feedNode, "type"); - - feedDisplayNames.put(feedName, - XmlTools.getAttributeValue(feedNode, "display-name")); - - ContentManager cm = ContentManager.getContentManager(idAttr, prefixAttr); - + String projectLevelAttr = XmlTools.getAttributeValue(feedNode, + "project-level"); + String displayNameAttr = XmlTools.getAttributeValue(feedNode, + "display-name"); + + ContentManager cm = ContentManager.getContentManager(idAttr, + prefixAttr); + // Generating the type of feeds that have been requested. - String[] types; - if (ALL_TOKENS.equals(typesAttr)) { - types = FeedFactory.getAllFeedTypes(); - } else { - types = typesAttr.split("[" + TOKENS_DELIMITER + "]"); - } - - Search search; - try { - search = (Search) generateSearchParameter(feedNode, props, - parametrized); - } catch (Exception e) { - log.warn("Error generating shotoku feed " + feedName + ".", e); - continue; - } - - org.jboss.shotoku.NodeList list = search.perform(cm); - - - VelocityContext vc = new VelocityContext(); - vc.put("title", XmlTools.getAttributeValue(feedNode, "title")); - vc.put("description", XmlTools.getAttributeValue(feedNode, "description")); - vc.put("author", XmlTools.getAttributeValue(feedNode, "author")); - vc.put("dateFormat", new SimpleDateFormat("MM/dd/yy")); - vc.put("pubDate", Calendar.getInstance().getTime()); - vc.put("linkBase", - XmlTools.getAttributeValue(feedNode, "link-base") + prefixAttr + "/"); - - for (String type : types) { - String template = templateAttr.replace(TYPE_PARAM, type); - - Feed newFeed = FeedFactory.getNewFeed(type); - try { - vc.put("link", generateFeedLink(true, feedName, type)); - - Writer w = newFeed.getWriter(); - list.mergeWithTemplate(cm, template, "nodes", vc, w); - w.flush(); - w.close(); - - addFeed(feedName, type, newFeed); - } catch (Exception e) { - log.warn("Cannot merge template " + template + " for " + feedName + ".", e); + String[] types = getTypes(typesAttr); + + // Generating the projects for which the feeds have been requested, + // if any. + String[] projects = getProjectsIds(portalName, projectLevelAttr); + + Map<String, String> attributes = XmlTools + .getMapFromNodeAttributes(feedNode); + + VelocityContext vc = new VelocityContext(attributes); + + String dateFormat = attributes.get("dateFormat"); + vc.put("dateFormat", new SimpleDateFormat( + dateFormat == null ? "MM/dd/yy" : dateFormat)); + vc.put("now", Calendar.getInstance().getTime()); + + for (String project : projects) { + String feedNameReplaced = feedName.replace(PROJECT_PARAM, + project); + + NodeList feedNodeChildren = feedNode.getChildNodes(); + for (int i = 0; i < feedNodeChildren.getLength(); i++) { + Node searchNode = feedNodeChildren.item(i); + if ("search".equals(searchNode.getNodeName())) { + try { + Search search = (Search) generateSearchParameter( + searchNode, props, parametrized, + portalName, project); + + org.jboss.shotoku.NodeList list = cm.search(search); + + String searchNameAttr = XmlTools.getAttributeValue( + searchNode, "name"); + if (searchNameAttr == null) + searchNameAttr = "nodes"; + + vc.put(searchNameAttr, list.toList()); + } catch (Exception e) { + log.warn("Error generating shotoku feed " + + feedName + ".", e); + continue; + } + } } + + for (String type : types) { + String template = templateAttr.replace(TYPE_PARAM, type); + + Feed newFeed = FeedFactory.getNewFeed(type); + try { + vc.put("link", generateFeedLink(true, feedNameReplaced, + type)); + + Writer w = newFeed.getWriter(); + cm.getVelocityEngine().mergeTemplate(template, vc, w); + w.flush(); + w.close(); + + addFeed(feedNameReplaced, type, newFeed); + } catch (Exception e) { + log.warn("Cannot merge template " + template + " for " + + feedName + ".", e); + continue; + } + } + + feedDisplayNames.put(feedNameReplaced, displayNameAttr.replace( + PROJECT_PARAM, project).replace(PROJECT_NAME_PARAM, + getProjectName(portalName, project))); } } } - - private void generateRemoteFeeds(String portalName, Map<String, Node> feedDefs) { + + private void generateRemoteFeeds(String portalName, + Map<String, Node> feedDefs) { for (String feedName : feedDefs.keySet()) { Node feedNode = feedDefs.get(feedName); - String addressAttr = XmlTools.getAttributeValue(feedNode, "address"); + String addressAttr = XmlTools + .getAttributeValue(feedNode, "address"); String typesAttr = XmlTools.getAttributeValue(feedNode, "type"); - String displayNameAttr = XmlTools.getAttributeValue(feedNode, "display-name"); - String projectLevelAttr = XmlTools.getAttributeValue(feedNode, "project-level"); - + String displayNameAttr = XmlTools.getAttributeValue(feedNode, + "display-name"); + String projectLevelAttr = XmlTools.getAttributeValue(feedNode, + "project-level"); + // Generating the type of feeds that have been requested. - String[] types; - if (ALL_TOKENS.equals(typesAttr)) { - types = FeedFactory.getAllFeedTypes(); - } else { - types = typesAttr.split("[" + TOKENS_DELIMITER + "]"); - } - + String[] types = getTypes(typesAttr); + // Generating the projects for which the feeds have been requested, // if any. - String[] projects = getProjectNames(portalName, projectLevelAttr); - + String[] projects = getProjectsIds(portalName, projectLevelAttr); + // For each type, project pair, generating a feed and storing it in // the feeds map. for (String project : projects) { - String feedNameReplaced = feedName.replace(PROJECT_PARAM, project); + String feedNameReplaced = feedName.replace(PROJECT_PARAM, + project); + for (String type : types) { - String address = addressAttr.replace(TYPE_PARAM, type). - replace(PROJECT_PARAM, project); - + String address = addressAttr.replace(TYPE_PARAM, type) + .replace(PROJECT_PARAM, project); + try { Feed newFeed = FeedFactory.getNewFeed(type); newFeed.generate(new URL(address)); addFeed(feedNameReplaced, type, newFeed); } catch (Exception e) { - log.warn("Can't add feeed " + address + " : " + type + log.warn("Can't add feeed " + address + " : " + type + ".", e); } } - - feedDisplayNames.put(feedNameReplaced, - displayNameAttr.replace(PROJECT_PARAM, project)); + + feedDisplayNames.put(feedNameReplaced, displayNameAttr.replace( + PROJECT_PARAM, project).replace(PROJECT_NAME_PARAM, + getProjectName(portalName, project))); } } } - - private void generateAggregatedFeeds(String portalName, Map<String, Node> feedDefs) { + + private void generateAggregatedFeeds(String portalName, + Map<String, Node> feedDefs) { // First building requirements of each feed - that is, whit which // feeds each aggregated feed is built. - Map<String, Set<String>> requirements = new HashMap<String, Set<String>>(); + Map<String, Set<String>> requirements = + new HashMap<String, Set<String>>(); Map<String, String[]> parameters = new HashMap<String, String[]>(); for (String feedName : feedDefs.keySet()) { Node n; - Node feedNode = feedDefs.get(feedName); + Node feedNode = feedDefs.get(feedName); NodeList nodes = feedNode.getChildNodes(); Set<String> feedRequirements = new HashSet<String>(); @@ -367,48 +435,50 @@ parameters.put(feedName, new String[] { XmlTools.getAttributeValue(feedNode, "title"), XmlTools.getAttributeValue(feedNode, "description"), - XmlTools.getAttributeValue(feedNode, "author") - }); - feedDisplayNames.put(feedName, - XmlTools.getAttributeValue(feedNode, "display-name")); - + XmlTools.getAttributeValue(feedNode, "author") }); + feedDisplayNames.put(feedName, XmlTools.getAttributeValue(feedNode, + "display-name")); + for (int i = 0; i < nodes.getLength(); i++) { n = nodes.item(i); if ("include".equals(n.getNodeName())) { String nameAttr = XmlTools.getAttributeValue(n, "name"); - String projectLevelAttr = XmlTools.getAttributeValue(n, "project-level"); - - String[] projects = getProjectNames(portalName, projectLevelAttr); - + String projectLevelAttr = XmlTools.getAttributeValue(n, + "project-level"); + + String[] projects = getProjectsIds(portalName, + projectLevelAttr); + for (String project : projects) { - feedRequirements.add(nameAttr.replace(PROJECT_PARAM, project)); + feedRequirements.add(nameAttr.replace(PROJECT_PARAM, + project)); } } } } - + while (requirements.size() > 0) { int sizeBefore = requirements.size(); - - for (Iterator<String> iter = requirements.keySet().iterator(); - iter.hasNext();) { + + for (Iterator<String> iter = requirements.keySet().iterator(); iter + .hasNext();) { String feedName = iter.next(); Set<String> feedRequirements = requirements.get(feedName); String[] feedParameters = parameters.get(feedName); Set<String> types = null; - + // Checking if the all of this feed's requirements are met // and if so, of what types it can consist. boolean allRequirementsMet = true; for (String requirement : feedRequirements) { Map<String, Feed> feedTypes = feeds.get(requirement); - + if (feedTypes == null) { // Missing feed - cannot create the aggregated one. allRequirementsMet = false; break; } - + // Intersecting the types set with the types of the current // feed. if (types == null) { @@ -417,10 +487,10 @@ } else types.retainAll(feedTypes.keySet()); } - + if (!allRequirementsMet) continue; - + // Gathering the feed parts from which the new feed will be // composed. for (String type : types) { @@ -428,61 +498,68 @@ for (String requirement : feedRequirements) { requiredFeeds.add(feeds.get(requirement).get(type)); } - + Feed newFeed = FeedFactory.getNewFeed(type); try { newFeed.generate(requiredFeeds.toArray(new Feed[0]), feedParameters[0], feedParameters[1], - feedParameters[2], generateFeedLink(true, feedName, type)); + feedParameters[2], generateFeedLink(true, + feedName, type)); } catch (Exception e) { - log.warn("Can't add aggregated feed " + feedName + " : " + type - + ".", e); + log.warn("Can't add aggregated feed " + feedName + + " : " + type + ".", e); } - + addFeed(feedName, type, newFeed); } - + iter.remove(); } - + if (sizeBefore == requirements.size()) { - log.warn("Aggregation feed definitions cycle, or demanded " + - "feeds are not defined; unable to create feeds."); + log.warn("Aggregation feed definitions cycle, or demanded " + + "feeds are not defined; unable to create feeds."); return; } } } - - private String generateFeedLink(boolean full, String feedName, String feedType) { - return (full ? baseServerAddress : "") + "/feeds/" + feedName + "/" + feedType; + + private String generateFeedLink(boolean full, String feedName, + String feedType) { + return (full ? baseServerAddress : "") + "/feeds/" + feedName + "/" + + feedType; } - + private void fillContext() { String[] allFeedTypes = FeedFactory.getAllFeedTypes(); - + context = new DelegateContext(); for (String feedGroup : feedGroups.keySet()) { Set<String> feedsInGroup = feedGroups.get(feedGroup); - + if (feedsInGroup.size() > 0) { DelegateContext groupContext = context.next("groups"); groupContext.put("name", feedGroup); - + for (String feedName : feedsInGroup) { Map<String, Feed> feedTypes = feeds.get(feedName); - + if (feedTypes != null) { - DelegateContext feedContext = groupContext.next("feeds"); - feedContext.put("name", feedDisplayNames.get(feedName)); - + DelegateContext feedContext = groupContext + .next("feeds"); + feedContext.put("name", + feedDisplayNames.get(feedName)); + Set availableTypes = feedTypes.keySet(); for (String feedType : allFeedTypes) { - DelegateContext typeContext = feedContext.next("types"); - + DelegateContext typeContext = feedContext + .next("types"); + if (availableTypes.contains(feedType)) { typeContext.next("feed"); typeContext.put("name", feedType); - typeContext.put("link", generateFeedLink(false, feedName, feedType)); + typeContext.put("link", generateFeedLink(false, + feedName, feedType)); } } } @@ -490,32 +567,31 @@ } } } - - private void addFeedNamesToGroup(String portalName, Set<String> feedGroup, + + private void addFeedNamesToGroup(String portalName, Set<String> feedGroup, String feedName, Node node) { - String projectLevelAttr = XmlTools.getAttributeValue(node, + String projectLevelAttr = XmlTools.getAttributeValue(node, "project-level"); - - String[] projects = getProjectNames(portalName, projectLevelAttr); - + + String[] projects = getProjectsIds(portalName, projectLevelAttr); + for (String project : projects) { feedGroup.add(feedName.replace(PROJECT_PARAM, project)); } } - - private void addFeedDefinitions( - String portalName, + + private void addFeedDefinitions(String portalName, Map<String, Map<String, Node>> feedDefinitions, org.jboss.shotoku.Node node) throws SAXException, IOException { DOMParser parser = new DOMParser(); parser.parse(new InputSource(node.getContentInputStream())); Node root = parser.getDocument().getDocumentElement(); - + Node n; NodeList nodes = root.getChildNodes(); - + Set<String> feedGroup = new LinkedHashSet<String>(); - feedGroups.put(XmlTools.getAttributeValue(root, "display-name"), + feedGroups.put(XmlTools.getAttributeValue(root, "display-name"), feedGroup); for (int i = 0; i < nodes.getLength(); i++) { @@ -523,19 +599,19 @@ if (feedDefinitions.get(n.getNodeName()) != null) { String feedName = XmlTools.getAttributeValue(n, "name"); addFeedNamesToGroup(portalName, feedGroup, feedName, n); - feedDefinitions.get(n.getNodeName()).put( - feedName, n); + feedDefinitions.get(n.getNodeName()).put(feedName, n); } } } - + public Feed getFeed(String name, String type) { Map<String, Feed> feedTypes = feeds.get(name); - if (feedTypes == null) return null; - + if (feedTypes == null) + return null; + return feedTypes.get(type); } - + public DelegateContext getContext() { return context; } Modified: trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java =================================================================== --- trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java 2005-11-10 17:24:35 UTC (rev 1550) +++ trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java 2005-11-10 20:16:39 UTC (rev 1551) @@ -1,6 +1,5 @@ package org.jboss.forge.projects.freezone; -import java.io.IOException; import java.util.ArrayList; import java.util.List; Modified: trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java =================================================================== --- trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java 2005-11-10 17:24:35 UTC (rev 1550) +++ trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java 2005-11-10 20:16:39 UTC (rev 1551) @@ -22,23 +22,15 @@ package org.jboss.forge.projects.freezone; import java.io.IOException; -import java.util.ArrayList; import java.util.List; -import javax.portlet.ActionRequest; -import javax.portlet.ActionResponse; import javax.portlet.PortletException; import javax.portlet.PortletSecurityException; -import javax.portlet.RenderRequest; -import javax.portlet.RenderResponse; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; import org.jboss.forge.common.ForgeHelper; import org.jboss.forge.common.portlet.JBossLabsPortlet; import org.jboss.forge.common.projects.ProjectsHelper; import org.jboss.forge.common.projects.permissions.ActionRequestPermissionsChecker; -import org.jboss.logging.Logger; import org.jboss.portal.core.CoreConstants; import org.jboss.portlet.JBossActionRequest; import org.jboss.portlet.JBossActionResponse; @@ -47,12 +39,7 @@ import org.jboss.shotoku.ContentManager; import org.jboss.shotoku.Node; import org.jboss.shotoku.aop.Inject; -import org.jboss.shotoku.aop.NodeInject; -import org.jboss.shotoku.exceptions.RepositoryException; import org.jboss.shotoku.exceptions.ResourceDoesNotExist; -import org.w3c.dom.Document; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; /** * A portlet for a project freezone. @@ -71,8 +58,6 @@ private final static String PATH_PARAM = "path"; - private Logger log = Logger.getLogger(this.getClass()); - @Inject private ContentManager cm; @@ -210,6 +195,7 @@ } } + @SuppressWarnings("unchecked") @Override protected boolean isAllowed(JBossRenderRequest request, JBossRenderResponse response) { @@ -221,6 +207,7 @@ return (request.getUser() != null) || (!loggedInOnly.contains(cmsPath)); } + @SuppressWarnings("unchecked") @Override public void init() throws PortletException { // ConDescriptor desc = (ConDescriptor) Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java 2005-11-10 17:24:35 UTC (rev 1550) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/ContentManager.java 2005-11-10 20:16:39 UTC (rev 1551) @@ -31,6 +31,7 @@ import org.apache.xerces.parsers.DOMParser; import org.jboss.shotoku.exceptions.ResourceDoesNotExist; import org.jboss.shotoku.exceptions.RepositoryException; +import org.jboss.shotoku.search.Search; import org.w3c.dom.Document; import org.xml.sax.InputSource; @@ -88,6 +89,17 @@ throws ResourceDoesNotExist, RepositoryException; /** + * Performs the given search in this content manager. + * + * @param search + * Search to perform. + * @return A node list that is the result of the search. + */ + public NodeList search(Search search) { + return search.perform(this); + } + + /** * Gets a velocity engine, initialized with default properties, as defined * in velocity.properties in shotoku-base jar. Additionaly, the shotoku * resource loader will be set to read templates from this content manager Modified: trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java =================================================================== --- trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java 2005-11-10 17:24:35 UTC (rev 1550) +++ trunk/forge/portal-extensions/shotoku/shotoku-base/src/java/org/jboss/shotoku/NodeList.java 2005-11-10 20:16:39 UTC (rev 1551) @@ -113,12 +113,29 @@ } } + /** + * @deprecated + * @param cm + * @param templateName + * @param nodesParameter + * @param w + * @throws RepositoryException + */ public void mergeWithTemplate(ContentManager cm, String templateName, String nodesParameter, Writer w) throws RepositoryException { mergeWithTemplate(cm, templateName, nodesParameter, new VelocityContext(), w); } + /** + * @deprecated + * @param cm + * @param templateName + * @param nodesParameter + * @param context + * @param w + * @throws RepositoryException + */ public void mergeWithTemplate(ContentManager cm, String templateName, String nodesParameter, VelocityContext context, Writer w) throws RepositoryException { |