001 package net.sf.tacos.components.timeline;
002
003 import java.util.Collection;
004 import java.util.Iterator;
005
006 import org.apache.tapestry.BaseComponent;
007 import org.apache.tapestry.IAsset;
008 import org.apache.tapestry.IRequestCycle;
009 import org.apache.tapestry.html.Shell;
010 import org.apache.tapestry.json.JSONObject;
011
012 /**
013 * Timeline component, based on http://simile.mit.edu/timeline/
014 *
015 * @author Andreas Andreou, amplafi.com
016 */
017 public abstract class Timeline extends BaseComponent {
018
019 public abstract Collection getEvents();
020
021 public abstract String getEventsUrl();
022
023 public abstract IAsset getTimelineAsset();
024
025 public abstract IAsset getSimileAjaxAsset();
026
027 protected void prepareForRender(IRequestCycle cycle)
028 {
029 super.prepareForRender(cycle);
030
031 if (!cycle.isRewinding())
032 {
033 Shell shell = Shell.get(cycle);
034 if (getSimileAjaxAsset()!=null)
035 {
036 addScriptToShell(shell, getSimileAjaxAsset().buildURL());
037 }
038
039 addScriptToShell(shell, getTimelineAsset().buildURL());
040 }
041 }
042
043 public String getEventsJson()
044 {
045 JSONObject json = new JSONObject();
046 for (Iterator iterator = getEvents().iterator(); iterator.hasNext();)
047 {
048 TimelineEvent evt = (TimelineEvent) iterator.next();
049 evt.appendTo(json);
050 }
051 return json.toString(2);
052 }
053
054 private void addScriptToShell(Shell shell, String url) {
055 shell.includeAdditionalContent(
056 "<script src=\"" + url + "\" type=\"text/javascript\"></script>");
057 }
058 }