[Lutinweb-commits] r87 - in trunk/lutinrss: . src/main/java/org/codelutin/rss
Author: tchemit Date: 2008-06-23 16:24:21 +0000 (Mon, 23 Jun 2008) New Revision: 87 Modified: trunk/lutinrss/pom.xml trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java trunk/lutinrss/src/main/java/org/codelutin/rss/RSSIOUtil.java Log: add updateFeed fonction Modified: trunk/lutinrss/pom.xml =================================================================== --- trunk/lutinrss/pom.xml 2008-06-09 14:47:31 UTC (rev 86) +++ trunk/lutinrss/pom.xml 2008-06-23 16:24:21 UTC (rev 87) @@ -24,7 +24,7 @@ <packaging>war</packaging> <!--Version--> - <version>2.3.3</version> + <version>2.3.4</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-09 14:47:31 UTC (rev 86) +++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSGenerator.java 2008-06-23 16:24:21 UTC (rev 87) @@ -130,7 +130,7 @@ try { SyndFeed feed = RSSIOUtil.createFeed(feedProperties, type, values); - + RSSIOUtil.saveFeed(f, feed); } catch (FeedException e) { @@ -194,7 +194,7 @@ releaseLock(f, lock); } } - + public void deleteFeedFile(URL toURL) { File f = getFile(toURL); if (f.exists() && !f.delete()) { @@ -202,6 +202,41 @@ } } + public void updateFeed(URL url,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); + + RSSIOUtil.updateFeed(url,feedProperties, 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 FeedType getFormat() { return format; } Modified: trunk/lutinrss/src/main/java/org/codelutin/rss/RSSIOUtil.java =================================================================== --- trunk/lutinrss/src/main/java/org/codelutin/rss/RSSIOUtil.java 2008-06-09 14:47:31 UTC (rev 86) +++ trunk/lutinrss/src/main/java/org/codelutin/rss/RSSIOUtil.java 2008-06-23 16:24:21 UTC (rev 87) @@ -76,46 +76,15 @@ 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; - 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; - } - - setFieldValue(feed, name, realValue); - } - + fillFeed(values, feedProperties, feed); return feed; } + + public static SyndFeed updateFeed(URL url,EnumMap<Field, String> feedProperties, Map<Field, Object> values) throws ParseException, IllegalArgumentException, FeedException, IOException { + SyndFeed feed = RSSIOUtil.readFeed(url); + fillFeed(values, feedProperties, feed); + return feed; + } @SuppressWarnings({"unchecked"}) protected static SyndFeed addItemToFeed(SyndFeed feed, SyndEntry item, int nbEntries, Map<Field, Object> values) throws IOException, IllegalArgumentException, FeedException, ParseException { @@ -169,6 +138,47 @@ return feedEntry; } + protected static void fillFeed(Map<Field, Object> values, EnumMap<Field, String> feedProperties, SyndFeed feed) throws ParseException { + + 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; + case CATEGORY: + List<String> categoriesAsList = new java.util.ArrayList<String>(); + if (value instanceof List) { + categoriesAsList = (List) value; + } else { + // categories as String + String cats = String.valueOf(value); + String[] categories = cats.split(RSSGeneratorConfig.DEFAULT_LIST_SEPARATOR); + categoriesAsList = java.util.Arrays.asList(categories); + } + realValue = new java.util.ArrayList<SyndCategory>(); + for (String cat : categoriesAsList) { + SyndCategory scat = new SyndCategoryImpl(); + scat.setName(cat); + ((List) realValue).add(scat); + } + break; + default: + realValue = value; + } + + setFieldValue(feed, name, realValue); + } + } + protected static void setFieldValue(Object dst, String name, Object value) { if (value == null) { // null value is not managed
participants (1)
-
tchemit@users.labs.libre-entreprise.org