001: /*
002: * Created on Jan 31, 2005
003: *
004: */
005: package net.sf.thingamablog.generator;
006:
007: import java.text.Collator;
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.BlogEntry;
015: import net.sf.thingamablog.blog.TBWeblog;
016:
017: /**
018: * @author Bob Tantlinger
019: */
020: public class CategoryListContainer extends ListContainer {
021: private static final int ENTRY_CATS = 0;
022: private static final int BLOG_CATS = 1;
023:
024: private TBWeblog blog;
025: private BlogEntry entry;
026: private int mode;
027: private TextTag linkTag, feedLinkTag;
028: private HyperTextTag labelTag;
029: private Vector tags = new Vector();
030: private String cats[];
031: private String arcUrl;
032:
033: /**
034: * @param name
035: */
036: public CategoryListContainer(TBWeblog blog) {
037: super ("CategoryList");
038: this .blog = blog;
039: mode = BLOG_CATS;
040: createTags();
041: }
042:
043: public CategoryListContainer(TBWeblog blog, BlogEntry entry) {
044: super ("EntryCategories");
045: this .blog = blog;
046: this .entry = entry;
047: mode = ENTRY_CATS;
048: createTags();
049: }
050:
051: private void createTags() {
052: labelTag = new HyperTextTag("CategoryName");
053: linkTag = new TextTag("CategoryLink");
054: feedLinkTag = new TextTag("FeedLink");
055: tags.add(labelTag);
056: tags.add(linkTag);
057: tags.add(feedLinkTag);
058: }
059:
060: /* (non-Javadoc)
061: * @see net.sf.thingamablog.generator1.ListContainer#initListData(boolean, java.util.Hashtable)
062: */
063: public void initListData(boolean asc, Hashtable attribs) {
064: try {
065: if (mode == ENTRY_CATS)
066: cats = entry.getCategories();
067: else
068: cats = blog.getCategories();
069: } catch (Exception ex) {
070: ex.printStackTrace();
071: cats = new String[0];
072: }
073:
074: Arrays.sort(cats, new CatComparator(asc));
075: arcUrl = blog.getArchiveUrl();
076: if (!arcUrl.endsWith("/"))
077: arcUrl += "/";
078: }
079:
080: /* (non-Javadoc)
081: * @see net.sf.thingamablog.generator1.ListContainer#getListDataSize()
082: */
083: public int getListDataSize() {
084: return cats.length;
085: }
086:
087: /* (non-Javadoc)
088: * @see net.sf.thingamablog.generator1.ListContainer#getValueForTag(net.sf.thingamablog.generator1.TemplateTag, int)
089: */
090: public Object getValueForTag(TemplateTag t, int index) {
091: try {
092: if (t == labelTag) {
093: return cats[index];
094: }
095:
096: if (t == linkTag) {
097: return arcUrl + blog.getCategoryFileName(cats[index]);
098: }
099:
100: if (t == feedLinkTag) {
101: return arcUrl
102: + blog.getCategoryFeedFileName(cats[index]);
103: }
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 CatComparator implements Comparator {
130: private boolean asc;
131:
132: public CatComparator(boolean asc) {
133: this .asc = asc;
134: }
135:
136: public int compare(Object one, Object two) {
137: String s1 = one.toString();
138: String s2 = two.toString();
139: Collator coll = Collator.getInstance();
140: if (asc)
141: return coll.compare(s1, s2);
142: return coll.compare(s2, s1);
143: }
144: }
145: }
|