1 package yarfraw.mapping.backward.impl;
2 import static yarfraw.io.parser.ElementQName.RSS20_AUTHOR;
3 import static yarfraw.io.parser.ElementQName.RSS20_COMMENTS;
4 import static yarfraw.io.parser.ElementQName.RSS20_DESCRIPTION;
5 import static yarfraw.io.parser.ElementQName.RSS20_LINK;
6 import static yarfraw.io.parser.ElementQName.RSS20_PUBDATE;
7 import static yarfraw.io.parser.ElementQName.RSS20_TITLE;
8 import static yarfraw.utils.XMLUtils.same;
9
10 import java.util.Map;
11
12 import javax.xml.bind.JAXBElement;
13 import javax.xml.namespace.QName;
14
15 import org.apache.commons.lang.builder.ToStringBuilder;
16 import org.apache.commons.logging.Log;
17 import org.apache.commons.logging.LogFactory;
18 import org.w3c.dom.Element;
19
20 import yarfraw.core.datamodel.CategorySubject;
21 import yarfraw.core.datamodel.Enclosure;
22 import yarfraw.core.datamodel.Id;
23 import yarfraw.core.datamodel.ItemEntry;
24 import yarfraw.core.datamodel.Source;
25 import yarfraw.core.datamodel.YarfrawException;
26 import yarfraw.generated.rss20.elements.TCategory;
27 import yarfraw.generated.rss20.elements.TEnclosure;
28 import yarfraw.generated.rss20.elements.TGuid;
29 import yarfraw.generated.rss20.elements.TRssItem;
30 import yarfraw.generated.rss20.elements.TSource;
31 class Rss20MappingUtils{
32
33 private static final Log LOG = LogFactory.getLog(Rss20MappingUtils.class);
34
35
36 private Rss20MappingUtils(){}
37
38 @SuppressWarnings("unchecked")
39 public static ItemEntry toItem(TRssItem ti) throws YarfrawException {
40 if(ti == null){
41 return null;
42 }
43 ItemEntry item = new ItemEntry();
44 for(Object o : ti.getTitleOrDescriptionOrLink()){
45 if(o == null){
46 continue;
47 }
48 if(ti.getOtherAttributes() != null){
49 for(Map.Entry<QName, String> e : ti.getOtherAttributes().entrySet()){
50 item.addOtherAttributes(e.getKey(), e.getValue());
51 }
52 }
53 if (o instanceof JAXBElement) {
54 JAXBElement jaxbElement = (JAXBElement) o;
55 Object val = jaxbElement.getValue();
56 if(same(jaxbElement.getName(), RSS20_AUTHOR)){
57 item.addAuthorOrCreator((String)jaxbElement.getValue());
58 }else if (same(jaxbElement.getName(), RSS20_COMMENTS)) {
59 item.setComments((String)jaxbElement.getValue());
60 }else if (same(jaxbElement.getName(), RSS20_DESCRIPTION)) {
61 item.setDescriptionOrSummary((String)jaxbElement.getValue());
62 }else if (same(jaxbElement.getName(), RSS20_LINK)) {
63 item.addLink((String)jaxbElement.getValue());
64 }else if (same(jaxbElement.getName(), RSS20_PUBDATE)) {
65 item.setPubDate((String)jaxbElement.getValue());
66 }else if (same(jaxbElement.getName(), RSS20_TITLE)) {
67 item.setTitle((String)jaxbElement.getValue());
68 }else if (val instanceof TCategory) {
69 TCategory cat = (TCategory) val;
70 item.addCategorySubject(new CategorySubject().setCategoryOrSubjectOrTerm(cat.getValue())
71 .setDomainOrScheme(cat.getDomain()));
72 }else if (val instanceof TEnclosure) {
73 TEnclosure en = (TEnclosure)val;
74 item.setEnclosure(new Enclosure(en.getUrl(),
75 en.getLength() == null ? null : en.getLength().toString(),
76 en.getType(), en.getValue()));
77 }else if (val instanceof TGuid) {
78 TGuid guid = (TGuid)val;
79 item.setUid(new Id(guid.getValue()).setPermaLink(guid.isIsPermaLink()));
80 }else if (val instanceof TSource) {
81 TSource source = (TSource)val;
82 item.setSource(new Source(source.getUrl(), source.getValue()));
83 }else{
84 LOG.warn("Unexpected jaxbElement: "+ToStringBuilder.reflectionToString(jaxbElement)+" this should not happen!");
85 }
86 }else if (o instanceof Element) {
87 Element e = (Element) o;
88 item.getOtherElements().add(e);
89 }else{
90 LOG.warn("Unexpected object: "+ToStringBuilder.reflectionToString(o)+" this should not happen!");
91 }
92 }
93
94 return item;
95 }
96 }