package org.ripple.power.news;
import java.net.URI;
import java.net.URISyntaxException;
import org.xml.sax.Attributes;
public enum ElementSetter {
TITLE("title", new ContentSetter() {
@Override
public void set(RssElement element, String value) {
element.setTitle(value);
}
}), DESCRIPTION("description", new ContentSetter() {
@Override
public void set(RssElement element, String value) {
element.setDescription(value);
}
}), CONTENT("content:encode", new ContentSetter() {
@Override
public void set(RssElement element, String value) {
element.setContent(value);
}
}), LINK("link", new ContentSetter() {
@Override
public void set(RssElement element, String value) {
try {
element.setLink(new URI(value));
} catch (URISyntaxException e) {
}
}
}), CATEGORY("category", new ContentSetter() {
@Override
public void set(RssElement element, String value) {
element.addCategory(value);
}
}), PUB_DATE("pubDate", new ContentSetter() {
@Override
public void set(RssElement element, String value) {
element.setPubDate(value);
}
}), LAST_BUILD_DATE("lastBuildDate", new ContentSetter() {
@Override
public void set(RssElement element, String value) {
element.setLastBuildDate(value);
}
}), TTL("ttl", new ContentSetter() {
@Override
public void set(RssElement element, String value) {
element.setTtl(value);
}
}), MEDIA_THUMBNAIL("media:thumbnail", new AttributeSetter() {
private static final String MEDIA_THUMBNAIL_HEIGHT = "height";
private static final String MEDIA_THUMBNAIL_WIDTH = "width";
private static final String MEDIA_THUMBNAIL_URL = "url";
private static final int DEFAULT_DIMENSION = -1;
@Override
public void set(RssElement element, Attributes attributes) {
final int height = MediaAttributes.intValue(attributes,
MEDIA_THUMBNAIL_HEIGHT, DEFAULT_DIMENSION);
final int width = MediaAttributes.intValue(attributes,
MEDIA_THUMBNAIL_WIDTH, DEFAULT_DIMENSION);
final String url = MediaAttributes.stringValue(attributes,
MEDIA_THUMBNAIL_URL);
if (url == null) {
return;
}
try {
element.addMediaThumbnail(new MediaThumbnail(new URI(url),
height, width));
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}), ENCLOSURE("enclosure", new AttributeSetter() {
private static final String URL = "url";
private static final String LENGTH = "length";
private static final String MIMETYPE = "type";
@Override
public void set(RssElement element, Attributes attributes) {
final String url = MediaAttributes.stringValue(attributes, URL);
final Integer length = MediaAttributes.intValue(attributes, LENGTH);
final String mimeType = MediaAttributes.stringValue(attributes,
MIMETYPE);
if (url == null || length == null || mimeType == null) {
return;
}
MediaEnclosure enclosure = null;
try {
enclosure = new MediaEnclosure(new URI(url), length, mimeType);
} catch (URISyntaxException e) {
e.printStackTrace();
}
element.setMediaEnclosure(enclosure);
}
}), ITUNES_SUBTITLE("itunes:subtitle", new ContentSetter() {
@Override
public void set(RssElement element, String value) {
element.setSubtitle(value);
}
}), ITUNES_DURATION("itunes:duration", new ContentSetter() {
@Override
public void set(RssElement element, String value) {
element.setDuration(value);
}
});
private String mQName;
private Setter mSetter;
private ElementSetter(String qName, Setter setter) {
mQName = qName;
mSetter = setter;
}
private static Setter getSetter(String qName) {
for (ElementSetter elementSetter : ElementSetter.values()) {
if (elementSetter.mQName.equals(qName)) {
return elementSetter.mSetter;
}
}
return null;
}
public static void setContent(String qName, RssElement element,
String content) {
Setter setter = getSetter(qName);
if (setter instanceof ContentSetter) {
((ContentSetter) setter).set(element, content);
}
}
public static void setAttributes(String qName, RssElement element,
Attributes attributes) {
Setter setter = getSetter(qName);
if (setter instanceof AttributeSetter) {
((AttributeSetter) setter).set(element, attributes);
}
}
public static boolean contains(String qName) {
return (getSetter(qName) != null);
}
public static boolean containsInAttributes(String qName) {
return (getSetter(qName) instanceof AttributeSetter);
}
public static interface Setter {
}
public static interface ContentSetter extends Setter {
void set(RssElement element, String value);
}
private static interface AttributeSetter extends Setter {
void set(RssElement element, Attributes attributes);
}
}