From 4532447619c5e17fa90a3dceb075c2ce24e13db2 Mon Sep 17 00:00:00 2001 From: jensp Date: Tue, 5 Aug 2014 13:10:47 +0000 Subject: [PATCH] Fixed loader problem in ccm-rssfeed git-svn-id: https://svn.libreccm.org/ccm/trunk@2788 8810af33-2d31-482b-a856-94f89814c4df --- .../src/com/arsdigita/rssfeed/Feed.java | 45 ++- .../src/com/arsdigita/rssfeed/Loader.java | 75 ++-- .../src/com/arsdigita/rssfeed/RSSService.java | 330 +++++++++--------- 3 files changed, 225 insertions(+), 225 deletions(-) diff --git a/ccm-rssfeed/src/com/arsdigita/rssfeed/Feed.java b/ccm-rssfeed/src/com/arsdigita/rssfeed/Feed.java index 84aaaa756..94c849b93 100755 --- a/ccm-rssfeed/src/com/arsdigita/rssfeed/Feed.java +++ b/ccm-rssfeed/src/com/arsdigita/rssfeed/Feed.java @@ -15,9 +15,9 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - package com.arsdigita.rssfeed; +import com.arsdigita.dispatcher.DispatcherHelper; import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.kernel.ACSObject; import com.arsdigita.persistence.DataObject; @@ -28,15 +28,15 @@ import com.arsdigita.persistence.SessionManager; import com.arsdigita.persistence.Session; import com.arsdigita.persistence.DataCollection; - /** * Domain object for an RSS channel. + * * @author Simon Buckle (sbuckle@arsdigita.com) */ public class Feed extends ACSObject { public static final String BASE_DATA_OBJECT_TYPE - = "com.arsdigita.rssfeed.Feed"; + = "com.arsdigita.rssfeed.Feed"; // Attributes public static final String TITLE = "title"; @@ -53,7 +53,7 @@ public class Feed extends ACSObject { /** * Constructor. - * + * * @param id */ public Feed(BigDecimal id) @@ -63,6 +63,7 @@ public class Feed extends ACSObject { /** * Constructor + * * @param obj */ public Feed(DataObject obj) { @@ -71,6 +72,7 @@ public class Feed extends ACSObject { /** * Constructor + * * @param oid */ public Feed(OID oid) @@ -79,12 +81,13 @@ public class Feed extends ACSObject { } /** - * + * * @param url * @param title * @param desc * @param provider - * @return + * + * @return */ public static Feed create(String url, String title, @@ -101,10 +104,12 @@ public class Feed extends ACSObject { } /** - * + * * @param id + * * @return - * @throws DataObjectNotFoundException + * + * @throws DataObjectNotFoundException */ public static Feed retrieve(BigDecimal id) throws DataObjectNotFoundException { @@ -123,15 +128,16 @@ public class Feed extends ACSObject { throw new DataObjectNotFoundException("cannot find feed " + id); } - /** - * + * * @param url + * * @return - * @throws DataObjectNotFoundException + * + * @throws DataObjectNotFoundException */ public static Feed retrieve(String url) - throws DataObjectNotFoundException { + throws DataObjectNotFoundException { Session session = SessionManager.getSession(); DataCollection feed = session.retrieve(BASE_DATA_OBJECT_TYPE); @@ -148,9 +154,9 @@ public class Feed extends ACSObject { } /** - * - * - * @return + * + * + * @return */ public static FeedCollection retrieveAll() { Session session = SessionManager.getSession(); @@ -176,7 +182,7 @@ public class Feed extends ACSObject { } public String getTitle() { - return (String)get(TITLE); + return (String) get(TITLE); } /* @@ -187,7 +193,7 @@ public class Feed extends ACSObject { } public String getURL() { - return (String)get(URL); + return (String) get(URL); } /* @@ -198,7 +204,7 @@ public class Feed extends ACSObject { } public String getDescription() { - return (String)get(DESCRIPTION); + return (String) get(DESCRIPTION); } public void setProvider(boolean provider) { @@ -206,6 +212,7 @@ public class Feed extends ACSObject { } public boolean isProvider() { - return ((Boolean)get(IS_PROVIDER)).booleanValue(); + return ((Boolean) get(IS_PROVIDER)).booleanValue(); } + } diff --git a/ccm-rssfeed/src/com/arsdigita/rssfeed/Loader.java b/ccm-rssfeed/src/com/arsdigita/rssfeed/Loader.java index e2263c745..4b32f809e 100755 --- a/ccm-rssfeed/src/com/arsdigita/rssfeed/Loader.java +++ b/ccm-rssfeed/src/com/arsdigita/rssfeed/Loader.java @@ -15,7 +15,6 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - package com.arsdigita.rssfeed; import com.arsdigita.domain.DataObjectNotFoundException; @@ -28,12 +27,13 @@ import com.arsdigita.rssfeed.portlet.WorkspaceDirectoryPortlet; import com.arsdigita.web.Application; import com.arsdigita.web.ApplicationType; import com.arsdigita.web.URL; +import com.arsdigita.web.Web; import org.apache.log4j.Logger; /** - * Executes nonrecurring at install time and loads (installs and initializes) - * the ccm-rssfeed package persistently into database. + * Executes nonrecurring at install time and loads (installs and initializes) the ccm-rssfeed + * package persistently into database. * * @author Justin Ross <jross@redhat.com> * @author Peter Boy <pboy@barkhof.uni-bremen.de> @@ -52,6 +52,7 @@ public class Loader extends PackageLoader { public void run(final ScriptContext ctx) { new KernelExcursion() { + @Override public void excurse() { setEffectiveParty(Kernel.getSystemParty()); @@ -64,31 +65,29 @@ public class Loader extends PackageLoader { // RSS currently depends on an existing category domain in terms // an a domain mapping to this applicaion. /* - String catKey = RSSFeed.getConfig().getCategoryKey(); - s_log.info("Setting RSS Category Key to " + catKey + "."); - if (!CategoryPurpose.purposeExists(catKey)) { - (new CategoryPurpose(catKey, "RSS Feed")).save(); - } + String catKey = RSSFeed.getConfig().getCategoryKey(); + s_log.info("Setting RSS Category Key to " + catKey + "."); + if (!CategoryPurpose.purposeExists(catKey)) { + (new CategoryPurpose(catKey, "RSS Feed")).save(); + } */ - // load application type for admin application into database // (i.e. create application type) setupChannelControlCenter(); // Load local feeds into database - // setupLocalFeeds(); // currently not working, incompatible with - // changes in handling webapp's web context - + setupLocalFeeds(); // currently not working, incompatible with + // changes in handling webapp's web context // load portlet type into database loadWorkspaceDirectoryPortlet(); } + }.run(); } /** - * Creates the application type for the admin application as an - * (new style) legacy-free applicaiton and an instance of the admin - * application. + * Creates the application type for the admin application as an (new style) legacy-free + * applicaiton and an instance of the admin application. */ public void setupChannelControlCenter() { @@ -99,46 +98,50 @@ public class Loader extends PackageLoader { * replacing blanks between words and illegal characters with an * hyphen and converted to lower case. * "RSSFeed" will become "rssfeed". */ - ApplicationType type = new ApplicationType( - "RSS Feed", - RSSFeed.BASE_DATA_OBJECT_TYPE ); + ApplicationType type = new ApplicationType( + "RSS Feed", + RSSFeed.BASE_DATA_OBJECT_TYPE); type.setSingleton(true); type.setDescription("Provides RSS feed service"); - + if (!Application.isInstalled(RSSFeed.BASE_DATA_OBJECT_TYPE, "/channels/")) { // create an (singelton) application instance Application app = Application - .createApplication(type, - "channels", - "RSS Service", - null); + .createApplication(type, + "channels", + "RSS Service", + null); app.setDescription("RSS feed channels"); app.save(); } } /** - * + * */ public void setupLocalFeeds() { - URL external = URL.there("/channels/rss/external.rss", null); + //URL external = URL.there("/channels/rss/external.rss", null); + String externalURL = "/channels/rss/external.rss"; try { - Feed feed = Feed.retrieve(external.getURL()); +// Feed feed = Feed.retrieve(external.getURL()); + Feed feed = Feed.retrieve(externalURL); } catch (DataObjectNotFoundException ex) { - Feed feed = Feed.create(external.getURL(), + Feed feed = Feed.create(externalURL, "External feeds", "External rss content feeds", true); feed.save(); } - URL index = URL.there("/channels/rss/index.rss", null); + //URL index = URL.there("/channels/rss/index.rss", null); + String indexURL = "/channels/rss/index.rss"; try { - Feed feed = Feed.retrieve(index.getURL()); + //Feed feed = Feed.retrieve(index.getURL()); + Feed feed = Feed.retrieve(indexURL); } catch (DataObjectNotFoundException ex) { - Feed feed = Feed.create(index.getURL(), + Feed feed = Feed.create(indexURL, "Local content feeds", "Local CMS content feeds", true); @@ -146,11 +149,11 @@ public class Loader extends PackageLoader { } } - private void loadWorkspaceDirectoryPortlet() { - PortletType type = PortletType.createPortletType("Workspace Directory", - PortletType.WIDE_PROFILE, - WorkspaceDirectoryPortlet.BASE_DATA_OBJECT_TYPE); - type.setDescription("Displays a list of workspaces"); - } + private void loadWorkspaceDirectoryPortlet() { + PortletType type = PortletType.createPortletType("Workspace Directory", + PortletType.WIDE_PROFILE, + WorkspaceDirectoryPortlet.BASE_DATA_OBJECT_TYPE); + type.setDescription("Displays a list of workspaces"); + } } diff --git a/ccm-rssfeed/src/com/arsdigita/rssfeed/RSSService.java b/ccm-rssfeed/src/com/arsdigita/rssfeed/RSSService.java index 1d2ab7bae..5ebb84aa9 100755 --- a/ccm-rssfeed/src/com/arsdigita/rssfeed/RSSService.java +++ b/ccm-rssfeed/src/com/arsdigita/rssfeed/RSSService.java @@ -15,7 +15,6 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - package com.arsdigita.rssfeed; import javax.servlet.http.HttpServletRequest; @@ -51,12 +50,11 @@ import org.jdom.output.XMLOutputter; import org.jdom.ProcessingInstruction; import com.arsdigita.kernel.User; - /** * Methods for generating RSS Channels & Items. * - * This class has been extended to also generate the LAWs syndication standard - * extensions to RSS 1.0. The implementation is very basic. + * This class has been extended to also generate the LAWs syndication standard extensions to RSS + * 1.0. The implementation is very basic. * * @author Scott Seago (sseago@redhat.com) * @author Daniel Berrange (berrange@redhat.com) @@ -65,65 +63,60 @@ import com.arsdigita.kernel.User; * @version $Revision: #17 $, $Date: 2004/03/29 $ */ public class RSSService { - - private static org.apache.log4j.Logger s_log = - org.apache.log4j.Logger.getLogger(RSSService.class); - + + private static org.apache.log4j.Logger s_log = org.apache.log4j.Logger.getLogger( + RSSService.class); + private static final RSSFeedConfig s_config = RSSFeedConfig.getConfig(); - + public static RSSFeedConfig getConfig() { return s_config; } - + /** * Generates an RSS channel for a specified category and and all of its Articles. */ public static void generateChannel( - BigDecimal categoryId, - HttpServletRequest request, - HttpServletResponse response) - throws Exception { + BigDecimal categoryId, + HttpServletRequest request, + HttpServletResponse response) + throws Exception { Category cat = new Category(categoryId); - + boolean useLAWs = "laws-1.0".equals(request.getParameter("extension")); - + boolean useESD = "laws-esd".equals(request.getParameter("extension")); if (useESD) { useLAWs = true; } // The two namespaces used for basic rdf. rssNS is the default namespace // for all elements. - Namespace rdfNS = - Namespace.getNamespace( - "rdf", - "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); + Namespace rdfNS = Namespace.getNamespace( + "rdf", + "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); Namespace rssNS = Namespace.getNamespace("http://purl.org/rss/1.0/"); - + // The following namespaces are declared for the possible // use of the LAWS extension - Namespace dcNS = - Namespace.getNamespace("dc", "http://purl.org/dc/elements/1.1/"); + Namespace dcNS = Namespace.getNamespace("dc", "http://purl.org/dc/elements/1.1/"); Namespace egmsNS = null; if (useESD) { - egmsNS = - Namespace.getNamespace( - "esd", - "http://www.esd.org.uk/standards/esd/3.0/esd.rdfs"); + egmsNS = Namespace.getNamespace( + "esd", + "http://www.esd.org.uk/standards/esd/3.0/esd.rdfs"); } else { - egmsNS = - Namespace.getNamespace( - "egms", - "http://www.esd.org.uk/standards/egms/3.0/egms.rdfs"); + egmsNS = Namespace.getNamespace( + "egms", + "http://www.esd.org.uk/standards/egms/3.0/egms.rdfs"); } - Namespace lgclNS = - Namespace.getNamespace( - "lgcl", - "http://www.esd.org.uk/standards/lgcl/1.03/lgcl.rdfs"); - + Namespace lgclNS = Namespace.getNamespace( + "lgcl", + "http://www.esd.org.uk/standards/lgcl/1.03/lgcl.rdfs"); + // rdf is the root element Element rdf = new Element("RDF", "rdf", rdfNS.getURI()); rdf.addNamespaceDeclaration(rssNS); - + if (useLAWs) { rdf.addNamespaceDeclaration(dcNS); rdf.addNamespaceDeclaration(egmsNS); @@ -132,50 +125,50 @@ public class RSSService { // Channel info Element channel = new Element("channel", rssNS); channel.setAttribute( - "about", - URL.here(request, "/rss/").getURL(), - rdfNS); + "about", + URL.here(request, "/rss/").getURL(), + rdfNS); rdf.addContent(channel); - + Element channelTitle = new Element("title", rssNS); channelTitle.setText(cat.getName()); channel.addContent(channelTitle); - + if (useLAWs) { Element channelDCTitle = new Element("title", dcNS); channelDCTitle.setText(cat.getName()); channel.addContent(channelDCTitle); } - + Element channelLink = new Element("link", rssNS); - channelLink.setText((URL.there(request,null).getServerURI()).concat(URLService.locate(cat.getOID()))); + channelLink.setText((URL.there(request, null).getServerURI()).concat(URLService.locate(cat + .getOID()))); channel.addContent(channelLink); - + Element channelDescription = new Element("description", rssNS); channelDescription.setText(cat.getDescription()); channel.addContent(channelDescription); - + Element channelItems = new Element("items", rssNS); channel.addContent(channelItems); - + Element itemsSeq = new Element("Seq", rdfNS); channelItems.addContent(itemsSeq); - + // Get and store a list of items. Items urls are added to the list in // the channel info, and a complete entry is added at the top level // (below rdf) SortedSet items = new TreeSet(); - CategorizedCollection objects = - cat.getObjects(ContentItem.BASE_DATA_OBJECT_TYPE); + CategorizedCollection objects = cat.getObjects(ContentItem.BASE_DATA_OBJECT_TYPE); while (objects.next()) { ContentItem item = (ContentItem) objects.getACSObject(); - + s_log.debug("item: " + item.getDisplayName()); if (ContentItem.LIVE.equals(item.getVersion())) { items.add(new NewestFirstItem(item)); } } - + Iterator iter = items.iterator(); int max = 10; int current = 0; @@ -186,7 +179,7 @@ public class RSSService { } NewestFirstItem itemWrapper = (NewestFirstItem) iter.next(); ContentItem item = itemWrapper.getContentItem(); - + String title; String description = ""; try { @@ -202,46 +195,47 @@ public class RSSService { } catch (ClassCastException e) { title = item.getDisplayName(); } - - String itemURL = (URL.there(request,null).getServerURI()).concat(URLService.locate(item.getOID())); - + + String itemURL = (URL.there(request, null).getServerURI()).concat(URLService.locate(item + .getOID())); + s_log.debug("item is live"); - + // Add the element to the channel list Element seqEl = new Element("li", rdfNS); seqEl.setAttribute("resource", itemURL, rdfNS); itemsSeq.addContent(seqEl); - + // Add the element to the top level Element itemEl = new Element("item", rssNS); itemEl.setAttribute("about", itemURL, rdfNS); rdf.addContent(itemEl); - + Element titleEl = new Element("title", rssNS); titleEl.setText(title); itemEl.addContent(titleEl); - + Element linkEl = new Element("link", rssNS); linkEl.setText(itemURL); itemEl.addContent(linkEl); - + if (description != null) { Element descEl = new Element("description", rssNS); descEl.setText( - com.arsdigita.util.StringUtils.truncateString( + com.arsdigita.util.StringUtils.truncateString( description, 100, true) + "..."); itemEl.addContent(descEl); } - + if (useLAWs) { - + Element dcTitleEl = new Element("title", dcNS); dcTitleEl.setText(title); itemEl.addContent(dcTitleEl); - + User creatorUser = item.getCreationUser(); String creator = "Not specified"; if (creatorUser != null) { @@ -250,105 +244,104 @@ public class RSSService { Element dcCreatorEl = new Element("creator", dcNS); dcCreatorEl.setText(creator); itemEl.addContent(dcCreatorEl); - + Date dcDate = item.getCreationDate(); String dcDateString = "Not specified"; if (dcDate != null) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); dcDateString = sdf.format(dcDate); } - + Element dcDateEl = new Element("date", dcNS); dcDateEl.setText(dcDateString); itemEl.addContent(dcDateEl); - - Element subjectCategoryEl = - new Element("subjectCategory", egmsNS); + + Element subjectCategoryEl = new Element("subjectCategory", egmsNS); itemEl.addContent(subjectCategoryEl); - + Element subjectBagEl = new Element("Bag", rdfNS); subjectCategoryEl.addContent(subjectBagEl); - + Element liEl; Element categoryEl; Element rdfValueEl; - + // OK now we are going to see if we can find any // LGCL categories for this item: - Domain lgclDomain = Domain.retrieve("LGCL"); - + DomainCollection terms = lgclDomain.getTerms(); terms.addEqualsFilter("model.childObjects.id", item.getID()); - + if (terms != null) { - DomainCollectionIterator it = - new DomainCollectionIterator(terms); - + DomainCollectionIterator it = new DomainCollectionIterator(terms); + while (it.hasNext()) { - + Term term = (Term) it.next(); String name = term.getName(); String urlName = toUpperCamel(name); - + liEl = new Element("li", rdfNS); subjectBagEl.addContent(liEl); - + categoryEl = new Element(urlName, lgclNS); liEl.addContent(categoryEl); - + rdfValueEl = new Element("value", rdfNS); rdfValueEl.setText(name); categoryEl.addContent(rdfValueEl); } } - + } } - + // Write XML to the output stream Document doc = new Document(); - - if (getConfig().getPIxslt()!= null) { - doc.addContent(new ProcessingInstruction("xml-stylesheet","type=\"text/xsl\" href=\"" + getConfig().getPIxslt() + "\"")); + + if (getConfig().getPIxslt() != null) { + doc.addContent(new ProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"" + + getConfig().getPIxslt() + + "\"")); } doc.setRootElement(rdf); - + response.setContentType("text/xml; charset=UTF-8"); - + XMLOutputter xmlOutput = new XMLOutputter("UTF-8"); xmlOutput.setNewlines(true); xmlOutput.setIndent(true); xmlOutput.output(doc, response.getWriter()); } - + private static class NewestFirstItem implements Comparable { + private ContentItem m_item; private BigDecimal m_liveID; - + public NewestFirstItem(ContentItem item) { m_item = item; - + m_liveID = item.getID(); } - + public ContentItem getContentItem() { return m_item; } - + public BigDecimal getLiveID() { return m_liveID; } - + public int compareTo(Object o) { if ((o instanceof NewestFirstItem)) { - return - - 1 * (m_liveID.compareTo(((NewestFirstItem) o).getLiveID())); + return - 1 * (m_liveID.compareTo(((NewestFirstItem) o).getLiveID())); } else { throw new ClassCastException("Must compare to NewestFirstItem"); } } - + public boolean equals(Object o) { if ((o instanceof NewestFirstItem)) { return m_item.equals(((NewestFirstItem) o).getContentItem()); @@ -356,55 +349,54 @@ public class RSSService { return false; } } + } - + /** * Generates an RSS channel for a specified category purpose */ - public static void generateChannelList( - Category root, - HttpServletRequest request, - HttpServletResponse response) - throws Exception { - + public static void generateChannelList(Category root, + HttpServletRequest request, + HttpServletResponse response) + throws Exception { + // The two namespaces used for basic rdf. rssNS is the default namespace // for all elements. - Namespace rdfNS = - Namespace.getNamespace( - "rdf", - "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); + Namespace rdfNS = Namespace.getNamespace( + "rdf", + "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); Namespace rssNS = Namespace.getNamespace("http://purl.org/rss/1.0/"); - + // rdf is the root element Element rdf = new Element("RDF", "rdf", rdfNS.getURI()); rdf.addNamespaceDeclaration(rssNS); - + // Channel info Element channel = new Element("channel", rssNS); channel.setAttribute( - "about", - URL.here(request, "/rss/").getURL(), - rdfNS); + "about", + URL.here(request, "/rss/").getURL(), + rdfNS); rdf.addContent(channel); - + Element channelTitle = new Element("title", rssNS); channelTitle.setText("Channel Index"); channel.addContent(channelTitle); - + Element channelLink = new Element("link", rssNS); channelLink.setText(URL.here(request, "/rss/").getURL()); channel.addContent(channelLink); - + Element channelDescription = new Element("description", rssNS); channelDescription.setText("The list of content feeds"); channel.addContent(channelDescription); - + Element channelItems = new Element("items", rssNS); channel.addContent(channelItems); - + Element itemsSeq = new Element("Seq", rdfNS); channelItems.addContent(itemsSeq); - + Map cats = CategorizationTree.getSubtreePath(root); s_log.debug("Get categories"); Iterator i = cats.keySet().iterator(); @@ -412,34 +404,34 @@ public class RSSService { while (i.hasNext()) { String path = (String) i.next(); Category cat = (Category) cats.get(path); - + if (cat.getID().equals(root.getID())) { continue; } - + s_log.debug("GOt sub cat " + path + " id " + cat.getID()); ParameterMap params = new ParameterMap(); params.setParameter("id", cat.getID()); URL url = URL.here(request, "/rss/channel.rss", params); - + // Add the element to the channel list Element seqEl = new Element("li", rdfNS); seqEl.setAttribute("resource", url.getURL(), rdfNS); itemsSeq.addContent(seqEl); - + // Add the element to the top level Element itemEl = new Element("item", rssNS); itemEl.setAttribute("about", url.getURL(), rdfNS); rdf.addContent(itemEl); - + Element titleEl = new Element("title", rssNS); titleEl.setText(path); itemEl.addContent(titleEl); - + Element linkEl = new Element("link", rssNS); linkEl.setText(url.getURL()); itemEl.addContent(linkEl); - + if (cat.getDescription() != null) { Element descEl = new Element("description", rssNS); descEl.setText(cat.getDescription()); @@ -447,128 +439,126 @@ public class RSSService { } } s_log.debug("All done"); - + // Write XML to the output stream Document doc = new Document(rdf); - + response.setContentType("text/xml; charset=UTF-8"); - + XMLOutputter xmlOutput = new XMLOutputter("UTF-8"); xmlOutput.setNewlines(true); xmlOutput.setIndent(true); xmlOutput.output(doc, response.getWriter()); } - + /** * Generates an RSS channel for a specified category and and all of its Articles. */ - public static void generateFeedList( - boolean acsj, - HttpServletRequest request, - HttpServletResponse response) - throws Exception { + public static void generateFeedList(boolean acsj, + HttpServletRequest request, + HttpServletResponse response) throws Exception { // The two namespaces used for basic rdf. rssNS is the default namespace // for all elements. - Namespace rdfNS = - Namespace.getNamespace( - "rdf", - "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); + Namespace rdfNS = Namespace.getNamespace( + "rdf", + "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); Namespace rssNS = Namespace.getNamespace("http://purl.org/rss/1.0/"); - + // rdf is the root element Element rdf = new Element("RDF", "rdf", rdfNS.getURI()); rdf.addNamespaceDeclaration(rssNS); - + // Channel info Element channel = new Element("channel", rssNS); channel.setAttribute( - "about", - URL.here(request, "/rss/").getURL(), - rdfNS); + "about", + URL.here(request, "/rss/").getURL(), + rdfNS); rdf.addContent(channel); - + Element channelTitle = new Element("title", rssNS); channelTitle.setText("Channel Index"); channel.addContent(channelTitle); - + Element channelLink = new Element("link", rssNS); channelLink.setText(URL.here(request, "/rss/").getURL()); channel.addContent(channelLink); - + Element channelDescription = new Element("description", rssNS); channelDescription.setText("The list of server feeds"); channel.addContent(channelDescription); - + Element channelItems = new Element("items", rssNS); channel.addContent(channelItems); - + Element itemsSeq = new Element("Seq", rdfNS); channelItems.addContent(itemsSeq); - + FeedCollection feeds = Feed.retrieveAll(); feeds.filterACSJFeeds(acsj); - + while (feeds.next()) { Feed feed = feeds.getFeed(); - + // Add the element to the channel list Element seqEl = new Element("li", rdfNS); seqEl.setAttribute("resource", feed.getURL(), rdfNS); itemsSeq.addContent(seqEl); - + // Add the element to the top level Element itemEl = new Element("item", rssNS); itemEl.setAttribute("about", feed.getURL(), rdfNS); rdf.addContent(itemEl); - + Element titleEl = new Element("title", rssNS); titleEl.setText(feed.getTitle()); itemEl.addContent(titleEl); - + Element linkEl = new Element("link", rssNS); linkEl.setText(feed.getURL()); itemEl.addContent(linkEl); - + String desc = feed.getDescription(); if (desc != null) { Element descEl = new Element("description", rssNS); descEl.setText(desc); itemEl.addContent(descEl); } - + } - + // Write XML to the output stream Document doc = new Document(rdf); - + response.setContentType("text/xml; charset=UTF-8"); - + XMLOutputter xmlOutput = new XMLOutputter("UTF-8"); xmlOutput.setNewlines(true); xmlOutput.setIndent(true); xmlOutput.output(doc, response.getWriter()); } - + public static String toUpperCamel(String termName) { - + String upperCamel = ""; - + if (termName != null) { - + StringTokenizer tokens = new StringTokenizer(termName); while (tokens.hasMoreTokens()) { - + String word = tokens.nextToken(); if (word.length() <= 1) { upperCamel += word.toUpperCase(); } else { upperCamel += word.substring(0, 1).toUpperCase() - + word.substring(1, word.length()); + + word.substring(1, word.length()); } - + } } - + return upperCamel; } + }