001: /*
002: * Created on Feb 21, 2005
003: *
004: */
005: package net.sf.thingamablog.generator;
006:
007: import java.util.ArrayList;
008: import java.util.Arrays;
009: import java.util.Calendar;
010: import java.util.Comparator;
011: import java.util.Hashtable;
012: import java.util.List;
013: import java.util.Vector;
014:
015: import net.sf.thingamablog.blog.ArchiveRange;
016: import net.sf.thingamablog.blog.TBWeblog;
017:
018: /**
019: * @author Bob Tantlinger
020: *
021: */
022: public class ArchiveYearsContainer extends ListContainer {
023: private String format;
024: private boolean span;
025: private TBWeblog blog;
026: private Vector years = new Vector();
027: private ArchiveRange arcs[];
028: private Calendar cal;
029: private TextTag yearTag = new TextTag("Year");
030: private ArrayList tags = new ArrayList(1);
031:
032: public ArchiveYearsContainer(TBWeblog blog, String format,
033: boolean span) {
034: super ("ArchiveYears");
035: this .blog = blog;
036: this .span = span;
037: this .format = format;
038: cal = Calendar.getInstance(blog.getLocale());
039: tags.add(yearTag);
040: }
041:
042: /* (non-Javadoc)
043: * @see net.sf.thingamablog.generator.ListContainer#initListData(boolean, java.util.Hashtable)
044: */
045: public void initListData(boolean asc, Hashtable attribs) {
046: years.removeAllElements();
047:
048: try {
049: arcs = blog.getArchives();
050: Arrays.sort(arcs, new ArcComparator(!asc));
051: } catch (Exception ex) {
052: arcs = new ArchiveRange[0];
053: }
054:
055: int curYear = -1;
056: for (int i = 0; i < arcs.length; i++) {
057: cal.setTime(arcs[i].getStartDate());
058: if (cal.get(Calendar.YEAR) != curYear) {
059: curYear = cal.get(Calendar.YEAR);
060: years.add(new Integer(curYear));
061: }
062: }
063: }
064:
065: private ArchiveRange[] getArcsForYear(int y) {
066: Vector v = new Vector();
067: for (int i = 0; i < arcs.length; i++) {
068: cal.setTime(arcs[i].getStartDate());
069: if (cal.get(Calendar.YEAR) == y)
070: v.add(arcs[i]);
071: }
072:
073: ArchiveRange ar[] = new ArchiveRange[v.size()];
074: for (int i = 0; i < ar.length; i++)
075: ar[i] = (ArchiveRange) v.elementAt(i);
076:
077: return ar;
078: }
079:
080: /* (non-Javadoc)
081: * @see net.sf.thingamablog.generator.ListContainer#getListDataSize()
082: */
083: public int getListDataSize() {
084: return years.size();
085: }
086:
087: /* (non-Javadoc)
088: * @see net.sf.thingamablog.generator.ListContainer#getValueForTag(net.sf.thingamablog.generator.TemplateTag, int)
089: */
090: public Object getValueForTag(TemplateTag t, int index) {
091: if (t == yearTag) {
092: return years.elementAt(index).toString();
093: }
094: return "";
095: }
096:
097: /* (non-Javadoc)
098: * @see net.sf.thingamablog.generator.TemplateContainer#getTags()
099: */
100: public List getTags() {
101: return tags;
102: }
103:
104: /* (non-Javadoc)
105: * @see net.sf.thingamablog.generator.TemplateContainer#getContainers()
106: */
107: public List getContainers() {
108: ArrayList c = new ArrayList(1);
109: Integer year = (Integer) years.elementAt(currentIndex());
110: ArchiveRange ar[] = getArcsForYear(year.intValue());
111: ArchiveListContainer a = new ArchiveListContainer(
112: "ArchiveYear", blog, ar, format, span);
113: c.add(a);
114: return c;
115: }
116:
117: /* (non-Javadoc)
118: * @see net.sf.thingamablog.generator.TemplateContainer#isVisible()
119: */
120: public boolean isVisible() {
121: return years.size() > 0;
122: }
123:
124: private class ArcComparator implements Comparator {
125: private boolean asc;
126:
127: public ArcComparator(boolean asc) {
128: this .asc = asc;
129: }
130:
131: public int compare(Object one, Object two) {
132: ArchiveRange a1 = (ArchiveRange) one;
133: ArchiveRange a2 = (ArchiveRange) two;
134: if (asc)
135: return a1.getExpirationDate().compareTo(
136: a2.getExpirationDate());
137:
138: return a2.getExpirationDate().compareTo(
139: a1.getExpirationDate());
140: }
141: }
142: }
|