X-Git-Url: http://secure.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.news/src/net/sourceforge/phpeclipse/news/Item.java b/archive/net.sourceforge.phpeclipse.news/src/net/sourceforge/phpeclipse/news/Item.java new file mode 100644 index 0000000..bce05ec --- /dev/null +++ b/archive/net.sourceforge.phpeclipse.news/src/net/sourceforge/phpeclipse/news/Item.java @@ -0,0 +1,273 @@ +package net.sourceforge.phpeclipse.news; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.Locale; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableItem; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.w3c.dom.Text; + +/** + * @author jnegre - http://www.jnegre.org/ + * + * (c)Copyright 2002 Jérôme Nègre + * + */ +public class Item { + + protected static DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT); + protected static SimpleDateFormat pubDateParser = new SimpleDateFormat("EEE, d MMM yy hh:mm:ss z", new Locale("en","US")); + + protected Channel channel; + + protected String title; + protected String link; + protected String description; + protected String author; + protected String guid; + protected boolean isPermaLink = true; + protected String date; + + protected boolean readFlag = false; + + /** + * Constructor for Item. + */ + public Item(Channel channel, Element itemElement) { + this.channel = channel; + this.title = readValue("title", itemElement, 0); + this.link = readValue("link", itemElement, 0); + this.description = readValue("description", itemElement, 0); + this.author = readValue("author", itemElement, 0); + this.guid = readValue("guid", itemElement, 1); + String pubDate = readValue("pubDate", itemElement, 0); + String dcDate = readValue("dc:date", itemElement, 0); + + try { + Date theDate; + if(pubDate != null) { + theDate = pubDateParser.parse(pubDate); + } else if(dcDate != null) { + theDate = decodeDCDate(dcDate); + } else { + theDate = new Date(); + } + this.date = dateFormat.format(theDate); + } catch(Exception e) { + if(pubDate != null) { + this.date = pubDate; + } else if(dcDate != null) { + this.date = dcDate; + } else { + this.date = e.toString(); + } + Plugin.logInfo("Unable to parse date",e); + } + } + + protected String readValue(String elementName, Element parent, int type) { + Element element = (Element)parent.getElementsByTagName(elementName).item(0); + if(element != null) { + + switch(type) { + case 1: + if(element.hasAttribute("isPermaLink") && element.getAttribute("isPermaLink").equals("false")) { + this.isPermaLink = false; + } + } + + NodeList children = element.getChildNodes(); + StringBuffer buffer = new StringBuffer(); + for(int i=0; i position && buffer.charAt(position) == expectedChar) { + return true; + } else { + return false; + } + } + + /** + * @return the description of this item + */ + public String getDescription() { + return description; + } + /** + * @return the author of this item + */ + public String getAuthor() { + return author; + } + + /** + * Returns the date. + * @return String + */ + public String getDate() { + return date; + } + + /** + * Returns the readFlag. + * @return boolean + */ + public boolean isReadFlag() { + return readFlag; + } + + /** + * Returns the channel. + * @return Channel + */ + public Channel getChannel() { + return channel; + } + + /** + * Returns a unique ID used to remember which + * items were read in the ChannelStore + * @return + */ + public String getUID() { + return getUsableLink() + ") ~ (" + getUsableTitle(); + } + +}