From 0a824b70a744903b5fa776c1c1e11dbf5c424a4b Mon Sep 17 00:00:00 2001 From: Martin Kurz Date: Sun, 13 Oct 2013 16:13:34 +0200 Subject: [PATCH] added locale to parsers to allow parsing of date strings in different locales (fixes #22) --- .../feed/module/base/io/CustomTagParser.java | 3 +- .../feed/module/base/io/GoogleBaseParser.java | 3 +- .../feed/module/cc/io/ModuleParserRSS1.java | 3 +- .../feed/module/cc/io/ModuleParserRSS2.java | 3 +- .../content/io/ContentModuleParser.java | 3 +- .../feedburner/io/FeedBurnerModuleParser.java | 4 +- .../feed/module/georss/GMLParser.java | 3 +- .../feed/module/georss/SimpleParser.java | 4 +- .../feed/module/georss/W3CGeoParser.java | 4 +- .../feed/module/itunes/io/ITunesParser.java | 3 +- .../module/mediarss/io/MediaModuleParser.java | 3 +- .../module/mediarss/io/RSS20YahooParser.java | 5 +- .../impl/OpenSearchModuleParser.java | 3 +- .../feed/module/photocast/io/Parser.java | 3 +- .../module/slash/io/SlashModuleParser.java | 3 +- .../feed/module/sle/io/ItemParser.java | 23 ++--- .../feed/module/sle/io/ModuleParser.java | 21 ++--- .../feed/module/sle/types/DateValue.java | 3 +- .../feed/module/sle/types/EntryValue.java | 2 +- .../feed/module/sle/types/Group.java | 1 + .../feed/module/sle/types/NumberValue.java | 3 +- .../rometools/feed/module/sle/types/Sort.java | 1 + .../feed/module/sle/types/StringValue.java | 3 +- .../feed/module/sse/SSE091Generator.java | 16 ++-- .../feed/module/sse/SSE091Parser.java | 87 ++++++++++--------- .../feed/module/sse/modules/Conflict.java | 5 +- .../feed/module/sse/modules/Conflicts.java | 4 +- .../feed/module/sse/modules/History.java | 13 +-- .../feed/module/sse/modules/Related.java | 5 +- .../feed/module/sse/modules/SSEModule.java | 10 ++- .../feed/module/sse/modules/Sharing.java | 5 +- .../feed/module/sse/modules/Sync.java | 15 ++-- .../feed/module/sse/modules/Update.java | 4 +- .../yahooweather/YWeatherModuleImpl.java | 6 +- .../io/WeatherModuleGenerator.java | 6 +- .../yahooweather/io/WeatherModuleParser.java | 9 +- .../feed/module/sse/SSEParserTest.java | 7 +- 37 files changed, 176 insertions(+), 123 deletions(-) diff --git a/src/main/java/org/rometools/feed/module/base/io/CustomTagParser.java b/src/main/java/org/rometools/feed/module/base/io/CustomTagParser.java index b6d1253..48b9f68 100644 --- a/src/main/java/org/rometools/feed/module/base/io/CustomTagParser.java +++ b/src/main/java/org/rometools/feed/module/base/io/CustomTagParser.java @@ -26,6 +26,7 @@ import java.text.ParseException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.logging.Level; import java.util.logging.Logger; @@ -56,7 +57,7 @@ public class CustomTagParser implements ModuleParser { } @Override - public Module parse(final Element element) { + public Module parse(final Element element, final Locale locale) { final CustomTags module = new CustomTagsImpl(); final ArrayList tags = new ArrayList(); final List elements = element.getChildren(); diff --git a/src/main/java/org/rometools/feed/module/base/io/GoogleBaseParser.java b/src/main/java/org/rometools/feed/module/base/io/GoogleBaseParser.java index 7c3b671..b067b33 100644 --- a/src/main/java/org/rometools/feed/module/base/io/GoogleBaseParser.java +++ b/src/main/java/org/rometools/feed/module/base/io/GoogleBaseParser.java @@ -50,6 +50,7 @@ import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; @@ -109,7 +110,7 @@ public class GoogleBaseParser implements ModuleParser { } @Override - public Module parse(final Element element) { + public Module parse(final Element element, final Locale locale) { final HashMap tag2pd = new HashMap(); final GoogleBaseImpl module = new GoogleBaseImpl(); diff --git a/src/main/java/org/rometools/feed/module/cc/io/ModuleParserRSS1.java b/src/main/java/org/rometools/feed/module/cc/io/ModuleParserRSS1.java index d9e1b6e..85a2a1a 100644 --- a/src/main/java/org/rometools/feed/module/cc/io/ModuleParserRSS1.java +++ b/src/main/java/org/rometools/feed/module/cc/io/ModuleParserRSS1.java @@ -43,6 +43,7 @@ package org.rometools.feed.module.cc.io; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Locale; import org.jdom2.Element; import org.jdom2.Namespace; @@ -68,7 +69,7 @@ public class ModuleParserRSS1 implements ModuleParser { } @Override - public Module parse(final Element element) { + public Module parse(final Element element, final Locale locale) { final CreativeCommonsImpl module = new CreativeCommonsImpl(); { // Parsing Channel level. diff --git a/src/main/java/org/rometools/feed/module/cc/io/ModuleParserRSS2.java b/src/main/java/org/rometools/feed/module/cc/io/ModuleParserRSS2.java index 1ee073a..aa266cd 100644 --- a/src/main/java/org/rometools/feed/module/cc/io/ModuleParserRSS2.java +++ b/src/main/java/org/rometools/feed/module/cc/io/ModuleParserRSS2.java @@ -43,6 +43,7 @@ package org.rometools.feed.module.cc.io; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Locale; import org.jdom2.Element; import org.jdom2.Namespace; @@ -66,7 +67,7 @@ public class ModuleParserRSS2 implements ModuleParser { } @Override - public Module parse(final Element element) { + public Module parse(final Element element, final Locale locale) { final CreativeCommonsImpl module = new CreativeCommonsImpl(); // Do channel global { diff --git a/src/main/java/org/rometools/feed/module/content/io/ContentModuleParser.java b/src/main/java/org/rometools/feed/module/content/io/ContentModuleParser.java index 944c03c..768f045 100644 --- a/src/main/java/org/rometools/feed/module/content/io/ContentModuleParser.java +++ b/src/main/java/org/rometools/feed/module/content/io/ContentModuleParser.java @@ -45,6 +45,7 @@ package org.rometools.feed.module.content.io; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import org.jdom2.Attribute; import org.jdom2.Element; @@ -72,7 +73,7 @@ public class ContentModuleParser implements com.sun.syndication.io.ModuleParser } @Override - public com.sun.syndication.feed.module.Module parse(final org.jdom2.Element element) { + public com.sun.syndication.feed.module.Module parse(final Element element, final Locale locale) { boolean foundSomething = false; final ContentModule cm = new ContentModuleImpl(); final List encodeds = element.getChildren("encoded", CONTENT_NS); diff --git a/src/main/java/org/rometools/feed/module/feedburner/io/FeedBurnerModuleParser.java b/src/main/java/org/rometools/feed/module/feedburner/io/FeedBurnerModuleParser.java index c3a0937..df7046b 100644 --- a/src/main/java/org/rometools/feed/module/feedburner/io/FeedBurnerModuleParser.java +++ b/src/main/java/org/rometools/feed/module/feedburner/io/FeedBurnerModuleParser.java @@ -16,6 +16,8 @@ */ package org.rometools.feed.module.feedburner.io; +import java.util.Locale; + import org.jdom2.Element; import org.jdom2.Namespace; import org.rometools.feed.module.feedburner.FeedBurner; @@ -40,7 +42,7 @@ public class FeedBurnerModuleParser implements ModuleParser { } @Override - public Module parse(final Element element) { + public Module parse(final Element element, final Locale locale) { final FeedBurnerImpl fbi = new FeedBurnerImpl(); boolean returnObj = false; Element tag = element.getChild("awareness", FeedBurnerModuleParser.NS); diff --git a/src/main/java/org/rometools/feed/module/georss/GMLParser.java b/src/main/java/org/rometools/feed/module/georss/GMLParser.java index 5d3a9fa..a3bda01 100644 --- a/src/main/java/org/rometools/feed/module/georss/GMLParser.java +++ b/src/main/java/org/rometools/feed/module/georss/GMLParser.java @@ -18,6 +18,7 @@ package org.rometools.feed.module.georss; import java.util.Iterator; import java.util.List; +import java.util.Locale; import org.jdom2.Element; import org.rometools.feed.module.georss.geometries.Envelope; @@ -56,7 +57,7 @@ public class GMLParser implements ModuleParser { * @see com.sun.syndication.io.ModuleParser#parse(org.jdom2.Element) */ @Override - public Module parse(final Element element) { + public Module parse(final Element element, final Locale locale) { final Module geoRssModule = parseGML(element); return geoRssModule; } diff --git a/src/main/java/org/rometools/feed/module/georss/SimpleParser.java b/src/main/java/org/rometools/feed/module/georss/SimpleParser.java index 19f0608..ee0f17b 100644 --- a/src/main/java/org/rometools/feed/module/georss/SimpleParser.java +++ b/src/main/java/org/rometools/feed/module/georss/SimpleParser.java @@ -16,6 +16,8 @@ */ package org.rometools.feed.module.georss; +import java.util.Locale; + import org.jdom2.Element; import org.rometools.feed.module.georss.geometries.Envelope; import org.rometools.feed.module.georss.geometries.LineString; @@ -63,7 +65,7 @@ public class SimpleParser implements ModuleParser { * @see com.sun.syndication.io.ModuleParser#parse(org.jdom2.Element) */ @Override - public Module parse(final Element element) { + public Module parse(final Element element, final Locale locale) { final Module geoRssModule = parseSimple(element); return geoRssModule; } diff --git a/src/main/java/org/rometools/feed/module/georss/W3CGeoParser.java b/src/main/java/org/rometools/feed/module/georss/W3CGeoParser.java index d5c8434..dc90d76 100644 --- a/src/main/java/org/rometools/feed/module/georss/W3CGeoParser.java +++ b/src/main/java/org/rometools/feed/module/georss/W3CGeoParser.java @@ -16,6 +16,8 @@ */ package org.rometools.feed.module.georss; +import java.util.Locale; + import org.jdom2.Element; import org.rometools.feed.module.georss.geometries.Point; import org.rometools.feed.module.georss.geometries.Position; @@ -73,7 +75,7 @@ public class W3CGeoParser implements ModuleParser { * @see com.sun.syndication.io.ModuleParser#parse(org.jdom2.Element) */ @Override - public Module parse(final Element element) { + public Module parse(final Element element, final Locale locale) { final Module geoRssModule = parseW3C(element); return geoRssModule; } diff --git a/src/main/java/org/rometools/feed/module/itunes/io/ITunesParser.java b/src/main/java/org/rometools/feed/module/itunes/io/ITunesParser.java index 088b95e..1434f7f 100644 --- a/src/main/java/org/rometools/feed/module/itunes/io/ITunesParser.java +++ b/src/main/java/org/rometools/feed/module/itunes/io/ITunesParser.java @@ -44,6 +44,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.StringTokenizer; import java.util.logging.Logger; @@ -81,7 +82,7 @@ public class ITunesParser implements ModuleParser { } @Override - public com.sun.syndication.feed.module.Module parse(final org.jdom2.Element element) { + public com.sun.syndication.feed.module.Module parse(final Element element, final Locale locale) { AbstractITunesObject module = null; if (element.getName().equals("channel")) { diff --git a/src/main/java/org/rometools/feed/module/mediarss/io/MediaModuleParser.java b/src/main/java/org/rometools/feed/module/mediarss/io/MediaModuleParser.java index f8de4c7..9aa8713 100644 --- a/src/main/java/org/rometools/feed/module/mediarss/io/MediaModuleParser.java +++ b/src/main/java/org/rometools/feed/module/mediarss/io/MediaModuleParser.java @@ -24,6 +24,7 @@ package org.rometools.feed.module.mediarss.io; import java.net.URI; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.StringTokenizer; import java.util.logging.Level; import java.util.logging.Logger; @@ -81,7 +82,7 @@ public class MediaModuleParser implements ModuleParser { * @see com.sun.syndication.io.ModuleParser#parse(org.jdom2.Element) */ @Override - public Module parse(final Element mmRoot) { + public Module parse(final Element mmRoot, final Locale locale) { MediaModuleImpl mod = null; if (mmRoot.getName().equals("channel") || mmRoot.getName().equals("feed")) { diff --git a/src/main/java/org/rometools/feed/module/mediarss/io/RSS20YahooParser.java b/src/main/java/org/rometools/feed/module/mediarss/io/RSS20YahooParser.java index 424bc9f..bb83961 100644 --- a/src/main/java/org/rometools/feed/module/mediarss/io/RSS20YahooParser.java +++ b/src/main/java/org/rometools/feed/module/mediarss/io/RSS20YahooParser.java @@ -22,6 +22,7 @@ package org.rometools.feed.module.mediarss.io; import java.util.List; +import java.util.Locale; import org.jdom2.Document; import org.jdom2.Element; @@ -85,8 +86,8 @@ public class RSS20YahooParser extends RSS20Parser { * */ @Override - protected WireFeed parseChannel(final Element rssRoot) { - final WireFeed wFeed = super.parseChannel(rssRoot); + protected WireFeed parseChannel(final Element rssRoot, final Locale locale) { + final WireFeed wFeed = super.parseChannel(rssRoot, locale); wFeed.setFeedType("rss_2.0"); return wFeed; diff --git a/src/main/java/org/rometools/feed/module/opensearch/impl/OpenSearchModuleParser.java b/src/main/java/org/rometools/feed/module/opensearch/impl/OpenSearchModuleParser.java index b0d3295..29fc33a 100644 --- a/src/main/java/org/rometools/feed/module/opensearch/impl/OpenSearchModuleParser.java +++ b/src/main/java/org/rometools/feed/module/opensearch/impl/OpenSearchModuleParser.java @@ -20,6 +20,7 @@ import java.net.URL; import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Locale; import org.jdom2.Attribute; import org.jdom2.Element; @@ -45,7 +46,7 @@ public class OpenSearchModuleParser implements ModuleParser { } @Override - public Module parse(final Element dcRoot) { + public Module parse(final Element dcRoot, final Locale locale) { final URL baseURI = findBaseURI(dcRoot); diff --git a/src/main/java/org/rometools/feed/module/photocast/io/Parser.java b/src/main/java/org/rometools/feed/module/photocast/io/Parser.java index 547871b..57b97b5 100644 --- a/src/main/java/org/rometools/feed/module/photocast/io/Parser.java +++ b/src/main/java/org/rometools/feed/module/photocast/io/Parser.java @@ -46,6 +46,7 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.logging.Logger; import org.jdom2.Element; @@ -76,7 +77,7 @@ public class Parser implements ModuleParser { } @Override - public Module parse(final Element element) { + public Module parse(final Element element, final Locale locale) { if (element.getName().equals("channel") || element.getName().equals("feed")) { return new PhotocastModuleImpl(); } else if (element.getChild("metadata", Parser.NS) == null && element.getChild("image", Parser.NS) == null) { diff --git a/src/main/java/org/rometools/feed/module/slash/io/SlashModuleParser.java b/src/main/java/org/rometools/feed/module/slash/io/SlashModuleParser.java index ea673a3..9803478 100644 --- a/src/main/java/org/rometools/feed/module/slash/io/SlashModuleParser.java +++ b/src/main/java/org/rometools/feed/module/slash/io/SlashModuleParser.java @@ -40,6 +40,7 @@ package org.rometools.feed.module.slash.io; +import java.util.Locale; import java.util.StringTokenizer; import org.jdom2.Element; @@ -71,7 +72,7 @@ public class SlashModuleParser implements ModuleParser { } @Override - public Module parse(final Element element) { + public Module parse(final Element element, final Locale locale) { final SlashImpl si = new SlashImpl(); Element tag = element.getChild("hit_parade", SlashModuleParser.NS); if (tag != null) { diff --git a/src/main/java/org/rometools/feed/module/sle/io/ItemParser.java b/src/main/java/org/rometools/feed/module/sle/io/ItemParser.java index 18b5173..0572b95 100644 --- a/src/main/java/org/rometools/feed/module/sle/io/ItemParser.java +++ b/src/main/java/org/rometools/feed/module/sle/io/ItemParser.java @@ -21,6 +21,7 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Locale; import org.jdom2.Element; import org.jdom2.Namespace; @@ -63,13 +64,12 @@ public class ItemParser implements com.sun.syndication.io.ModuleParser { * @return a module instance, null if the element did not have module information. */ @Override - public Module parse(final Element element) { + public Module parse(final Element element, final Locale locale) { final SleEntryImpl sle = new SleEntryImpl(); - ArrayList values = new ArrayList(); - final List groups = element.getChildren("group", ModuleParser.TEMP); + ArrayList values = new ArrayList(); + final List groups = element.getChildren("group", ModuleParser.TEMP); - for (int i = 0; groups != null && i < groups.size(); i++) { - final Element group = (Element) groups.get(i); + for (final Element group : groups) { final StringValue value = new StringValue(); value.setElement(group.getAttributeValue("element")); value.setLabel(group.getAttributeValue("label")); @@ -84,12 +84,11 @@ public class ItemParser implements com.sun.syndication.io.ModuleParser { } sle.setGroupValues((EntryValue[]) values.toArray(new EntryValue[values.size()])); - values = values.size() == 0 ? values : new ArrayList(); + values = values.size() == 0 ? values : new ArrayList(); - final List sorts = new ArrayList(element.getChildren("sort", ModuleParser.TEMP)); + final List sorts = new ArrayList(element.getChildren("sort", ModuleParser.TEMP)); // System.out.println("]]] sorts on element"+sorts.size()); - for (int i = 0; sorts != null && i < sorts.size(); i++) { - final Element sort = (Element) sorts.get(i); + for (final Element sort : sorts) { final String dataType = sort.getAttributeValue("data-type"); // System.out.println("Doing datatype "+dataType +" :: "+sorts.size()); if (dataType == null || dataType.equals(Sort.TEXT_TYPE)) { @@ -118,8 +117,10 @@ public class ItemParser implements com.sun.syndication.io.ModuleParser { Date dateValue = null; try { - dateValue = DateParser.parseRFC822(sort.getAttributeValue("value")); - dateValue = dateValue == null ? DateParser.parseW3CDateTime(sort.getAttributeValue("value")) : dateValue; + dateValue = DateParser.parseRFC822(sort.getAttributeValue("value"), locale); + if (dateValue == null) { + dateValue = DateParser.parseW3CDateTime(sort.getAttributeValue("value"), locale); + } } catch (final Exception e) { ; // ignore parse exceptions } diff --git a/src/main/java/org/rometools/feed/module/sle/io/ModuleParser.java b/src/main/java/org/rometools/feed/module/sle/io/ModuleParser.java index e677f2c..98fd6c6 100644 --- a/src/main/java/org/rometools/feed/module/sle/io/ModuleParser.java +++ b/src/main/java/org/rometools/feed/module/sle/io/ModuleParser.java @@ -19,6 +19,7 @@ package org.rometools.feed.module.sle.io; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import org.jdom2.Element; import org.jdom2.Namespace; @@ -61,7 +62,7 @@ public class ModuleParser implements com.sun.syndication.io.ModuleParser { * @return a module instance, null if the element did not have module information. */ @Override - public Module parse(final Element element) { + public Module parse(final Element element, final Locale locale) { if (element.getChild("treatAs", NS) == null) { return null; } @@ -70,11 +71,8 @@ public class ModuleParser implements com.sun.syndication.io.ModuleParser { sle.setTreatAs(element.getChildText("treatAs", NS)); final Element listInfo = element.getChild("listinfo", NS); - final List groups = listInfo.getChildren("group", NS); - ArrayList values = new ArrayList(); - - for (int i = 0; groups != null && i < groups.size(); i++) { - final Element ge = (Element) groups.get(i); + ArrayList values = new ArrayList(); + for (final Element ge : listInfo.getChildren("group", NS)) { final Namespace ns = ge.getAttribute("ns") == null ? element.getNamespace() : Namespace.getNamespace(ge.getAttributeValue("ns")); final String elementName = ge.getAttributeValue("element"); final String label = ge.getAttributeValue("label"); @@ -82,12 +80,9 @@ public class ModuleParser implements com.sun.syndication.io.ModuleParser { } sle.setGroupFields((Group[]) values.toArray(new Group[values.size()])); - values = values.size() == 0 ? values : new ArrayList(); + values = values.size() == 0 ? values : new ArrayList(); - final List sorts = listInfo.getChildren("sort", NS); - - for (int i = 0; sorts != null && i < sorts.size(); i++) { - final Element se = (Element) sorts.get(i); + for (final Element se : listInfo.getChildren("sort", NS)) { System.out.println("Parse cf:sort " + se.getAttributeValue("element") + se.getAttributeValue("data-type")); final Namespace ns = se.getAttributeValue("ns") == null ? element.getNamespace() : Namespace.getNamespace(se.getAttributeValue("ns")); final String elementName = se.getAttributeValue("element"); @@ -111,9 +106,9 @@ public class ModuleParser implements com.sun.syndication.io.ModuleParser { } } - public void insertValues(final SimpleListExtension sle, final List elements) { + public void insertValues(final SimpleListExtension sle, final List elements) { for (int i = 0; elements != null && i < elements.size(); i++) { - final Element e = (Element) elements.get(i); + final Element e = elements.get(i); final Group[] groups = sle.getGroupFields(); for (final Group group2 : groups) { diff --git a/src/main/java/org/rometools/feed/module/sle/types/DateValue.java b/src/main/java/org/rometools/feed/module/sle/types/DateValue.java index e8ec2f4..8d56be8 100644 --- a/src/main/java/org/rometools/feed/module/sle/types/DateValue.java +++ b/src/main/java/org/rometools/feed/module/sle/types/DateValue.java @@ -29,6 +29,7 @@ import com.sun.syndication.feed.impl.ObjectBean; * @author Robert "kebernet" Cooper */ public class DateValue implements EntryValue { + private static final long serialVersionUID = 8864338943592633517L; private Date value; private final ObjectBean obj = new ObjectBean(DateValue.class, this); private String element; @@ -87,7 +88,7 @@ public class DateValue implements EntryValue { * @return */ @Override - public Comparable getValue() { + public Comparable getValue() { return value; } diff --git a/src/main/java/org/rometools/feed/module/sle/types/EntryValue.java b/src/main/java/org/rometools/feed/module/sle/types/EntryValue.java index b76fbce..f33e7b3 100644 --- a/src/main/java/org/rometools/feed/module/sle/types/EntryValue.java +++ b/src/main/java/org/rometools/feed/module/sle/types/EntryValue.java @@ -46,7 +46,7 @@ public interface EntryValue extends Serializable, Cloneable { * * @return Returns the value of the element. */ - public Comparable getValue(); + public Comparable getValue(); /** * Returns the namespace of the element. diff --git a/src/main/java/org/rometools/feed/module/sle/types/Group.java b/src/main/java/org/rometools/feed/module/sle/types/Group.java index e4f45c7..79c0cd4 100644 --- a/src/main/java/org/rometools/feed/module/sle/types/Group.java +++ b/src/main/java/org/rometools/feed/module/sle/types/Group.java @@ -52,6 +52,7 @@ import com.sun.syndication.feed.impl.ObjectBean; * @author Robert "kebernet" Cooper */ public class Group implements Serializable, Cloneable { + private static final long serialVersionUID = -7054101150858658108L; private Namespace namespace = Namespace.XML_NAMESPACE; private final ObjectBean obj = new ObjectBean(Group.class, this); private final String element; diff --git a/src/main/java/org/rometools/feed/module/sle/types/NumberValue.java b/src/main/java/org/rometools/feed/module/sle/types/NumberValue.java index 135e0f2..51316b4 100644 --- a/src/main/java/org/rometools/feed/module/sle/types/NumberValue.java +++ b/src/main/java/org/rometools/feed/module/sle/types/NumberValue.java @@ -29,6 +29,7 @@ import com.sun.syndication.feed.impl.ObjectBean; * @author Robert "kebernet" Cooper */ public class NumberValue implements EntryValue { + private static final long serialVersionUID = 8043418996659222922L; private BigDecimal value; private final ObjectBean obj = new ObjectBean(NumberValue.class, this); private String element; @@ -62,7 +63,7 @@ public class NumberValue implements EntryValue { } @Override - public Comparable getValue() { + public Comparable getValue() { return value; } diff --git a/src/main/java/org/rometools/feed/module/sle/types/Sort.java b/src/main/java/org/rometools/feed/module/sle/types/Sort.java index ceca119..a405ff6 100644 --- a/src/main/java/org/rometools/feed/module/sle/types/Sort.java +++ b/src/main/java/org/rometools/feed/module/sle/types/Sort.java @@ -64,6 +64,7 @@ import com.sun.syndication.feed.impl.ObjectBean; * @author Robert "kebernet" Cooper */ public class Sort implements Serializable, Cloneable { + private static final long serialVersionUID = -5839582908829350351L; /** * dataType value for Date information. */ diff --git a/src/main/java/org/rometools/feed/module/sle/types/StringValue.java b/src/main/java/org/rometools/feed/module/sle/types/StringValue.java index 52c0b0e..500f9b4 100644 --- a/src/main/java/org/rometools/feed/module/sle/types/StringValue.java +++ b/src/main/java/org/rometools/feed/module/sle/types/StringValue.java @@ -27,6 +27,7 @@ import com.sun.syndication.feed.impl.ObjectBean; * @author Robert "kebernet" Cooper */ public class StringValue implements EntryValue { + private static final long serialVersionUID = -8384073300710802173L; private final ObjectBean obj = new ObjectBean(StringValue.class, this); private String element; private String label; @@ -60,7 +61,7 @@ public class StringValue implements EntryValue { } @Override - public Comparable getValue() { + public Comparable getValue() { return value; } diff --git a/src/main/java/org/rometools/feed/module/sse/SSE091Generator.java b/src/main/java/org/rometools/feed/module/sse/SSE091Generator.java index ceee4fa..4e31192 100644 --- a/src/main/java/org/rometools/feed/module/sse/SSE091Generator.java +++ b/src/main/java/org/rometools/feed/module/sse/SSE091Generator.java @@ -3,9 +3,11 @@ package org.rometools.feed.module.sse; import java.util.Date; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Set; import org.jdom2.Element; +import org.jdom2.Namespace; import org.rometools.feed.module.sse.modules.Conflict; import org.rometools.feed.module.sse.modules.Conflicts; import org.rometools.feed.module.sse.modules.History; @@ -54,7 +56,7 @@ public class SSE091Generator implements DelegatingModuleGenerator { * @return a set with all the URIs (JDOM Namespace elements) this module generator uses. */ @Override - public Set getNamespaces() { + public Set getNamespaces() { return SSEModule.NAMESPACES; } @@ -119,10 +121,10 @@ public class SSE091Generator implements DelegatingModuleGenerator { parent.addContent(syncElement); } - private void generateConflicts(final Element syncElement, final List conflicts) { + private void generateConflicts(final Element syncElement, final List conflicts) { if (conflicts != null) { final Element conflictsElement = new Element(Conflicts.NAME, SSEModule.SSE_NS); - for (final Iterator confictIter = conflicts.iterator(); confictIter.hasNext();) { + for (final Iterator confictIter = conflicts.iterator(); confictIter.hasNext();) { final Element conflictElement = new Element(Conflict.NAME, SSEModule.SSE_NS); final Conflict conflict = (Conflict) confictIter.next(); generateAttribute(conflictElement, Conflict.BY_ATTRIBUTE, conflict.getBy()); @@ -154,11 +156,11 @@ public class SSE091Generator implements DelegatingModuleGenerator { } } - private void generateUpdates(final Element historyElement, final List updates) { + private void generateUpdates(final Element historyElement, final List updates) { if (updates != null) { - for (final Iterator updateIter = updates.iterator(); updateIter.hasNext();) { + for (final Iterator updateIter = updates.iterator(); updateIter.hasNext();) { final Element updateElement = new Element(Update.NAME, SSEModule.SSE_NS); - final Update update = (Update) updateIter.next(); + final Update update = updateIter.next(); generateAttribute(updateElement, Update.BY_ATTRIBUTE, update.getBy()); generateAttribute(updateElement, Update.WHEN_ATTRIBUTE, update.getWhen()); historyElement.addContent(updateElement); @@ -175,7 +177,7 @@ public class SSE091Generator implements DelegatingModuleGenerator { private String toString(final Object o) { if (o != null) { if (o instanceof Date) { - return DateParser.formatRFC822((Date) o); + return DateParser.formatRFC822((Date) o, Locale.US); } else { return o.toString(); } diff --git a/src/main/java/org/rometools/feed/module/sse/SSE091Parser.java b/src/main/java/org/rometools/feed/module/sse/SSE091Parser.java index bcb2bd1..5dc2954 100644 --- a/src/main/java/org/rometools/feed/module/sse/SSE091Parser.java +++ b/src/main/java/org/rometools/feed/module/sse/SSE091Parser.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.logging.Logger; import org.jdom2.Attribute; @@ -52,19 +53,19 @@ public class SSE091Parser implements DelegatingModuleParser { } @Override - public Module parse(final org.jdom2.Element element) { + public Module parse(final Element element, final Locale locale) { SSEModule sseModule = null; final String name = element.getName(); if (name.equals("rss")) { - sseModule = parseSharing(element); + sseModule = parseSharing(element, locale); } else if (name.equals("item")) { - sseModule = parseSync(element); + sseModule = parseSync(element, locale); } return sseModule; } - private Sharing parseSharing(final Element element) { + private Sharing parseSharing(final Element element, final Locale locale) { final Element root = getRoot(element); Sharing sharing = null; @@ -72,32 +73,32 @@ public class SSE091Parser implements DelegatingModuleParser { if (sharingChild != null) { sharing = new Sharing(); sharing.setOrdered(parseBooleanAttr(sharingChild, Sharing.ORDERED_ATTRIBUTE)); - sharing.setSince(parseDateAttribute(sharingChild, Sharing.SINCE_ATTRIBUTE)); - sharing.setUntil(parseDateAttribute(sharingChild, Sharing.UNTIL_ATTRIBUTE)); + sharing.setSince(parseDateAttribute(sharingChild, Sharing.SINCE_ATTRIBUTE, locale)); + sharing.setUntil(parseDateAttribute(sharingChild, Sharing.UNTIL_ATTRIBUTE, locale)); sharing.setWindow(parseIntegerAttribute(sharingChild, Sharing.WINDOW_ATTRIBUTE)); sharing.setVersion(parseStringAttribute(sharingChild, Sharing.VERSION_ATTRIBUTE)); - parseRelated(root, sharing); + parseRelated(root, sharing, locale); } return sharing; } - private void parseRelated(final Element root, final Sharing sharing) { + private void parseRelated(final Element root, final Sharing sharing, final Locale locale) { Related related; final Element relatedChild = root.getChild(Related.NAME, SSEModule.SSE_NS); if (relatedChild != null) { related = new Related(); // TODO; is this an attribute? related.setLink(parseStringAttribute(relatedChild, Related.LINK_ATTRIBUTE)); - related.setSince(parseDateAttribute(relatedChild, Related.SINCE_ATTRIBUTE)); + related.setSince(parseDateAttribute(relatedChild, Related.SINCE_ATTRIBUTE, locale)); related.setTitle(parseStringAttribute(relatedChild, Related.TITLE_ATTRIBUTE)); related.setType(parseIntegerAttribute(relatedChild, Related.TYPE_ATTRIBUTE)); - related.setUntil(parseDateAttribute(relatedChild, Related.UNTIL_ATTRIBUTE)); + related.setUntil(parseDateAttribute(relatedChild, Related.UNTIL_ATTRIBUTE, locale)); sharing.setRelated(related); } } - private Sync parseSync(final Element element) { + private Sync parseSync(final Element element, final Locale locale) { // Now I am going to get the item specific tags final Element syncChild = element.getChild(Sync.NAME, SSEModule.SSE_NS); Sync sync = null; @@ -108,37 +109,37 @@ public class SSE091Parser implements DelegatingModuleParser { sync.setVersion(parseIntegerAttribute(syncChild, Sync.VERSION_ATTRIBUTE)); sync.setDeleted(parseBooleanAttr(syncChild, Sync.DELETED_ATTRIBUTE)); sync.setConflict(parseBooleanAttr(syncChild, Sync.CONFLICT_ATTRIBUTE)); - sync.setHistory(parseHistory(syncChild)); - sync.setConflicts(parseConflicts(syncChild)); + sync.setHistory(parseHistory(syncChild, locale)); + sync.setConflicts(parseConflicts(syncChild, locale)); } return sync; } - private List parseConflicts(final Element syncElement) { - List conflicts = null; + private List parseConflicts(final Element syncElement, final Locale locale) { + List conflicts = null; - final List conflictsContent = syncElement.getContent(new ContentFilter(Conflicts.NAME)); - for (final Iterator conflictsIter = conflictsContent.iterator(); conflictsIter.hasNext();) { - final Element conflictsElement = (Element) conflictsIter.next(); + final List conflictsContent = syncElement.getContent(new ContentFilter(Conflicts.NAME)); + for (final Iterator conflictsIter = conflictsContent.iterator(); conflictsIter.hasNext();) { + final Element conflictsElement = conflictsIter.next(); - final List conflictContent = conflictsElement.getContent(new ContentFilter(Conflict.NAME)); - for (final Iterator conflictIter = conflictContent.iterator(); conflictIter.hasNext();) { + final List conflictContent = conflictsElement.getContent(new ContentFilter(Conflict.NAME)); + for (final Iterator conflictIter = conflictContent.iterator(); conflictIter.hasNext();) { final Element conflictElement = (Element) conflictIter.next(); final Conflict conflict = new Conflict(); conflict.setBy(parseStringAttribute(conflictElement, Conflict.BY_ATTRIBUTE)); - conflict.setWhen(parseDateAttribute(conflictElement, Conflict.WHEN_ATTRIBUTE)); + conflict.setWhen(parseDateAttribute(conflictElement, Conflict.WHEN_ATTRIBUTE, locale)); conflict.setVersion(parseIntegerAttribute(conflictElement, Conflict.VERSION_ATTRIBUTE)); - final List conflictItemContent = conflictElement.getContent(new ContentFilter("item")); - for (final Iterator conflictItemIter = conflictItemContent.iterator(); conflictItemIter.hasNext();) { + final List conflictItemContent = conflictElement.getContent(new ContentFilter("item")); + for (final Iterator conflictItemIter = conflictItemContent.iterator(); conflictItemIter.hasNext();) { final Element conflictItemElement = (Element) conflictItemIter.next(); final Element root = getRoot(conflictItemElement); - final Item conflictItem = rssParser.parseItem(root, conflictItemElement); + final Item conflictItem = rssParser.parseItem(root, conflictItemElement, locale); conflict.setItem(conflictItem); if (conflicts == null) { - conflicts = new ArrayList(); + conflicts = new ArrayList(); } conflicts.add(conflict); } @@ -158,21 +159,21 @@ public class SSE091Parser implements DelegatingModuleParser { return root; } - private History parseHistory(final Element historyElement) { + private History parseHistory(final Element historyElement, final Locale locale) { final Element historyContent = getFirstContent(historyElement, History.NAME); History history = null; if (historyContent != null) { history = new History(); history.setBy(parseStringAttribute(historyContent, History.BY_ATTRIBUTE)); - history.setWhen(parseDateAttribute(historyContent, History.WHEN_ATTRIBUTE)); - parseUpdates(historyContent, history); + history.setWhen(parseDateAttribute(historyContent, History.WHEN_ATTRIBUTE, locale)); + parseUpdates(historyContent, history, locale); } return history; } private Element getFirstContent(final Element element, final String name) { - final List filterList = element.getContent(new ContentFilter(name)); + final List filterList = element.getContent(new ContentFilter(name)); Element firstContent = null; if (filterList != null && filterList.size() > 0) { firstContent = (Element) filterList.get(0); @@ -180,13 +181,13 @@ public class SSE091Parser implements DelegatingModuleParser { return firstContent; } - private void parseUpdates(final Element historyChild, final History history) { - final List updatedChildren = historyChild.getContent(new ContentFilter(Update.NAME)); - for (final Iterator childIter = updatedChildren.iterator(); childIter.hasNext();) { - final Element updateChild = (Element) childIter.next(); + private void parseUpdates(final Element historyChild, final History history, final Locale locale) { + final List updatedChildren = historyChild.getContent(new ContentFilter(Update.NAME)); + for (final Iterator childIter = updatedChildren.iterator(); childIter.hasNext();) { + final Element updateChild = childIter.next(); final Update update = new Update(); update.setBy(parseStringAttribute(updateChild, Update.BY_ATTRIBUTE)); - update.setWhen(parseDateAttribute(updateChild, Update.WHEN_ATTRIBUTE)); + update.setWhen(parseDateAttribute(updateChild, Update.WHEN_ATTRIBUTE, locale)); history.addUpdate(update); } } @@ -222,20 +223,20 @@ public class SSE091Parser implements DelegatingModuleParser { return attrValue; } - private Date parseDateAttribute(final Element childElement, final String attrName) { + private Date parseDateAttribute(final Element childElement, final String attrName, final Locale locale) { final Attribute dateAttribute = childElement.getAttribute(attrName); final Date date = null; if (dateAttribute != null) { // SSE spec requires the timezone to be 'GMT' // admittedly, this is a bit heavy-handed final String dateAttr = dateAttribute.getValue().trim(); - return DateParser.parseRFC822(dateAttr); + return DateParser.parseRFC822(dateAttr, locale); } return date; } - private static class ContentFilter extends AbstractFilter { - + private static class ContentFilter extends AbstractFilter { + private static final long serialVersionUID = 9087423853758730810L; private final String name; private ContentFilter(final String name) { @@ -243,8 +244,14 @@ public class SSE091Parser implements DelegatingModuleParser { } @Override - public Object filter(final Object object) { - return object instanceof Element && name.equals(((Element) object).getName()); + public Element filter(final Object content) { + final Element returnValue; + if (content instanceof Element && name.equals(((Element) content).getName())) { + returnValue = (Element) content; + } else { + returnValue = null; + } + return returnValue; } } diff --git a/src/main/java/org/rometools/feed/module/sse/modules/Conflict.java b/src/main/java/org/rometools/feed/module/sse/modules/Conflict.java index 8e79a30..f2cc8d8 100644 --- a/src/main/java/org/rometools/feed/module/sse/modules/Conflict.java +++ b/src/main/java/org/rometools/feed/module/sse/modules/Conflict.java @@ -3,12 +3,15 @@ package org.rometools.feed.module.sse.modules; import java.util.Date; import com.sun.syndication.feed.CopyFrom; +import com.sun.syndication.feed.module.Module; import com.sun.syndication.feed.rss.Item; /** * element within */ public class Conflict extends SSEModule { + private static final long serialVersionUID = -6923108346241653067L; + public static final String CONFLICTS_NAME = "conflicts"; public static final String NAME = "conflict"; @@ -39,7 +42,7 @@ public class Conflict extends SSEModule { private Item conflictItem; @Override - public void copyFrom(final CopyFrom obj) { + public void copyFrom(final CopyFrom obj) { final Conflict conflict = (Conflict) obj; conflict.when = when == null ? null : (Date) when.clone(); conflict.by = by; diff --git a/src/main/java/org/rometools/feed/module/sse/modules/Conflicts.java b/src/main/java/org/rometools/feed/module/sse/modules/Conflicts.java index c3dc7d6..f046e06 100644 --- a/src/main/java/org/rometools/feed/module/sse/modules/Conflicts.java +++ b/src/main/java/org/rometools/feed/module/sse/modules/Conflicts.java @@ -1,6 +1,7 @@ package org.rometools.feed.module.sse.modules; import com.sun.syndication.feed.CopyFrom; +import com.sun.syndication.feed.module.Module; /** * element within @@ -8,10 +9,11 @@ import com.sun.syndication.feed.CopyFrom; * The sx:conflicts element MUST contain one or more sx:conflict sub-elements. */ public class Conflicts extends SSEModule { + private static final long serialVersionUID = 2722893639295169689L; public static final String NAME = "conflicts"; @Override - public void copyFrom(final CopyFrom obj) { + public void copyFrom(final CopyFrom obj) { // nothing to copy, just a place-holder } } diff --git a/src/main/java/org/rometools/feed/module/sse/modules/History.java b/src/main/java/org/rometools/feed/module/sse/modules/History.java index 3c609b2..e6ac8ba 100644 --- a/src/main/java/org/rometools/feed/module/sse/modules/History.java +++ b/src/main/java/org/rometools/feed/module/sse/modules/History.java @@ -5,6 +5,7 @@ import java.util.Date; import java.util.List; import com.sun.syndication.feed.CopyFrom; +import com.sun.syndication.feed.module.Module; /** *
@@ -20,6 +21,8 @@ import com.sun.syndication.feed.CopyFrom;
  * .
  */
 public class History extends SSEModule {
+    private static final long serialVersionUID = -8007994009928369002L;
+
     // A date-time attribute.
     private Date when;
 
@@ -31,20 +34,20 @@ public class History extends SSEModule {
     public static final String WHEN_ATTRIBUTE = "when";
     public static final String BY_ATTRIBUTE = "by";
 
-    private List updates;
+    private List updates;
 
     public History() {
     }
 
     @Override
-    public void copyFrom(final CopyFrom other) {
+    public void copyFrom(final CopyFrom other) {
         final History otherHistory = (History) other;
         when = otherHistory.when == null ? null : (Date) otherHistory.when.clone();
         // dont copy immutable
         by = otherHistory.by;
 
         if (otherHistory.updates != null) {
-            updates = new ArrayList();
+            updates = new ArrayList();
             updates.addAll(otherHistory.updates);
         }
     }
@@ -106,7 +109,7 @@ public class History extends SSEModule {
      */
     public void addUpdate(final Update update) {
         if (updates == null) {
-            updates = new ArrayList();
+            updates = new ArrayList();
         }
         updates.add(update);
     }
@@ -116,7 +119,7 @@ public class History extends SSEModule {
      * 
      * @return the list of updates for this history.
      */
-    public List getUpdates() {
+    public List getUpdates() {
         return updates;
     }
 }
diff --git a/src/main/java/org/rometools/feed/module/sse/modules/Related.java b/src/main/java/org/rometools/feed/module/sse/modules/Related.java
index 8e9f41c..0303f8a 100644
--- a/src/main/java/org/rometools/feed/module/sse/modules/Related.java
+++ b/src/main/java/org/rometools/feed/module/sse/modules/Related.java
@@ -3,6 +3,7 @@ package org.rometools.feed.module.sse.modules;
 import java.util.Date;
 
 import com.sun.syndication.feed.CopyFrom;
+import com.sun.syndication.feed.module.Module;
 
 /**
  * 
@@ -18,6 +19,8 @@ import com.sun.syndication.feed.CopyFrom;
  * .
  */
 public class Related extends SSEModule {
+    private static final long serialVersionUID = -2982701526362850770L;
+
     public static final String NAME = "related";
 
     /**
@@ -48,7 +51,7 @@ public class Related extends SSEModule {
     public static final String UNTIL_ATTRIBUTE = "until";
 
     @Override
-    public void copyFrom(final CopyFrom obj) {
+    public void copyFrom(final CopyFrom obj) {
         final Related related = (Related) obj;
         related.link = link;
         related.since = since == null ? null : (Date) since.clone();
diff --git a/src/main/java/org/rometools/feed/module/sse/modules/SSEModule.java b/src/main/java/org/rometools/feed/module/sse/modules/SSEModule.java
index d113f42..b1d5c53 100644
--- a/src/main/java/org/rometools/feed/module/sse/modules/SSEModule.java
+++ b/src/main/java/org/rometools/feed/module/sse/modules/SSEModule.java
@@ -13,16 +13,18 @@ import com.sun.syndication.feed.module.Module;
  * The base module for SSE data synchronization. Defines a namespace, uri, and basic copying operations.
  */
 public abstract class SSEModule implements Module {
+    private static final long serialVersionUID = -7487775381662291314L;
+
     public static final String SSE_SCHEMA_URI = "http://www.microsoft.com/schemas/rss/sse";
 
     // a default prefix to use for sse tags
     public static final String PREFIX = "sx";
     public static final Namespace SSE_NS = Namespace.getNamespace(PREFIX, SSE_SCHEMA_URI);
 
-    public static final Set NAMESPACES;
+    public static final Set NAMESPACES;
 
     static {
-        final Set nss = new HashSet();
+        final Set nss = new HashSet();
         nss.add(SSEModule.SSE_NS);
         NAMESPACES = Collections.unmodifiableSet(nss);
     }
@@ -33,7 +35,7 @@ public abstract class SSEModule implements Module {
     }
 
     @Override
-    public Class getInterface() {
+    public Class getInterface() {
         return getClass();
     }
 
@@ -54,5 +56,5 @@ public abstract class SSEModule implements Module {
     }
 
     @Override
-    public abstract void copyFrom(CopyFrom obj);
+    public abstract void copyFrom(CopyFrom obj);
 }
diff --git a/src/main/java/org/rometools/feed/module/sse/modules/Sharing.java b/src/main/java/org/rometools/feed/module/sse/modules/Sharing.java
index bbdb415..265e79c 100644
--- a/src/main/java/org/rometools/feed/module/sse/modules/Sharing.java
+++ b/src/main/java/org/rometools/feed/module/sse/modules/Sharing.java
@@ -3,6 +3,7 @@ package org.rometools.feed.module.sse.modules;
 import java.util.Date;
 
 import com.sun.syndication.feed.CopyFrom;
+import com.sun.syndication.feed.module.Module;
 
 /**
  * 
@@ -24,6 +25,8 @@ import com.sun.syndication.feed.CopyFrom;
  * .
  */
 public class Sharing extends SSEModule {
+    private static final long serialVersionUID = 8626705992778126861L;
+
     public static final String NAME = "sharing";
 
     public static final String UNTIL_ATTRIBUTE = "until";
@@ -49,7 +52,7 @@ public class Sharing extends SSEModule {
     private Related related;
 
     @Override
-    public void copyFrom(final CopyFrom obj) {
+    public void copyFrom(final CopyFrom obj) {
         final Sharing sharing = (Sharing) obj;
         ordered = sharing.ordered;
         since = sharing.since == null ? null : (Date) sharing.since.clone();
diff --git a/src/main/java/org/rometools/feed/module/sse/modules/Sync.java b/src/main/java/org/rometools/feed/module/sse/modules/Sync.java
index c7ccb4e..7a65894 100644
--- a/src/main/java/org/rometools/feed/module/sse/modules/Sync.java
+++ b/src/main/java/org/rometools/feed/module/sse/modules/Sync.java
@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import com.sun.syndication.feed.CopyFrom;
+import com.sun.syndication.feed.module.Module;
 
 /**
  * 
@@ -25,6 +26,8 @@ import com.sun.syndication.feed.CopyFrom;
  * .
  */
 public class Sync extends SSEModule {
+    private static final long serialVersionUID = 3071686432594143174L;
+
     public static final String NAME = "sync";
 
     public static final String ID_ATTRIBUTE = "id";
@@ -42,10 +45,10 @@ public class Sync extends SSEModule {
     private Boolean conflict;
 
     private History history;
-    private List conflicts;
+    private List conflicts;
 
     @Override
-    public void copyFrom(final CopyFrom obj) {
+    public void copyFrom(final CopyFrom obj) {
         final Sync sync = (Sync) obj;
         deleted = sync.deleted;
         version = sync.version;
@@ -53,7 +56,7 @@ public class Sync extends SSEModule {
         id = sync.id;
         history = sync.history == null ? null : (History) sync.history.clone();
         if (sync.conflicts != null) {
-            conflicts = new ArrayList();
+            conflicts = new ArrayList();
             conflicts.addAll(sync.conflicts);
         }
     }
@@ -155,16 +158,16 @@ public class Sync extends SSEModule {
 
     public void addConflict(final Conflict conflict) {
         if (conflicts == null) {
-            conflicts = new ArrayList();
+            conflicts = new ArrayList();
         }
         conflicts.add(conflict);
     }
 
-    public List getConflicts() {
+    public List getConflicts() {
         return conflicts;
     }
 
-    public void setConflicts(final List conflicts) {
+    public void setConflicts(final List conflicts) {
         this.conflicts = conflicts;
     }
 }
diff --git a/src/main/java/org/rometools/feed/module/sse/modules/Update.java b/src/main/java/org/rometools/feed/module/sse/modules/Update.java
index f9db47c..0f05239 100644
--- a/src/main/java/org/rometools/feed/module/sse/modules/Update.java
+++ b/src/main/java/org/rometools/feed/module/sse/modules/Update.java
@@ -3,6 +3,7 @@ package org.rometools.feed.module.sse.modules;
 import java.util.Date;
 
 import com.sun.syndication.feed.CopyFrom;
+import com.sun.syndication.feed.module.Module;
 
 /**
  * 
@@ -18,6 +19,7 @@ import com.sun.syndication.feed.CopyFrom;
  * .
  */
 public class Update extends SSEModule {
+    private static final long serialVersionUID = 4806771926023433667L;
     public static final String NAME = "update";
     public static final String BY_ATTRIBUTE = "by";
     public static final String WHEN_ATTRIBUTE = "when";
@@ -26,7 +28,7 @@ public class Update extends SSEModule {
     private String by;
 
     @Override
-    public void copyFrom(final CopyFrom other) {
+    public void copyFrom(final CopyFrom other) {
         final Update otherUpdate = (Update) other;
         otherUpdate.when = when == null ? null : (Date) when.clone();
         // dont copy immutable
diff --git a/src/main/java/org/rometools/feed/module/yahooweather/YWeatherModuleImpl.java b/src/main/java/org/rometools/feed/module/yahooweather/YWeatherModuleImpl.java
index ede9f9e..893c043 100644
--- a/src/main/java/org/rometools/feed/module/yahooweather/YWeatherModuleImpl.java
+++ b/src/main/java/org/rometools/feed/module/yahooweather/YWeatherModuleImpl.java
@@ -44,6 +44,7 @@ import org.rometools.feed.module.yahooweather.types.Units;
 import org.rometools.feed.module.yahooweather.types.Wind;
 
 import com.sun.syndication.feed.CopyFrom;
+import com.sun.syndication.feed.module.Module;
 import com.sun.syndication.feed.module.ModuleImpl;
 
 /**
@@ -53,6 +54,7 @@ import com.sun.syndication.feed.module.ModuleImpl;
  * @author Robert "kebernet" Cooper
  */
 public class YWeatherModuleImpl extends ModuleImpl implements YWeatherEntryModule, YWeatherFeedModule {
+    private static final long serialVersionUID = -4753704339578661020L;
     private Location location;
     private Astronomy astronomy;
     private Atmosphere atmosphere;
@@ -66,12 +68,12 @@ public class YWeatherModuleImpl extends ModuleImpl implements YWeatherEntryModul
     }
 
     @Override
-    public Class getInterface() {
+    public Class getInterface() {
         return CopyFromInterface.class;
     }
 
     @Override
-    public void copyFrom(final CopyFrom o) {
+    public void copyFrom(final CopyFrom o) {
         final YWeatherModuleImpl from = (YWeatherModuleImpl) o;
         setAstronomy(from.getAstronomy() != null ? (Astronomy) from.getAstronomy().clone() : null);
         setCondition(from.getCondition() != null ? (Condition) from.getCondition().clone() : null);
diff --git a/src/main/java/org/rometools/feed/module/yahooweather/io/WeatherModuleGenerator.java b/src/main/java/org/rometools/feed/module/yahooweather/io/WeatherModuleGenerator.java
index 3fa48d2..c8a5d30 100644
--- a/src/main/java/org/rometools/feed/module/yahooweather/io/WeatherModuleGenerator.java
+++ b/src/main/java/org/rometools/feed/module/yahooweather/io/WeatherModuleGenerator.java
@@ -39,6 +39,7 @@ package org.rometools.feed.module.yahooweather.io;
 
 import java.text.SimpleDateFormat;
 import java.util.HashSet;
+import java.util.Set;
 
 import org.jdom2.Element;
 import org.jdom2.Namespace;
@@ -203,10 +204,9 @@ public class WeatherModuleGenerator implements ModuleGenerator {
     }
 
     @Override
-    public java.util.Set getNamespaces() {
-        final HashSet set = new HashSet();
+    public Set getNamespaces() {
+        final Set set = new HashSet();
         set.add(WeatherModuleGenerator.NS);
-
         return set;
     }
 
diff --git a/src/main/java/org/rometools/feed/module/yahooweather/io/WeatherModuleParser.java b/src/main/java/org/rometools/feed/module/yahooweather/io/WeatherModuleParser.java
index f82e900..cef27c6 100644
--- a/src/main/java/org/rometools/feed/module/yahooweather/io/WeatherModuleParser.java
+++ b/src/main/java/org/rometools/feed/module/yahooweather/io/WeatherModuleParser.java
@@ -42,6 +42,7 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.logging.Logger;
 
 import org.jdom2.Element;
@@ -83,7 +84,7 @@ public class WeatherModuleParser implements ModuleParser {
     }
 
     @Override
-    public Module parse(final Element element) {
+    public Module parse(final Element element, final Locale locale) {
         final YWeatherModuleImpl module = new YWeatherModuleImpl();
         final Element location = element.getChild("location", WeatherModuleParser.NS);
 
@@ -152,14 +153,14 @@ public class WeatherModuleParser implements ModuleParser {
             }
         }
 
-        final List forecasts = element.getChildren("forecast", WeatherModuleParser.NS);
+        final List forecasts = element.getChildren("forecast", WeatherModuleParser.NS);
 
         if (forecasts != null) {
             final Forecast[] f = new Forecast[forecasts.size()];
             int i = 0;
 
-            for (final Iterator it = forecasts.iterator(); it.hasNext(); i++) {
-                final Element forecast = (Element) it.next();
+            for (final Iterator it = forecasts.iterator(); it.hasNext(); i++) {
+                final Element forecast = it.next();
 
                 try {
                     f[i] = new Forecast(forecast.getAttributeValue("day"), SHORT_DATE.parse(forecast.getAttributeValue("date")), Integer.parseInt(forecast
diff --git a/src/test/java/org/rometools/feed/module/sse/SSEParserTest.java b/src/test/java/org/rometools/feed/module/sse/SSEParserTest.java
index cd0bb9e..9c7c677 100644
--- a/src/test/java/org/rometools/feed/module/sse/SSEParserTest.java
+++ b/src/test/java/org/rometools/feed/module/sse/SSEParserTest.java
@@ -12,6 +12,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 
 import junit.framework.Test;
 import junit.framework.TestSuite;
@@ -153,8 +154,8 @@ public class SSEParserTest extends AbstractTestCase {
 
                     // this test is brittle, but its comprehensive
                     if ("until".equals(a1Name) || "since".equals(a1Name) || "when".equals(a1Name)) {
-                        av1 = DateParser.parseRFC822((String) av1);
-                        av2 = DateParser.parseRFC822((String) av2);
+                        av1 = DateParser.parseRFC822((String) av1, Locale.US);
+                        av2 = DateParser.parseRFC822((String) av2, Locale.US);
                     }
 
                     assertTrue("unequal attributes:" + one.getName() + "." + a1.getName() + ": " + av1 + " != " + av2, av1.equals(av2));
@@ -247,7 +248,7 @@ public class SSEParserTest extends AbstractTestCase {
 
             final Date when = history.getWhen();
             assertNotNull(when);
-            final Date testDate = DateParser.parseRFC822("Fri, 6 Jan 2006 19:24:09 GMT");
+            final Date testDate = DateParser.parseRFC822("Fri, 6 Jan 2006 19:24:09 GMT", Locale.US);
             assertEquals(testDate, when);
         }