01: package org.columba.addressbook.gui.tagging;
02:
03: import java.util.Collection;
04:
05: import javax.swing.event.ListSelectionEvent;
06: import javax.swing.event.ListSelectionListener;
07:
08: import org.columba.addressbook.folder.IContactStorage;
09: 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 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 {
33: MyListSelectionListener() {
34: }
35:
36: public void valueChanged(ListSelectionEvent 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<String> messageList = AssociationStore
46: .getInstance().getAssociatedItems("tagging",
47: result.getId());
48: for (String id : messageList) {
49:
50: // example:
51: // "columba://org.columba.contact/<folder-id>/<contact-id>"
52: String s = id.toString();
53:
54: // TODO: @author fdietz replace with regular expression
55: int contactIndex = s.lastIndexOf('/');
56: String contactId = s.substring(contactIndex + 1, s
57: .length());
58: int folderIndex = s.lastIndexOf('/', contactIndex - 1);
59: String folderId = s.substring(folderIndex + 1,
60: contactIndex);
61: int componentIndex = s
62: .lastIndexOf('/', folderIndex - 1);
63: String componentId = s.substring(componentIndex + 1,
64: folderIndex);
65:
66: // check if its a contact component
67: if (componentId.equals("org.columba.contact")) {
68: IContactStorage parentStore = (IContactStorage) AddressbookTreeModel
69: .getInstance().getFolder(folderId);
70: if (parentStore == null) {
71: LOG.severe("can't find contact store for \""
72: + folderId + "\"");
73: continue;
74: }
75: virtualFolder.add(parentStore, contactId);
76: }
77: }
78:
79: // update folder selection
80: ((AddressbookFrameMediator) frameMediator).getTree()
81: .setSelectedFolder(virtualFolder);
82: }
83: }
84:
85: }
|