Add RSS classes.
This commit is contained in:
parent
31b9501cde
commit
b2c058caf3
3 changed files with 469 additions and 0 deletions
173
src/fr/devinsy/util/rss/RSSCache.java
Normal file
173
src/fr/devinsy/util/rss/RSSCache.java
Normal file
|
@ -0,0 +1,173 @@
|
|||
package fr.devinsy.util.rss;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* @author christian.momon@devinsy.fr, 2013, copyright.
|
||||
*
|
||||
* This file is free software under the terms of the GNU Library General
|
||||
* Public License as published by the Free Software Foundation version 3
|
||||
* or any later version.
|
||||
*/
|
||||
public class RSSCache
|
||||
{
|
||||
private static RSSCache instance = new RSSCache();
|
||||
private HashMap<String, String> cache;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private RSSCache()
|
||||
{
|
||||
this.cache = new HashMap<String, String>();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param key
|
||||
* @param locale
|
||||
* @return
|
||||
*/
|
||||
public String get(final String name)
|
||||
{
|
||||
return get(name, Locale.ROOT);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
* @param locale
|
||||
* @return
|
||||
*/
|
||||
public String get(final String name, final Locale locale)
|
||||
{
|
||||
String result;
|
||||
|
||||
if (name == null)
|
||||
{
|
||||
throw new NullPointerException("name is null.");
|
||||
}
|
||||
else if (locale == null)
|
||||
{
|
||||
result = get(name, Locale.ROOT);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = this.cache.get(key(name, locale));
|
||||
|
||||
if (result == null)
|
||||
{
|
||||
result = this.cache.get(name);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
* @param locale
|
||||
* @return
|
||||
*/
|
||||
private String key(final String name, final Locale locale)
|
||||
{
|
||||
String result;
|
||||
|
||||
if (locale.getLanguage().length() == 0)
|
||||
{
|
||||
result = name;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = name + "_" + locale.getLanguage();
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param key
|
||||
* @param locale
|
||||
* @param rss
|
||||
*/
|
||||
public void put(final String name, final Locale locale, final String rss)
|
||||
{
|
||||
if (name == null)
|
||||
{
|
||||
throw new NullPointerException("name is null.");
|
||||
}
|
||||
else if (locale == null)
|
||||
{
|
||||
put(name, Locale.ROOT, rss);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.cache.put(key(name, locale), rss);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
* @param locale
|
||||
* @param rss
|
||||
*/
|
||||
public void put(final String name, final String rss)
|
||||
{
|
||||
put(name, Locale.ROOT, rss);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
*/
|
||||
public void remove(final String name)
|
||||
{
|
||||
remove(name, Locale.ROOT);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
*/
|
||||
public void remove(final String name, final Locale locale)
|
||||
{
|
||||
if (name == null)
|
||||
{
|
||||
throw new NullPointerException("key is null.");
|
||||
}
|
||||
else
|
||||
{
|
||||
this.cache.remove(name + "-" + locale.getLanguage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param key
|
||||
*/
|
||||
public void setOudated(final String name)
|
||||
{
|
||||
for (String subkey : this.cache.keySet())
|
||||
{
|
||||
if (subkey.startsWith(name))
|
||||
{
|
||||
this.cache.remove(subkey);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static RSSCache instance()
|
||||
{
|
||||
return instance;
|
||||
}
|
||||
|
||||
}
|
139
src/fr/devinsy/util/rss/RSSElement.java
Normal file
139
src/fr/devinsy/util/rss/RSSElement.java
Normal file
|
@ -0,0 +1,139 @@
|
|||
package fr.devinsy.util.rss;
|
||||
|
||||
import org.joda.time.DateTime;
|
||||
|
||||
/**
|
||||
* @author christian.momon@devinsy.fr, 2013, copyright.
|
||||
*
|
||||
* This file is free software under the terms of the GNU Library General
|
||||
* Public License as published by the Free Software Foundation version 3
|
||||
* or any later version.
|
||||
*/
|
||||
public class RSSElement
|
||||
{
|
||||
public static final String DATE_PATTERN = "dd MMM YYYY hh:mm:ss Z";
|
||||
private String name;
|
||||
private String value;
|
||||
private String[] attributes;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
* @param value
|
||||
*/
|
||||
public RSSElement(final String name, final DateTime value)
|
||||
{
|
||||
setName(name);
|
||||
if (value == null)
|
||||
{
|
||||
this.value = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.value = value.toString(DATE_PATTERN);
|
||||
}
|
||||
this.attributes = null;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
* @param value
|
||||
*/
|
||||
public RSSElement(final String name, final long value)
|
||||
{
|
||||
setName(name);
|
||||
this.value = String.valueOf(value);
|
||||
this.attributes = null;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
* @param value
|
||||
*/
|
||||
public RSSElement(final String name, final long value, final String... attributes)
|
||||
{
|
||||
setName(name);
|
||||
this.value = String.valueOf(value);
|
||||
this.attributes = attributes;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
* @param value
|
||||
*/
|
||||
public RSSElement(final String name, final String value)
|
||||
{
|
||||
setName(name);
|
||||
this.value = value;
|
||||
this.attributes = null;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
* @param value
|
||||
*/
|
||||
public RSSElement(final String name, final String value, final String... attributes)
|
||||
{
|
||||
setName(name);
|
||||
this.value = value;
|
||||
this.attributes = attributes;
|
||||
}
|
||||
|
||||
public String[] getAttributes()
|
||||
{
|
||||
return attributes;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getValue()
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setAttributes(final String[] attributes)
|
||||
{
|
||||
this.attributes = attributes;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
*/
|
||||
public void setName(final String name)
|
||||
{
|
||||
if (name == null)
|
||||
{
|
||||
throw new NullPointerException("name is null");
|
||||
}
|
||||
else
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param value
|
||||
*/
|
||||
public void setValue(final String value)
|
||||
{
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
}
|
157
src/fr/devinsy/util/rss/RSSWriter.java
Normal file
157
src/fr/devinsy/util/rss/RSSWriter.java
Normal file
|
@ -0,0 +1,157 @@
|
|||
package fr.devinsy.util.rss;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.io.Writer;
|
||||
|
||||
import fr.devinsy.util.xml.XMLWriter;
|
||||
|
||||
/**
|
||||
* @author christian.momon@devinsy.fr, 2013, copyright.
|
||||
*
|
||||
* This file is free software under the terms of the GNU Library General
|
||||
* Public License as published by the Free Software Foundation version 3
|
||||
* or any later version.
|
||||
*/
|
||||
public class RSSWriter
|
||||
{
|
||||
private XMLWriter out;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param file
|
||||
* @throws FileNotFoundException
|
||||
* @throws UnsupportedEncodingException
|
||||
*/
|
||||
public RSSWriter(final File file) throws UnsupportedEncodingException, FileNotFoundException
|
||||
{
|
||||
this.out = new XMLWriter(file);
|
||||
writeRSSHeader();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param target
|
||||
* @throws UnsupportedEncodingException
|
||||
*/
|
||||
public RSSWriter(final OutputStream target) throws UnsupportedEncodingException
|
||||
{
|
||||
this.out = new XMLWriter(target);
|
||||
writeRSSHeader();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param target
|
||||
* @throws UnsupportedEncodingException
|
||||
*/
|
||||
public RSSWriter(final Writer target) throws UnsupportedEncodingException
|
||||
{
|
||||
this.out = new XMLWriter(target);
|
||||
writeRSSHeader();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void close() throws IOException
|
||||
{
|
||||
if (this.out != null)
|
||||
{
|
||||
this.out.writeEndTag("channel");
|
||||
this.out.writeEndTag("rss");
|
||||
this.out.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void flush() throws IOException
|
||||
{
|
||||
if (this.out != null)
|
||||
{
|
||||
this.out.flush();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void writeChannel(final String title, final String link, final String description, final RSSElement... elements)
|
||||
{
|
||||
//
|
||||
this.out.writeStartTag("channel");
|
||||
|
||||
//
|
||||
this.out.writeTag("title", title);
|
||||
this.out.writeTag("link", link);
|
||||
this.out.writeTag("description", description);
|
||||
|
||||
//
|
||||
if ((elements != null) && (elements.length > 0))
|
||||
{
|
||||
for (RSSElement element : elements)
|
||||
{
|
||||
out.writeTag(element.getName(), element.getValue(), element.getAttributes());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param comment
|
||||
*/
|
||||
public void writeComment(final String comment)
|
||||
{
|
||||
this.out.writeComment(comment);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void writeItem(final String title, final String link, final String description, final RSSElement... elements)
|
||||
{
|
||||
//
|
||||
this.out.writeStartTag("item");
|
||||
|
||||
//
|
||||
this.out.writeTag("title", title);
|
||||
if (link != null)
|
||||
{
|
||||
this.out.writeTag("link", link);
|
||||
}
|
||||
if (description == null)
|
||||
{
|
||||
this.out.writeTag("description", "n/a");
|
||||
}
|
||||
else
|
||||
{
|
||||
this.out.writeTag("description", description);
|
||||
}
|
||||
|
||||
//
|
||||
if ((elements != null) && (elements.length > 0))
|
||||
{
|
||||
for (RSSElement element : elements)
|
||||
{
|
||||
out.writeTag(element.getName(), element.getValue(), element.getAttributes());
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
this.out.writeEndTag("item");
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private void writeRSSHeader()
|
||||
{
|
||||
this.out.writeXMLHeader();
|
||||
this.out.writeStartTag("rss", "version", "2.0");
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue