Nuiton-rss-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- 203 discussions
[Lutinweb-commits] r83 - trunk/lutinrss/src/main/java/org/codelutin/rss
by tchemit@users.labs.libre-entreprise.org 05 Jun '08
by tchemit@users.labs.libre-entreprise.org 05 Jun '08
05 Jun '08
Author: tchemit
Date: 2008-06-05 15:36:13 +0000 (Thu, 05 Jun 2008)
New Revision: 83
Modified:
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java
Log:
public access to DATE_PARSER
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java 2008-06-04 11:35:29 UTC (rev 82)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java 2008-06-05 15:36:13 UTC (rev 83)
@@ -33,7 +33,7 @@
/** to use log facility, just put in your code: log.info(\"...\"); */
static final Log log = LogFactory.getLog(RSSGenerator.class);
/** date formater use to save date in feed and entries */
- static final DateFormat DATE_PARSER = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
+ public static final DateFormat DATE_PARSER = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
/**
*
1
0
[Lutinweb-commits] r82 - in trunk/lutinrss: . src/main/java/org/codelutin/rss src/main/webapp src/test/java/org/codelutin/rss
by tchemit@users.labs.libre-entreprise.org 04 Jun '08
by tchemit@users.labs.libre-entreprise.org 04 Jun '08
04 Jun '08
Author: tchemit
Date: 2008-06-04 11:35:29 +0000 (Wed, 04 Jun 2008)
New Revision: 82
Modified:
trunk/lutinrss/pom.xml
trunk/lutinrss/src/main/java/org/codelutin/rss/Field.java
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorConfig.java
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSIOUtil.java
trunk/lutinrss/src/main/webapp/testGenerator.html
trunk/lutinrss/src/test/java/org/codelutin/rss/RSSGeneratorHelperTest.java
Log:
ajout des catagories dans le feed (unqiuement pour la g?\195?\169n?\195?\169ration pour le moment)
Modified: trunk/lutinrss/pom.xml
===================================================================
--- trunk/lutinrss/pom.xml 2008-06-04 09:04:35 UTC (rev 81)
+++ trunk/lutinrss/pom.xml 2008-06-04 11:35:29 UTC (rev 82)
@@ -24,7 +24,7 @@
<packaging>war</packaging>
<!--Version-->
- <version>2.2</version>
+ <version>2.3</version>
<!--Description-->
<description>Servlet pouvant etre appeler depuis du JS pour recuperer un
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/Field.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/Field.java 2008-06-04 09:04:35 UTC (rev 81)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/Field.java 2008-06-04 11:35:29 UTC (rev 82)
@@ -12,7 +12,7 @@
*/
public enum Field {
- NAME('n'), IMAGE('i'), DESCRIPTION('d'), AUTHOR('a'), TIME('t'),LINK('l');
+ NAME('n'), IMAGE('i'), DESCRIPTION('d'), AUTHOR('a'), TIME('t'),LINK('l'),CATEGORY('c');
/** le caractere utilise pour la version compactee d'une configuration de renderer */
private char c;
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java 2008-06-04 09:04:35 UTC (rev 81)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java 2008-06-04 11:35:29 UTC (rev 82)
@@ -77,6 +77,7 @@
feedProperties.put(Field.DESCRIPTION, "description");
feedProperties.put(Field.AUTHOR, "author");
feedProperties.put(Field.TIME, "publishedDate");
+ feedProperties.put(Field.CATEGORY, "categories");
itemProperties = new EnumMap<Field, String>(Field.class);
itemProperties.put(Field.NAME, "title");
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorConfig.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorConfig.java 2008-06-04 09:04:35 UTC (rev 81)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorConfig.java 2008-06-04 11:35:29 UTC (rev 82)
@@ -12,10 +12,14 @@
* la propriete de configuration qui definit le prefix a jouter pour scruter la configuration
*/
private static final String CONFIGURATION_PREFIX_PROPERTY = RSSGeneratorServlet.class.getSimpleName() + "_configuration_prefix";
-
+ /** nombre d'items max à ecrire dans le fichier du flux */
public static int DEFAULT_GENERATOR_NB_ITEM = 100;
+ /** le format par défaut duflux à générer */
public static String DEFAULT_GENERATOR_FORMAT = "RSS_2_0";
+ /** le répertoire où générer les flux */
public static String GENERATOR_DIRECTORY = "/tmp/rssinclude";
+ /** le caractère séparateur des listes de métas (categorie par exemple) */
+ public static String DEFAULT_LIST_SEPARATOR = ";";
public void setDEFAULT_GENERATOR_NB_ITEM(int DEFAULT_GENERATOR_NB_ITEM) {
RSSGeneratorConfig.DEFAULT_GENERATOR_NB_ITEM = DEFAULT_GENERATOR_NB_ITEM;
@@ -29,6 +33,9 @@
RSSGeneratorConfig.GENERATOR_DIRECTORY = GENERATOR_DIRECTORY;
}
+ public void setDEFAULT_LIST_SEPARATOR(String DEFAULT_LIST_SEPARATOR) {
+ RSSGeneratorConfig.DEFAULT_LIST_SEPARATOR = DEFAULT_LIST_SEPARATOR;
+ }
/**
*
* @param S la classe source de la configuration
@@ -45,6 +52,7 @@
super.init(CONFIGURATION_PREFIX_PROPERTY,RSSGeneratorConfig.class, config,
"DEFAULT_GENERATOR_NB_ITEM",
"DEFAULT_GENERATOR_FORMAT",
+ "DEFAULT_LIST_SEPARATOR",
"GENERATOR_DIRECTORY");
// create delegate directory
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java 2008-06-04 09:04:35 UTC (rev 81)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java 2008-06-04 11:35:29 UTC (rev 82)
@@ -36,11 +36,13 @@
String description = request.getParameter("feedDescription");
String link = request.getParameter("feedLink");
String author = request.getParameter("feedAuthor");
+ String categories = request.getParameter("feedCategories");
Map<Field, Object> values = new HashMap<Field, Object>();
values.put(Field.NAME, feedName);
addFieldValue(Field.DESCRIPTION, description, values);
addFieldValue(Field.LINK, link, values);
addFieldValue(Field.AUTHOR, author, values);
+ addFieldValue(Field.CATEGORY, categories, values);
values.put(Field.TIME, RSSGenerator.DATE_PARSER.format(new java.util.Date()));
try {
delegate.createFeedFile(file.toURI().toURL(), feedType, values);
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSIOUtil.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSIOUtil.java 2008-06-04 09:04:35 UTC (rev 81)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSIOUtil.java 2008-06-04 11:35:29 UTC (rev 82)
@@ -1,5 +1,7 @@
package org.codelutin.rss;
+import com.sun.syndication.feed.synd.SyndCategory;
+import com.sun.syndication.feed.synd.SyndCategoryImpl;
import com.sun.syndication.feed.synd.SyndContent;
import com.sun.syndication.feed.synd.SyndContentImpl;
import com.sun.syndication.feed.synd.SyndEntry;
@@ -88,6 +90,23 @@
case TIME:
realValue = RSSGenerator.DATE_PARSER.parse((String) value);
break;
+ case CATEGORY:
+ List<String> categoriesAsString = new java.util.ArrayList<String>();
+ if (value instanceof List) {
+ categoriesAsString = (List) value;
+ } else {
+ // categories as String
+ String cats = String.valueOf(value);
+ String[] categories = cats.split(RSSGeneratorConfig.DEFAULT_LIST_SEPARATOR);
+ categoriesAsString = java.util.Arrays.asList(categories);
+ }
+ realValue = new java.util.ArrayList<SyndCategory>();
+ for (String cat : categoriesAsString) {
+ SyndCategory scat = new SyndCategoryImpl();
+ scat.setName(cat);
+ ((List)realValue).add(scat);
+ }
+ break;
default:
realValue = value;
}
Modified: trunk/lutinrss/src/main/webapp/testGenerator.html
===================================================================
--- trunk/lutinrss/src/main/webapp/testGenerator.html 2008-06-04 09:04:35 UTC (rev 81)
+++ trunk/lutinrss/src/main/webapp/testGenerator.html 2008-06-04 11:35:29 UTC (rev 82)
@@ -10,7 +10,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<style type="text/css">
.error {color:red; display:block;}
- fieldset {height:120px;}
+ fieldset {height:140px;}
iframe { width:100%;height:400px;}
</style>
<script src="rssgenerator.js"></script>
@@ -57,6 +57,10 @@
<td>feedAuthor : </td>
<td><input name="feedAuthor" type="text" size="50"></td>
</tr>
+ <tr>
+ <td>feedCategories : </td>
+ <td><input name="feedCategories" type="text" size="50"></td>
+ </tr>
<tr><td style="font-size:11px">(*) Mandatory field</td></tr>
</table>
</fieldset>
Modified: trunk/lutinrss/src/test/java/org/codelutin/rss/RSSGeneratorHelperTest.java
===================================================================
--- trunk/lutinrss/src/test/java/org/codelutin/rss/RSSGeneratorHelperTest.java 2008-06-04 09:04:35 UTC (rev 81)
+++ trunk/lutinrss/src/test/java/org/codelutin/rss/RSSGeneratorHelperTest.java 2008-06-04 11:35:29 UTC (rev 82)
@@ -4,6 +4,7 @@
*/
package org.codelutin.rss;
+import com.sun.syndication.feed.synd.SyndCategory;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndFeed;
import java.io.File;
@@ -43,6 +44,8 @@
values.put(Field.NAME, "feedName : " + f.getName());
values.put(Field.DESCRIPTION, "feedDescription : " + f.getName());
values.put(Field.LINK, f.toURI().toURL() + "");
+ values.put(Field.AUTHOR, "feed author");
+ values.put(Field.CATEGORY, java.util.Arrays.asList("categorie1","categorie2"));
values.put(Field.TIME, RSSGenerator.DATE_PARSER.format(new java.util.Date()));
assertFalse(f.exists());
@@ -63,6 +66,12 @@
assertEquals(feed.getLink(), values.get(Field.LINK));
assertEquals(feed.getTitle(), values.get(Field.NAME));
assertEquals(feed.getDescription(), values.get(Field.DESCRIPTION));
+ assertEquals(feed.getAuthor(), values.get(Field.AUTHOR));
+ List cats = (List) values.get(Field.CATEGORY);
+ for (Object o : feed.getCategories()) {
+ SyndCategory cat = (SyndCategory) o;
+ assertTrue(cats.contains(cat.getName()));
+ }
assertEquals(feed.getPublishedDate(), RSSGenerator.DATE_PARSER.parse((String) values.get(Field.TIME)));
}
@@ -173,6 +182,7 @@
assertEquals(entry.getLink(), values.get(Field.LINK));
assertEquals(entry.getTitle(), values.get(Field.NAME));
assertEquals(entry.getDescription().getValue(), values.get(Field.DESCRIPTION));
+ assertEquals(entry.getAuthor(), values.get(Field.AUTHOR));
assertEquals(entry.getPublishedDate(), RSSGenerator.DATE_PARSER.parse((String) values.get(Field.TIME)));
}
@@ -184,6 +194,7 @@
Map<Field, Object> values = new java.util.HashMap<Field, Object>();
values.put(Field.NAME, "entryName : " + f.getName() + "-" + number);
values.put(Field.DESCRIPTION, "entryDescription : " + f.getName() + "-" + number);
+ values.put(Field.AUTHOR, "author-" + number);
values.put(Field.LINK, f.toURI().toURL() + "/entry-" + number);
values.put(Field.TIME, RSSGenerator.DATE_PARSER.format(new java.util.Date()));
return values;
1
0
04 Jun '08
Author: tchemit
Date: 2008-06-04 09:04:35 +0000 (Wed, 04 Jun 2008)
New Revision: 81
Modified:
trunk/lutinrss/pom.xml
Log:
harmonisation des dependances
Modified: trunk/lutinrss/pom.xml
===================================================================
--- trunk/lutinrss/pom.xml 2008-06-02 19:51:41 UTC (rev 80)
+++ trunk/lutinrss/pom.xml 2008-06-04 09:04:35 UTC (rev 81)
@@ -48,13 +48,13 @@
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
- <version>1.1</version>
+ <version>1.1.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
- <version>3.2</version>
+ <version>3.2.1</version>
<scope>compile</scope>
</dependency>
<dependency>
@@ -76,7 +76,7 @@
<scope>compile</scope>
</dependency>
- <!--Provided-->
+ <!--Provided-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
1
0
[Lutinweb-commits] r80 - in trunk/lutinrss: . src/main/java/org/codelutin/rss src/test/java/org/codelutin/rss
by tchemit@users.labs.libre-entreprise.org 02 Jun '08
by tchemit@users.labs.libre-entreprise.org 02 Jun '08
02 Jun '08
Author: tchemit
Date: 2008-06-02 19:51:41 +0000 (Mon, 02 Jun 2008)
New Revision: 80
Modified:
trunk/lutinrss/pom.xml
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java
trunk/lutinrss/src/test/java/org/codelutin/rss/RSSGeneratorHelperTest.java
Log:
utilisation propri?\195?\169t?\195?\169 String au lieu de FeedType
+ setter en non statique, sinon BeanUtils ne fonctionne pas
Modified: trunk/lutinrss/pom.xml
===================================================================
--- trunk/lutinrss/pom.xml 2008-06-02 19:50:57 UTC (rev 79)
+++ trunk/lutinrss/pom.xml 2008-06-02 19:51:41 UTC (rev 80)
@@ -24,7 +24,7 @@
<packaging>war</packaging>
<!--Version-->
- <version>2.2-SNAPSHOT</version>
+ <version>2.2</version>
<!--Description-->
<description>Servlet pouvant etre appeler depuis du JS pour recuperer un
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java 2008-06-02 19:50:57 UTC (rev 79)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java 2008-06-02 19:51:41 UTC (rev 80)
@@ -53,15 +53,18 @@
protected final EnumMap<Field, String> itemProperties;
/** directory where feeds are stored */
protected final File generatorDirectory;
-
+ /** feed format to use **/
+ protected final FeedType format;
+
protected RSSGenerator() {
this(null);
}
- protected RSSGenerator(EnumMap<Field, String> feedProperties, EnumMap<Field, String> itemProperties, File generatorDirectory) {
+ protected RSSGenerator(EnumMap<Field, String> feedProperties, EnumMap<Field, String> itemProperties, File generatorDirectory,FeedType format) {
this.feedProperties = feedProperties;
this.itemProperties = itemProperties;
this.generatorDirectory = generatorDirectory;
+ this.format=format;
}
protected RSSGenerator(File generatorDirectory) {
@@ -84,6 +87,7 @@
itemProperties.put(Field.TIME, "publishedDate");
this.generatorDirectory = generatorDirectory==null?new File(RSSGeneratorConfig.GENERATOR_DIRECTORY):generatorDirectory;
+ this.format=FeedType.valueOf(RSSGeneratorConfig.DEFAULT_GENERATOR_FORMAT);
}
/**
@@ -193,6 +197,9 @@
}
}
+ public FeedType getFormat() {
+ return format;
+ }
/**
* Obtain the file from his url location.
*
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java 2008-06-02 19:50:57 UTC (rev 79)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java 2008-06-02 19:51:41 UTC (rev 80)
@@ -22,7 +22,17 @@
public void doCreateFeed(HttpServletRequest request, HttpServletResponse response, String feedName, File file) throws ServletException, IOException {
String type = request.getParameter("feedType");
- FeedType feedType = type != null ? FeedType.valueOf(type) : RSSGeneratorConfig.DEFAULT_GENERATOR_FORMAT;
+ FeedType feedType = null;
+ if (type != null) {
+ try {
+ feedType = FeedType.valueOf(type);
+ } catch (Exception e) {
+ feedType = null;
+ }
+ }
+ if (feedType == null) {
+ feedType = delegate.getFormat();
+ }
String description = request.getParameter("feedDescription");
String link = request.getParameter("feedLink");
String author = request.getParameter("feedAuthor");
@@ -59,7 +69,7 @@
public void doAddItem(HttpServletRequest request, HttpServletResponse response, String feedName, File file) throws ServletException, IOException {
- Integer nbItems = convertToInt(request.getParameter("nbItems"));
+ Integer nbItems = convertToInt(request.getParameter("nbItems"));
if (nbItems == null) {
nbItems = RSSGeneratorConfig.DEFAULT_GENERATOR_NB_ITEM;
}
@@ -132,7 +142,7 @@
}
@Override
- protected ConfigInitializer<ServletConfig,?> newConfigInitializer() {
+ protected ConfigInitializer<ServletConfig, ?> newConfigInitializer() {
return new RSSGeneratorConfig.RssGeneratorConfigInitializer<ServletConfig>() {
protected String getConfigValue(ServletConfig config, String fullConfigName) {
Modified: trunk/lutinrss/src/test/java/org/codelutin/rss/RSSGeneratorHelperTest.java
===================================================================
--- trunk/lutinrss/src/test/java/org/codelutin/rss/RSSGeneratorHelperTest.java 2008-06-02 19:50:57 UTC (rev 79)
+++ trunk/lutinrss/src/test/java/org/codelutin/rss/RSSGeneratorHelperTest.java 2008-06-02 19:51:41 UTC (rev 80)
@@ -47,7 +47,7 @@
assertFalse(f.exists());
RSSGenerator.log.info("feedFile : " + f);
- helper.createFeedFile(f.toURI().toURL(), RSSGeneratorConfig.DEFAULT_GENERATOR_FORMAT, values);
+ helper.createFeedFile(f.toURI().toURL(), helper.getFormat(), values);
// no lock
assertFalse(helper.getWriteFileLock(f).exists());
// file exist
@@ -59,7 +59,7 @@
RSSGenerator.log.debug(feed);
}
- assertEquals(feed.getFeedType(), RSSGeneratorConfig.DEFAULT_GENERATOR_FORMAT.getType());
+ assertEquals(feed.getFeedType(), helper.getFormat().getType());
assertEquals(feed.getLink(), values.get(Field.LINK));
assertEquals(feed.getTitle(), values.get(Field.NAME));
assertEquals(feed.getDescription(), values.get(Field.DESCRIPTION));
@@ -78,7 +78,7 @@
assertTrue(f.exists());
try {
- helper.createFeedFile(f.toURI().toURL(), RSSGeneratorConfig.DEFAULT_GENERATOR_FORMAT, values);
+ helper.createFeedFile(f.toURI().toURL(), helper.getFormat(), values);
// file already exist, can not reach this code
fail();
} catch (IllegalStateException e) {
1
0
[Lutinweb-commits] r79 - trunk/lutinrss/src/main/java/org/codelutin/rss
by tchemit@users.labs.libre-entreprise.org 02 Jun '08
by tchemit@users.labs.libre-entreprise.org 02 Jun '08
02 Jun '08
Author: tchemit
Date: 2008-06-02 19:50:57 +0000 (Mon, 02 Jun 2008)
New Revision: 79
Modified:
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorConfig.java
Log:
utilisation propri?\195?\169t?\195?\169 String au lieu de FeedType
+ setter en non statique, sinon BeanUtils ne fonctionne pas
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorConfig.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorConfig.java 2008-05-31 19:08:24 UTC (rev 78)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorConfig.java 2008-06-02 19:50:57 UTC (rev 79)
@@ -14,18 +14,18 @@
private static final String CONFIGURATION_PREFIX_PROPERTY = RSSGeneratorServlet.class.getSimpleName() + "_configuration_prefix";
public static int DEFAULT_GENERATOR_NB_ITEM = 100;
- public static FeedType DEFAULT_GENERATOR_FORMAT = FeedType.RSS_2_0;
+ public static String DEFAULT_GENERATOR_FORMAT = "RSS_2_0";
public static String GENERATOR_DIRECTORY = "/tmp/rssinclude";
- public static void setDEFAULT_GENERATOR_NB_ITEM(int DEFAULT_GENERATOR_NB_ITEM) {
+ public void setDEFAULT_GENERATOR_NB_ITEM(int DEFAULT_GENERATOR_NB_ITEM) {
RSSGeneratorConfig.DEFAULT_GENERATOR_NB_ITEM = DEFAULT_GENERATOR_NB_ITEM;
}
- public static void setDEFAULT_GENERATOR_FORMAT(FeedType DEFAULT_GENERATOR_FORMAT) {
+ public void setDEFAULT_GENERATOR_FORMAT(String DEFAULT_GENERATOR_FORMAT) {
RSSGeneratorConfig.DEFAULT_GENERATOR_FORMAT = DEFAULT_GENERATOR_FORMAT;
}
- public static void setGENERATOR_DIRECTORY(String GENERATOR_DIRECTORY) {
+ public void setGENERATOR_DIRECTORY(String GENERATOR_DIRECTORY) {
RSSGeneratorConfig.GENERATOR_DIRECTORY = GENERATOR_DIRECTORY;
}
1
0
[Lutinweb-commits] r78 - in trunk/lutinrss: . src/main/webapp src/test/java/org/codelutin/rss
by tchemit@users.labs.libre-entreprise.org 31 May '08
by tchemit@users.labs.libre-entreprise.org 31 May '08
31 May '08
Author: tchemit
Date: 2008-05-31 19:08:24 +0000 (Sat, 31 May 2008)
New Revision: 78
Added:
trunk/lutinrss/src/main/webapp/index.html
trunk/lutinrss/src/main/webapp/testFck.html
trunk/lutinrss/src/main/webapp/testRender.html
Removed:
trunk/lutinrss/src/main/webapp/fckTest.html
trunk/lutinrss/src/main/webapp/test.html
Modified:
trunk/lutinrss/pom.xml
trunk/lutinrss/src/main/webapp/rssgenerator.js
trunk/lutinrss/src/main/webapp/testGenerator.html
trunk/lutinrss/src/test/java/org/codelutin/rss/RSSGeneratorHelperTest.java
Log:
add test index pages
Modified: trunk/lutinrss/pom.xml
===================================================================
--- trunk/lutinrss/pom.xml 2008-05-31 16:34:27 UTC (rev 77)
+++ trunk/lutinrss/pom.xml 2008-05-31 19:08:24 UTC (rev 78)
@@ -4,14 +4,6 @@
<!--The version of maven's project object model-->
<modelVersion>4.0.0</modelVersion>
- <!--lutinproject.xml-->
-<!--
- <parent>
- <groupId>lutinlib</groupId>
- <artifactId>lutinproject</artifactId>
- <version>2.2</version>
- </parent>
--->
<distributionManagement>
<site>
<id>labs</id>
@@ -32,7 +24,7 @@
<packaging>war</packaging>
<!--Version-->
- <version>2.1</version>
+ <version>2.2-SNAPSHOT</version>
<!--Description-->
<description>Servlet pouvant etre appeler depuis du JS pour recuperer un
@@ -98,8 +90,8 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
- <source>1.5</source>
- <target>1.5</target>
+ <source>${maven.compile.source}</source>
+ <target>${maven.compile.target}</target>
</configuration>
</plugin>
<plugin>
@@ -137,6 +129,14 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <configuration>
+ <!--warName>lutinrss</warName-->
+ <webappDirectory>target/lutinrss</webappDirectory>
+ </configuration>
+ </plugin>
</plugins>
</build>
<profiles>
@@ -146,7 +146,6 @@
<activeByDefault>true</activeByDefault>
</activation>
<properties>
- <maven.test.skip>false</maven.test.skip>
<maven.compile.source>1.5</maven.compile.source>
<maven.compile.target>1.5</maven.compile.target>
</properties>
@@ -158,8 +157,4 @@
</pluginRepositories-->
</profile>
</profiles>
- <properties>
- <netbeans.hint.deploy.server>Tomcat60</netbeans.hint.deploy.server>
- <netbeans.hint.useExternalMaven>false</netbeans.hint.useExternalMaven>
- </properties>
</project>
Deleted: trunk/lutinrss/src/main/webapp/fckTest.html
===================================================================
--- trunk/lutinrss/src/main/webapp/fckTest.html 2008-05-31 16:34:27 UTC (rev 77)
+++ trunk/lutinrss/src/main/webapp/fckTest.html 2008-05-31 19:08:24 UTC (rev 78)
@@ -1,48 +0,0 @@
-<!--
- Document : test
- Created on : 18 avr. 2008, 11:46:56
- Author : poussin
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
- <title>Page de test plugin FCKEditor rss</title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <!--link href="feed.css" rel="stylesheet" type="text/css" /-->
- <script type="text/javascript" src="/fckeditor/fckeditor.js"></script>
- <style type="text/css">div.rssinclude { background-color: #ffff00; }</style>
-</head>
-<body>
-<h1>Test plugin FCKEditor RSS (*)</h1>
-<form name="EditPostView" action="#" method="GET">
- <script type="text/javascript">
- <!--
- var oFCKeditor = new FCKeditor( 'rssTest' ) ;
- oFCKeditor.Config["CustomConfigurationsPath"] = oFCKeditor.BasePath+"/myfckconfig.js";
-
- var content = "<div contenteditable='false' class=\"rssinclude\" name=\"rssinclude\" feedname=\"http://www.lemondeinformatique.fr/flux-rss/open-source/rss.xml\" nbitem=\"2\" feedrepr=\"n-n\">RSS http://www.lemondeinformatique.fr/flux-rss/open-source/rss.xml (items:2)</div><br></br>";
- //content+="<div contenteditable='false' name=\"rssinclude\" class=\"rssinclude\" feedname=\"http://www.lemonde.fr/rss/sequence/0,2-3208,1-0,0.xml\" nbitem=\"2\" feedrepr=\"indat-natd\" \">RSS http://www.lemonde.fr/rss/sequence/0,2-3208,1-0,0.xml (items:2)</div><br/>";
- //content+="<div contenteditable='false' name=\"rssinclude\" class=\"rssinclude\" feedname=\"http://blog.developpez.com/xmlsrv/rss2.php?blog=42\" nbitem=\"3\" feedRepr=\"indat-natd\" \">RSS http://blog.developpez.com/xmlsrv/rss2.php?blog=42 (items:3)</div><br/>";
- //content+="<div contenteditable='false' name=\"rssinclude\" class=\"rssinclude\" feedname=\"http://formats-ouverts.org/rss.php\" nbitem=\"4\" feedrepr=\"indat-natd\" \">RSS http://formats-ouverts.org/rss.php (items:4)</div><br/>";
- //content+="<div contenteditable='false' name=\"rssinclude\" class=\"rssinclude\" feedname=\"http://www.h2database.com/html/newsfeed-rss.xml\" nbitem=\"5\" feedRepr=\"indat-natd\" \">RSS http://www.h2database.com/html/newsfeed-rss.xml (items:5)</div><br/>";
- //content+="<div contenteditable='false' name=\"rssinclude\" class=\"rssinclude\" feedname=\"http://www.opensi.org/news.rss\" nbitem=\"6\" feedrepr=\"indat-natd\" \">RSS http://www.opensi.org/news.rss (items:6)</div>";
- content += "<s"+"cript src=\"/lutinrss-2.1/RSSServlet\"></scri"+"pt><hr/><p>content...</p>";
- oFCKeditor.Value = content;
- oFCKeditor.Create() ;
- -->
- </script>
- <hr/>
- <input type="submit" value="envoyer">
-</form>
-<p>(*) required a FCKEditor 2.6 available on / apache path (means /fckeditor points to fckeditor root directory)</p>
-<p>add custom config like this code :
- <pre>
-var oFCKeditor = new FCKeditor( 'rssTest' ) ;
-oFCKeditor.Config["CustomConfigurationsPath"] = oFCKeditor.BasePath+"/myfckconfig.js";
-oFCKeditor.Create() ;
- </pre>
-</p>
-
-
-</body>
-</html>
Added: trunk/lutinrss/src/main/webapp/index.html
===================================================================
--- trunk/lutinrss/src/main/webapp/index.html (rev 0)
+++ trunk/lutinrss/src/main/webapp/index.html 2008-05-31 19:08:24 UTC (rev 78)
@@ -0,0 +1,21 @@
+<!--
+ Document : test
+ Created on : 18 avr. 2008, 11:46:56
+ Author : poussin
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <title>Page de tests</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+</head>
+ <body>
+ <h1>LutinRSS tests index</h1>
+ <ul>
+ <li><a href="testRender.html" target="render">Test de rendu</a></li>
+ <li><a href="testGenerator.html" target="generator">Test de génération de flux</a></li>
+ <li><a href="testFck.html" target="fck">Test du plugin rssinclude dans fckeditor 2.6</a> (*)</li>
+ </ul>
+ <p>(*) required a FCKEditor 2.6 available on / apache path (means /fckeditor points to fckeditor root directory)</p>
+</body>
+</html>
Modified: trunk/lutinrss/src/main/webapp/rssgenerator.js
===================================================================
--- trunk/lutinrss/src/main/webapp/rssgenerator.js 2008-05-31 16:34:27 UTC (rev 77)
+++ trunk/lutinrss/src/main/webapp/rssgenerator.js 2008-05-31 19:08:24 UTC (rev 78)
@@ -1,6 +1,5 @@
function rssgeneratorUpdateDiv(divs) {
- //var serlvetUrl = "%1$1";
- var serlvetUrl = "http://tomcat-test/lutinrss-2.1/RSSGeneratorServlet?action=list";
+ var serlvetUrl = "RSSGeneratorServlet?action=list";
win = window;
var xhr = null;
var error=null;
Deleted: trunk/lutinrss/src/main/webapp/test.html
===================================================================
--- trunk/lutinrss/src/main/webapp/test.html 2008-05-31 16:34:27 UTC (rev 77)
+++ trunk/lutinrss/src/main/webapp/test.html 2008-05-31 19:08:24 UTC (rev 78)
@@ -1,23 +0,0 @@
-<!--
- Document : test
- Created on : 18 avr. 2008, 11:46:56
- Author : poussin
--->
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
- <title>Page de test rss</title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <link href="feed.css" rel="stylesheet" type="text/css" />
- <script src="RSSServlet"></script>
-</head>
- <body>
- <h1>Test RSS</h1>
- <div name="rssinclude" class="rssinclude" feedName="http://www.lemondeinformatique.fr/flux-rss/open-source/rss.xml" nbItem="1" feedRepr="indat-natd"></div>
- <div name="rssinclude" class="rssinclude" feedName="http://www.lemonde.fr/rss/sequence/0,2-3208,1-0,0.xml" nbItem="2" feedRepr="indat-natd"></div>
- <div name="rssinclude" class="rssinclude" feedName="http://blog.developpez.com/xmlsrv/rss2.php?blog=42" nbItem="3" feedRepr="indat-natd"></div>
- <div name="rssinclude" class="rssinclude" feedName="http://formats-ouverts.org/rss.php" nbItem="4" feedRepr="indat-natd"></div>
- <div name="rssinclude" class="rssinclude" feedName="http://www.h2database.com/html/newsfeed-rss.xml" nbItem="5" feedRepr="indat-natd"></div>
- <div name="rssinclude" class="rssinclude" feedName="http://www.opensi.org/news.rss" nbItem="6" feedRepr="indat-natd"></div>
-</body>
-</html>
Copied: trunk/lutinrss/src/main/webapp/testFck.html (from rev 63, trunk/lutinrss/src/main/webapp/fckTest.html)
===================================================================
--- trunk/lutinrss/src/main/webapp/testFck.html (rev 0)
+++ trunk/lutinrss/src/main/webapp/testFck.html 2008-05-31 19:08:24 UTC (rev 78)
@@ -0,0 +1,48 @@
+<!--
+ Document : test
+ Created on : 18 avr. 2008, 11:46:56
+ Author : poussin
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <title>Page de test plugin FCKEditor rss</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <!--link href="feed.css" rel="stylesheet" type="text/css" /-->
+ <script type="text/javascript" src="/fckeditor/fckeditor.js"></script>
+ <style type="text/css">div.rssinclude { background-color: #ffff00; }</style>
+</head>
+<body>
+<h1>Test plugin FCKEditor RSS (*)</h1>
+<form name="EditPostView" action="#" method="GET">
+ <script type="text/javascript">
+ <!--
+ var oFCKeditor = new FCKeditor( 'rssTest' ) ;
+ oFCKeditor.Config["CustomConfigurationsPath"] = oFCKeditor.BasePath+"/myfckconfig.js";
+
+ var content = "<div contenteditable='false' class=\"rssinclude\" name=\"rssinclude\" feedname=\"http://www.lemondeinformatique.fr/flux-rss/open-source/rss.xml\" nbitem=\"2\" feedrepr=\"n-n\">RSS http://www.lemondeinformatique.fr/flux-rss/open-source/rss.xml (items:2)</div><br></br>";
+ //content+="<div contenteditable='false' name=\"rssinclude\" class=\"rssinclude\" feedname=\"http://www.lemonde.fr/rss/sequence/0,2-3208,1-0,0.xml\" nbitem=\"2\" feedrepr=\"indat-natd\" \">RSS http://www.lemonde.fr/rss/sequence/0,2-3208,1-0,0.xml (items:2)</div><br/>";
+ //content+="<div contenteditable='false' name=\"rssinclude\" class=\"rssinclude\" feedname=\"http://blog.developpez.com/xmlsrv/rss2.php?blog=42\" nbitem=\"3\" feedRepr=\"indat-natd\" \">RSS http://blog.developpez.com/xmlsrv/rss2.php?blog=42 (items:3)</div><br/>";
+ //content+="<div contenteditable='false' name=\"rssinclude\" class=\"rssinclude\" feedname=\"http://formats-ouverts.org/rss.php\" nbitem=\"4\" feedrepr=\"indat-natd\" \">RSS http://formats-ouverts.org/rss.php (items:4)</div><br/>";
+ //content+="<div contenteditable='false' name=\"rssinclude\" class=\"rssinclude\" feedname=\"http://www.h2database.com/html/newsfeed-rss.xml\" nbitem=\"5\" feedRepr=\"indat-natd\" \">RSS http://www.h2database.com/html/newsfeed-rss.xml (items:5)</div><br/>";
+ //content+="<div contenteditable='false' name=\"rssinclude\" class=\"rssinclude\" feedname=\"http://www.opensi.org/news.rss\" nbitem=\"6\" feedrepr=\"indat-natd\" \">RSS http://www.opensi.org/news.rss (items:6)</div>";
+ content += "<s"+"cript src=\"/lutinrss-2.1/RSSServlet\"></scri"+"pt><hr/><p>content...</p>";
+ oFCKeditor.Value = content;
+ oFCKeditor.Create() ;
+ -->
+ </script>
+ <hr/>
+ <input type="submit" value="envoyer">
+</form>
+<p>(*) required a FCKEditor 2.6 available on / apache path (means /fckeditor points to fckeditor root directory)</p>
+<p>add custom config like this code :
+ <pre>
+var oFCKeditor = new FCKeditor( 'rssTest' ) ;
+oFCKeditor.Config["CustomConfigurationsPath"] = oFCKeditor.BasePath+"/myfckconfig.js";
+oFCKeditor.Create() ;
+ </pre>
+</p>
+
+
+</body>
+</html>
Modified: trunk/lutinrss/src/main/webapp/testGenerator.html
===================================================================
--- trunk/lutinrss/src/main/webapp/testGenerator.html 2008-05-31 16:34:27 UTC (rev 77)
+++ trunk/lutinrss/src/main/webapp/testGenerator.html 2008-05-31 19:08:24 UTC (rev 78)
@@ -37,9 +37,9 @@
<td width="50%" valign="top">
<form method="post" action="RSSGeneratorServlet">
<fieldset>
- <legend><input type="submit" value="create a new feed"></legend>
+ <legend> <input type="submit" value="create a new feed"> </legend>
<input type="hidden" name="action" value="create">
- <input type="hidden" name="from" value="/lutinrss-2.1/testGenerator.html">
+ <input type="hidden" name="from" value="testGenerator.html">
<table>
<tr>
<td>feedName (*) :</td>
@@ -65,11 +65,9 @@
<td width="50%" valign="top">
<form name="feeds" method="post" action="RSSGeneratorServlet">
<fieldset>
- <legend>
- <input type="submit" value="add item to feed" onclick="return doAction('addItem');">
+ <legend> <input type="submit" value="add item to feed" onclick="return doAction('addItem');">
<input type="submit" value="delete feed" onclick="return doAction('delete');">
- <input type="submit" value="show feed" onclick="return doAction('show');">
- </legend>
+ <input type="submit" value="show feed" onclick="return doAction('show');"> </legend>
<input type="hidden" name="from" value="testGenerator.html">
<input type="hidden" name="action" value="">
<table>
Copied: trunk/lutinrss/src/main/webapp/testRender.html (from rev 63, trunk/lutinrss/src/main/webapp/test.html)
===================================================================
--- trunk/lutinrss/src/main/webapp/testRender.html (rev 0)
+++ trunk/lutinrss/src/main/webapp/testRender.html 2008-05-31 19:08:24 UTC (rev 78)
@@ -0,0 +1,23 @@
+<!--
+ Document : test
+ Created on : 18 avr. 2008, 11:46:56
+ Author : poussin
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <title>Page de test rss</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <link href="feed.css" rel="stylesheet" type="text/css" />
+ <script src="RSSServlet"></script>
+</head>
+ <body>
+ <h1>Test RSS</h1>
+ <div name="rssinclude" class="rssinclude" feedName="http://www.lemondeinformatique.fr/flux-rss/open-source/rss.xml" nbItem="1" feedRepr="indat-natd"></div>
+ <div name="rssinclude" class="rssinclude" feedName="http://www.lemonde.fr/rss/sequence/0,2-3208,1-0,0.xml" nbItem="2" feedRepr="indat-natd"></div>
+ <div name="rssinclude" class="rssinclude" feedName="http://blog.developpez.com/xmlsrv/rss2.php?blog=42" nbItem="3" feedRepr="indat-natd"></div>
+ <div name="rssinclude" class="rssinclude" feedName="http://formats-ouverts.org/rss.php" nbItem="4" feedRepr="indat-natd"></div>
+ <div name="rssinclude" class="rssinclude" feedName="http://www.h2database.com/html/newsfeed-rss.xml" nbItem="5" feedRepr="indat-natd"></div>
+ <div name="rssinclude" class="rssinclude" feedName="http://www.opensi.org/news.rss" nbItem="6" feedRepr="indat-natd"></div>
+</body>
+</html>
Modified: trunk/lutinrss/src/test/java/org/codelutin/rss/RSSGeneratorHelperTest.java
===================================================================
--- trunk/lutinrss/src/test/java/org/codelutin/rss/RSSGeneratorHelperTest.java 2008-05-31 16:34:27 UTC (rev 77)
+++ trunk/lutinrss/src/test/java/org/codelutin/rss/RSSGeneratorHelperTest.java 2008-05-31 19:08:24 UTC (rev 78)
@@ -11,44 +11,59 @@
import java.text.ParseException;
import java.util.List;
import java.util.Map;
-import junit.framework.TestCase;
/**
*
* @author tony
*/
-public class RSSGeneratorHelperTest extends TestCase {
+public class RSSGeneratorHelperTest extends junit.framework.TestCase {
- RSSGeneratorHelper helper;
+ static RSSGenerator helper;
static File f;
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ if (helper == null) {
+ helper = RSSGenerator.newDefaultInstance();
+ }
+ if (f == null) {
+ f = getFeedFile();
+ }
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
public void testCreateFeed() throws Exception {
Map<Field, Object> values = new java.util.HashMap<Field, Object>();
values.put(Field.NAME, "feedName : " + f.getName());
values.put(Field.DESCRIPTION, "feedDescription : " + f.getName());
values.put(Field.LINK, f.toURI().toURL() + "");
- values.put(Field.TIME, RSSGeneratorHelper.DATE_PARSER.format(new java.util.Date()));
+ values.put(Field.TIME, RSSGenerator.DATE_PARSER.format(new java.util.Date()));
assertFalse(f.exists());
- RSSGeneratorHelper.log.info("feedFile : " + f);
- helper.createFeedFile(f.toURI().toURL(), RSSConfig.DEFAULT_GENERATOR_FORMAT, values);
+ RSSGenerator.log.info("feedFile : " + f);
+ helper.createFeedFile(f.toURI().toURL(), RSSGeneratorConfig.DEFAULT_GENERATOR_FORMAT, values);
// no lock
- assertFalse(new File(f.getAbsolutePath() + ".lock").exists());
+ assertFalse(helper.getWriteFileLock(f).exists());
// file exist
assertTrue(f.exists());
SyndFeed feed = RSSIOUtil.readFeed(f.toURI().toURL());
- if (RSSGeneratorHelper.log.isDebugEnabled()) {
- RSSGeneratorHelper.log.debug(feed);
+ if (RSSGenerator.log.isDebugEnabled()) {
+ RSSGenerator.log.debug(feed);
}
- assertEquals(feed.getFeedType(), RSSConfig.DEFAULT_GENERATOR_FORMAT.getType());
+ assertEquals(feed.getFeedType(), RSSGeneratorConfig.DEFAULT_GENERATOR_FORMAT.getType());
assertEquals(feed.getLink(), values.get(Field.LINK));
assertEquals(feed.getTitle(), values.get(Field.NAME));
assertEquals(feed.getDescription(), values.get(Field.DESCRIPTION));
- assertEquals(feed.getPublishedDate(), RSSGeneratorHelper.DATE_PARSER.parse((String) values.get(Field.TIME)));
+ assertEquals(feed.getPublishedDate(), RSSGenerator.DATE_PARSER.parse((String) values.get(Field.TIME)));
}
@@ -58,12 +73,12 @@
values.put(Field.NAME, "feedName : " + f.getName());
values.put(Field.DESCRIPTION, "feedDescription : " + f.getName());
values.put(Field.LINK, f.toURI().toURL() + "");
- values.put(Field.TIME, RSSGeneratorHelper.DATE_PARSER.format(new java.util.Date()));
+ values.put(Field.TIME, RSSGenerator.DATE_PARSER.format(new java.util.Date()));
assertTrue(f.exists());
try {
- helper.createFeedFile(f.toURI().toURL(), FeedType.RSS_1_0, values);
+ helper.createFeedFile(f.toURI().toURL(), RSSGeneratorConfig.DEFAULT_GENERATOR_FORMAT, values);
// file already exist, can not reach this code
fail();
} catch (IllegalStateException e) {
@@ -85,8 +100,8 @@
List entries = feed.getEntries();
assertEquals(1, entries.size());
- if (RSSGeneratorHelper.log.isDebugEnabled()) {
- RSSGeneratorHelper.log.debug(feed);
+ if (RSSGenerator.log.isDebugEnabled()) {
+ RSSGenerator.log.debug(feed);
}
SyndEntry entry = (SyndEntry) entries.get(0);
@@ -158,11 +173,11 @@
assertEquals(entry.getLink(), values.get(Field.LINK));
assertEquals(entry.getTitle(), values.get(Field.NAME));
assertEquals(entry.getDescription().getValue(), values.get(Field.DESCRIPTION));
- assertEquals(entry.getPublishedDate(), RSSGeneratorHelper.DATE_PARSER.parse((String) values.get(Field.TIME)));
+ assertEquals(entry.getPublishedDate(), RSSGenerator.DATE_PARSER.parse((String) values.get(Field.TIME)));
}
protected File getFeedFile() {
- return new File("/tmp/" + getClass().getSimpleName() + "-" + System.nanoTime() + ".xml");
+ return new File(helper.getGeneratorDirectory(), getClass().getSimpleName() + "-" + System.nanoTime() + ".xml");
}
protected Map<Field, Object> createEntry(int number) throws MalformedURLException {
@@ -170,21 +185,8 @@
values.put(Field.NAME, "entryName : " + f.getName() + "-" + number);
values.put(Field.DESCRIPTION, "entryDescription : " + f.getName() + "-" + number);
values.put(Field.LINK, f.toURI().toURL() + "/entry-" + number);
- values.put(Field.TIME, RSSGeneratorHelper.DATE_PARSER.format(new java.util.Date()));
+ values.put(Field.TIME, RSSGenerator.DATE_PARSER.format(new java.util.Date()));
return values;
}
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- helper = RSSGeneratorHelper.getInstance();
- if (f == null) {
- f = getFeedFile();
- }
- }
-
- @Override
- protected void tearDown() throws Exception {
- super.tearDown();
- }
}
1
0
[Lutinweb-commits] r77 - trunk/lutinrss/src/main/webapp
by tchemit@users.labs.libre-entreprise.org 31 May '08
by tchemit@users.labs.libre-entreprise.org 31 May '08
31 May '08
Author: tchemit
Date: 2008-05-31 16:34:27 +0000 (Sat, 31 May 2008)
New Revision: 77
Modified:
trunk/lutinrss/src/main/webapp/rssgenerator.js
trunk/lutinrss/src/main/webapp/testGenerator.html
Log:
finish ui rss generator testor
Modified: trunk/lutinrss/src/main/webapp/rssgenerator.js
===================================================================
--- trunk/lutinrss/src/main/webapp/rssgenerator.js 2008-05-31 16:33:29 UTC (rev 76)
+++ trunk/lutinrss/src/main/webapp/rssgenerator.js 2008-05-31 16:34:27 UTC (rev 77)
@@ -34,14 +34,15 @@
var i=0;
var max = divs.length;
while (i<max) {
+ var divText=text;
var div = divs[i++];
- if (!!select) {
- var name = div.getAttribute("action");
- text = "<select name='"+name+"' length='50'>" + text+"</select>"
- }
- div.innerHTML =text;
+ if (!!select && text.indexOf("error")==-1) {
+ var name = div.getAttribute("action");
+ divText = "<select name='"+name+"' length='50'>" + text+"</select>"
+ }
+ div.innerHTML =divText;
}
-
}
+// load initRssGenerator
if (window.addEventListener) window.addEventListener( 'load', initRssGenerator,false);
else if (window.attachEvent) window.attachEvent( 'onload', initRssGenerator);
Modified: trunk/lutinrss/src/main/webapp/testGenerator.html
===================================================================
--- trunk/lutinrss/src/main/webapp/testGenerator.html 2008-05-31 16:33:29 UTC (rev 76)
+++ trunk/lutinrss/src/main/webapp/testGenerator.html 2008-05-31 16:34:27 UTC (rev 77)
@@ -7,62 +7,100 @@
<html>
<head>
<title>Page de test de génération de flux rss</title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <style type="text/css">
+ .error {color:red; display:block;}
+ fieldset {height:120px;}
+ iframe { width:100%;height:400px;}
+ </style>
<script src="rssgenerator.js"></script>
+ <script>
+ var doAction=function(action) {
+ var form = document.feeds;
+ form.action.value=action;
+ if (action=='show'){
+ //form.method='get';
+ form.target='content';
+ } else {
+ //form.action.value=action;
+ //form.method='post';
+ form.target='';
+ }
+ return true;
+ }
+ </script>
</head>
<body>
<h1>Test RSS Generator</h1>
- <fieldset style="width:200px">
- <legend>Create new feed</legend>
- <form method="post" action="RSSGeneratorServlet?action=create">
- <input type="hidden" name="from" value="/lutinrss-2.1/testGenerator.html">
- <table>
- <tr>
- <td>feedName :</td>
- <td><input name="feedName" type="text" size="50"></td>
- </tr>
- <tr>
- <td>feedDescription: </td>
- <td><input name="feedDescription" type="text" size="50"></td>
- </tr>
- <tr>
- <td>feedLink : </td>
- <td><input name="feedLink" type="text" size="50"></td>
- </tr>
- <tr>
- <td colspan="2" align="right"><input type="submit" value="create"></td>
- </tr>
- </table>
- </form>
- </fieldset>
- <fieldset style="width:200px">
- <legend>Add item to known feed</legend>
- <form method="post" action="RSSGeneratorServlet?action=addItem">
- <input type="hidden" name="from" value="/lutinrss-2.1/testGenerator.html">
- <table>
- <tr>
- <td>feedName :</td>
- <td width="100%">
- <div name="rssgeneratorlist" action="feedName" with="100%"></div>
- </td>
- </tr>
- <tr>
- <td>itemName :</td>
- <td><input name="itemName" type="text" size="50"></td>
- </tr>
- <tr>
- <td>itemDescription: </td>
- <td><input name="itemDescription" type="text" size="50"></td>
- </tr>
- <tr>
- <td>itemLink : </td>
- <td><input name="itemLink" type="text" size="50"></td>
- </tr>
- <tr>
- <td colspan="2" align="right"><input type="submit" value="create"></td>
- </tr>
- </table>
- </form>
- </fieldset>
+ <table width="100%">
+ <tr>
+ <td width="50%" valign="top">
+ <form method="post" action="RSSGeneratorServlet">
+ <fieldset>
+ <legend><input type="submit" value="create a new feed"></legend>
+ <input type="hidden" name="action" value="create">
+ <input type="hidden" name="from" value="/lutinrss-2.1/testGenerator.html">
+ <table>
+ <tr>
+ <td>feedName (*) :</td>
+ <td><input name="feedName" type="text" size="50"></td>
+ </tr>
+ <tr>
+ <td>feedDescription (*) : </td>
+ <td><input name="feedDescription" type="text" size="50"></td>
+ </tr>
+ <tr>
+ <td>feedLink (*) : </td>
+ <td><input name="feedLink" type="text" size="50"></td>
+ </tr>
+ <tr>
+ <td>feedAuthor : </td>
+ <td><input name="feedAuthor" type="text" size="50"></td>
+ </tr>
+ <tr><td style="font-size:11px">(*) Mandatory field</td></tr>
+ </table>
+ </fieldset>
+ </form>
+ </td>
+ <td width="50%" valign="top">
+ <form name="feeds" method="post" action="RSSGeneratorServlet">
+ <fieldset>
+ <legend>
+ <input type="submit" value="add item to feed" onclick="return doAction('addItem');">
+ <input type="submit" value="delete feed" onclick="return doAction('delete');">
+ <input type="submit" value="show feed" onclick="return doAction('show');">
+ </legend>
+ <input type="hidden" name="from" value="testGenerator.html">
+ <input type="hidden" name="action" value="">
+ <table>
+ <tr>
+ <td>feedName :</td>
+ <td>
+ <div name="rssgeneratorlist" action="feedName"></div>
+ </td>
+ </tr>
+ <tr>
+ <td>itemName :</td>
+ <td><input name="itemName" type="text" size="50"></td>
+ </tr>
+ <tr>
+ <td>itemDescription: </td>
+ <td><input name="itemDescription" type="text" size="50"></td>
+ </tr>
+ <tr>
+ <td>itemLink : </td>
+ <td><input name="itemLink" type="text" size="50"></td>
+ </tr>
+ <tr>
+ <td>itemAuthor : </td>
+ <td><input name="itemAuthor" type="text" size="50"></td>
+ </tr>
+ </table>
+ </fieldset>
+ </form>
+ </td>
+ </tr>
+ </table>
+ <iframe name="content" scrolling="yes" frameborder="1"></iframe>
</body>
</html>
1
0
[Lutinweb-commits] r76 - trunk/lutinrss/src/main/java/org/codelutin/rss
by tchemit@users.labs.libre-entreprise.org 31 May '08
by tchemit@users.labs.libre-entreprise.org 31 May '08
31 May '08
Author: tchemit
Date: 2008-05-31 16:33:29 +0000 (Sat, 31 May 2008)
New Revision: 76
Added:
trunk/lutinrss/src/main/java/org/codelutin/rss/BaseServlet.java
trunk/lutinrss/src/main/java/org/codelutin/rss/ConfigInitializer.java
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorConfig.java
Removed:
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorHelper.java
Modified:
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSHelper.java
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSIOUtil.java
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSServlet.java
Log:
refactor RSSSevlet and RSSGeneratorServlet
Added: trunk/lutinrss/src/main/java/org/codelutin/rss/BaseServlet.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/BaseServlet.java (rev 0)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/BaseServlet.java 2008-05-31 16:33:29 UTC (rev 76)
@@ -0,0 +1,112 @@
+package org.codelutin.rss;
+
+import java.io.*;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * <p>
+ * Servlet de base
+ * @param D la classe de l'object de delegation
+ *
+ * @author chemit
+ */
+public abstract class BaseServlet<D> extends HttpServlet {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ protected static final Log log = LogFactory.getLog(BaseServlet.class);
+ /** L'objet de delegation du metier de la servlet */
+ protected transient D delegate;
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ * @return the new delegate object to be used by servlet
+ * @throws java.lang.Exception if any problem while instanciation
+ */
+ protected abstract D newDelegate() throws Exception;
+
+ /**
+ *
+ * @return a new ConfigInitializer to be used in
+ * {@link #init(javax.servlet.ServletConfig, boolean)} method to prepare
+ * default config.
+ */
+ protected abstract ConfigInitializer<ServletConfig,? > newConfigInitializer();
+
+ /**
+ * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
+ * @param request servlet request
+ * @param response servlet response
+ * @throws java.io.IOException TODO
+ * @throws ServletException TODO
+ */
+ protected abstract void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
+
+ @Override
+ public void init(ServletConfig config) throws ServletException {
+ init(config, true);
+ }
+
+ protected void init(ServletConfig config, boolean initConfig) throws ServletException {
+ try {
+ super.init(config);
+ if (initConfig) {
+ // init de la configuration par defaut depuis la config de servlet
+ newConfigInitializer().init(config);
+ }
+ // instanciate delegate
+ delegate = newDelegate();
+ } catch (Exception eee) {
+ log.warn("Can't configure Servlet", eee);
+ if (eee instanceof ServletException) {
+ throw (ServletException) eee;
+ }
+ throw new ServletException("Can't configure Servlet", eee);
+ }
+ }
+
+ protected Integer convertToInt(String parameter) {
+ Integer result = null;
+ try {
+ result = Integer.parseInt(parameter);
+ } catch (Exception eee) {
+ log.debug("Can't convert to int: '" + parameter + "'", eee);
+ }
+ return result;
+ }
+ // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
+ /**
+ * Handles the HTTP <code>GET</code> method.
+ * @param request servlet request
+ * @param response servlet response
+ */
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ processRequest(request, response);
+ }
+
+ /**
+ * Handles the HTTP <code>POST</code> method.
+ * @param request servlet request
+ * @param response servlet response
+ */
+ @Override
+ protected void doPost(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ processRequest(request, response);
+ }
+
+ /**
+ * Returns a short description of the servlet.
+ */
+ @Override
+ public String getServletInfo() {
+ return "RSS Servlet";
+ }
+ // </editor-fold>
+}
Added: trunk/lutinrss/src/main/java/org/codelutin/rss/ConfigInitializer.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/ConfigInitializer.java (rev 0)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/ConfigInitializer.java 2008-05-31 16:33:29 UTC (rev 76)
@@ -0,0 +1,60 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.codelutin.rss;
+
+import org.apache.commons.beanutils.BeanUtils;
+
+/**
+ *
+ * @author tony
+ *
+ * @param S la classe source de la configuration
+ * @param T la classe destination de la configuration
+ */
+public abstract class ConfigInitializer<S,D> {
+
+
+ /**
+ *
+ * @param config l'object source contenant les configs
+ * @param fullConfigName le nom complet de la propriete recherchee
+ * @return la valeur de la propriete ou null si non trouve
+ */
+ protected abstract String getConfigValue(S config, String fullConfigName);
+
+ public abstract void init(S config) ;
+
+ /**
+ * Initialise RSSConfig.
+ * @param klass la class de la configuration de destination
+ * @param config la configuration source
+ */
+ public void init(String prefix,Class<D> klass, S config, String... keys) {
+ try {
+ String prefixConfig = getConfigValue(config, prefix);
+ prefixConfig = prefixConfig == null ? "" : prefixConfig.trim();
+
+ D instance = klass.newInstance();
+ for (String key : keys) {
+ loadConfig(config, instance, prefixConfig, key);
+ }
+ } catch (InstantiationException ex) {
+ throw new RuntimeException(ex);
+ } catch (IllegalAccessException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ protected void loadConfig(S config, D instance, String prefix, String configName) {
+ String value = getConfigValue(config, prefix + configName);
+ if (value != null && !"".equals(value)) {
+ try {
+ BeanUtils.setProperty(instance, configName, value);
+ } catch (Exception ex) {
+ throw new IllegalStateException("could not load property " + configName + " from config " + config + " for reason : " + ex.getMessage());
+ }
+ }
+ }
+}
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java 2008-05-30 20:39:08 UTC (rev 75)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java 2008-05-31 16:33:29 UTC (rev 76)
@@ -1,10 +1,8 @@
package org.codelutin.rss;
-import java.io.File;
-import org.apache.commons.beanutils.BeanUtils;
-
/**
- *
+ * Default configuration for {@link RSSHelper}.
+ *
* @author poussin
*/
public class RSSConfig {
@@ -12,23 +10,14 @@
/**
* la propriete de configuration qui definit le prefix a jouter pour scruter la configuration
*/
- protected static final String CONFIGURATION_PREFIX_PROPERTY = RSSServlet.class.getSimpleName() + "_configuration_prefix";
+ private static final String CONFIGURATION_PREFIX_PROPERTY = RSSServlet.class.getSimpleName() + "_configuration_prefix";
+
/** Temps a partir duquel on reforce une recuperation */
public static long TIME_FORCE_RETRIEVED = 5 * 60 * 1000;
-
public static FeedRendererConfig DEFAULT_RENDERER_CONFIG = new FeedRendererConfig("n-natd");
-
- public static int DEFAULT_NB_ITEM = 7;
-
- public static int DEFAULT_GENERATOR_NB_ITEM = 100;
-
- public static FeedType DEFAULT_GENERATOR_FORMAT = FeedType.RSS_2_0;
-
- public static String GENERATOR_DIRECTORY = "/tmp/rssinclude";
-
+ public static int DEFAULT_NB_ITEM = 7;
public static Class<? extends FeedRenderer> DEFAULT_RENDERER_CLASS = FeedHTMLRenderer.class;
-
public static Class<? extends FeedURLResolver> DEFAULT_RESOLVER_CLASS = SimpleFeedURLResolver.class;
public void setTIME_FORCE_RETRIEVED(long TIME_FORCE_RETRIEVED) {
@@ -51,63 +40,24 @@
RSSConfig.DEFAULT_RESOLVER_CLASS = DEFAULT_RESOLVER_CLASS;
}
- public static void setDEFAULT_GENERATOR_NB_ITEM(int DEFAULT_GENERATOR_NB_ITEM) {
- RSSConfig.DEFAULT_GENERATOR_NB_ITEM = DEFAULT_GENERATOR_NB_ITEM;
- }
-
- public static void setDEFAULT_GENERATOR_FORMAT(FeedType DEFAULT_GENERATOR_FORMAT) {
- RSSConfig.DEFAULT_GENERATOR_FORMAT = DEFAULT_GENERATOR_FORMAT;
- }
-
- public static void setGENERATOR_DIRECTORY(String GENERATOR_DIRECTORY) {
- RSSConfig.GENERATOR_DIRECTORY = GENERATOR_DIRECTORY;
- }
-
-
/**
*
- * @param T la classe sources de la configuration
+ * @param S la classe source de la configuration
*/
- public static abstract class RSSConfigInitializer<T> {
+ public static abstract class RSSConfigInitializer<S> extends ConfigInitializer<S,RSSConfig > {
/**
- *
- * @param config l'object source contenant les configs
- * @param fullConfigName le nom complet de la propriete recherchee
- * @return la valeur de la propriete ou null si non trouve
- */
- protected abstract String getConfigValue(T config, String fullConfigName);
-
- /**
* Initialise RSSConfig.
- * @param config l'object de configuration
+ * @param config la configuration source
*/
- public void init(T config) {
- String prefixConfig = getConfigValue(config, CONFIGURATION_PREFIX_PROPERTY);
- prefixConfig = prefixConfig == null ? "" : prefixConfig.trim();
- RSSConfig instance = new RSSConfig();
- loadConfig(config, instance, prefixConfig, "TIME_FORCE_RETRIEVED");
- loadConfig(config, instance, prefixConfig, "DEFAULT_RENDERER_CONFIG");
- loadConfig(config, instance, prefixConfig, "DEFAULT_NB_ITEM");
- loadConfig(config, instance, prefixConfig, "DEFAULT_RENDERER_CLASS");
- loadConfig(config, instance, prefixConfig, "DEFAULT_RESOLVER_CLASS");
- loadConfig(config, instance, prefixConfig, "DEFAULT_GENERATOR_NB_ITEM");
- loadConfig(config, instance, prefixConfig, "DEFAULT_GENERATOR_FORMAT");
- loadConfig(config, instance, prefixConfig, "GENERATOR_DIRECTORY");
-
- // create generator directory
- new File(GENERATOR_DIRECTORY).mkdirs();
+ public void init(S config) {
+ RSSHelper.log.info("with source "+config);
+ super.init(CONFIGURATION_PREFIX_PROPERTY,RSSConfig.class, config,
+ "TIME_FORCE_RETRIEVED",
+ "DEFAULT_RENDERER_CONFIG",
+ "DEFAULT_NB_ITEM",
+ "DEFAULT_RENDERER_CLASS",
+ "DEFAULT_RESOLVER_CLASS");
}
-
- protected void loadConfig(T config, RSSConfig instance, String prefix, String configName) {
- String value = getConfigValue(config, prefix + configName);
- if (value != null && !"".equals(value)) {
- try {
- BeanUtils.setProperty(instance, configName, value);
- } catch (Exception ex) {
- throw new IllegalStateException("could not load property " + configName + " from config " + config + " for reason : " + ex.getMessage());
- }
- }
- }
}
}
Copied: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java (from rev 74, trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorHelper.java)
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java (rev 0)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java 2008-05-31 16:33:29 UTC (rev 76)
@@ -0,0 +1,242 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.codelutin.rss;
+
+import com.sun.syndication.feed.synd.SyndEntry;
+import com.sun.syndication.feed.synd.SyndFeed;
+import com.sun.syndication.io.FeedException;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.channels.FileChannel;
+import java.nio.channels.FileLock;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.EnumMap;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * generator of rss feeds to be stored in a file
+ * @author tony
+ */
+public class RSSGenerator {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static final Log log = LogFactory.getLog(RSSGenerator.class);
+ /** date formater use to save date in feed and entries */
+ static final DateFormat DATE_PARSER = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
+
+ /**
+ *
+ * @return une nouvelle instance de RssHelper en utilisant les implantations
+ * definies dans RSSGeneratorConfig.
+ * @throws java.lang.Exception pour tout pb lors de l'instanciation des objects
+ */
+ public static RSSGenerator newDefaultInstance() throws Exception {
+ RSSGenerator helper = new RSSGenerator();
+ return helper;
+ }
+
+
+ /** dictonnary of field <-> property for feed */
+ protected final EnumMap<Field, String> feedProperties;
+ /** dictonnary of field <-> property for entry */
+ protected final EnumMap<Field, String> itemProperties;
+ /** directory where feeds are stored */
+ protected final File generatorDirectory;
+
+ protected RSSGenerator() {
+ this(null);
+ }
+
+ protected RSSGenerator(EnumMap<Field, String> feedProperties, EnumMap<Field, String> itemProperties, File generatorDirectory) {
+ this.feedProperties = feedProperties;
+ this.itemProperties = itemProperties;
+ this.generatorDirectory = generatorDirectory;
+ }
+
+ protected RSSGenerator(File generatorDirectory) {
+
+ feedProperties = new EnumMap<Field, String>(Field.class);
+ feedProperties.put(Field.NAME, "title");
+ feedProperties.put(Field.LINK, "link");
+ // cela engendre des NPE...
+ feedProperties.put(Field.IMAGE, "image.url");
+ feedProperties.put(Field.DESCRIPTION, "description");
+ feedProperties.put(Field.AUTHOR, "author");
+ feedProperties.put(Field.TIME, "publishedDate");
+
+ itemProperties = new EnumMap<Field, String>(Field.class);
+ itemProperties.put(Field.NAME, "title");
+ itemProperties.put(Field.LINK, "link");
+ itemProperties.put(Field.IMAGE, null);
+ itemProperties.put(Field.DESCRIPTION, "description.value");
+ itemProperties.put(Field.AUTHOR, "author");
+ itemProperties.put(Field.TIME, "publishedDate");
+
+ this.generatorDirectory = generatorDirectory==null?new File(RSSGeneratorConfig.GENERATOR_DIRECTORY):generatorDirectory;
+ }
+
+ /**
+ *
+ * @param url location where to create the file
+ * @param type fromat of feed to create
+ * @param values properties of the feed
+ * @throws ParseException if pb while parsing date
+ * @throws IOException if io pb
+ * @throws FeedException if pb while creating feed
+ */
+ public void createFeedFile(URL url, FeedType type, Map<Field, Object> values) throws IOException, FeedException, ParseException {
+ if (url == null) {
+ throw new NullPointerException("can not create a feed with null url");
+ }
+ if (type == null) {
+ throw new NullPointerException("can not create a feed with null feedtype");
+ }
+ if (values == null || values.isEmpty()) {
+ //TODO Should check mandatory values (title, link,...)
+ throw new NullPointerException("can not create a feed with null nor empty values dictonnary");
+ }
+ File f = getFile(url);
+
+ if (f.exists()) {
+ throw new IllegalStateException("feed already existing in " + f.getName());
+ }
+
+ // make sure parent exists
+ f.getParentFile().mkdirs();
+
+ // block until can acquire lock
+ FileLock lock = acquireLock(f);
+
+ try {
+
+ SyndFeed feed = RSSIOUtil.createFeed(feedProperties, type, values);
+
+ RSSIOUtil.saveFeed(f, feed);
+
+ } catch (FeedException e) {
+ // file must not be created
+ f.delete();
+ throw e;
+ } catch (ParseException e) {
+ // file must not be created
+ f.delete();
+ throw e;
+ } finally {
+ releaseLock(f, lock);
+ }
+ }
+
+ /**
+ * Add a item to an existing feed file.
+ *
+ * @param url location of feed to used
+ * @param nbEntries number of maximum entries to be written in feed file
+ * @param values dictionnary of properties to write
+ * @throws FeedException if feed pb
+ * @throws IOException if io pb
+ * @throws ParseException if dateparser pb
+ */
+ public void addItemToFeedFile(URL url, int nbEntries, Map<Field, Object> values) throws IOException, FeedException, ParseException {
+ if (url == null) {
+ throw new NullPointerException("can not add a feed's entry with null url");
+ }
+ if (values == null || values.isEmpty()) {
+ //TODO Should check mandatory values (title, link,...)
+ throw new NullPointerException("can not add a feed's entry with null nor empty values dictonnary");
+ }
+ File f = getFile(url);
+
+ if (!f.exists()) {
+ throw new FileNotFoundException("file not existing " + f);
+ }
+
+ // block until can acquire lock
+ FileLock lock = acquireLock(f);
+
+ try {
+ // get feed
+ SyndFeed feed = RSSIOUtil.readFeed(url);
+
+ // create item
+ SyndEntry item = RSSIOUtil.createFeedItem(itemProperties, values);
+
+ // add item
+ feed = RSSIOUtil.addItemToFeed(feed, item, nbEntries, values);
+
+ // save feed into a tmp file
+ File tmpFile = new File(f.getAbsolutePath() + "-tmp_" + System.nanoTime());
+
+ RSSIOUtil.saveFeed(tmpFile, feed);
+
+ // move tmpFile to real file
+ tmpFile.renameTo(f);
+ } finally {
+ releaseLock(f, lock);
+ }
+ }
+
+ public void deleteFeedFile(URL toURL) {
+ File f = getFile(toURL);
+ if (f.exists() && !f.delete()) {
+ throw new IllegalStateException("could not delete feed " + f.getName());
+ }
+ }
+
+ /**
+ * Obtain the file from his url location.
+ *
+ * @param url location of the file
+ * @return the file
+ * @throws java.lang.IllegalStateException if uri is not sytax valid
+ */
+ protected File getFile(URL url) throws IllegalStateException {
+ try {
+ return new File(url.toURI());
+ } catch (URISyntaxException e) {
+ throw new IllegalStateException("could not obtain file from url " + url, e);
+ }
+ }
+
+ protected FileLock acquireLock(File f) throws IOException {
+ File lockFile = getWriteFileLock(f);
+
+ /*if (!lockFile.exists()) lockFile.createNewFile(); */
+ // open file for writing only
+ FileChannel channel = new RandomAccessFile(lockFile, "rw").getChannel();
+
+ // block until can acquire lock
+
+ return channel.lock();
+ }
+
+ protected File getWriteFileLock(File f) {
+ return new File(f.getParentFile(), f.getName() + ".wlock");
+ }
+
+ protected void releaseLock(File f, FileLock lock) throws IOException {
+ // release lock
+ lock.release();
+ // close channel
+ lock.channel().close();
+ // delete file lock
+ File lockFile = getWriteFileLock(f);
+ // delete lock file
+ lockFile.delete();
+ }
+
+ public File getGeneratorDirectory() {
+ return generatorDirectory;
+ }
+
+}
Added: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorConfig.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorConfig.java (rev 0)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorConfig.java 2008-05-31 16:33:29 UTC (rev 76)
@@ -0,0 +1,55 @@
+package org.codelutin.rss;
+
+/**
+ *
+ * Default Configuration for {@link RSSGenerator}.
+ *
+ * @author chemit
+ */
+public class RSSGeneratorConfig {
+
+ /**
+ * la propriete de configuration qui definit le prefix a jouter pour scruter la configuration
+ */
+ private static final String CONFIGURATION_PREFIX_PROPERTY = RSSGeneratorServlet.class.getSimpleName() + "_configuration_prefix";
+
+ public static int DEFAULT_GENERATOR_NB_ITEM = 100;
+ public static FeedType DEFAULT_GENERATOR_FORMAT = FeedType.RSS_2_0;
+ public static String GENERATOR_DIRECTORY = "/tmp/rssinclude";
+
+ public static void setDEFAULT_GENERATOR_NB_ITEM(int DEFAULT_GENERATOR_NB_ITEM) {
+ RSSGeneratorConfig.DEFAULT_GENERATOR_NB_ITEM = DEFAULT_GENERATOR_NB_ITEM;
+ }
+
+ public static void setDEFAULT_GENERATOR_FORMAT(FeedType DEFAULT_GENERATOR_FORMAT) {
+ RSSGeneratorConfig.DEFAULT_GENERATOR_FORMAT = DEFAULT_GENERATOR_FORMAT;
+ }
+
+ public static void setGENERATOR_DIRECTORY(String GENERATOR_DIRECTORY) {
+ RSSGeneratorConfig.GENERATOR_DIRECTORY = GENERATOR_DIRECTORY;
+ }
+
+ /**
+ *
+ * @param S la classe source de la configuration
+ */
+ public static abstract class RssGeneratorConfigInitializer<S> extends ConfigInitializer<S,RSSGeneratorConfig> {
+
+ /**
+ * Initialise RSSGeneratorConfig.
+ * @param config la configuration source
+ */
+ public void init(S config) {
+ RSSGenerator.log.info("with source "+config);
+
+ super.init(CONFIGURATION_PREFIX_PROPERTY,RSSGeneratorConfig.class, config,
+ "DEFAULT_GENERATOR_NB_ITEM",
+ "DEFAULT_GENERATOR_FORMAT",
+ "GENERATOR_DIRECTORY");
+
+ // create delegate directory
+ new java.io.File(GENERATOR_DIRECTORY).mkdirs();
+
+ }
+ }
+}
Deleted: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorHelper.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorHelper.java 2008-05-30 20:39:08 UTC (rev 75)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorHelper.java 2008-05-31 16:33:29 UTC (rev 76)
@@ -1,298 +0,0 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-package org.codelutin.rss;
-
-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 java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.nio.channels.FileChannel;
-import java.nio.channels.FileLock;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.EnumMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.commons.beanutils.BeanUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * helper class to write rss feeds in a file
- * @author tony
- */
-public class RSSGeneratorHelper {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static final Log log = LogFactory.getLog(RSSGeneratorHelper.class);
- /** date formater use to save date in feed and entries */
- static final DateFormat DATE_PARSER = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
- /** shared jvm instance */
- protected static RSSGeneratorHelper instance;
- /** dictonnary of field <-> property for feed */
- protected final EnumMap<Field, String> feedProperties;
- /** dictonnary of field <-> property for entry */
- protected final EnumMap<Field, String> itemProperties;
-
- public static RSSGeneratorHelper getInstance() {
- if (instance == null) {
- instance = new RSSGeneratorHelper();
- }
- return instance;
- }
-
- protected RSSGeneratorHelper() {
- itemProperties = new EnumMap<Field, String>(Field.class);
- feedProperties = new EnumMap<Field, String>(Field.class);
- feedProperties.put(Field.NAME, "title");
- feedProperties.put(Field.LINK, "link");
- // cela engendre des NPE...
- feedProperties.put(Field.IMAGE, "image.url");
- feedProperties.put(Field.DESCRIPTION, "description");
- feedProperties.put(Field.AUTHOR, "author");
- feedProperties.put(Field.TIME, "publishedDate");
-
- itemProperties.put(Field.NAME, "title");
- itemProperties.put(Field.LINK, "link");
- itemProperties.put(Field.IMAGE, null);
- itemProperties.put(Field.DESCRIPTION, "description.value");
- itemProperties.put(Field.AUTHOR, "author");
- itemProperties.put(Field.TIME, "publishedDate");
- }
-
- /**
- *
- * @param url location where to create the file
- * @param type fromat of feed to create
- * @param values properties of the feed
- * @throws ParseException if pb while parsing date
- * @throws IOException if io pb
- * @throws FeedException if pb while creating feed
- */
- public void createFeedFile(URL url, FeedType type, Map<Field, Object> values) throws IOException, FeedException, ParseException {
- if (url == null) {
- throw new NullPointerException("can not create a feed with null url");
- }
- if (type == null) {
- throw new NullPointerException("can not create a feed with null feedtype");
- }
- if (values == null || values.isEmpty()) {
- //TODO Should check mandatory values (title, link,...)
- throw new NullPointerException("can not create a feed with null nor empty values dictonnary");
- }
- File f = getFile(url);
-
- if (f.exists()) {
- throw new IllegalStateException("file already existing in " + url);
- }
-
- // make sure parent exists
- f.getParentFile().mkdirs();
-
- // block until can acquire lock
- FileLock lock = acquireLock(f);
-
- try {
-
- SyndFeed feed = createFeed(type, values);
-
- RSSIOUtil.saveFeed(f, feed);
-
- } finally {
- releaseLock(f, lock);
- }
- }
-
- /**
- * Add a item to an existing feed file.
- *
- * @param url location of feed to used
- * @param nbEntries number of maximum entries to be written in feed file
- * @param values dictionnary of properties to write
- * @throws FeedException if feed pb
- * @throws IOException if io pb
- * @throws ParseException if dateparser pb
- */
- public void addItemToFeedFile(URL url, int nbEntries, Map<Field, Object> values) throws IOException, FeedException, ParseException {
- if (url == null) {
- throw new NullPointerException("can not add a feed's entry with null url");
- }
- if (values == null || values.isEmpty()) {
- //TODO Should check mandatory values (title, link,...)
- throw new NullPointerException("can not add a feed's entry with null nor empty values dictonnary");
- }
- File f = getFile(url);
-
- if (!f.exists()) {
- throw new FileNotFoundException("file not existing " + f);
- }
-
- // block until can acquire lock
- FileLock lock = acquireLock(f);
-
- try {
- // get feed and add the new item
- SyndFeed feed = addItemToFeed(url, nbEntries, values);
-
- // save feed into a tmp file
- File tmpFile = new File(f.getAbsolutePath() + "-tmp_" + System.nanoTime());
-
- RSSIOUtil.saveFeed(tmpFile, feed);
-
- // move tmpFile to real file
- tmpFile.renameTo(f);
- } finally {
- releaseLock(f, lock);
- }
- }
-
- protected SyndFeed createFeed(FeedType type, Map<Field, Object> values) throws ParseException {
- SyndFeed feed = new SyndFeedImpl();
- feed.setFeedType(type.getType());
- feed.setEncoding("utf-8");
- for (Entry<Field, Object> entry : values.entrySet()) {
- Field field = entry.getKey();
- String name = feedProperties.get(field);
- if (name == null) {
- // this field is not managed
- log.warn("the field " + field + " is not managed in feed");
- continue;
- }
- Object value = entry.getValue();
- Object realValue;
- switch (field) {
- case TIME:
- realValue = DATE_PARSER.parse((String) value);
- break;
- default:
- realValue = value;
- }
-
- setFieldValue(feed, name, realValue);
- }
-
- return feed;
- }
-
- protected SyndEntry createFeedItem(Map<Field, Object> values) throws ParseException {
-
- SyndEntry feedEntry = new SyndEntryImpl();
-
- for (Entry<Field, Object> entry : values.entrySet()) {
- Field field = entry.getKey();
- String name = itemProperties.get(field);
- if (name == null) {
- // this field is not managed
- log.warn("the field " + field + " is not managed in item");
- continue;
- }
- Object value = entry.getValue();
- Object realValue;
- switch (field) {
- case TIME:
- realValue = DATE_PARSER.parse((String) value);
- break;
- case DESCRIPTION:
- //TODO Deal with xml content ?
- SyndContent description = new SyndContentImpl();
- description.setType("text/plain");
- feedEntry.setDescription(description);
- realValue = String.valueOf(value);
- break;
- default:
- realValue = value;
- }
- setFieldValue(feedEntry, name, realValue);
- }
-
- return feedEntry;
- }
-
- @SuppressWarnings({"unchecked"})
- protected SyndFeed addItemToFeed(URL url, int nbEntries, Map<Field, Object> values) throws IOException, IllegalArgumentException, FeedException, ParseException {
- SyndFeed feed = RSSIOUtil.readFeed(url);
- List<SyndEntry> entries = feed.getEntries();
- if (!entries.isEmpty()) {
- // always sort by publication date
- java.util.Collections.sort(entries, new FeedEntryComparator());
- // keep only nbEntries -1 entries
- while (entries.size() > nbEntries - 1) {
- entries.remove(0);
- }
- }
- SyndEntry item = createFeedItem(values);
- entries.add(item);
- if (log.isDebugEnabled()) {
- log.debug("new item " + item);
- }
- return feed;
- }
-
- /**
- * Obtain the file from his url location.
- *
- * @param url location of the file
- * @return the file
- * @throws java.lang.IllegalStateException if uri is not sytax valid
- */
- protected File getFile(URL url) throws IllegalStateException {
- try {
- return new File(url.toURI());
- } catch (URISyntaxException e) {
- throw new IllegalStateException("could not obtain file from url " + url, e);
- }
- }
-
- protected FileLock acquireLock(File f) throws IOException {
- File lockFile = getWriteFileLock(f);
-
- /*if (!lockFile.exists()) lockFile.createNewFile(); */
- // open file for writing only
- FileChannel channel = new RandomAccessFile(lockFile, "rw").getChannel();
-
- // block until can acquire lock
-
- return channel.lock();
- }
-
- protected File getWriteFileLock(File f) {
- return new File(f.getParentFile(), f.getName() + ".wlock");
- }
-
- protected void releaseLock(File f, FileLock lock) throws IOException {
- // release lock
- lock.release();
- // close channel
- lock.channel().close();
- // delete file lock
- File lockFile = getWriteFileLock(f);
- lockFile.delete();
- }
-
- protected void setFieldValue(Object dst, String name, Object value) {
- if (value == null) {
- // null value is not managed
- log.warn("null value for field " + name + " is not managed");
- return;
- }
- try {
- BeanUtils.setProperty(dst, name, value);
- } catch (Exception ex) {
- log.warn("could not access property " + name, ex);
- }
- }
-}
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java 2008-05-30 20:39:08 UTC (rev 75)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java 2008-05-31 16:33:29 UTC (rev 76)
@@ -1,66 +1,151 @@
package org.codelutin.rss;
+import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.io.FeedException;
import java.io.*;
-import java.rmi.ServerException;
-import java.text.ParseException;
-import java.util.Date;
import java.util.HashMap;
import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
import javax.servlet.*;
import javax.servlet.http.*;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
/**
* <p>
- * Servlet permettant de generer des flux generes par RSSGeneratorHelper et de
+ * Servlet permettant de generer des flux generes par RSSGenerator et de
* les publier.
*
* @author chemit
*/
-public class RSSGeneratorServlet extends HttpServlet {
+public class RSSGeneratorServlet extends BaseServlet<RSSGenerator> {
- /** to use log facility, just put in your code: log.info(\"...\"); */
- private static final Log log = LogFactory.getLog(RSSGeneratorServlet.class);
- protected transient RSSGeneratorHelper generator;
- /** directory where feeds are stored */
- protected transient File generatorDirector;
private static final long serialVersionUID = 1L;
- @Override
- public void init(ServletConfig config) throws ServletException {
- init(config, true);
+ public void doCreateFeed(HttpServletRequest request, HttpServletResponse response, String feedName, File file) throws ServletException, IOException {
+ String type = request.getParameter("feedType");
+ FeedType feedType = type != null ? FeedType.valueOf(type) : RSSGeneratorConfig.DEFAULT_GENERATOR_FORMAT;
+ String description = request.getParameter("feedDescription");
+ String link = request.getParameter("feedLink");
+ String author = request.getParameter("feedAuthor");
+ Map<Field, Object> values = new HashMap<Field, Object>();
+ values.put(Field.NAME, feedName);
+ addFieldValue(Field.DESCRIPTION, description, values);
+ addFieldValue(Field.LINK, link, values);
+ addFieldValue(Field.AUTHOR, author, values);
+ values.put(Field.TIME, RSSGenerator.DATE_PARSER.format(new java.util.Date()));
+ try {
+ delegate.createFeedFile(file.toURI().toURL(), feedType, values);
+ } catch (Exception ex) {
+ throw new ServletException(ex);
+ }
+
+ String redirect = request.getParameter("from");
+ if (redirect != null) {
+ response.sendRedirect(redirect);
+ }
}
- public void init(ServletConfig config, boolean initRssConfig) throws ServletException {
+ public void doDeleteFeed(HttpServletRequest request, HttpServletResponse response, String feedName, File file) throws ServletException, IOException {
try {
- super.init(config);
- if (initRssConfig) {
- // init depuis la config de servlet
- new RSSConfig.RSSConfigInitializer<ServletConfig>() {
+ delegate.deleteFeedFile(file.toURI().toURL());
+ } catch (Exception ex) {
+ throw new ServletException(ex);
+ }
- @Override
- protected String getConfigValue(ServletConfig config, String fullConfigName) {
- return config.getInitParameter(fullConfigName);
- }
- }.init(config);
+ String redirect = request.getParameter("from");
+ if (redirect != null) {
+ response.sendRedirect(redirect);
+ }
+ }
- // instanciate rss generaotr avec les implantation par default
- generator = RSSGeneratorHelper.getInstance();
+ public void doAddItem(HttpServletRequest request, HttpServletResponse response, String feedName, File file) throws ServletException, IOException {
+
+ Integer nbItems = convertToInt(request.getParameter("nbItems"));
+ if (nbItems == null) {
+ nbItems = RSSGeneratorConfig.DEFAULT_GENERATOR_NB_ITEM;
+ }
+ String description = request.getParameter("itemDescription");
+ String link = request.getParameter("itemLink");
+ String author = request.getParameter("itemAuthor");
+ String name = request.getParameter("itemName");
+
+ Map<Field, Object> values = new HashMap<Field, Object>();
+ addFieldValue(Field.NAME, name, values);
+ addFieldValue(Field.DESCRIPTION, description, values);
+ addFieldValue(Field.LINK, link, values);
+ addFieldValue(Field.AUTHOR, author, values);
+ values.put(Field.TIME, RSSGenerator.DATE_PARSER.format(new java.util.Date()));
+ try {
+ delegate.addItemToFeedFile(file.toURI().toURL(), nbItems, values);
+ } catch (Exception ex) {
+ throw new ServletException(ex);
+ }
+
+ String redirect = request.getParameter("from");
+ if (redirect != null) {
+ response.sendRedirect(redirect);
+ }
+ }
+
+ public void doList(HttpServletResponse response) throws IOException {
+ // obtain the list of known feeds
+ File[] files = delegate.getGeneratorDirectory().listFiles(new FileFilter() {
+
+ public boolean accept(File pathname) {
+ return pathname.isFile() && pathname.getName().endsWith(".xml");
}
- } catch (Exception eee) {
- log.warn("Can't configure Servlet", eee);
- if (eee instanceof ServletException) {
- throw (ServletException) eee;
+ });
+ response.setContentType("text/xml;charset=UTF-8");
+ PrintWriter out = response.getWriter();
+
+ try {
+ if (files.length > 0) {
+ String format = "<option value=\"%1$s\">%1$s</option>";
+ for (File f : files) {
+ String name = f.getName();
+ out.println(String.format(format, name.substring(0, name.length() - 4)));
+ }
+ } else {
+ out.println("<span class='error'>no feed generated</span>");
}
- throw new ServletException("Can't configure Servlet", eee);
+ } finally {
+ out.close();
}
}
+ public void doShow(File file, String feedName, HttpServletResponse response) throws ServletException, IOException {
+ // no action, just publication
+ if (!file.exists()) {
+ throw new ServletException("could not find feed " + feedName);
+ }
+ response.setContentType("text/xml;charset=UTF-8");
+ PrintWriter out = response.getWriter();
+ try {
+ SyndFeed feed = RSSIOUtil.readFeed(file.toURI().toURL());
+ RSSIOUtil.saveFeed(out, feed);
+ } catch (IllegalArgumentException ex) {
+ throw new ServletException(ex);
+ } catch (FeedException ex) {
+ throw new ServletException(ex);
+ } finally {
+ out.close();
+ }
+ }
+
+ @Override
+ protected ConfigInitializer<ServletConfig,?> newConfigInitializer() {
+ return new RSSGeneratorConfig.RssGeneratorConfigInitializer<ServletConfig>() {
+
+ protected String getConfigValue(ServletConfig config, String fullConfigName) {
+ return config.getInitParameter(fullConfigName);
+ }
+ };
+ }
+
+ @Override
+ protected RSSGenerator newDelegate() throws Exception {
+ return RSSGenerator.newDefaultInstance();
+ }
+
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
@@ -68,141 +153,55 @@
* @throws java.io.IOException TODO
* @throws ServletException TODO
*/
- public void processRequest(HttpServletRequest request, HttpServletResponse response)
+ @Override
+ protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("action");
- if (action==null) action="";
+ if (action == null) {
+ action = "";
+ }
action = action.trim().toLowerCase();
if ("list".equals(action)) {
- // obtain the list of known feeds
- File[] files = getGeneratorDirector().listFiles(new FilenameFilter() {
-
- public boolean accept(File dir, String name) {
- return name.endsWith(".xml");
- }
- });
- response.setContentType("text/xml;charset=UTF-8");
- PrintWriter out = response.getWriter();
-
- try {
- if (files.length > 0) {
- String format = "<option value=\"%1$s\">%1$s</option>";
- for (File f : files) {
- String name = f.getName();
- out.println(String.format(format, name.substring(0, name.length() - 4)));
- }
- } else {
- out.println("no feed generated");
- }
- } finally {
- out.close();
- }
+ doList(response);
return;
}
+
String feedName = request.getParameter("feedName");
+
if (feedName == null || "".equals(feedName)) {
- throw new ServerException("could not find feedName parameter");
+ throw new ServletException("could not find feedName parameter");
}
+ //feedName =new String(feedName.getBytes(),0,feedName.length(),Charset.forName("utf-8"));
+ File file = new File(delegate.getGeneratorDirectory(), feedName + ".xml");
- File file = new File(getGeneratorDirector(), feedName + ".xml");
-
- if ("".equals(action)) {
- // no action, just publication
- if (!file.exists()) {
- throw new ServletException("could not find feed to publish " + feedName);
- }
- response.setContentType("text/xml;charset=UTF-8");
- PrintWriter out = response.getWriter();
- try {
- StringBuffer sb = new StringBuffer();
-
- FileReader reader = new FileReader(file);
- BufferedReader breader = new BufferedReader(reader);
- String line = null;
- while ((line = breader.readLine()) != null) {
- sb.append(line).append('\n');
- }
- out.println(sb.toString());
- return;
- } finally {
- out.close();
- }
+ if ("show".equals(action)) {
+ doShow(file, feedName, response);
+ return;
}
-
+
if ("create".equals(action)) {
- String type = request.getParameter("feedType");
- FeedType feedType = type != null ? FeedType.valueOf(type) : RSSConfig.DEFAULT_GENERATOR_FORMAT;
- String description = request.getParameter("feedDescription");
- String link = request.getParameter("feedLink");
+ doCreateFeed(request, response, feedName, file);
+ return;
+ }
- Map<Field, Object> values = new HashMap<Field, Object>();
- values.put(Field.NAME, feedName);
- values.put(Field.DESCRIPTION, description);
- values.put(Field.LINK, link);
- values.put(Field.TIME, RSSGeneratorHelper.DATE_PARSER.format(new java.util.Date()));
- try {
-
- generator.createFeedFile(file.toURI().toURL(), feedType, values);
- } catch (Exception ex) {
- throw new ServletException(ex);
- }
-
- String redirect = request.getParameter("from");
- if (redirect != null) {
- response.sendRedirect(redirect);
- }
+ if ("delete".equals(action)) {
+ doDeleteFeed(request, response, feedName, file);
return;
}
if ("additem".equals(action)) {
-
- String redirect = request.getParameter("from");
- if (redirect != null) {
- response.sendRedirect(redirect);
- }
+ doAddItem(request, response, feedName, file);
return;
}
- throw new ServletException("action " + action + "is unknown ");
+ throw new ServletException("action '" + action + "' is unknown ");
}
- public File getGeneratorDirector() {
- if (generatorDirector == null) {
- generatorDirector = new File(RSSConfig.GENERATOR_DIRECTORY);
+ protected void addFieldValue(Field field, String value, Map<Field, Object> values) {
+ if (value != null && !"".equals(value.trim())) {
+ values.put(field, value);
}
- return generatorDirector;
}
- // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
- /**
- * Handles the HTTP <code>GET</code> method.
- * @param request servlet request
- * @param response servlet response
- */
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- processRequest(request, response);
- }
-
- /**
- * Handles the HTTP <code>POST</code> method.
- * @param request servlet request
- * @param response servlet response
- */
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- processRequest(request, response);
- }
-
- /**
- * Returns a short description of the servlet.
- */
- @Override
- public String getServletInfo() {
- return "RSS Publication Servlet";
- }
- // </editor-fold>
}
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSHelper.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSHelper.java 2008-05-30 20:39:08 UTC (rev 75)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSHelper.java 2008-05-31 16:33:29 UTC (rev 76)
@@ -20,7 +20,7 @@
public class RSSHelper {
/** to use log facility, just put in your code: log.info(\"...\"); */
- private static final Log log = LogFactory.getLog(RSSHelper.class);
+ static final Log log = LogFactory.getLog(RSSHelper.class);
/**
*
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSIOUtil.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSIOUtil.java 2008-05-30 20:39:08 UTC (rev 75)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSIOUtil.java 2008-05-31 16:33:29 UTC (rev 76)
@@ -1,16 +1,27 @@
package org.codelutin.rss;
+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.SyndFeedInput;
import com.sun.syndication.io.SyndFeedOutput;
import com.sun.syndication.io.XmlReader;
-import java.io.BufferedWriter;
import java.io.File;
-import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.net.URL;
+import java.text.ParseException;
+import java.util.EnumMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
/**
* helper to read or save a feed
@@ -18,6 +29,9 @@
*/
public class RSSIOUtil {
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static final Log log = LogFactory.getLog(RSSIOUtil.class);
+
/**
* Load a feed from his url
* @param url location of feed
@@ -34,24 +48,121 @@
/**
* save a feed into a file.
- * @param f
+ * @param file
* @param feed
* @throws java.io.IOException
* @throws com.sun.syndication.io.FeedException
*/
- public static void saveFeed(File f, SyndFeed feed) throws IOException, FeedException {
+ public static void saveFeed(File file, SyndFeed feed) throws IOException, FeedException {
+ SyndFeedOutput output = new SyndFeedOutput();
+ output.output(feed, file);
+ }
+
+ /**
+ * save a feed into a writer.
+ * @param writer
+ * @param feed
+ * @throws java.io.IOException
+ * @throws com.sun.syndication.io.FeedException
+ */
+ public static void saveFeed(Writer writer, SyndFeed feed) throws IOException, FeedException {
+ SyndFeedOutput output = new SyndFeedOutput();
+ output.output(feed, writer);
+ }
- Writer writer = new BufferedWriter(new FileWriter(f));
- try {
- SyndFeedOutput output = new SyndFeedOutput();
- output.output(feed, writer);
- } finally {
- if (writer != null) {
- writer.close();
+ public static SyndFeed createFeed(EnumMap<Field, String> feedProperties, FeedType type, Map<Field, Object> values) throws ParseException {
+ SyndFeed feed = new SyndFeedImpl();
+ feed.setFeedType(type.getType());
+ feed.setEncoding("utf-8");
+ for (Entry<Field, Object> entry : values.entrySet()) {
+ Field field = entry.getKey();
+ String name = feedProperties.get(field);
+ if (name == null) {
+ // this field is not managed
+ log.warn("the field " + field + " is not managed in feed");
+ continue;
}
+ Object value = entry.getValue();
+ Object realValue;
+ switch (field) {
+ case TIME:
+ realValue = RSSGenerator.DATE_PARSER.parse((String) value);
+ break;
+ default:
+ realValue = value;
+ }
+
+ setFieldValue(feed, name, realValue);
}
+
+ return feed;
}
+ @SuppressWarnings({"unchecked"})
+ protected static SyndFeed addItemToFeed(SyndFeed feed, SyndEntry item, int nbEntries, Map<Field, Object> values) throws IOException, IllegalArgumentException, FeedException, ParseException {
+ List<SyndEntry> entries = feed.getEntries();
+ if (!entries.isEmpty()) {
+ // always sort by publication date
+ java.util.Collections.sort(entries, new FeedEntryComparator());
+ // keep only nbEntries -1 entries
+ while (entries.size() > nbEntries - 1) {
+ entries.remove(0);
+ }
+ }
+ entries.add(item);
+ if (log.isDebugEnabled()) {
+ log.debug("new item " + item);
+ }
+ return feed;
+ }
+
+ public static SyndEntry createFeedItem(EnumMap<Field, String> itemProperties, Map<Field, Object> values) throws ParseException {
+
+ SyndEntry feedEntry = new SyndEntryImpl();
+
+ for (Entry<Field, Object> entry : values.entrySet()) {
+ Field field = entry.getKey();
+ String name = itemProperties.get(field);
+ if (name == null) {
+ // this field is not managed
+ log.warn("the field " + field + " is not managed in item");
+ continue;
+ }
+ Object value = entry.getValue();
+ Object realValue;
+ switch (field) {
+ case TIME:
+ realValue = RSSGenerator.DATE_PARSER.parse((String) value);
+ break;
+ case DESCRIPTION:
+ //TODO Deal with xml content ?
+ SyndContent description = new SyndContentImpl();
+ description.setType("text/plain");
+ feedEntry.setDescription(description);
+ realValue = String.valueOf(value);
+ break;
+ default:
+ realValue = value;
+ }
+ setFieldValue(feedEntry, name, realValue);
+ }
+
+ return feedEntry;
+ }
+
+ protected static void setFieldValue(Object dst, String name, Object value) {
+ if (value == null) {
+ // null value is not managed
+ log.warn("null value for field " + name + " is not managed");
+ return;
+ }
+ try {
+ BeanUtils.setProperty(dst, name, value);
+ } catch (Exception ex) {
+ log.warn("could not access property " + name, ex);
+ }
+ }
+
protected RSSIOUtil() {
// no instance
}
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSServlet.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSServlet.java 2008-05-30 20:39:08 UTC (rev 75)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSServlet.java 2008-05-31 16:33:29 UTC (rev 76)
@@ -4,8 +4,6 @@
import javax.servlet.*;
import javax.servlet.http.*;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
/**
* <p>
@@ -30,15 +28,9 @@
* </p>
* @author poussin
*/
-public class RSSServlet extends HttpServlet {
+public class RSSServlet extends BaseServlet<RSSHelper> {
- /** to use log facility, just put in your code: log.info(\"...\"); */
- private static final Log log = LogFactory.getLog(RSSServlet.class);
/**
- * L'objet permettant de recupérer la representation HTML d'un feed
- */
- protected transient RSSHelper rss;
- /**
* Le code JavaScript a utilise dans les pages clientes
*
* Provient du fichier rssinclude.js
@@ -84,12 +76,12 @@
" var toTreate = [];\n" +
" while (i < max) {\n" +
" var div = divs[i++];\n" +
- " if (div.getAttribute('name')=='rssinclude') toTreate[toTreate.length] = div;\n"+
+ " if (div.getAttribute('name')=='rssinclude') toTreate[toTreate.length] = div;\n" +
" }\n" +
" i=0;max = toTreate.length;\n" +
- " while (i<max) rssincludeUpdateDiv(toTreate[i++], true);"+
- "}\n"+
- "if (window.addEventListener) window.addEventListener( 'load', initRss,false);\n"+
+ " while (i<max) rssincludeUpdateDiv(toTreate[i++], true);" +
+ "}\n" +
+ "if (window.addEventListener) window.addEventListener( 'load', initRss,false);\n" +
"else if (window.attachEvent) window.attachEvent( 'onload', initRss);";
private static final long serialVersionUID = 1L;
@@ -103,36 +95,46 @@
return code;
}
- @Override
- public void init(ServletConfig config) throws ServletException {
- init(config, true);
+ public void doJs(HttpServletResponse response, HttpServletRequest request) throws IOException {
+ // on renvoie le code js
+ response.setContentType("text/plain;charset=UTF-8");
+ PrintWriter out = response.getWriter();
+ try {
+ String code = getJs(request.getRequestURL().toString());
+ out.println(code);
+ } finally {
+ out.close();
+ }
}
- public void init(ServletConfig config, boolean initRssConfig) throws ServletException {
+ public void doRender(HttpServletResponse response, HttpServletRequest request, String feedName) throws IOException {
+ response.setContentType("text/html;charset=UTF-8");
+ PrintWriter out = response.getWriter();
try {
- super.init(config);
- if (initRssConfig) {
- // init depuis la config de servlet
- new RSSConfig.RSSConfigInitializer<ServletConfig>() {
+ String feedRepr = request.getParameter("feedRepr");
+ Integer nbItem = convertToInt(request.getParameter("nbItem"));
+ boolean forceReload = "true".equalsIgnoreCase(request.getParameter("forceReload"));
+ out.println(delegate.getHTML(feedName, feedRepr, nbItem, forceReload));
+ } finally {
+ out.close();
+ }
+ }
- @Override
- protected String getConfigValue(ServletConfig config, String fullConfigName) {
- return config.getInitParameter(fullConfigName);
- }
- }.init(config);
+ @Override
+ protected ConfigInitializer<ServletConfig,? > newConfigInitializer() {
+ return new RSSConfig.RSSConfigInitializer<ServletConfig>() {
- // instanciate rss avec les implanatation par defaut
- rss = RSSHelper.newDefaultInstance();
+ protected String getConfigValue(ServletConfig config, String fullConfigName) {
+ return config.getInitParameter(fullConfigName);
}
- } catch (Exception eee) {
- log.warn("Can't configure Servlet", eee);
- if (eee instanceof ServletException) {
- throw (ServletException) eee;
- }
- throw new ServletException("Can't configure Servlet", eee);
- }
+ };
}
+ @Override
+ protected RSSHelper newDelegate() throws Exception {
+ return RSSHelper.newDefaultInstance();
+ }
+
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
@@ -140,72 +142,14 @@
* @throws java.io.IOException TODO
* @throws ServletException TODO
*/
- public void processRequest(HttpServletRequest request, HttpServletResponse response)
+ @Override
+ protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String feedName = request.getParameter("feedName");
if (feedName == null || "".equals(feedName)) {
- // on renvoie le code js
- response.setContentType("text/plain;charset=UTF-8");
- PrintWriter out = response.getWriter();
- try {
- String code = getJs(request.getRequestURL().toString());
- out.println(code);
- } finally {
- out.close();
- }
+ doJs(response, request);
} else {
- response.setContentType("text/html;charset=UTF-8");
- PrintWriter out = response.getWriter();
- try {
- String feedRepr = request.getParameter("feedRepr");
- Integer nbItem = convertToInt(request.getParameter("nbItem"));
- boolean forceReload = "true".equalsIgnoreCase(request.getParameter("forceReload"));
- out.println(rss.getHTML(feedName, feedRepr, nbItem, forceReload));
- } finally {
- out.close();
- }
+ doRender(response, request, feedName);
}
}
-
- protected Integer convertToInt(String parameter) {
- Integer result = null;
- try {
- result = Integer.parseInt(parameter);
- } catch (Exception eee) {
- log.debug("Can't convert to int: '" + parameter + "'", eee);
- }
- return result;
- }
- // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
-
- /**
- * Handles the HTTP <code>GET</code> method.
- * @param request servlet request
- * @param response servlet response
- */
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- processRequest(request, response);
- }
-
- /**
- * Handles the HTTP <code>POST</code> method.
- * @param request servlet request
- * @param response servlet response
- */
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- processRequest(request, response);
- }
-
- /**
- * Returns a short description of the servlet.
- */
- @Override
- public String getServletInfo() {
- return "RSS Servlet";
- }
- // </editor-fold>
}
1
0
[Lutinweb-commits] r75 - in trunk/lutinrss: . src/main/java/org/codelutin/rss src/main/webapp src/main/webapp/WEB-INF
by tchemit@users.labs.libre-entreprise.org 30 May '08
by tchemit@users.labs.libre-entreprise.org 30 May '08
30 May '08
Author: tchemit
Date: 2008-05-30 20:39:08 +0000 (Fri, 30 May 2008)
New Revision: 75
Added:
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java
trunk/lutinrss/src/main/webapp/rssgenerator.js
trunk/lutinrss/src/main/webapp/testGenerator.html
Modified:
trunk/lutinrss/pom.xml
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java
trunk/lutinrss/src/main/webapp/WEB-INF/web.xml
Log:
create RSSGeneratorServlet to perform generator actions + publication of feed
add test for generator to be finish :)
Modified: trunk/lutinrss/pom.xml
===================================================================
--- trunk/lutinrss/pom.xml 2008-05-30 17:56:57 UTC (rev 74)
+++ trunk/lutinrss/pom.xml 2008-05-30 20:39:08 UTC (rev 75)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<!--The version of maven's project object model-->
@@ -160,6 +160,6 @@
</profiles>
<properties>
<netbeans.hint.deploy.server>Tomcat60</netbeans.hint.deploy.server>
- <netbeans.hint.useExternalMaven>true</netbeans.hint.useExternalMaven>
+ <netbeans.hint.useExternalMaven>false</netbeans.hint.useExternalMaven>
</properties>
</project>
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java 2008-05-30 17:56:57 UTC (rev 74)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSConfig.java 2008-05-30 20:39:08 UTC (rev 75)
@@ -1,5 +1,6 @@
package org.codelutin.rss;
+import java.io.File;
import org.apache.commons.beanutils.BeanUtils;
/**
@@ -22,8 +23,10 @@
public static int DEFAULT_GENERATOR_NB_ITEM = 100;
- public static FeedType DEFAULT_GENERATOR_FORMAT = FeedType.RSS_2_0;
+ public static FeedType DEFAULT_GENERATOR_FORMAT = FeedType.RSS_2_0;
+ public static String GENERATOR_DIRECTORY = "/tmp/rssinclude";
+
public static Class<? extends FeedRenderer> DEFAULT_RENDERER_CLASS = FeedHTMLRenderer.class;
public static Class<? extends FeedURLResolver> DEFAULT_RESOLVER_CLASS = SimpleFeedURLResolver.class;
@@ -55,7 +58,12 @@
public static void setDEFAULT_GENERATOR_FORMAT(FeedType DEFAULT_GENERATOR_FORMAT) {
RSSConfig.DEFAULT_GENERATOR_FORMAT = DEFAULT_GENERATOR_FORMAT;
}
-
+
+ public static void setGENERATOR_DIRECTORY(String GENERATOR_DIRECTORY) {
+ RSSConfig.GENERATOR_DIRECTORY = GENERATOR_DIRECTORY;
+ }
+
+
/**
*
* @param T la classe sources de la configuration
@@ -85,6 +93,10 @@
loadConfig(config, instance, prefixConfig, "DEFAULT_RESOLVER_CLASS");
loadConfig(config, instance, prefixConfig, "DEFAULT_GENERATOR_NB_ITEM");
loadConfig(config, instance, prefixConfig, "DEFAULT_GENERATOR_FORMAT");
+ loadConfig(config, instance, prefixConfig, "GENERATOR_DIRECTORY");
+
+ // create generator directory
+ new File(GENERATOR_DIRECTORY).mkdirs();
}
protected void loadConfig(T config, RSSConfig instance, String prefix, String configName) {
Added: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java (rev 0)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorServlet.java 2008-05-30 20:39:08 UTC (rev 75)
@@ -0,0 +1,208 @@
+package org.codelutin.rss;
+
+import com.sun.syndication.io.FeedException;
+import java.io.*;
+
+import java.rmi.ServerException;
+import java.text.ParseException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * <p>
+ * Servlet permettant de generer des flux generes par RSSGeneratorHelper et de
+ * les publier.
+ *
+ * @author chemit
+ */
+public class RSSGeneratorServlet extends HttpServlet {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ private static final Log log = LogFactory.getLog(RSSGeneratorServlet.class);
+ protected transient RSSGeneratorHelper generator;
+ /** directory where feeds are stored */
+ protected transient File generatorDirector;
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void init(ServletConfig config) throws ServletException {
+ init(config, true);
+ }
+
+ public void init(ServletConfig config, boolean initRssConfig) throws ServletException {
+ try {
+ super.init(config);
+ if (initRssConfig) {
+ // init depuis la config de servlet
+ new RSSConfig.RSSConfigInitializer<ServletConfig>() {
+
+ @Override
+ protected String getConfigValue(ServletConfig config, String fullConfigName) {
+ return config.getInitParameter(fullConfigName);
+ }
+ }.init(config);
+
+ // instanciate rss generaotr avec les implantation par default
+ generator = RSSGeneratorHelper.getInstance();
+ }
+ } catch (Exception eee) {
+ log.warn("Can't configure Servlet", eee);
+ if (eee instanceof ServletException) {
+ throw (ServletException) eee;
+ }
+ throw new ServletException("Can't configure Servlet", eee);
+ }
+ }
+
+ /**
+ * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
+ * @param request servlet request
+ * @param response servlet response
+ * @throws java.io.IOException TODO
+ * @throws ServletException TODO
+ */
+ public void processRequest(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+
+ String action = request.getParameter("action");
+ if (action==null) action="";
+ action = action.trim().toLowerCase();
+ if ("list".equals(action)) {
+ // obtain the list of known feeds
+ File[] files = getGeneratorDirector().listFiles(new FilenameFilter() {
+
+ public boolean accept(File dir, String name) {
+ return name.endsWith(".xml");
+ }
+ });
+ response.setContentType("text/xml;charset=UTF-8");
+ PrintWriter out = response.getWriter();
+
+ try {
+ if (files.length > 0) {
+ String format = "<option value=\"%1$s\">%1$s</option>";
+ for (File f : files) {
+ String name = f.getName();
+ out.println(String.format(format, name.substring(0, name.length() - 4)));
+ }
+ } else {
+ out.println("no feed generated");
+ }
+ } finally {
+ out.close();
+ }
+ return;
+ }
+ String feedName = request.getParameter("feedName");
+ if (feedName == null || "".equals(feedName)) {
+ throw new ServerException("could not find feedName parameter");
+ }
+
+ File file = new File(getGeneratorDirector(), feedName + ".xml");
+
+ if ("".equals(action)) {
+ // no action, just publication
+ if (!file.exists()) {
+ throw new ServletException("could not find feed to publish " + feedName);
+ }
+ response.setContentType("text/xml;charset=UTF-8");
+ PrintWriter out = response.getWriter();
+ try {
+ StringBuffer sb = new StringBuffer();
+
+ FileReader reader = new FileReader(file);
+ BufferedReader breader = new BufferedReader(reader);
+ String line = null;
+ while ((line = breader.readLine()) != null) {
+ sb.append(line).append('\n');
+ }
+ out.println(sb.toString());
+ return;
+ } finally {
+ out.close();
+ }
+ }
+
+ if ("create".equals(action)) {
+ String type = request.getParameter("feedType");
+ FeedType feedType = type != null ? FeedType.valueOf(type) : RSSConfig.DEFAULT_GENERATOR_FORMAT;
+ String description = request.getParameter("feedDescription");
+ String link = request.getParameter("feedLink");
+
+ Map<Field, Object> values = new HashMap<Field, Object>();
+ values.put(Field.NAME, feedName);
+ values.put(Field.DESCRIPTION, description);
+ values.put(Field.LINK, link);
+ values.put(Field.TIME, RSSGeneratorHelper.DATE_PARSER.format(new java.util.Date()));
+ try {
+
+ generator.createFeedFile(file.toURI().toURL(), feedType, values);
+ } catch (Exception ex) {
+ throw new ServletException(ex);
+ }
+
+ String redirect = request.getParameter("from");
+ if (redirect != null) {
+ response.sendRedirect(redirect);
+ }
+ return;
+ }
+
+ if ("additem".equals(action)) {
+
+ String redirect = request.getParameter("from");
+ if (redirect != null) {
+ response.sendRedirect(redirect);
+ }
+ return;
+ }
+
+ throw new ServletException("action " + action + "is unknown ");
+
+ }
+
+ public File getGeneratorDirector() {
+ if (generatorDirector == null) {
+ generatorDirector = new File(RSSConfig.GENERATOR_DIRECTORY);
+ }
+ return generatorDirector;
+ }
+ // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
+ /**
+ * Handles the HTTP <code>GET</code> method.
+ * @param request servlet request
+ * @param response servlet response
+ */
+ @Override
+ protected void doGet(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ processRequest(request, response);
+ }
+
+ /**
+ * Handles the HTTP <code>POST</code> method.
+ * @param request servlet request
+ * @param response servlet response
+ */
+ @Override
+ protected void doPost(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ processRequest(request, response);
+ }
+
+ /**
+ * Returns a short description of the servlet.
+ */
+ @Override
+ public String getServletInfo() {
+ return "RSS Publication Servlet";
+ }
+ // </editor-fold>
+}
Modified: trunk/lutinrss/src/main/webapp/WEB-INF/web.xml
===================================================================
--- trunk/lutinrss/src/main/webapp/WEB-INF/web.xml 2008-05-30 17:56:57 UTC (rev 74)
+++ trunk/lutinrss/src/main/webapp/WEB-INF/web.xml 2008-05-30 20:39:08 UTC (rev 75)
@@ -1,19 +1,27 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
-<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-
+<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
+ http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
+
<display-name>RSSServlet</display-name>
-
- <servlet>
- <servlet-name>RSSServlet</servlet-name>
- <servlet-class>org.codelutin.rss.RSSServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>RSSServlet</servlet-name>
- <url-pattern>/RSSServlet</url-pattern>
- </servlet-mapping>
-
+
+ <servlet>
+ <servlet-name>RSSServlet</servlet-name>
+ <servlet-class>org.codelutin.rss.RSSServlet</servlet-class>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>RSSServlet</servlet-name>
+ <url-pattern>/RSSServlet</url-pattern>
+ </servlet-mapping>
+ <servlet>
+ <servlet-name>RSSGeneratorServlet</servlet-name>
+ <servlet-class>org.codelutin.rss.RSSGeneratorServlet</servlet-class>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>RSSGeneratorServlet</servlet-name>
+ <url-pattern>/RSSGeneratorServlet</url-pattern>
+ </servlet-mapping>
+
</web-app>
Added: trunk/lutinrss/src/main/webapp/rssgenerator.js
===================================================================
--- trunk/lutinrss/src/main/webapp/rssgenerator.js (rev 0)
+++ trunk/lutinrss/src/main/webapp/rssgenerator.js 2008-05-30 20:39:08 UTC (rev 75)
@@ -0,0 +1,47 @@
+function rssgeneratorUpdateDiv(divs) {
+ //var serlvetUrl = "%1$1";
+ var serlvetUrl = "http://tomcat-test/lutinrss-2.1/RSSGeneratorServlet?action=list";
+ win = window;
+ var xhr = null;
+ var error=null;
+ if(win.XMLHttpRequest) // Firefox, Opera detected
+ xhr = new win.XMLHttpRequest();
+ else if(win.ActiveXObject) // Internet Explorer detected
+ xhr = new win.ActiveXObject("Microsoft.XMLHTTP");
+ else // XMLHttpRequest non supporte par le navigateur
+ error = "<span class='feed-error'>Votre navigateur ne supporte pas les objets XMLHTTPRequest...</span>";
+ if (!!error) { updateDiv(divs,false,error); return; }
+
+ xhr.open("GET", serlvetUrl, true);
+ xhr.onreadystatechange = function() {
+ if(xhr.readyState == 1) { updateDiv(divs,false,"Chargement de la liste des feeds en cours..."); }
+ else if(xhr.readyState == 4) { updateDiv(divs,true,xhr.responseText); }
+ }
+ xhr.send(null);
+}
+
+var initRssGenerator =function () {
+ var divs = document.getElementsByTagName("div");
+ var i = 0;var max=divs.length;
+ var toTreate = [];
+ while (i < max) {
+ var div = divs[i++];
+ if (div.getAttribute('name')=='rssgeneratorlist') toTreate[toTreate.length] = div;
+ }
+ rssgeneratorUpdateDiv(toTreate);
+}
+var updateDiv= function(divs,select,text) {
+ var i=0;
+ var max = divs.length;
+ while (i<max) {
+ var div = divs[i++];
+ if (!!select) {
+ var name = div.getAttribute("action");
+ text = "<select name='"+name+"' length='50'>" + text+"</select>"
+ }
+ div.innerHTML =text;
+ }
+
+}
+if (window.addEventListener) window.addEventListener( 'load', initRssGenerator,false);
+else if (window.attachEvent) window.attachEvent( 'onload', initRssGenerator);
Added: trunk/lutinrss/src/main/webapp/testGenerator.html
===================================================================
--- trunk/lutinrss/src/main/webapp/testGenerator.html (rev 0)
+++ trunk/lutinrss/src/main/webapp/testGenerator.html 2008-05-30 20:39:08 UTC (rev 75)
@@ -0,0 +1,68 @@
+<!--
+ Document : test
+ Created on : 18 avr. 2008, 11:46:56
+ Author : poussin
+-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+ <head>
+ <title>Page de test de génération de flux rss</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <script src="rssgenerator.js"></script>
+ </head>
+ <body>
+ <h1>Test RSS Generator</h1>
+ <fieldset style="width:200px">
+ <legend>Create new feed</legend>
+ <form method="post" action="RSSGeneratorServlet?action=create">
+ <input type="hidden" name="from" value="/lutinrss-2.1/testGenerator.html">
+ <table>
+ <tr>
+ <td>feedName :</td>
+ <td><input name="feedName" type="text" size="50"></td>
+ </tr>
+ <tr>
+ <td>feedDescription: </td>
+ <td><input name="feedDescription" type="text" size="50"></td>
+ </tr>
+ <tr>
+ <td>feedLink : </td>
+ <td><input name="feedLink" type="text" size="50"></td>
+ </tr>
+ <tr>
+ <td colspan="2" align="right"><input type="submit" value="create"></td>
+ </tr>
+ </table>
+ </form>
+ </fieldset>
+ <fieldset style="width:200px">
+ <legend>Add item to known feed</legend>
+ <form method="post" action="RSSGeneratorServlet?action=addItem">
+ <input type="hidden" name="from" value="/lutinrss-2.1/testGenerator.html">
+ <table>
+ <tr>
+ <td>feedName :</td>
+ <td width="100%">
+ <div name="rssgeneratorlist" action="feedName" with="100%"></div>
+ </td>
+ </tr>
+ <tr>
+ <td>itemName :</td>
+ <td><input name="itemName" type="text" size="50"></td>
+ </tr>
+ <tr>
+ <td>itemDescription: </td>
+ <td><input name="itemDescription" type="text" size="50"></td>
+ </tr>
+ <tr>
+ <td>itemLink : </td>
+ <td><input name="itemLink" type="text" size="50"></td>
+ </tr>
+ <tr>
+ <td colspan="2" align="right"><input type="submit" value="create"></td>
+ </tr>
+ </table>
+ </form>
+ </fieldset>
+ </body>
+</html>
1
0
[Lutinweb-commits] r74 - trunk/lutinrss/src/main/java/org/codelutin/rss
by tchemit@users.labs.libre-entreprise.org 30 May '08
by tchemit@users.labs.libre-entreprise.org 30 May '08
30 May '08
Author: tchemit
Date: 2008-05-30 17:56:57 +0000 (Fri, 30 May 2008)
New Revision: 74
Modified:
trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorHelper.java
Log:
remove TODO
Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorHelper.java
===================================================================
--- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorHelper.java 2008-05-30 14:05:16 UTC (rev 73)
+++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGeneratorHelper.java 2008-05-30 17:56:57 UTC (rev 74)
@@ -153,8 +153,6 @@
RSSIOUtil.saveFeed(tmpFile, feed);
- //TODO use a read file lock, to prevent read pb while renaming ?
-
// move tmpFile to real file
tmpFile.renameTo(f);
} finally {
1
0