KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > calendar > ui > tagging > CalendarTagList


1 package org.columba.calendar.ui.tagging;
2
3 import java.util.Collection JavaDoc;
4
5 import javax.swing.event.ListSelectionEvent JavaDoc;
6 import javax.swing.event.ListSelectionListener JavaDoc;
7
8 import org.columba.api.gui.frame.IFrameMediator;
9 import org.columba.calendar.ui.frame.CalendarFrameMediator;
10 import org.columba.core.association.AssociationStore;
11 import org.columba.core.gui.tagging.TagList;
12 import org.columba.core.tagging.api.ITag;
13
14 import com.miginfocom.calendar.activity.Activity;
15 import com.miginfocom.calendar.activity.ActivityDepository;
16 import com.miginfocom.calendar.category.Category;
17 import com.miginfocom.calendar.category.CategoryDepository;
18 import com.miginfocom.util.MigUtil;
19
20 public class CalendarTagList extends TagList {
21
22     private static final java.util.logging.Logger JavaDoc LOG = java.util.logging.Logger
23             .getLogger("org.columba.calendar.ui.tagging"); //$NON-NLS-1$
24

25     public static final String JavaDoc PROP_FILTERED = "filterRow";
26
27     private IFrameMediator frameMediator;
28
29     public CalendarTagList(IFrameMediator frameMediator) {
30         super();
31
32         this.frameMediator = frameMediator;
33
34         addListSelectionListener(new MyListSelectionListener());
35     }
36
37     class MyListSelectionListener implements ListSelectionListener JavaDoc {
38         MyListSelectionListener() {
39         }
40
41         public void valueChanged(ListSelectionEvent JavaDoc event) {
42             // return if selection change is in flux
43
if (event.getValueIsAdjusting()) {
44                 return;
45             }
46
47             ITag result = (ITag) getSelectedValue();
48             
49             //
50
// mark all activities with the tag
51
//
52

53             Collection JavaDoc<String JavaDoc> messageList = AssociationStore.getInstance()
54                     .getAssociatedItems("tagging", result.getId());
55             for (String JavaDoc id : messageList) {
56
57                 // example:
58
// "columba://org.columba.contact/<folder-id>/<contact-id>"
59
String JavaDoc s = id.toString();
60
61                 // TODO: @author fdietz replace with regular expression
62
int activityIndex = s.lastIndexOf('/');
63                 String JavaDoc activityId = s.substring(activityIndex + 1, s.length());
64                 int folderIndex = s.lastIndexOf('/', activityIndex - 1);
65                 String JavaDoc folderId = s.substring(folderIndex + 1, activityIndex);
66                 int componentIndex = s.lastIndexOf('/', folderIndex - 1);
67                 String JavaDoc componentId = s.substring(componentIndex + 1,
68                         folderIndex);
69
70                 // check if its a calendar component
71
if (componentId.equals("org.columba.calendar")) {
72                     // get calendar ui component depository
73
Activity act = ActivityDepository.getInstance()
74                             .getActivity(activityId);
75                     // add tag id as last
76
act.addCategoryID("tag_" + result.getId(), MigUtil.BIG_INT);
77                 }
78             }
79
80             //
81
// now change all global categories
82
//
83

84             // set all tags/categories to be *not* selected
85
clearAllTagCategories();
86
87             // retrieve tag/category to be selected
88
Category category = retrieveTagCategory(result.getId());
89             if (category == null) {
90                 System.out.println("add: " + result.getId());
91                 // create new one
92
category = CategoryDepository.getRoot().addSubCategory(
93                         "tag_" + result.getId(), result.getName());
94             }
95
96             // mark it as selected
97
category.setProperty(Category.PROP_IS_HIDDEN, Boolean
98                     .valueOf(false), Boolean.TRUE);
99             System.out.println("tag: " + category.getId().toString());
100
101             // update calendar viewer
102
((CalendarFrameMediator) frameMediator).getCalendarView()
103                     .recreateFilterRows();
104
105         }
106     }
107
108     private Category retrieveTagCategory(String JavaDoc tagId) {
109         Collection JavaDoc<Category> c = CategoryDepository.getRoot().getChildrenDeep();
110         for (Category category : c) {
111             String JavaDoc categoryId = (String JavaDoc) category.getId();
112             if (categoryId.equals("tag_" + tagId))
113                 return category;
114         }
115
116         return null;
117     }
118
119     private void clearAllTagCategories() {
120         CategoryDepository.getRoot().setPropertyDeep(Category.PROP_IS_HIDDEN, Boolean
121                 .valueOf(true), Boolean.TRUE);
122     }
123 }
Popular Tags