KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > addressbook > gui > tagging > ContactTagList


1 package org.columba.addressbook.gui.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.addressbook.folder.IContactStorage;
9 import org.columba.addressbook.folder.virtual.VirtualFolder;
10 import org.columba.addressbook.gui.frame.AddressbookFrameMediator;
11 import org.columba.addressbook.gui.tree.AddressbookTreeModel;
12 import org.columba.api.gui.frame.IFrameMediator;
13 import org.columba.core.association.AssociationStore;
14 import org.columba.core.gui.tagging.TagList;
15 import org.columba.core.tagging.api.ITag;
16
17 public class ContactTagList extends TagList {
18
19     private static final java.util.logging.Logger JavaDoc LOG = java.util.logging.Logger
20             .getLogger("org.columba.addressbook.action"); //$NON-NLS-1$
21

22     private IFrameMediator frameMediator;
23
24     public ContactTagList(IFrameMediator frameMediator) {
25         super();
26
27         this.frameMediator = frameMediator;
28
29         addListSelectionListener(new MyListSelectionListener());
30     }
31
32     class MyListSelectionListener implements ListSelectionListener JavaDoc {
33         MyListSelectionListener() {
34         }
35
36         public void valueChanged(ListSelectionEvent JavaDoc event) {
37             // return if selection change is in flux
38
if (event.getValueIsAdjusting()) {
39                 return;
40             }
41
42             VirtualFolder virtualFolder = new VirtualFolder();
43             ITag result = (ITag) getSelectedValue();
44             // create a virtual folder with all messages holding this tag
45
Collection JavaDoc<String JavaDoc> messageList = AssociationStore.getInstance()
46                     .getAssociatedItems("tagging", result.getId());
47             for (String JavaDoc id : messageList) {
48
49                 // example:
50
// "columba://org.columba.contact/<folder-id>/<contact-id>"
51
String JavaDoc s = id.toString();
52
53                 // TODO: @author fdietz replace with regular expression
54
int contactIndex = s.lastIndexOf('/');
55                 String JavaDoc contactId = s.substring(contactIndex + 1, s.length());
56                 int folderIndex = s.lastIndexOf('/', contactIndex - 1);
57                 String JavaDoc folderId = s.substring(folderIndex + 1, contactIndex);
58                 int componentIndex = s.lastIndexOf('/', folderIndex - 1);
59                 String JavaDoc componentId = s.substring(componentIndex + 1,
60                         folderIndex);
61
62                 // check if its a contact component
63
if (componentId.equals("org.columba.contact")) {
64                     IContactStorage parentStore = (IContactStorage) AddressbookTreeModel
65                             .getInstance().getFolder(folderId);
66                     if (parentStore == null) {
67                         LOG.severe("can't find contact store for \""+folderId+"\"");
68                         continue;
69                     }
70                     virtualFolder.add(parentStore, contactId);
71                 }
72             }
73
74             // update folder selection
75
((AddressbookFrameMediator)frameMediator).getTree().setSelectedFolder(virtualFolder);
76         }
77     }
78
79 }
80
Popular Tags