From: Maria Odea B. Ching Date: Thu, 3 Apr 2008 03:42:59 +0000 (+0000) Subject: [MRM-123] X-Git-Tag: archiva-r676265~226 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=ff44aa71b4502ef0c49ecdb6c0eac582a0041418;p=archiva.git [MRM-123] -move the rss classes to it's own module git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@644151 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/archiva-modules/archiva-base/archiva-common/pom.xml b/archiva-modules/archiva-base/archiva-common/pom.xml index 1bce10113..de064e520 100644 --- a/archiva-modules/archiva-base/archiva-common/pom.xml +++ b/archiva-modules/archiva-base/archiva-common/pom.xml @@ -63,22 +63,12 @@ xalan 2.7.0 - - rome - rome - 0.9 - dom4j dom4j 1.6.1 test - - xmlunit - xmlunit - test - diff --git a/archiva-modules/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/rss/RssFeedEntry.java b/archiva-modules/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/rss/RssFeedEntry.java deleted file mode 100644 index cb9f81cde..000000000 --- a/archiva-modules/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/rss/RssFeedEntry.java +++ /dev/null @@ -1,137 +0,0 @@ -package org.apache.maven.archiva.common.rss; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Holds the data for the SyndEntry in the RSS feed. - * - * @author Maria Odea Ching - * @version - */ -public class RssFeedEntry -{ - private String title; - - private String link; - - private String description; - - private String author; - - private String category; - - private String comments; - - private String enclosure; - - private String guid; - - private String source; - - public String getTitle() - { - return title; - } - - public void setTitle( String title ) - { - this.title = title; - } - - public String getLink() - { - return link; - } - - public void setLink( String link ) - { - this.link = link; - } - - public String getDescription() - { - return description; - } - - public void setDescription( String description ) - { - this.description = description; - } - - public String getAuthor() - { - return author; - } - - public void setAuthor( String author ) - { - this.author = author; - } - - public String getCategory() - { - return category; - } - - public void setCategory( String category ) - { - this.category = category; - } - - public String getComments() - { - return comments; - } - - public void setComments( String comments ) - { - this.comments = comments; - } - - public String getEnclosure() - { - return enclosure; - } - - public void setEnclosure( String enclosure ) - { - this.enclosure = enclosure; - } - - public String getGuid() - { - return guid; - } - - public void setGuid( String guid ) - { - this.guid = guid; - } - - public String getSource() - { - return source; - } - - public void setSource( String source ) - { - this.source = source; - } -} diff --git a/archiva-modules/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/rss/RssFeedGenerator.java b/archiva-modules/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/rss/RssFeedGenerator.java deleted file mode 100644 index 8187b7c1f..000000000 --- a/archiva-modules/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/rss/RssFeedGenerator.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.apache.maven.archiva.common.rss; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.sun.syndication.feed.synd.SyndContent; -import com.sun.syndication.feed.synd.SyndContentImpl; -import com.sun.syndication.feed.synd.SyndEntry; -import com.sun.syndication.feed.synd.SyndEntryImpl; -import com.sun.syndication.feed.synd.SyndFeed; -import com.sun.syndication.feed.synd.SyndFeedImpl; -import com.sun.syndication.io.FeedException; -import com.sun.syndication.io.SyndFeedOutput; - -/** - * Generates RSS feeds. - * - * @plexus.component role="org.apache.maven.archiva.common.rss.RssFeedGenerator" - * - * @author Maria Odea Ching - * @version - */ -public class RssFeedGenerator -{ - private Logger log = LoggerFactory.getLogger( RssFeedGenerator.class ); - - // TODO: make configurable - public static String DEFAULT_FEEDTYPE = "rss_2.0"; - - public static String DEFAULT_LANGUAGE = "en-us"; - - public void generateFeed( String title, String link, String description, List dataEntries, - File outputFile ) - { - SyndFeed feed = new SyndFeedImpl(); - feed.setFeedType( DEFAULT_FEEDTYPE ); - - feed.setTitle( title ); - feed.setLink( link ); - feed.setDescription( description ); - feed.setLanguage( DEFAULT_LANGUAGE ); - feed.setPublishedDate( Calendar.getInstance().getTime() ); - - feed.setEntries( getEntries( dataEntries ) ); - - try - { - Writer writer = new FileWriter( outputFile ); - SyndFeedOutput output = new SyndFeedOutput(); - output.output( feed, writer ); - writer.close(); - } - catch ( IOException ie ) - { - log.error( "Error occurred while generating the feed : " + ie.getMessage() ); - } - catch ( FeedException fe ) - { - log.error( "Error occurred while generating the feed : " + fe.getMessage() ); - } - } - - private List getEntries( List dataEntries ) - { - List entries = new ArrayList(); - SyndEntry entry; - SyndContent description; - - for ( RssFeedEntry dataEntry : dataEntries ) - { - entry = new SyndEntryImpl(); - entry.setTitle( dataEntry.getTitle() ); - entry.setLink( dataEntry.getLink() ); - entry.setPublishedDate( Calendar.getInstance().getTime() ); - - description = new SyndContentImpl(); - description.setType( "text/plain" ); - description.setValue( dataEntry.getDescription() ); - entry.setDescription( description ); - - entries.add( entry ); - } - - return entries; - } - -} diff --git a/archiva-modules/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/rss/RssFeedGeneratorTest.java b/archiva-modules/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/rss/RssFeedGeneratorTest.java deleted file mode 100644 index cf2b0e73f..000000000 --- a/archiva-modules/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/rss/RssFeedGeneratorTest.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.apache.maven.archiva.common.rss; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.io.FileUtils; -import org.codehaus.plexus.PlexusTestCase; -import org.custommonkey.xmlunit.XMLAssert; - -/** - * @author Maria Odea Ching - * @version - */ -public class RssFeedGeneratorTest - extends PlexusTestCase -{ - private RssFeedGenerator generator; - - public void setUp() - throws Exception - { - super.setUp(); - - generator = (RssFeedGenerator) lookup( RssFeedGenerator.class ); - - File outputDir = new File( getBasedir(), "/target/test-classes/rss-feeds" ); - outputDir.mkdir(); - } - - public void testGenerateFeed() - throws Exception - { - File outputFile = new File( getBasedir(), "/target/test-classes/rss-feeds/generated-rss2.0-feed.xml" ); - - List entries = new ArrayList(); - RssFeedEntry entry = new RssFeedEntry(); - - entry.setTitle( "Item 1" ); - entry.setLink( "http://rss-2.0-test-feed.com" ); - entry.setDescription( "RSS 2.0 feed item 1." ); - entry.setGuid( "http://rss-2.0-test-feed.com/item1" ); - entries.add( entry ); - - entry = new RssFeedEntry(); - entry.setTitle( "Item 2" ); - entry.setLink( "http://rss-2.0-test-feed.com" ); - entry.setDescription( "RSS 2.0 feed item 2." ); - entry.setGuid( "http://rss-2.0-test-feed.com/item2" ); - entries.add( entry ); - - entry = new RssFeedEntry(); - entry.setTitle( "Item 3" ); - entry.setLink( "http://rss-2.0-test-feed.com" ); - entry.setDescription( "RSS 2.0 feed item 3." ); - entry.setGuid( "http://rss-2.0-test-feed.com/item3" ); - entries.add( entry ); - - generator.generateFeed( "Test Feed", "http://localhost:8080/archiva", "The test feed from Archiva.", entries, - outputFile ); - - String generatedContent = FileUtils.readFileToString( outputFile ); - - XMLAssert.assertXpathEvaluatesTo( "Test Feed", "//channel/title", generatedContent ); - XMLAssert.assertXpathEvaluatesTo( "http://localhost:8080/archiva", "//channel/link", generatedContent ); - XMLAssert.assertXpathEvaluatesTo( "The test feed from Archiva.", "//channel/description", generatedContent ); - XMLAssert.assertXpathEvaluatesTo( "en-us", "//channel/language", generatedContent ); - - String expectedItem1 = - "Item 1Item 2" - + "Item 3"; - XMLAssert.assertXpathsEqual( "//channel/item/title", expectedItem1, "//channel/item/title", generatedContent ); - } -} diff --git a/archiva-modules/archiva-web/archiva-rss/pom.xml b/archiva-modules/archiva-web/archiva-rss/pom.xml new file mode 100644 index 000000000..585f1653e --- /dev/null +++ b/archiva-modules/archiva-web/archiva-rss/pom.xml @@ -0,0 +1,37 @@ + + + archiva-web + org.apache.archiva + 1.1-SNAPSHOT + + 4.0.0 + archiva-rss + Archiva Web :: RSS + http://maven.apache.org + + + commons-io + commons-io + + + org.slf4j + slf4j-api + + + rome + rome + 0.9 + + + xmlunit + xmlunit + test + + + junit + junit + 3.8.1 + test + + + diff --git a/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/RssFeedEntry.java b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/RssFeedEntry.java new file mode 100644 index 000000000..9a766d8b1 --- /dev/null +++ b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/RssFeedEntry.java @@ -0,0 +1,137 @@ +package org.apache.archiva.rss; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Holds the data for the SyndEntry in the RSS feed. + * + * @author Maria Odea Ching + * @version + */ +public class RssFeedEntry +{ + private String title; + + private String link; + + private String description; + + private String author; + + private String category; + + private String comments; + + private String enclosure; + + private String guid; + + private String source; + + public String getTitle() + { + return title; + } + + public void setTitle( String title ) + { + this.title = title; + } + + public String getLink() + { + return link; + } + + public void setLink( String link ) + { + this.link = link; + } + + public String getDescription() + { + return description; + } + + public void setDescription( String description ) + { + this.description = description; + } + + public String getAuthor() + { + return author; + } + + public void setAuthor( String author ) + { + this.author = author; + } + + public String getCategory() + { + return category; + } + + public void setCategory( String category ) + { + this.category = category; + } + + public String getComments() + { + return comments; + } + + public void setComments( String comments ) + { + this.comments = comments; + } + + public String getEnclosure() + { + return enclosure; + } + + public void setEnclosure( String enclosure ) + { + this.enclosure = enclosure; + } + + public String getGuid() + { + return guid; + } + + public void setGuid( String guid ) + { + this.guid = guid; + } + + public String getSource() + { + return source; + } + + public void setSource( String source ) + { + this.source = source; + } +} diff --git a/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/RssFeedGenerator.java b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/RssFeedGenerator.java new file mode 100644 index 000000000..c6f50b341 --- /dev/null +++ b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/RssFeedGenerator.java @@ -0,0 +1,114 @@ +package org.apache.archiva.rss; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.sun.syndication.feed.synd.SyndContent; +import com.sun.syndication.feed.synd.SyndContentImpl; +import com.sun.syndication.feed.synd.SyndEntry; +import com.sun.syndication.feed.synd.SyndEntryImpl; +import com.sun.syndication.feed.synd.SyndFeed; +import com.sun.syndication.feed.synd.SyndFeedImpl; +import com.sun.syndication.io.FeedException; +import com.sun.syndication.io.SyndFeedOutput; + +/** + * Generates RSS feeds. + * + * @plexus.component role="org.apache.archiva.rss.RssFeedGenerator" + * + * @author Maria Odea Ching + * @version + */ +public class RssFeedGenerator +{ + private Logger log = LoggerFactory.getLogger( RssFeedGenerator.class ); + + // TODO: make configurable + public static String DEFAULT_FEEDTYPE = "rss_2.0"; + + public static String DEFAULT_LANGUAGE = "en-us"; + + public void generateFeed( String title, String link, String description, List dataEntries, + File outputFile ) + { + SyndFeed feed = new SyndFeedImpl(); + feed.setFeedType( DEFAULT_FEEDTYPE ); + + feed.setTitle( title ); + feed.setLink( link ); + feed.setDescription( description ); + feed.setLanguage( DEFAULT_LANGUAGE ); + feed.setPublishedDate( Calendar.getInstance().getTime() ); + + feed.setEntries( getEntries( dataEntries ) ); + + try + { + Writer writer = new FileWriter( outputFile ); + SyndFeedOutput output = new SyndFeedOutput(); + output.output( feed, writer ); + writer.close(); + } + catch ( IOException ie ) + { + log.error( "Error occurred while generating the feed : " + ie.getMessage() ); + } + catch ( FeedException fe ) + { + log.error( "Error occurred while generating the feed : " + fe.getMessage() ); + } + } + + private List getEntries( List dataEntries ) + { + List entries = new ArrayList(); + SyndEntry entry; + SyndContent description; + + for ( RssFeedEntry dataEntry : dataEntries ) + { + entry = new SyndEntryImpl(); + entry.setTitle( dataEntry.getTitle() ); + entry.setLink( dataEntry.getLink() ); + entry.setPublishedDate( Calendar.getInstance().getTime() ); + + description = new SyndContentImpl(); + description.setType( "text/plain" ); + description.setValue( dataEntry.getDescription() ); + entry.setDescription( description ); + + entries.add( entry ); + } + + return entries; + } + +} diff --git a/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/RssFeedGeneratorTest.java b/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/RssFeedGeneratorTest.java new file mode 100644 index 000000000..ac86c827c --- /dev/null +++ b/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/RssFeedGeneratorTest.java @@ -0,0 +1,93 @@ +package org.apache.archiva.rss; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.io.FileUtils; +import org.codehaus.plexus.PlexusTestCase; +import org.custommonkey.xmlunit.XMLAssert; + +/** + * @author Maria Odea Ching + * @version + */ +public class RssFeedGeneratorTest + extends PlexusTestCase +{ + private RssFeedGenerator generator; + + public void setUp() + throws Exception + { + super.setUp(); + + generator = (RssFeedGenerator) lookup( RssFeedGenerator.class ); + + File outputDir = new File( getBasedir(), "/target/test-classes/rss-feeds" ); + outputDir.mkdir(); + } + + public void testGenerateFeed() + throws Exception + { + File outputFile = new File( getBasedir(), "/target/test-classes/rss-feeds/generated-rss2.0-feed.xml" ); + + List entries = new ArrayList(); + RssFeedEntry entry = new RssFeedEntry(); + + entry.setTitle( "Item 1" ); + entry.setLink( "http://rss-2.0-test-feed.com" ); + entry.setDescription( "RSS 2.0 feed item 1." ); + entry.setGuid( "http://rss-2.0-test-feed.com/item1" ); + entries.add( entry ); + + entry = new RssFeedEntry(); + entry.setTitle( "Item 2" ); + entry.setLink( "http://rss-2.0-test-feed.com" ); + entry.setDescription( "RSS 2.0 feed item 2." ); + entry.setGuid( "http://rss-2.0-test-feed.com/item2" ); + entries.add( entry ); + + entry = new RssFeedEntry(); + entry.setTitle( "Item 3" ); + entry.setLink( "http://rss-2.0-test-feed.com" ); + entry.setDescription( "RSS 2.0 feed item 3." ); + entry.setGuid( "http://rss-2.0-test-feed.com/item3" ); + entries.add( entry ); + + generator.generateFeed( "Test Feed", "http://localhost:8080/archiva", "The test feed from Archiva.", entries, + outputFile ); + + String generatedContent = FileUtils.readFileToString( outputFile ); + + XMLAssert.assertXpathEvaluatesTo( "Test Feed", "//channel/title", generatedContent ); + XMLAssert.assertXpathEvaluatesTo( "http://localhost:8080/archiva", "//channel/link", generatedContent ); + XMLAssert.assertXpathEvaluatesTo( "The test feed from Archiva.", "//channel/description", generatedContent ); + XMLAssert.assertXpathEvaluatesTo( "en-us", "//channel/language", generatedContent ); + + String expectedItem1 = + "Item 1Item 2" + + "Item 3"; + XMLAssert.assertXpathsEqual( "//channel/item/title", expectedItem1, "//channel/item/title", generatedContent ); + } +} diff --git a/archiva-modules/archiva-web/pom.xml b/archiva-modules/archiva-web/pom.xml index 45240897b..e1ee19300 100644 --- a/archiva-modules/archiva-web/pom.xml +++ b/archiva-modules/archiva-web/pom.xml @@ -13,9 +13,7 @@ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. - --> - - + --> 4.0.0 org.apache.archiva @@ -34,6 +32,7 @@ archiva-security archiva-webapp archiva-webdav + archiva-rss @@ -44,4 +43,4 @@ - + \ No newline at end of file