View Javadoc

1   /*
2    * Copyright 2004 Sun Microsystems, Inc.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   *
16   */
17  package com.sun.syndication.feed.synd.impl;
18  
19  import com.sun.syndication.feed.WireFeed;
20  import com.sun.syndication.feed.module.impl.ModuleUtils;
21  import com.sun.syndication.feed.rss.Channel;
22  import com.sun.syndication.feed.rss.Image;
23  import com.sun.syndication.feed.rss.Item;
24  import com.sun.syndication.feed.synd.*;
25  
26  import java.util.ArrayList;
27  import java.util.List;
28  
29  /***
30   */
31  public class ConverterForRSS090 implements Converter {
32      private String _type;
33  
34      public ConverterForRSS090() {
35          this("rss_0.9");
36      }
37  
38      protected ConverterForRSS090(String type) {
39          _type = type;
40      }
41  
42      public String getType() {
43          return _type;
44      }
45  
46      public void copyInto(WireFeed feed,SyndFeed syndFeed) {
47          syndFeed.setModules(ModuleUtils.cloneModules(feed.getModules()));
48          if (((List)feed.getForeignMarkup()).size() > 0) {
49              syndFeed.setForeignMarkup(feed.getForeignMarkup());
50          }
51          syndFeed.setEncoding(feed.getEncoding());
52          Channel channel = (Channel) feed;
53          syndFeed.setTitle(channel.getTitle());
54          syndFeed.setLink(channel.getLink());
55          syndFeed.setDescription(channel.getDescription());
56  
57          Image image = channel.getImage();
58          if (image!=null) {
59              syndFeed.setImage(createSyndImage(image));
60          }
61  
62          List items = channel.getItems();
63          if (items!=null) {
64              syndFeed.setEntries(createSyndEntries(items));
65          }
66      }
67  
68      protected SyndImage createSyndImage(Image rssImage) {
69          SyndImage syndImage = new SyndImageImpl();
70          syndImage.setTitle(rssImage.getTitle());
71          syndImage.setUrl(rssImage.getUrl());
72          syndImage.setLink(rssImage.getLink());
73          return syndImage;
74      }
75  
76      protected List createSyndEntries(List rssItems) {
77          List syndEntries = new ArrayList();
78          for (int i=0;i<rssItems.size();i++) {
79              syndEntries.add(createSyndEntry((Item) rssItems.get(i)));
80          }
81          return syndEntries;
82      }
83  
84      protected SyndEntry createSyndEntry(Item item) {
85          SyndEntry syndEntry = new SyndEntryImpl();
86  
87          syndEntry.setModules(ModuleUtils.cloneModules(item.getModules()));
88          
89          if (((List)item.getForeignMarkup()).size() > 0) {
90              syndEntry.setForeignMarkup(item.getForeignMarkup());
91          }
92          
93          syndEntry.setUri(item.getUri());
94          syndEntry.setLink(item.getLink());
95          syndEntry.setTitle(item.getTitle());
96          syndEntry.setLink(item.getLink());
97          return syndEntry;
98      }
99  
100     public WireFeed createRealFeed(SyndFeed syndFeed) {
101         return createRealFeed(getType(),syndFeed);
102     }
103 
104     protected WireFeed createRealFeed(String type,SyndFeed syndFeed) {
105         Channel channel = new Channel(type);
106         channel.setModules(ModuleUtils.cloneModules(syndFeed.getModules()));
107 
108         channel.setEncoding(syndFeed.getEncoding());
109 
110         channel.setTitle(syndFeed.getTitle());
111         if (syndFeed.getLink() != null) {
112             channel.setLink(syndFeed.getLink());
113         }
114         else
115         if (syndFeed.getLinks().size() > 0) {
116             channel.setLink(((SyndLink)syndFeed.getLinks().get(0)).getHref());
117         }
118         channel.setDescription(syndFeed.getDescription());
119         SyndImage sImage = syndFeed.getImage();
120         if (sImage!=null) {
121             channel.setImage(createRSSImage(sImage));
122         }
123 
124         List sEntries = syndFeed.getEntries();
125         if (sEntries!=null) {
126             channel.setItems(createRSSItems(sEntries));
127         }
128 
129         if (((List)syndFeed.getForeignMarkup()).size() > 0) {
130             channel.setForeignMarkup(syndFeed.getForeignMarkup());
131         }
132         return channel;
133     }
134 
135     protected Image createRSSImage(SyndImage sImage) {
136         Image image = new Image();
137         image.setTitle(sImage.getTitle());
138         image.setUrl(sImage.getUrl());
139         image.setLink(sImage.getLink());
140         return image;
141     }
142 
143     protected List createRSSItems(List sEntries) {
144         List list = new ArrayList();
145         for (int i=0;i<sEntries.size();i++) {
146             list.add(createRSSItem((SyndEntry)sEntries.get(i)));
147         }
148         return list;
149     }
150 
151     protected Item createRSSItem(SyndEntry sEntry) {
152         Item item = new Item();
153         item.setModules(ModuleUtils.cloneModules(sEntry.getModules()));
154         item.setTitle(sEntry.getTitle());
155         item.setLink(sEntry.getLink());
156         if (((List)sEntry.getForeignMarkup()).size() > 0) {
157             item.setForeignMarkup(sEntry.getForeignMarkup());
158         }
159 
160         String uri = sEntry.getUri();
161         if (uri != null) {
162             item.setUri(uri);
163         }
164 
165 
166         return item;
167     }
168 
169 }