001: /*
002: * Created on Jan 31, 2005
003: *
004: */
005: package net.sf.thingamablog.generator;
006:
007: import java.text.SimpleDateFormat;
008: import java.util.Arrays;
009: import java.util.Comparator;
010: import java.util.Hashtable;
011: import java.util.List;
012: import java.util.Vector;
013:
014: import net.sf.thingamablog.blog.ArchiveRange;
015: import net.sf.thingamablog.blog.TBWeblog;
016:
017: /**
018: * @author Bob Tantlinger
019: */
020: public class ArchiveListContainer extends ListContainer {
021: private TBWeblog blog;
022: private HyperTextTag labelTag;
023: private TextTag linkTag;
024: private Vector tags = new Vector();
025: private ArchiveRange arcs[];
026: private String arcUrl;
027: private String format = "";
028: private boolean span;
029:
030: /** Archive range format attrib */
031: public static final String ARC_FORMAT = "format";
032: /** Span archive range attrib */
033: public static final String SPAN_RANGE = "span";
034:
035: /**
036: * @param name
037: */
038: public ArchiveListContainer(TBWeblog blog, String defaultFormat,
039: boolean span) {
040: this ("ArchiveList", blog, null, defaultFormat, span);
041: }
042:
043: public ArchiveListContainer(String name, TBWeblog blog,
044: ArchiveRange arcs[], String defaultFormat, boolean span) {
045: super (name);
046: this .arcs = arcs;
047: this .blog = blog;
048: labelTag = new HyperTextTag("ArchiveName");
049: linkTag = new TextTag("ArchiveLink");
050: tags.add(labelTag);
051: tags.add(linkTag);
052:
053: Hashtable ht = getDefaultAttributes();
054: ht.put(ARC_FORMAT, defaultFormat);
055: if (span)
056: ht.put(SPAN_RANGE, "1");
057: else
058: ht.put(SPAN_RANGE, "0");
059: }
060:
061: /* (non-Javadoc)
062: * @see net.sf.thingamablog.generator1.ListContainer#initListData(boolean, java.util.Hashtable)
063: */
064: public void initListData(boolean asc, Hashtable attribs) {
065: try {
066: if (arcs == null)
067: arcs = blog.getArchives();
068: } catch (Exception ex) {
069: arcs = new ArchiveRange[0];
070: }
071:
072: Arrays.sort(arcs, new ArcComparator(!asc));
073:
074: format = attribs.get(ARC_FORMAT).toString();
075: span = attribs.get(SPAN_RANGE).toString().equals("1");
076:
077: arcUrl = blog.getArchiveUrl();
078: if (!arcUrl.endsWith("/"))
079: arcUrl += "/";
080: }
081:
082: /* (non-Javadoc)
083: * @see net.sf.thingamablog.generator1.ListContainer#getListDataSize()
084: */
085: public int getListDataSize() {
086: return arcs.length;
087: }
088:
089: /* (non-Javadoc)
090: * @see net.sf.thingamablog.generator1.ListContainer#getValueForTag(net.sf.thingamablog.generator1.TemplateTag, int)
091: */
092: public Object getValueForTag(TemplateTag t, int index) {
093: try {
094: if (t == labelTag) {
095: ArchiveRange ar = arcs[index];
096: SimpleDateFormat df = new SimpleDateFormat(format, blog
097: .getLocale());
098: ar.setFormatter(df, span);
099: return ar.getFormattedRange();
100: }
101:
102: if (t == linkTag) {
103: return arcUrl + blog.getArchiveFileName(arcs[index]);
104: }
105: } catch (ArrayIndexOutOfBoundsException ex) {
106: }
107:
108: return "";
109: }
110:
111: /* (non-Javadoc)
112: * @see net.sf.thingamablog.generator1.TemplateContainer#getTags()
113: */
114: public List getTags() {
115: return tags;
116: }
117:
118: /* (non-Javadoc)
119: * @see net.sf.thingamablog.generator1.TemplateContainer#getContainers()
120: */
121: public List getContainers() {
122: return null;
123: }
124:
125: public boolean isVisible() {
126: return true;
127: }
128:
129: private class ArcComparator implements Comparator {
130: private boolean asc;
131:
132: public ArcComparator(boolean asc) {
133: this .asc = asc;
134: }
135:
136: public int compare(Object one, Object two) {
137: ArchiveRange a1 = (ArchiveRange) one;
138: ArchiveRange a2 = (ArchiveRange) two;
139: if (asc)
140: return a1.getExpirationDate().compareTo(
141: a2.getExpirationDate());
142:
143: return a2.getExpirationDate().compareTo(
144: a1.getExpirationDate());
145: }
146: }
147: }
|