KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > table > action > TagMessageMenu


1 package org.columba.mail.gui.table.action;
2
3 import java.util.Hashtable JavaDoc;
4 import java.util.Iterator JavaDoc;
5 import java.util.Map.Entry;
6 import java.util.logging.Logger JavaDoc;
7
8 import org.columba.api.gui.frame.IFrameMediator;
9 import org.columba.api.selection.ISelectionListener;
10 import org.columba.api.selection.SelectionChangedEvent;
11 import org.columba.core.association.AssociationStore;
12 import org.columba.core.association.api.IAssociation;
13 import org.columba.core.command.CommandProcessor;
14 import org.columba.core.folder.api.IFolder;
15 import org.columba.core.gui.tagging.TaggingMenu;
16 import org.columba.core.tagging.TagManager;
17 import org.columba.core.tagging.api.ITag;
18 import org.columba.mail.command.IMailFolderCommandReference;
19 import org.columba.mail.folder.IMailbox;
20 import org.columba.mail.folder.command.TagMessageCommand;
21 import org.columba.mail.folder.virtual.VirtualFolder;
22 import org.columba.mail.folder.virtual.VirtualHeader;
23 import org.columba.mail.gui.frame.MailFrameMediator;
24 import org.columba.mail.gui.table.selection.TableSelectionChangedEvent;
25 import org.columba.mail.message.IHeaderList;
26 import org.columba.mail.util.MailResourceLoader;
27
28 public class TagMessageMenu extends TaggingMenu implements ISelectionListener {
29
30     final static private String JavaDoc SERVICE_ID = "tagging";
31
32     private static final Logger JavaDoc LOG = Logger
33             .getLogger("org.columba.mail.gui.table.action.TagMessageMenu");
34
35     /**
36      * @param controller
37      */

38     public TagMessageMenu(IFrameMediator controller) {
39         super(controller, MailResourceLoader.getString("dialog", "tagging",
40                 "menu_tag_message"), "menu_tag_message");
41
42         ((MailFrameMediator) controller).registerTableSelectionListener(this);
43     }
44
45     // listener updates selection status, when ever a message selection changes
46
public void selectionChanged(SelectionChangedEvent e) {
47         if (((TableSelectionChangedEvent) e).getUids().length > 0) {
48             setEnabled(true);
49             removeAll();
50             createSubMenu();
51         } else {
52             setEnabled(false);
53         }
54
55     }
56
57     private boolean checkOneUid(Object JavaDoc uid, IFolder srcFolder, ITag tag) {
58         for (IAssociation as : AssociationStore.getInstance()
59                 .getAllAssociations(
60                         TagMessageCommand.createURI(srcFolder.getId(), uid)
61                                 .toString())) {
62             if (as.getServiceId().equals(SERVICE_ID)
63                     && (as.getMetaDataId() != null)
64                     && (as.getMetaDataId().equals(tag.getId()))) {
65                 return true;
66             }
67         }
68         return false;
69     }
70
71     @Override JavaDoc
72     protected void assignTag(String JavaDoc tagId) {
73
74         // get current message list selection
75
IMailFolderCommandReference r = ((MailFrameMediator) getFrameMediator())
76                 .getTableSelection();
77
78         // pass command to scheduler
79
CommandProcessor.getInstance().addOp(
80                 new TagMessageCommand(r, TagMessageCommand.ADD_TAG, tagId));
81     }
82
83     @Override JavaDoc
84     protected boolean isTagged(ITag tag) {
85         // get current message list selection
86
IMailFolderCommandReference r = ((MailFrameMediator) getFrameMediator())
87                 .getTableSelection();
88
89         if ((r == null) || (r.getUids().length <= 0) || (tag == null))
90             return false;
91
92         Hashtable JavaDoc<Object JavaDoc, IFolder> mails = new Hashtable JavaDoc<Object JavaDoc, IFolder>();
93
94         // check if virtual folder, if yes, do not use these uids, use the
95
// real uids instead
96
if (r.getSourceFolder() instanceof VirtualFolder) {
97             // get original folder
98
try {
99
100                 IHeaderList hl = ((IMailbox) r.getSourceFolder())
101                         .getHeaderList();
102                 for (Object JavaDoc uid : r.getUids()) {
103                     // should be virtual
104
mails.put(((VirtualHeader) hl.get(uid)).getSrcUid(),
105                             ((VirtualHeader) hl.get(uid)).getSrcFolder());
106                 }
107             } catch (Exception JavaDoc e) {
108                 LOG.severe("Error getting header list from virtual folder");
109                 e.printStackTrace();
110                 return false;
111             }
112         } else {
113             for (Object JavaDoc uid : r.getUids()) {
114                 mails.put(uid, r.getSourceFolder());
115             }
116         }
117
118         // if all messages are tagged with tag, then return true, else false
119
boolean result = true;
120         for (Entry<Object JavaDoc, IFolder> entry : mails.entrySet()) {
121             boolean current = checkOneUid(entry.getKey(), entry.getValue(), tag);
122             if (current == false)
123                 return false;
124         }
125         return result;
126     }
127
128     @Override JavaDoc
129     protected void removeAllTags() {
130
131         // get current message list selection
132
IMailFolderCommandReference r = ((MailFrameMediator) getFrameMediator())
133                 .getTableSelection();
134
135         for (Iterator JavaDoc<ITag> iter = TagManager.getInstance().getAllTags(); iter
136                 .hasNext();) {
137
138             ITag tag = iter.next();
139             // TODO @author hubms: bad: if there is a icon it is tagged or
140
// not
141

142             // pass command to scheduler
143
CommandProcessor.getInstance().addOp(
144                     new TagMessageCommand(r, TagMessageCommand.REMOVE_TAG, tag
145                             .getId()));
146         }
147     }
148
149     @Override JavaDoc
150     protected void removeTag(String JavaDoc tagId) {
151
152         // get current message list selection
153
IMailFolderCommandReference r = ((MailFrameMediator) getFrameMediator())
154                 .getTableSelection();
155
156         CommandProcessor.getInstance().addOp(
157                 new TagMessageCommand(r, TagMessageCommand.REMOVE_TAG, tagId));
158     }
159
160 }
161
Popular Tags