added locale to parser to allow locale dependent date parsing (fixes
rometools/rome-modules#22)
This commit is contained in:
parent
ed18ac115b
commit
c3288555ab
33 changed files with 189 additions and 148 deletions
|
@ -16,6 +16,8 @@
|
|||
*/
|
||||
package com.sun.syndication.io;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Element;
|
||||
|
||||
import com.sun.syndication.feed.module.Module;
|
||||
|
@ -52,5 +54,5 @@ public interface ModuleParser {
|
|||
* information.
|
||||
*
|
||||
*/
|
||||
public Module parse(Element element);
|
||||
public Module parse(Element element, Locale locale);
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ import java.io.File;
|
|||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Document;
|
||||
import org.xml.sax.InputSource;
|
||||
|
@ -47,7 +48,7 @@ public class SyndFeedInput {
|
|||
*
|
||||
*/
|
||||
public SyndFeedInput() {
|
||||
this(false);
|
||||
this(false, Locale.US);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -58,8 +59,8 @@ public class SyndFeedInput {
|
|||
* IMPLEMENTED YET (validation does not happen)
|
||||
*
|
||||
*/
|
||||
public SyndFeedInput(final boolean validate) {
|
||||
feedInput = new WireFeedInput(validate);
|
||||
public SyndFeedInput(final boolean validate, final Locale locale) {
|
||||
feedInput = new WireFeedInput(validate, locale);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -23,6 +23,7 @@ import java.io.FileReader;
|
|||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.WeakHashMap;
|
||||
|
||||
|
@ -86,6 +87,7 @@ public class WireFeedInput {
|
|||
private final boolean validate;
|
||||
|
||||
private boolean xmlHealerOn;
|
||||
private final Locale locale;
|
||||
|
||||
/**
|
||||
* Returns the list of supported input feed types.
|
||||
|
@ -106,7 +108,7 @@ public class WireFeedInput {
|
|||
*
|
||||
*/
|
||||
public WireFeedInput() {
|
||||
this(false);
|
||||
this(false, Locale.US);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -117,9 +119,10 @@ public class WireFeedInput {
|
|||
* IMPLEMENTED YET (validation does not happen)
|
||||
*
|
||||
*/
|
||||
public WireFeedInput(final boolean validate) {
|
||||
public WireFeedInput(final boolean validate, final Locale locale) {
|
||||
this.validate = false; // TODO FIX THIS THINGY
|
||||
xmlHealerOn = true;
|
||||
this.locale = locale;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -297,7 +300,7 @@ public class WireFeedInput {
|
|||
if (parser == null) {
|
||||
throw new IllegalArgumentException("Invalid document");
|
||||
}
|
||||
return parser.parse(document, validate);
|
||||
return parser.parse(document, validate, locale);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
*/
|
||||
package com.sun.syndication.io;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Document;
|
||||
|
||||
import com.sun.syndication.feed.WireFeed;
|
||||
|
@ -73,6 +75,6 @@ public interface WireFeedParser {
|
|||
* XML document (JDOM).
|
||||
*
|
||||
*/
|
||||
public WireFeed parse(Document document, boolean validate) throws IllegalArgumentException, FeedException;
|
||||
public WireFeed parse(Document document, boolean validate, final Locale locale) throws IllegalArgumentException, FeedException;
|
||||
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ package com.sun.syndication.io.impl;
|
|||
|
||||
import java.io.StringReader;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Attribute;
|
||||
import org.jdom2.Document;
|
||||
|
@ -171,7 +172,7 @@ public class Atom03Generator extends BaseWireFeedGenerator {
|
|||
|
||||
if (feed.getModified() != null) {
|
||||
final Element modifiedElement = new Element("modified", getFeedNamespace());
|
||||
modifiedElement.addContent(DateParser.formatW3CDateTime(feed.getModified()));
|
||||
modifiedElement.addContent(DateParser.formatW3CDateTime(feed.getModified(), Locale.US));
|
||||
eFeed.addContent(modifiedElement);
|
||||
}
|
||||
}
|
||||
|
@ -210,19 +211,19 @@ public class Atom03Generator extends BaseWireFeedGenerator {
|
|||
|
||||
if (entry.getModified() != null) {
|
||||
final Element modifiedElement = new Element("modified", getFeedNamespace());
|
||||
modifiedElement.addContent(DateParser.formatW3CDateTime(entry.getModified()));
|
||||
modifiedElement.addContent(DateParser.formatW3CDateTime(entry.getModified(), Locale.US));
|
||||
eEntry.addContent(modifiedElement);
|
||||
}
|
||||
|
||||
if (entry.getIssued() != null) {
|
||||
final Element issuedElement = new Element("issued", getFeedNamespace());
|
||||
issuedElement.addContent(DateParser.formatW3CDateTime(entry.getIssued()));
|
||||
issuedElement.addContent(DateParser.formatW3CDateTime(entry.getIssued(), Locale.US));
|
||||
eEntry.addContent(issuedElement);
|
||||
}
|
||||
|
||||
if (entry.getCreated() != null) {
|
||||
final Element createdElement = new Element("created", getFeedNamespace());
|
||||
createdElement.addContent(DateParser.formatW3CDateTime(entry.getCreated()));
|
||||
createdElement.addContent(DateParser.formatW3CDateTime(entry.getCreated(), Locale.US));
|
||||
eEntry.addContent(createdElement);
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ package com.sun.syndication.io.impl;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Document;
|
||||
import org.jdom2.Element;
|
||||
|
@ -61,12 +62,12 @@ public class Atom03Parser extends BaseWireFeedParser {
|
|||
}
|
||||
|
||||
@Override
|
||||
public WireFeed parse(final Document document, final boolean validate) throws IllegalArgumentException, FeedException {
|
||||
public WireFeed parse(final Document document, final boolean validate, final Locale locale) throws IllegalArgumentException, FeedException {
|
||||
if (validate) {
|
||||
validateFeed(document);
|
||||
}
|
||||
final Element rssRoot = document.getRootElement();
|
||||
return parseFeed(rssRoot);
|
||||
return parseFeed(rssRoot, locale);
|
||||
}
|
||||
|
||||
protected void validateFeed(final Document document) throws FeedException {
|
||||
|
@ -79,7 +80,7 @@ public class Atom03Parser extends BaseWireFeedParser {
|
|||
// otherwise will have to check the document elements by hand.
|
||||
}
|
||||
|
||||
protected WireFeed parseFeed(final Element eFeed) {
|
||||
protected WireFeed parseFeed(final Element eFeed, final Locale locale) {
|
||||
|
||||
final Feed feed = new Feed(getType());
|
||||
feed.setStyleSheet(getStyleSheet(eFeed.getDocument()));
|
||||
|
@ -142,14 +143,14 @@ public class Atom03Parser extends BaseWireFeedParser {
|
|||
|
||||
e = eFeed.getChild("modified", getAtomNamespace());
|
||||
if (e != null) {
|
||||
feed.setModified(DateParser.parseDate(e.getText()));
|
||||
feed.setModified(DateParser.parseDate(e.getText(), locale));
|
||||
}
|
||||
|
||||
feed.setModules(parseFeedModules(eFeed));
|
||||
feed.setModules(parseFeedModules(eFeed, locale));
|
||||
|
||||
eList = eFeed.getChildren("entry", getAtomNamespace());
|
||||
if (eList.size() > 0) {
|
||||
feed.setEntries(parseEntries(eList));
|
||||
feed.setEntries(parseEntries(eList, locale));
|
||||
}
|
||||
|
||||
final List<Element> foreignMarkup = extractForeignMarkup(eFeed, feed, getAtomNamespace());
|
||||
|
@ -278,10 +279,10 @@ public class Atom03Parser extends BaseWireFeedParser {
|
|||
}
|
||||
|
||||
// List(Elements) -> List(Entries)
|
||||
private List<Entry> parseEntries(final List<Element> eEntries) {
|
||||
private List<Entry> parseEntries(final List<Element> eEntries, final Locale locale) {
|
||||
final List<Entry> entries = new ArrayList<Entry>();
|
||||
for (int i = 0; i < eEntries.size(); i++) {
|
||||
entries.add(parseEntry(eEntries.get(i)));
|
||||
entries.add(parseEntry(eEntries.get(i), locale));
|
||||
}
|
||||
if (entries.size() > 0) {
|
||||
return entries;
|
||||
|
@ -290,7 +291,7 @@ public class Atom03Parser extends BaseWireFeedParser {
|
|||
}
|
||||
}
|
||||
|
||||
private Entry parseEntry(final Element eEntry) {
|
||||
private Entry parseEntry(final Element eEntry, final Locale locale) {
|
||||
final Entry entry = new Entry();
|
||||
|
||||
Element e = eEntry.getChild("title", getAtomNamespace());
|
||||
|
@ -321,17 +322,17 @@ public class Atom03Parser extends BaseWireFeedParser {
|
|||
|
||||
e = eEntry.getChild("modified", getAtomNamespace());
|
||||
if (e != null) {
|
||||
entry.setModified(DateParser.parseDate(e.getText()));
|
||||
entry.setModified(DateParser.parseDate(e.getText(), locale));
|
||||
}
|
||||
|
||||
e = eEntry.getChild("issued", getAtomNamespace());
|
||||
if (e != null) {
|
||||
entry.setIssued(DateParser.parseDate(e.getText()));
|
||||
entry.setIssued(DateParser.parseDate(e.getText(), locale));
|
||||
}
|
||||
|
||||
e = eEntry.getChild("created", getAtomNamespace());
|
||||
if (e != null) {
|
||||
entry.setCreated(DateParser.parseDate(e.getText()));
|
||||
entry.setCreated(DateParser.parseDate(e.getText(), locale));
|
||||
}
|
||||
|
||||
e = eEntry.getChild("summary", getAtomNamespace());
|
||||
|
@ -348,7 +349,7 @@ public class Atom03Parser extends BaseWireFeedParser {
|
|||
entry.setContents(content);
|
||||
}
|
||||
|
||||
entry.setModules(parseItemModules(eEntry));
|
||||
entry.setModules(parseItemModules(eEntry, locale));
|
||||
|
||||
final List<Element> foreignMarkup = extractForeignMarkup(eEntry, entry, getAtomNamespace());
|
||||
if (foreignMarkup.size() > 0) {
|
||||
|
|
|
@ -21,6 +21,7 @@ import java.io.StringReader;
|
|||
import java.io.Writer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Attribute;
|
||||
import org.jdom2.Document;
|
||||
|
@ -203,7 +204,7 @@ public class Atom10Generator extends BaseWireFeedGenerator {
|
|||
|
||||
if (feed.getUpdated() != null) {
|
||||
final Element updatedElement = new Element("updated", getFeedNamespace());
|
||||
updatedElement.addContent(DateParser.formatW3CDateTime(feed.getUpdated()));
|
||||
updatedElement.addContent(DateParser.formatW3CDateTime(feed.getUpdated(), Locale.US));
|
||||
eFeed.addContent(updatedElement);
|
||||
}
|
||||
}
|
||||
|
@ -257,13 +258,13 @@ public class Atom10Generator extends BaseWireFeedGenerator {
|
|||
|
||||
if (entry.getUpdated() != null) {
|
||||
final Element updatedElement = new Element("updated", getFeedNamespace());
|
||||
updatedElement.addContent(DateParser.formatW3CDateTime(entry.getUpdated()));
|
||||
updatedElement.addContent(DateParser.formatW3CDateTime(entry.getUpdated(), Locale.US));
|
||||
eEntry.addContent(updatedElement);
|
||||
}
|
||||
|
||||
if (entry.getPublished() != null) {
|
||||
final Element publishedElement = new Element("published", getFeedNamespace());
|
||||
publishedElement.addContent(DateParser.formatW3CDateTime(entry.getPublished()));
|
||||
publishedElement.addContent(DateParser.formatW3CDateTime(entry.getPublished(), Locale.US));
|
||||
eEntry.addContent(publishedElement);
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ import java.net.MalformedURLException;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.jdom2.Attribute;
|
||||
|
@ -85,12 +86,12 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
}
|
||||
|
||||
@Override
|
||||
public WireFeed parse(final Document document, final boolean validate) throws IllegalArgumentException, FeedException {
|
||||
public WireFeed parse(final Document document, final boolean validate, final Locale locale) throws IllegalArgumentException, FeedException {
|
||||
if (validate) {
|
||||
validateFeed(document);
|
||||
}
|
||||
final Element rssRoot = document.getRootElement();
|
||||
return parseFeed(rssRoot);
|
||||
return parseFeed(rssRoot, locale);
|
||||
}
|
||||
|
||||
protected void validateFeed(final Document document) throws FeedException {
|
||||
|
@ -103,7 +104,7 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
// otherwise will have to check the document elements by hand.
|
||||
}
|
||||
|
||||
protected WireFeed parseFeed(final Element eFeed) throws FeedException {
|
||||
protected WireFeed parseFeed(final Element eFeed, final Locale locale) throws FeedException {
|
||||
|
||||
String baseURI = null;
|
||||
try {
|
||||
|
@ -112,7 +113,7 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
throw new FeedException("ERROR while finding base URI of feed", e);
|
||||
}
|
||||
|
||||
final Feed feed = parseFeedMetadata(baseURI, eFeed);
|
||||
final Feed feed = parseFeedMetadata(baseURI, eFeed, locale);
|
||||
feed.setStyleSheet(getStyleSheet(eFeed.getDocument()));
|
||||
|
||||
final String xmlBase = eFeed.getAttributeValue("base", Namespace.XML_NAMESPACE);
|
||||
|
@ -120,11 +121,11 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
feed.setXmlBase(xmlBase);
|
||||
}
|
||||
|
||||
feed.setModules(parseFeedModules(eFeed));
|
||||
feed.setModules(parseFeedModules(eFeed, locale));
|
||||
|
||||
final List<Element> eList = eFeed.getChildren("entry", getAtomNamespace());
|
||||
if (eList.size() > 0) {
|
||||
feed.setEntries(parseEntries(feed, baseURI, eList));
|
||||
feed.setEntries(parseEntries(feed, baseURI, eList, locale));
|
||||
}
|
||||
|
||||
final List<Element> foreignMarkup = extractForeignMarkup(eFeed, feed, getAtomNamespace());
|
||||
|
@ -134,7 +135,7 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
return feed;
|
||||
}
|
||||
|
||||
private Feed parseFeedMetadata(final String baseURI, final Element eFeed) {
|
||||
private Feed parseFeedMetadata(final String baseURI, final Element eFeed, final Locale locale) {
|
||||
final com.sun.syndication.feed.atom.Feed feed = new com.sun.syndication.feed.atom.Feed(getType());
|
||||
|
||||
Element e = eFeed.getChild("title", getAtomNamespace());
|
||||
|
@ -154,12 +155,12 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
|
||||
eList = eFeed.getChildren("author", getAtomNamespace());
|
||||
if (eList.size() > 0) {
|
||||
feed.setAuthors(parsePersons(baseURI, eList));
|
||||
feed.setAuthors(parsePersons(baseURI, eList, locale));
|
||||
}
|
||||
|
||||
eList = eFeed.getChildren("contributor", getAtomNamespace());
|
||||
if (eList.size() > 0) {
|
||||
feed.setContributors(parsePersons(baseURI, eList));
|
||||
feed.setContributors(parsePersons(baseURI, eList, locale));
|
||||
}
|
||||
|
||||
e = eFeed.getChild("subtitle", getAtomNamespace());
|
||||
|
@ -207,7 +208,7 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
|
||||
e = eFeed.getChild("updated", getAtomNamespace());
|
||||
if (e != null) {
|
||||
feed.setUpdated(DateParser.parseDate(e.getText()));
|
||||
feed.setUpdated(DateParser.parseDate(e.getText(), locale));
|
||||
}
|
||||
|
||||
return feed;
|
||||
|
@ -281,7 +282,7 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
}
|
||||
}
|
||||
|
||||
private Person parsePerson(final String baseURI, final Element ePerson) {
|
||||
private Person parsePerson(final String baseURI, final Element ePerson, final Locale locale) {
|
||||
final Person person = new Person();
|
||||
Element e = ePerson.getChild("name", getAtomNamespace());
|
||||
if (e != null) {
|
||||
|
@ -298,15 +299,15 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
if (e != null) {
|
||||
person.setEmail(e.getText());
|
||||
}
|
||||
person.setModules(parsePersonModules(ePerson));
|
||||
person.setModules(parsePersonModules(ePerson, locale));
|
||||
return person;
|
||||
}
|
||||
|
||||
// List(Elements) -> List(Persons)
|
||||
private List<SyndPerson> parsePersons(final String baseURI, final List<Element> ePersons) {
|
||||
private List<SyndPerson> parsePersons(final String baseURI, final List<Element> ePersons, final Locale locale) {
|
||||
final List<SyndPerson> persons = new ArrayList<SyndPerson>();
|
||||
for (int i = 0; i < ePersons.size(); i++) {
|
||||
persons.add(parsePerson(baseURI, ePersons.get(i)));
|
||||
persons.add(parsePerson(baseURI, ePersons.get(i), locale));
|
||||
}
|
||||
if (persons.size() > 0) {
|
||||
return persons;
|
||||
|
@ -355,10 +356,10 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
}
|
||||
|
||||
// List(Elements) -> List(Entries)
|
||||
protected List<Entry> parseEntries(final Feed feed, final String baseURI, final List<Element> eEntries) {
|
||||
protected List<Entry> parseEntries(final Feed feed, final String baseURI, final List<Element> eEntries, final Locale locale) {
|
||||
final List<Entry> entries = new ArrayList<Entry>();
|
||||
for (int i = 0; i < eEntries.size(); i++) {
|
||||
entries.add(this.parseEntry(feed, eEntries.get(i), baseURI));
|
||||
entries.add(this.parseEntry(feed, eEntries.get(i), baseURI, locale));
|
||||
}
|
||||
if (entries.size() > 0) {
|
||||
return entries;
|
||||
|
@ -367,7 +368,7 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
}
|
||||
}
|
||||
|
||||
protected Entry parseEntry(final Feed feed, final Element eEntry, final String baseURI) {
|
||||
protected Entry parseEntry(final Feed feed, final Element eEntry, final String baseURI, final Locale locale) {
|
||||
final Entry entry = new Entry();
|
||||
|
||||
final String xmlBase = eEntry.getAttributeValue("base", Namespace.XML_NAMESPACE);
|
||||
|
@ -389,12 +390,12 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
|
||||
eList = eEntry.getChildren("author", getAtomNamespace());
|
||||
if (eList.size() > 0) {
|
||||
entry.setAuthors(parsePersons(baseURI, eList));
|
||||
entry.setAuthors(parsePersons(baseURI, eList, locale));
|
||||
}
|
||||
|
||||
eList = eEntry.getChildren("contributor", getAtomNamespace());
|
||||
if (eList.size() > 0) {
|
||||
entry.setContributors(parsePersons(baseURI, eList));
|
||||
entry.setContributors(parsePersons(baseURI, eList, locale));
|
||||
}
|
||||
|
||||
e = eEntry.getChild("id", getAtomNamespace());
|
||||
|
@ -404,12 +405,12 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
|
||||
e = eEntry.getChild("updated", getAtomNamespace());
|
||||
if (e != null) {
|
||||
entry.setUpdated(DateParser.parseDate(e.getText()));
|
||||
entry.setUpdated(DateParser.parseDate(e.getText(), locale));
|
||||
}
|
||||
|
||||
e = eEntry.getChild("published", getAtomNamespace());
|
||||
if (e != null) {
|
||||
entry.setPublished(DateParser.parseDate(e.getText()));
|
||||
entry.setPublished(DateParser.parseDate(e.getText(), locale));
|
||||
}
|
||||
|
||||
e = eEntry.getChild("summary", getAtomNamespace());
|
||||
|
@ -435,10 +436,10 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
// TODO: SHOULD handle Atom entry source element
|
||||
e = eEntry.getChild("source", getAtomNamespace());
|
||||
if (e != null) {
|
||||
entry.setSource(parseFeedMetadata(baseURI, e));
|
||||
entry.setSource(parseFeedMetadata(baseURI, e, locale));
|
||||
}
|
||||
|
||||
entry.setModules(parseItemModules(eEntry));
|
||||
entry.setModules(parseItemModules(eEntry, locale));
|
||||
|
||||
final List<Element> foreignMarkup = extractForeignMarkup(eEntry, entry, getAtomNamespace());
|
||||
if (foreignMarkup.size() > 0) {
|
||||
|
@ -659,7 +660,7 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
/**
|
||||
* Parse entry from reader.
|
||||
*/
|
||||
public static Entry parseEntry(final Reader rd, final String baseURI) throws JDOMException, IOException, IllegalArgumentException, FeedException {
|
||||
public static Entry parseEntry(final Reader rd, final String baseURI, final Locale locale) throws JDOMException, IOException, IllegalArgumentException, FeedException {
|
||||
// Parse entry into JDOM tree
|
||||
final SAXBuilder builder = new SAXBuilder();
|
||||
final Document entryDoc = builder.build(rd);
|
||||
|
@ -678,7 +679,7 @@ public class Atom10Parser extends BaseWireFeedParser {
|
|||
feedDoc.getRootElement().setAttribute("base", baseURI, Namespace.XML_NAMESPACE);
|
||||
}
|
||||
|
||||
final WireFeedInput input = new WireFeedInput();
|
||||
final WireFeedInput input = new WireFeedInput(false, locale);
|
||||
final Feed parsedFeed = (Feed) input.build(feedDoc);
|
||||
return parsedFeed.getEntries().get(0);
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.sun.syndication.io.impl;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Attribute;
|
||||
import org.jdom2.Content;
|
||||
|
@ -67,16 +68,16 @@ public abstract class BaseWireFeedParser implements WireFeedParser {
|
|||
return type;
|
||||
}
|
||||
|
||||
protected List<Module> parseFeedModules(final Element feedElement) {
|
||||
return feedModuleParsers.parseModules(feedElement);
|
||||
protected List<Module> parseFeedModules(final Element feedElement, final Locale locale) {
|
||||
return feedModuleParsers.parseModules(feedElement, locale);
|
||||
}
|
||||
|
||||
protected List<Module> parseItemModules(final Element itemElement) {
|
||||
return itemModuleParsers.parseModules(itemElement);
|
||||
protected List<Module> parseItemModules(final Element itemElement, final Locale locale) {
|
||||
return itemModuleParsers.parseModules(itemElement, locale);
|
||||
}
|
||||
|
||||
protected List<Module> parsePersonModules(final Element itemElement) {
|
||||
return personModuleParsers.parseModules(itemElement);
|
||||
protected List<Module> parsePersonModules(final Element itemElement, final Locale locale) {
|
||||
return personModuleParsers.parseModules(itemElement, locale);
|
||||
}
|
||||
|
||||
protected List<Element> extractForeignMarkup(final Element e, final Extendable ext, final Namespace basens) {
|
||||
|
|
|
@ -21,6 +21,7 @@ import java.util.Collections;
|
|||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
import org.jdom2.Attribute;
|
||||
|
@ -124,7 +125,7 @@ public class DCModuleGenerator implements ModuleGenerator {
|
|||
}
|
||||
if (dcModule.getDate() != null) {
|
||||
for (final Date date : dcModule.getDates()) {
|
||||
element.addContent(generateSimpleElement("date", DateParser.formatW3CDateTime(date)));
|
||||
element.addContent(generateSimpleElement("date", DateParser.formatW3CDateTime(date, Locale.US)));
|
||||
}
|
||||
}
|
||||
if (dcModule.getType() != null) {
|
||||
|
|
|
@ -19,6 +19,7 @@ package com.sun.syndication.io.impl;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Attribute;
|
||||
import org.jdom2.Element;
|
||||
|
@ -65,10 +66,11 @@ public class DCModuleParser implements ModuleParser {
|
|||
* <p>
|
||||
*
|
||||
* @param dcRoot the root element containing the module elements.
|
||||
* @param locale for date/time parsing
|
||||
* @return the module parsed from the element tree, <i>null</i> if none.
|
||||
*/
|
||||
@Override
|
||||
public Module parse(final Element dcRoot) {
|
||||
public Module parse(final Element dcRoot, final Locale locale) {
|
||||
boolean foundSomething = false;
|
||||
final DCModule dcm = new DCModuleImpl();
|
||||
|
||||
|
@ -105,7 +107,7 @@ public class DCModuleParser implements ModuleParser {
|
|||
eList = dcRoot.getChildren("date", getDCNamespace());
|
||||
if (eList.size() > 0) {
|
||||
foundSomething = true;
|
||||
dcm.setDates(parseElementListDate(eList));
|
||||
dcm.setDates(parseElementListDate(eList, locale));
|
||||
}
|
||||
eList = dcRoot.getChildren("type", getDCNamespace());
|
||||
if (eList.size() > 0) {
|
||||
|
@ -229,11 +231,11 @@ public class DCModuleParser implements ModuleParser {
|
|||
* @param eList the list of elements to parse.
|
||||
* @return the list of dates.
|
||||
*/
|
||||
protected final List<Date> parseElementListDate(final List<Element> eList) {
|
||||
protected final List<Date> parseElementListDate(final List<Element> eList, final Locale locale) {
|
||||
final List<Date> values = new ArrayList<Date>();
|
||||
for (final Element element : eList) {
|
||||
final Element e = element;
|
||||
values.add(DateParser.parseDate(e.getText()));
|
||||
values.add(DateParser.parseDate(e.getText(), locale));
|
||||
}
|
||||
|
||||
return values;
|
||||
|
|
|
@ -105,14 +105,14 @@ public class DateParser {
|
|||
* the string with any of the masks.
|
||||
*
|
||||
*/
|
||||
private static Date parseUsingMask(final String[] masks, String sDate) {
|
||||
private static Date parseUsingMask(final String[] masks, String sDate, final Locale locale) {
|
||||
if (sDate != null) {
|
||||
sDate = sDate.trim();
|
||||
}
|
||||
ParsePosition pp = null;
|
||||
Date d = null;
|
||||
for (int i = 0; d == null && i < masks.length; i++) {
|
||||
final DateFormat df = new SimpleDateFormat(masks[i], Locale.US);
|
||||
final DateFormat df = new SimpleDateFormat(masks[i], locale);
|
||||
// df.setLenient(false);
|
||||
df.setLenient(true);
|
||||
try {
|
||||
|
@ -154,14 +154,14 @@ public class DateParser {
|
|||
* a Date.
|
||||
*
|
||||
*/
|
||||
public static Date parseRFC822(String sDate) {
|
||||
public static Date parseRFC822(String sDate, final Locale locale) {
|
||||
final int utIndex = sDate.indexOf(" UT");
|
||||
if (utIndex > -1) {
|
||||
final String pre = sDate.substring(0, utIndex);
|
||||
final String post = sDate.substring(utIndex + 3);
|
||||
sDate = pre + " GMT" + post;
|
||||
}
|
||||
return parseUsingMask(RFC822_MASKS, sDate);
|
||||
return parseUsingMask(RFC822_MASKS, sDate, locale);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -186,7 +186,7 @@ public class DateParser {
|
|||
* string into a Date.
|
||||
*
|
||||
*/
|
||||
public static Date parseW3CDateTime(String sDate) {
|
||||
public static Date parseW3CDateTime(String sDate, final Locale locale) {
|
||||
// if sDate has time on it, it injects 'GTM' before de TZ displacement
|
||||
// to
|
||||
// allow the SimpleDateFormat parser to parse it properly
|
||||
|
@ -211,7 +211,7 @@ public class DateParser {
|
|||
} else {
|
||||
sDate += "T00:00GMT";
|
||||
}
|
||||
return parseUsingMask(W3CDATETIME_MASKS, sDate);
|
||||
return parseUsingMask(W3CDATETIME_MASKS, sDate, locale);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -225,12 +225,12 @@ public class DateParser {
|
|||
* string into a Date.
|
||||
*
|
||||
* */
|
||||
public static Date parseDate(final String sDate) {
|
||||
Date d = parseW3CDateTime(sDate);
|
||||
public static Date parseDate(final String sDate, final Locale locale) {
|
||||
Date d = parseW3CDateTime(sDate, locale);
|
||||
if (d == null) {
|
||||
d = parseRFC822(sDate);
|
||||
d = parseRFC822(sDate, locale);
|
||||
if (d == null && ADDITIONAL_MASKS.length > 0) {
|
||||
d = parseUsingMask(ADDITIONAL_MASKS, sDate);
|
||||
d = parseUsingMask(ADDITIONAL_MASKS, sDate, locale);
|
||||
}
|
||||
}
|
||||
return d;
|
||||
|
@ -248,8 +248,8 @@ public class DateParser {
|
|||
* if it was not possible to parse the date.
|
||||
*
|
||||
*/
|
||||
public static String formatRFC822(final Date date) {
|
||||
final SimpleDateFormat dateFormater = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US);
|
||||
public static String formatRFC822(final Date date, final Locale locale) {
|
||||
final SimpleDateFormat dateFormater = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", locale);
|
||||
dateFormater.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||
return dateFormater.format(date);
|
||||
}
|
||||
|
@ -266,8 +266,8 @@ public class DateParser {
|
|||
* <b>null</b> if it was not possible to parse the date.
|
||||
*
|
||||
*/
|
||||
public static String formatW3CDateTime(final Date date) {
|
||||
final SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
|
||||
public static String formatW3CDateTime(final Date date, final Locale locale) {
|
||||
final SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", locale);
|
||||
dateFormater.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||
return dateFormater.format(date);
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ package com.sun.syndication.io.impl;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Element;
|
||||
import org.jdom2.Namespace;
|
||||
|
@ -42,7 +43,7 @@ public class ModuleParsers extends PluginManager<ModuleParser> {
|
|||
return getKeys();
|
||||
}
|
||||
|
||||
public List<Module> parseModules(final Element root) {
|
||||
public List<Module> parseModules(final Element root, final Locale locale) {
|
||||
final List<ModuleParser> parsers = getPlugins();
|
||||
List<Module> modules = null;
|
||||
for (int i = 0; i < parsers.size(); i++) {
|
||||
|
@ -50,7 +51,7 @@ public class ModuleParsers extends PluginManager<ModuleParser> {
|
|||
final String namespaceUri = parser.getNamespaceUri();
|
||||
final Namespace namespace = Namespace.getNamespace(namespaceUri);
|
||||
if (hasElementsFrom(root, namespace)) {
|
||||
final Module module = parser.parse(root);
|
||||
final Module module = parser.parse(root, locale);
|
||||
if (module != null) {
|
||||
if (modules == null) {
|
||||
modules = new ArrayList<Module>();
|
||||
|
|
|
@ -20,6 +20,7 @@ import java.util.ArrayList;
|
|||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Document;
|
||||
import org.jdom2.Element;
|
||||
|
@ -76,12 +77,12 @@ public class RSS090Parser extends BaseWireFeedParser {
|
|||
}
|
||||
|
||||
@Override
|
||||
public WireFeed parse(final Document document, final boolean validate) throws IllegalArgumentException, FeedException {
|
||||
public WireFeed parse(final Document document, final boolean validate, final Locale locale) throws IllegalArgumentException, FeedException {
|
||||
if (validate) {
|
||||
validateFeed(document);
|
||||
}
|
||||
final Element rssRoot = document.getRootElement();
|
||||
return parseChannel(rssRoot);
|
||||
return parseChannel(rssRoot, locale);
|
||||
}
|
||||
|
||||
protected void validateFeed(final Document document) throws FeedException {
|
||||
|
@ -146,7 +147,7 @@ public class RSS090Parser extends BaseWireFeedParser {
|
|||
* @param rssRoot the root element of the RSS document to parse.
|
||||
* @return the parsed Channel bean.
|
||||
*/
|
||||
protected WireFeed parseChannel(final Element rssRoot) {
|
||||
protected WireFeed parseChannel(final Element rssRoot, final Locale locale) {
|
||||
final Element eChannel = rssRoot.getChild("channel", getRSSNamespace());
|
||||
|
||||
final Channel channel = new Channel(getType());
|
||||
|
@ -174,8 +175,8 @@ public class RSS090Parser extends BaseWireFeedParser {
|
|||
// and not inside the channel itself. So we also need to look for
|
||||
// channel modules from the root RSS element.
|
||||
final List<Module> allFeedModules = new ArrayList<Module>();
|
||||
final List<Module> rootModules = parseFeedModules(rssRoot);
|
||||
final List<Module> channelModules = parseFeedModules(eChannel);
|
||||
final List<Module> rootModules = parseFeedModules(rssRoot, locale);
|
||||
final List<Module> channelModules = parseFeedModules(eChannel, locale);
|
||||
if (rootModules != null) {
|
||||
allFeedModules.addAll(rootModules);
|
||||
}
|
||||
|
@ -183,7 +184,7 @@ public class RSS090Parser extends BaseWireFeedParser {
|
|||
allFeedModules.addAll(channelModules);
|
||||
}
|
||||
channel.setModules(allFeedModules);
|
||||
channel.setItems(parseItems(rssRoot));
|
||||
channel.setItems(parseItems(rssRoot, locale));
|
||||
|
||||
final List<Element> foreignMarkup = extractForeignMarkup(eChannel, channel, getRSSNamespace());
|
||||
if (foreignMarkup.size() > 0) {
|
||||
|
@ -267,13 +268,13 @@ public class RSS090Parser extends BaseWireFeedParser {
|
|||
* items information.
|
||||
* @return a list with all the parsed RSSItem beans.
|
||||
*/
|
||||
protected List<Item> parseItems(final Element rssRoot) {
|
||||
protected List<Item> parseItems(final Element rssRoot, final Locale locale) {
|
||||
final Collection<Element> eItems = getItems(rssRoot);
|
||||
|
||||
final List<Item> items = new ArrayList<Item>();
|
||||
for (final Element element : eItems) {
|
||||
final Element eItem = element;
|
||||
items.add(parseItem(rssRoot, eItem));
|
||||
items.add(parseItem(rssRoot, eItem, locale));
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
@ -289,7 +290,7 @@ public class RSS090Parser extends BaseWireFeedParser {
|
|||
* @param eItem the item element to parse.
|
||||
* @return the parsed RSSItem bean.
|
||||
*/
|
||||
protected Item parseItem(final Element rssRoot, final Element eItem) {
|
||||
protected Item parseItem(final Element rssRoot, final Element eItem, final Locale locale) {
|
||||
final Item item = new Item();
|
||||
Element e = eItem.getChild("title", getRSSNamespace());
|
||||
if (e != null) {
|
||||
|
@ -301,7 +302,7 @@ public class RSS090Parser extends BaseWireFeedParser {
|
|||
item.setUri(e.getText());
|
||||
}
|
||||
|
||||
item.setModules(parseItemModules(eItem));
|
||||
item.setModules(parseItemModules(eItem, locale));
|
||||
|
||||
final List<Element> foreignMarkup = extractForeignMarkup(eItem, item, getRSSNamespace());
|
||||
// content:encoded elements are treated special, without a module, they
|
||||
|
|
|
@ -18,6 +18,7 @@ package com.sun.syndication.io.impl;
|
|||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Attribute;
|
||||
import org.jdom2.Document;
|
||||
|
@ -201,13 +202,13 @@ public class RSS091UserlandGenerator extends RSS090Generator {
|
|||
final Date pubDate = channel.getPubDate();
|
||||
|
||||
if (pubDate != null) {
|
||||
eChannel.addContent(generateSimpleElement("pubDate", DateParser.formatRFC822(pubDate)));
|
||||
eChannel.addContent(generateSimpleElement("pubDate", DateParser.formatRFC822(pubDate, Locale.US)));
|
||||
}
|
||||
|
||||
final Date lastBuildDate = channel.getLastBuildDate();
|
||||
|
||||
if (lastBuildDate != null) {
|
||||
eChannel.addContent(generateSimpleElement("lastBuildDate", DateParser.formatRFC822(lastBuildDate)));
|
||||
eChannel.addContent(generateSimpleElement("lastBuildDate", DateParser.formatRFC822(lastBuildDate, Locale.US)));
|
||||
}
|
||||
|
||||
final String docs = channel.getDocs();
|
||||
|
|
|
@ -19,6 +19,7 @@ package com.sun.syndication.io.impl;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Attribute;
|
||||
import org.jdom2.Document;
|
||||
|
@ -86,8 +87,8 @@ public class RSS091UserlandParser extends RSS090Parser {
|
|||
* @return the parsed Channel bean.
|
||||
*/
|
||||
@Override
|
||||
protected WireFeed parseChannel(final Element rssRoot) {
|
||||
final Channel channel = (Channel) super.parseChannel(rssRoot);
|
||||
protected WireFeed parseChannel(final Element rssRoot, final Locale locale) {
|
||||
final Channel channel = (Channel) super.parseChannel(rssRoot, locale);
|
||||
|
||||
final Element eChannel = rssRoot.getChild("channel", getRSSNamespace());
|
||||
|
||||
|
@ -105,11 +106,11 @@ public class RSS091UserlandParser extends RSS090Parser {
|
|||
}
|
||||
e = eChannel.getChild("pubDate", getRSSNamespace());
|
||||
if (e != null) {
|
||||
channel.setPubDate(DateParser.parseDate(e.getText()));
|
||||
channel.setPubDate(DateParser.parseDate(e.getText(), locale));
|
||||
}
|
||||
e = eChannel.getChild("lastBuildDate", getRSSNamespace());
|
||||
if (e != null) {
|
||||
channel.setLastBuildDate(DateParser.parseDate(e.getText()));
|
||||
channel.setLastBuildDate(DateParser.parseDate(e.getText(), locale));
|
||||
}
|
||||
e = eChannel.getChild("docs", getRSSNamespace());
|
||||
if (e != null) {
|
||||
|
@ -251,8 +252,8 @@ public class RSS091UserlandParser extends RSS090Parser {
|
|||
* @return the parsed RSSItem bean.
|
||||
*/
|
||||
@Override
|
||||
protected Item parseItem(final Element rssRoot, final Element eItem) {
|
||||
final Item item = super.parseItem(rssRoot, eItem);
|
||||
protected Item parseItem(final Element rssRoot, final Element eItem, final Locale locale) {
|
||||
final Item item = super.parseItem(rssRoot, eItem, locale);
|
||||
final Element e = eItem.getChild("description", getRSSNamespace());
|
||||
if (e != null) {
|
||||
item.setDescription(parseItemDescription(rssRoot, e));
|
||||
|
|
|
@ -18,6 +18,7 @@ package com.sun.syndication.io.impl;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Content;
|
||||
import org.jdom2.Element;
|
||||
|
@ -50,8 +51,8 @@ public class RSS092Parser extends RSS091UserlandParser {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected WireFeed parseChannel(final Element rssRoot) {
|
||||
final Channel channel = (Channel) super.parseChannel(rssRoot);
|
||||
protected WireFeed parseChannel(final Element rssRoot, final Locale locale) {
|
||||
final Channel channel = (Channel) super.parseChannel(rssRoot, locale);
|
||||
|
||||
final Element eChannel = rssRoot.getChild("channel", getRSSNamespace());
|
||||
final Element eCloud = eChannel.getChild("cloud", getRSSNamespace());
|
||||
|
@ -91,8 +92,8 @@ public class RSS092Parser extends RSS091UserlandParser {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected Item parseItem(final Element rssRoot, final Element eItem) {
|
||||
final Item item = super.parseItem(rssRoot, eItem);
|
||||
protected Item parseItem(final Element rssRoot, final Element eItem, final Locale locale) {
|
||||
final Item item = super.parseItem(rssRoot, eItem, locale);
|
||||
|
||||
Element e = eItem.getChild("source", getRSSNamespace());
|
||||
if (e != null) {
|
||||
|
|
|
@ -18,6 +18,7 @@ package com.sun.syndication.io.impl;
|
|||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Element;
|
||||
|
||||
|
@ -47,12 +48,12 @@ public class RSS093Generator extends RSS092Generator {
|
|||
|
||||
final Date pubDate = item.getPubDate();
|
||||
if (pubDate != null) {
|
||||
eItem.addContent(generateSimpleElement("pubDate", DateParser.formatRFC822(pubDate)));
|
||||
eItem.addContent(generateSimpleElement("pubDate", DateParser.formatRFC822(pubDate, Locale.US)));
|
||||
}
|
||||
|
||||
final Date expirationDate = item.getExpirationDate();
|
||||
if (expirationDate != null) {
|
||||
eItem.addContent(generateSimpleElement("expirationDate", DateParser.formatRFC822(expirationDate)));
|
||||
eItem.addContent(generateSimpleElement("expirationDate", DateParser.formatRFC822(expirationDate, Locale.US)));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
*/
|
||||
package com.sun.syndication.io.impl;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Element;
|
||||
|
||||
import com.sun.syndication.feed.rss.Item;
|
||||
|
@ -38,15 +40,15 @@ public class RSS093Parser extends RSS092Parser {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected Item parseItem(final Element rssRoot, final Element eItem) {
|
||||
final Item item = super.parseItem(rssRoot, eItem);
|
||||
protected Item parseItem(final Element rssRoot, final Element eItem, final Locale locale) {
|
||||
final Item item = super.parseItem(rssRoot, eItem, locale);
|
||||
Element e = eItem.getChild("pubDate", getRSSNamespace());
|
||||
if (e != null) {
|
||||
item.setPubDate(DateParser.parseDate(e.getText()));
|
||||
item.setPubDate(DateParser.parseDate(e.getText(), locale));
|
||||
}
|
||||
e = eItem.getChild("expirationDate", getRSSNamespace());
|
||||
if (e != null) {
|
||||
item.setExpirationDate(DateParser.parseDate(e.getText()));
|
||||
item.setExpirationDate(DateParser.parseDate(e.getText(), locale));
|
||||
}
|
||||
e = eItem.getChild("description", getRSSNamespace());
|
||||
if (e != null) {
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
package com.sun.syndication.io.impl;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Element;
|
||||
|
||||
|
@ -43,8 +44,8 @@ public class RSS094Parser extends RSS093Parser {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected WireFeed parseChannel(final Element rssRoot) {
|
||||
final Channel channel = (Channel) super.parseChannel(rssRoot);
|
||||
protected WireFeed parseChannel(final Element rssRoot, final Locale locale) {
|
||||
final Channel channel = (Channel) super.parseChannel(rssRoot, locale);
|
||||
final Element eChannel = rssRoot.getChild("channel", getRSSNamespace());
|
||||
|
||||
final List<Element> eCats = eChannel.getChildren("category", getRSSNamespace());
|
||||
|
@ -67,8 +68,8 @@ public class RSS094Parser extends RSS093Parser {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Item parseItem(final Element rssRoot, final Element eItem) {
|
||||
final Item item = super.parseItem(rssRoot, eItem);
|
||||
public Item parseItem(final Element rssRoot, final Element eItem, final Locale locale) {
|
||||
final Item item = super.parseItem(rssRoot, eItem, locale);
|
||||
item.setExpirationDate(null);
|
||||
|
||||
Element e = eItem.getChild("author", getRSSNamespace());
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
*/
|
||||
package com.sun.syndication.io.impl;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Document;
|
||||
import org.jdom2.Element;
|
||||
import org.jdom2.Namespace;
|
||||
|
@ -96,8 +98,8 @@ public class RSS10Parser extends RSS090Parser {
|
|||
* @return the parsed RSSItem bean.
|
||||
*/
|
||||
@Override
|
||||
protected Item parseItem(final Element rssRoot, final Element eItem) {
|
||||
final Item item = super.parseItem(rssRoot, eItem);
|
||||
protected Item parseItem(final Element rssRoot, final Element eItem, final Locale locale) {
|
||||
final Item item = super.parseItem(rssRoot, eItem, locale);
|
||||
final Element e = eItem.getChild("description", getRSSNamespace());
|
||||
if (e != null) {
|
||||
item.setDescription(parseItemDescription(rssRoot, e));
|
||||
|
@ -119,8 +121,8 @@ public class RSS10Parser extends RSS090Parser {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected WireFeed parseChannel(final Element rssRoot) {
|
||||
final Channel channel = (Channel) super.parseChannel(rssRoot);
|
||||
protected WireFeed parseChannel(final Element rssRoot, final Locale locale) {
|
||||
final Channel channel = (Channel) super.parseChannel(rssRoot, locale);
|
||||
|
||||
final Element eChannel = rssRoot.getChild("channel", getRSSNamespace());
|
||||
final String uri = eChannel.getAttributeValue("about", getRDFNamespace());
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
*/
|
||||
package com.sun.syndication.io.impl;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Document;
|
||||
import org.jdom2.Element;
|
||||
import org.jdom2.Namespace;
|
||||
|
@ -68,8 +70,8 @@ public class RSS20wNSParser 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;
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ package com.sun.syndication.io.impl;
|
|||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
import org.jdom2.Element;
|
||||
|
@ -87,7 +88,7 @@ public class SyModuleGenerator implements ModuleGenerator {
|
|||
|
||||
if (syModule.getUpdateBase() != null) {
|
||||
final Element updateBaseElement = new Element("updateBase", SY_NS);
|
||||
updateBaseElement.addContent(DateParser.formatW3CDateTime(syModule.getUpdateBase()));
|
||||
updateBaseElement.addContent(DateParser.formatW3CDateTime(syModule.getUpdateBase(), Locale.US));
|
||||
element.addContent(updateBaseElement);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
*/
|
||||
package com.sun.syndication.io.impl;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jdom2.Element;
|
||||
import org.jdom2.Namespace;
|
||||
|
||||
|
@ -37,7 +39,7 @@ public class SyModuleParser implements ModuleParser {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Module parse(final Element syndRoot) {
|
||||
public Module parse(final Element syndRoot, final Locale locale) {
|
||||
boolean foundSomething = false;
|
||||
final SyModule sm = new SyModuleImpl();
|
||||
|
||||
|
@ -54,7 +56,7 @@ public class SyModuleParser implements ModuleParser {
|
|||
e = syndRoot.getChild("updateBase", getDCNamespace());
|
||||
if (e != null) {
|
||||
foundSomething = true;
|
||||
sm.setUpdateBase(DateParser.parseDate(e.getText()));
|
||||
sm.setUpdateBase(DateParser.parseDate(e.getText(), locale));
|
||||
}
|
||||
if (foundSomething) {
|
||||
return sm;
|
||||
|
|
|
@ -8,6 +8,7 @@ package com.sun.syndication.unittest;
|
|||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.sun.syndication.feed.synd.SyndEntry;
|
||||
import com.sun.syndication.feed.synd.SyndImage;
|
||||
|
@ -77,7 +78,7 @@ public abstract class SyndFeedTest extends FeedTest {
|
|||
*/
|
||||
|
||||
public void testPublishedDate() throws Exception {
|
||||
assertEquals(DateParser.parseRFC822("Mon, 01 Jan 2001 00:00:00 GMT"), this.getCachedSyndFeed().getPublishedDate());
|
||||
assertEquals(DateParser.parseRFC822("Mon, 01 Jan 2001 00:00:00 GMT", Locale.US), this.getCachedSyndFeed().getPublishedDate());
|
||||
}
|
||||
|
||||
// how do i get height and width?
|
||||
|
|
|
@ -19,6 +19,7 @@ package com.sun.syndication.unittest;
|
|||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.Locale;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
@ -39,7 +40,7 @@ public class TestDateParser extends TestCase {
|
|||
|
||||
// four-digit year
|
||||
String sDate = "Tue, 19 Jul 2005 23:00:51 GMT";
|
||||
cal.setTime(DateParser.parseRFC822(sDate));
|
||||
cal.setTime(DateParser.parseRFC822(sDate, Locale.US));
|
||||
|
||||
assertEquals(2005, cal.get(Calendar.YEAR));
|
||||
assertEquals(6, cal.get(Calendar.MONTH)); // month is zero-indexed
|
||||
|
@ -51,7 +52,7 @@ public class TestDateParser extends TestCase {
|
|||
|
||||
// two-digit year
|
||||
sDate = "Tue, 19 Jul 05 23:00:51 GMT";
|
||||
cal.setTime(DateParser.parseRFC822(sDate));
|
||||
cal.setTime(DateParser.parseRFC822(sDate, Locale.US));
|
||||
|
||||
assertEquals(2005, cal.get(Calendar.YEAR));
|
||||
assertEquals(6, cal.get(Calendar.MONTH)); // month is zero-indexed
|
||||
|
@ -63,7 +64,7 @@ public class TestDateParser extends TestCase {
|
|||
|
||||
// four-digit year
|
||||
sDate = "Tue, 19 Jul 2005 23:00:51 UT";
|
||||
cal.setTime(DateParser.parseRFC822(sDate));
|
||||
cal.setTime(DateParser.parseRFC822(sDate, Locale.US));
|
||||
|
||||
assertEquals(2005, cal.get(Calendar.YEAR));
|
||||
assertEquals(6, cal.get(Calendar.MONTH)); // month is zero-indexed
|
||||
|
@ -75,7 +76,7 @@ public class TestDateParser extends TestCase {
|
|||
|
||||
// two-digit year
|
||||
sDate = "Tue, 19 Jul 05 23:00:51 UT";
|
||||
cal.setTime(DateParser.parseRFC822(sDate));
|
||||
cal.setTime(DateParser.parseRFC822(sDate, Locale.US));
|
||||
|
||||
assertEquals(2005, cal.get(Calendar.YEAR));
|
||||
assertEquals(6, cal.get(Calendar.MONTH)); // month is zero-indexed
|
||||
|
@ -87,11 +88,11 @@ public class TestDateParser extends TestCase {
|
|||
|
||||
// RFC822
|
||||
sDate = "Tue, 19 Jul 2005 23:00:51 GMT";
|
||||
assertNotNull(DateParser.parseDate(sDate));
|
||||
assertNotNull(DateParser.parseDate(sDate, Locale.US));
|
||||
|
||||
// RFC822
|
||||
sDate = "Tue, 19 Jul 05 23:00:51 GMT";
|
||||
assertNotNull(DateParser.parseDate(sDate));
|
||||
assertNotNull(DateParser.parseDate(sDate, Locale.US));
|
||||
|
||||
final Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
|
||||
c.set(2000, Calendar.JANUARY, 01, 0, 0, 0);
|
||||
|
@ -99,31 +100,31 @@ public class TestDateParser extends TestCase {
|
|||
|
||||
// W3C
|
||||
sDate = "2000-01-01T00:00:00Z";
|
||||
assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate).getTime() / 1000);
|
||||
assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate, Locale.US).getTime() / 1000);
|
||||
|
||||
// W3C
|
||||
sDate = "2000-01-01T00:00Z";
|
||||
assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate).getTime() / 1000);
|
||||
assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate, Locale.US).getTime() / 1000);
|
||||
|
||||
// W3C
|
||||
sDate = "2000-01-01";
|
||||
assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate).getTime() / 1000);
|
||||
assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate, Locale.US).getTime() / 1000);
|
||||
|
||||
// W3C
|
||||
sDate = "2000-01";
|
||||
assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate).getTime() / 1000);
|
||||
assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate, Locale.US).getTime() / 1000);
|
||||
|
||||
// W3C
|
||||
sDate = "2000";
|
||||
assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate).getTime() / 1000);
|
||||
assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate, Locale.US).getTime() / 1000);
|
||||
|
||||
// EXTRA
|
||||
sDate = "18:10 2000/10/10";
|
||||
assertNotNull(DateParser.parseDate(sDate));
|
||||
assertNotNull(DateParser.parseDate(sDate, Locale.US));
|
||||
|
||||
// INVALID
|
||||
sDate = "X20:10 2000-10-10";
|
||||
assertNull(DateParser.parseDate(sDate));
|
||||
assertNull(DateParser.parseDate(sDate, Locale.US));
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ package com.sun.syndication.unittest;
|
|||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.sun.syndication.feed.synd.SyndEntry;
|
||||
import com.sun.syndication.io.impl.DateParser;
|
||||
|
@ -48,7 +49,7 @@ public class TestSyndFeedAtom03 extends SyndFeedTest {
|
|||
|
||||
@Override
|
||||
public void testPublishedDate() throws Exception {
|
||||
final Date d = DateParser.parseW3CDateTime("2000-01-01T00:00:00Z");
|
||||
final Date d = DateParser.parseW3CDateTime("2000-01-01T00:00:00Z", Locale.US);
|
||||
assertEquals(this.getCachedSyndFeed().getPublishedDate(), d);
|
||||
}
|
||||
|
||||
|
@ -58,7 +59,7 @@ public class TestSyndFeedAtom03 extends SyndFeedTest {
|
|||
assertProperty(entry.getTitle(), "feed.entry[" + i + "].title");
|
||||
assertProperty(entry.getLink(), "feed.entry[" + i + "].link^href");
|
||||
assertProperty(entry.getAuthor(), "feed.entry[" + i + "].author.name");
|
||||
final Date d = DateParser.parseW3CDateTime("2000-0" + (i + 1) + "-01T00:00:00Z");
|
||||
final Date d = DateParser.parseW3CDateTime("2000-0" + (i + 1) + "-01T00:00:00Z", Locale.US);
|
||||
assertEquals(entry.getPublishedDate(), d);
|
||||
assertProperty(entry.getDescription().getValue(), "feed.entry[" + i + "].summary");
|
||||
assertProperty(entry.getContents().get(0).getValue(), "feed.entry[" + i + "].content[0]");
|
||||
|
|
|
@ -8,6 +8,7 @@ package com.sun.syndication.unittest;
|
|||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.sun.syndication.feed.module.DCModule;
|
||||
import com.sun.syndication.feed.module.SyModule;
|
||||
|
@ -67,7 +68,7 @@ public class TestSyndFeedAtom03DCSyModules extends TestSyndFeedAtom03 {
|
|||
assertProperty(dc.getPublisher(), prefix + "dc:publisher");
|
||||
assertProperty(dc.getContributors().get(0), prefix + "dc:contributor[0]");
|
||||
assertProperty(dc.getContributors().get(1), prefix + "dc:contributor[1]");
|
||||
final Date date = DateParser.parseW3CDateTime("2000-0" + (index + 1) + "-01T00:00:00Z");
|
||||
final Date date = DateParser.parseW3CDateTime("2000-0" + (index + 1) + "-01T00:00:00Z", Locale.US);
|
||||
assertEquals(dc.getDate(), date);
|
||||
assertProperty(dc.getType(), prefix + "dc:type");
|
||||
assertProperty(dc.getFormat(), prefix + "dc:format");
|
||||
|
@ -93,7 +94,7 @@ public class TestSyndFeedAtom03DCSyModules extends TestSyndFeedAtom03 {
|
|||
assertNotNull(sy);
|
||||
assertEquals(sy.getUpdatePeriod(), SyModule.HOURLY);
|
||||
assertEquals(sy.getUpdateFrequency(), 100);
|
||||
final Date date = DateParser.parseW3CDateTime("2001-01-01T01:00+00:00");
|
||||
final Date date = DateParser.parseW3CDateTime("2001-01-01T01:00+00:00", Locale.US);
|
||||
assertEquals(sy.getUpdateBase(), date);
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ package com.sun.syndication.unittest;
|
|||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.sun.syndication.feed.atom.Entry;
|
||||
import com.sun.syndication.feed.synd.SyndEntry;
|
||||
|
@ -68,7 +69,7 @@ public class TestSyndFeedAtom10 extends TestSyndFeedAtom03 {
|
|||
|
||||
@Override
|
||||
public void testPublishedDate() throws Exception {
|
||||
final Date d = DateParser.parseW3CDateTime("2000-01-01T00:00:00Z");
|
||||
final Date d = DateParser.parseW3CDateTime("2000-01-01T00:00:00Z", Locale.US);
|
||||
assertEquals(this.getCachedSyndFeed().getPublishedDate(), d);
|
||||
}
|
||||
|
||||
|
@ -84,7 +85,7 @@ public class TestSyndFeedAtom10 extends TestSyndFeedAtom03 {
|
|||
assertEquals("http://example.com/blog/entry" + (i + 1), entry.getLink());
|
||||
assertEquals(entry.getEnclosures().get(0).getUrl(), "http://example.com/blog/enclosure" + (i + 1) + ".gif");
|
||||
assertProperty(entry.getAuthor(), "feed.entry[" + i + "].author.name");
|
||||
final Date d = DateParser.parseW3CDateTime("2000-0" + (i + 1) + "-01T01:00:00Z");
|
||||
final Date d = DateParser.parseW3CDateTime("2000-0" + (i + 1) + "-01T01:00:00Z", Locale.US);
|
||||
assertEquals(entry.getPublishedDate(), d);
|
||||
assertProperty(entry.getDescription().getValue(), "feed.entry[" + i + "].summary");
|
||||
assertProperty(entry.getContents().get(0).getValue(), "feed.entry[" + i + "].content[0]");
|
||||
|
|
|
@ -6,6 +6,7 @@ package com.sun.syndication.unittest;
|
|||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.sun.syndication.feed.synd.SyndEntry;
|
||||
import com.sun.syndication.io.impl.DateParser;
|
||||
|
@ -39,7 +40,7 @@ public class TestSyndFeedRSS091N extends SyndFeedTest {
|
|||
|
||||
@Override
|
||||
public void testPublishedDate() throws Exception {
|
||||
final Date d = DateParser.parseRFC822("Mon, 01 Jan 2001 00:00:00 GMT");
|
||||
final Date d = DateParser.parseRFC822("Mon, 01 Jan 2001 00:00:00 GMT", Locale.US);
|
||||
assertEquals(this.getCachedSyndFeed().getPublishedDate(), d);
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ package com.sun.syndication.unittest;
|
|||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.sun.syndication.feed.synd.SyndEntry;
|
||||
import com.sun.syndication.io.impl.DateParser;
|
||||
|
@ -33,7 +34,7 @@ public class TestSyndFeedRSS093 extends TestSyndFeedRSS092 {
|
|||
super.testItem(i);
|
||||
final List<SyndEntry> items = this.getCachedSyndFeed().getEntries();
|
||||
final SyndEntry entry = items.get(i);
|
||||
final Date d = DateParser.parseRFC822("Mon, 0" + (i + 1) + " Jan 2001 00:00:00 GMT");
|
||||
final Date d = DateParser.parseRFC822("Mon, 0" + (i + 1) + " Jan 2001 00:00:00 GMT", Locale.US);
|
||||
assertEquals(entry.getPublishedDate(), d);
|
||||
testDescriptionType(entry, i);
|
||||
}
|
||||
|
@ -44,8 +45,8 @@ public class TestSyndFeedRSS093 extends TestSyndFeedRSS092 {
|
|||
|
||||
@Override
|
||||
public void testEntryPublishedDate() throws Exception {
|
||||
assertEquals(DateParser.parseRFC822("Mon, 01 Jan 2001 00:00:00 GMT"), getEntryPublishedDate(this.getCachedSyndFeed().getEntries().get(0)));
|
||||
assertEquals(DateParser.parseRFC822("Tue, 02 Jan 2001 00:00:00 GMT"), getEntryPublishedDate(this.getCachedSyndFeed().getEntries().get(1)));
|
||||
assertEquals(DateParser.parseRFC822("Mon, 01 Jan 2001 00:00:00 GMT", Locale.US), getEntryPublishedDate(this.getCachedSyndFeed().getEntries().get(0)));
|
||||
assertEquals(DateParser.parseRFC822("Tue, 02 Jan 2001 00:00:00 GMT", Locale.US), getEntryPublishedDate(this.getCachedSyndFeed().getEntries().get(1)));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.sun.syndication.unittest;
|
|||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.sun.syndication.feed.module.DCModule;
|
||||
import com.sun.syndication.feed.synd.SyndEntry;
|
||||
|
@ -60,7 +61,7 @@ public class TestSyndFeedRSS10DCMulti extends TestSyndFeedRSS10 {
|
|||
|
||||
assertProperty(dc.getContributors().get(0), prefix + "dc:contributor[0]");
|
||||
assertProperty(dc.getContributors().get(1), prefix + "dc:contributor[1]");
|
||||
final Date date = DateParser.parseW3CDateTime("2001-01-01T00:00+00:00");
|
||||
final Date date = DateParser.parseW3CDateTime("2001-01-01T00:00+00:00", Locale.US);
|
||||
assertEquals(dc.getDates().get(0), date);
|
||||
assertEquals(dc.getDates().get(1), date);
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ package com.sun.syndication.unittest;
|
|||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.sun.syndication.feed.module.DCModule;
|
||||
import com.sun.syndication.feed.module.SyModule;
|
||||
|
@ -57,7 +58,7 @@ public class TestSyndFeedRSS10DCSyModules extends TestSyndFeedRSS10 {
|
|||
assertProperty(dc.getPublisher(), prefix + "dc:publisher");
|
||||
assertProperty(dc.getContributors().get(0), prefix + "dc:contributor[0]");
|
||||
assertProperty(dc.getContributors().get(1), prefix + "dc:contributor[1]");
|
||||
final Date date = DateParser.parseW3CDateTime("2001-01-01T00:00+00:00");
|
||||
final Date date = DateParser.parseW3CDateTime("2001-01-01T00:00+00:00", Locale.US);
|
||||
assertEquals(dc.getDate(), date);
|
||||
assertProperty(dc.getType(), prefix + "dc:type");
|
||||
assertProperty(dc.getFormat(), prefix + "dc:format");
|
||||
|
@ -74,7 +75,7 @@ public class TestSyndFeedRSS10DCSyModules extends TestSyndFeedRSS10 {
|
|||
assertNotNull(sy);
|
||||
assertEquals(sy.getUpdatePeriod(), SyModule.HOURLY);
|
||||
assertEquals(sy.getUpdateFrequency(), 100);
|
||||
final Date date = DateParser.parseW3CDateTime("2001-01-01T01:00+00:00");
|
||||
final Date date = DateParser.parseW3CDateTime("2001-01-01T01:00+00:00", Locale.US);
|
||||
assertEquals(sy.getUpdateBase(), date);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue