001 package net.sf.tacos.components.timeline; 002 003 import java.util.Calendar; 004 005 import org.apache.tapestry.json.JSONObject; 006 import org.apache.tapestry.json.JSONLiteral; 007 008 /** 009 * Simple bean holding event data for http://simile.mit.edu/timeline/ 010 * dhtml control. 011 * 012 * @author Andreas Andreou, amplafi.com 013 */ 014 public class TimelineEvent { 015 private Calendar start; 016 private Calendar end; 017 private String title; 018 private String link; 019 private String description; 020 021 public Calendar getStart() { 022 return start; 023 } 024 025 /** 026 * Sets the start of the event. 027 * If the given date is after the ending, they're swapped. 028 * @param start 029 */ 030 public void setStart(Calendar start) { 031 this.start = start; 032 fixDates(); 033 } 034 035 public Calendar getEnd() { 036 return end; 037 } 038 039 /** 040 * Sets the end of the event. 041 * If the given date is before the starting, they're swapped. 042 * @param end 043 */ 044 public void setEnd(Calendar end) { 045 this.end = end; 046 fixDates(); 047 } 048 049 public String getTitle() { 050 return title; 051 } 052 053 public void setTitle(String title) { 054 this.title = title; 055 } 056 057 public String getLink() { 058 return link; 059 } 060 061 public void setLink(String link) { 062 this.link = link; 063 } 064 065 public String getDescription() { 066 return description; 067 } 068 069 public void setDescription(String description) { 070 this.description = description; 071 } 072 073 private void fixDates() { 074 if (start!=null && end!=null && start.after(end)) { 075 Calendar temp = start; 076 start = end; 077 end = temp; 078 } 079 } 080 081 private JSONLiteral toDate(Calendar date) { 082 return new JSONLiteral("new Date(" + date.get(Calendar.YEAR) 083 + "," + date.get(Calendar.MONTH) 084 + "," + (date.get(Calendar.DAY_OF_MONTH) - 1) 085 + ")"); 086 } 087 088 public JSONObject appendTo(JSONObject obj) { 089 JSONObject event = new JSONObject(); 090 event.put("start", toDate(start)); 091 if (end!=null) { 092 event.put("end", toDate(end)); 093 } 094 event.put("title", title) 095 .put("link", link) 096 .put("description", (description==null) ? "" : description); 097 098 obj.accumulate("events", event); 099 return obj; 100 } 101 }