KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > addressbook > gui > action > TagContactMenu


1 package org.columba.addressbook.gui.action;
2
3 import java.net.URI JavaDoc;
4 import java.net.URISyntaxException JavaDoc;
5 import java.util.Collection JavaDoc;
6 import java.util.Iterator JavaDoc;
7
8 import javax.swing.event.ListSelectionEvent JavaDoc;
9 import javax.swing.event.ListSelectionListener JavaDoc;
10 import javax.swing.event.TreeSelectionEvent JavaDoc;
11 import javax.swing.event.TreeSelectionListener JavaDoc;
12 import javax.swing.tree.TreePath JavaDoc;
13
14 import org.columba.addressbook.facade.IContactItem;
15 import org.columba.addressbook.folder.IFolder;
16 import org.columba.addressbook.gui.frame.AddressbookFrameMediator;
17 import org.columba.addressbook.util.AddressbookResourceLoader;
18 import org.columba.api.gui.frame.IFrameMediator;
19 import org.columba.core.association.AssociationStore;
20 import org.columba.core.association.api.IAssociation;
21 import org.columba.core.gui.tagging.TaggingMenu;
22 import org.columba.core.tagging.TagManager;
23 import org.columba.core.tagging.api.ITag;
24
25 public class TagContactMenu extends TaggingMenu implements
26         ListSelectionListener JavaDoc, TreeSelectionListener JavaDoc {
27
28     final static private String JavaDoc SERVICE_ID = "tagging";
29
30     private String JavaDoc folderId;
31
32     private String JavaDoc contactId;
33
34     /**
35      * @param frameMediator
36      */

37     public TagContactMenu(IFrameMediator frameMediator) {
38         super(frameMediator, AddressbookResourceLoader.getString("dialog",
39                 "tagging", "contact_tag_message"), "menu_tag_message");
40
41         // register interest on contact selection changes
42
((AddressbookFrameMediator) frameMediator)
43                 .addTableSelectionListener(this);
44
45         // register interest on tree selection changes
46
((AddressbookFrameMediator) frameMediator)
47                 .addTreeSelectionListener(this);
48     }
49
50     /**
51      */

52     public void valueChanged(TreeSelectionEvent JavaDoc e) {
53         TreePath JavaDoc path = e.getNewLeadSelectionPath();
54
55         // remember last selected folder treenode
56
if (path != null) {
57             IFolder folder = (IFolder) path.getLastPathComponent();
58             folderId = folder.getId();
59         }
60
61     }
62
63     /**
64      * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
65      */

66     public void valueChanged(ListSelectionEvent JavaDoc event) {
67         // return if selection change is in flux
68
if (event.getValueIsAdjusting()) {
69             return;
70         }
71
72         Object JavaDoc[] uids = ((AddressbookFrameMediator) getFrameMediator())
73                 .getTable().getUids();
74
75         if (uids.length > 0) {
76             setEnabled(true);
77
78             removeAll();
79             createSubMenu();
80         } else {
81             setEnabled(false);
82         }
83     }
84
85     @Override JavaDoc
86     protected void assignTag(String JavaDoc tagId) {
87
88         String JavaDoc[] ids = ((AddressbookFrameMediator) getFrameMediator())
89                 .getTable().getUids();
90         for (int i = 0; i < ids.length; i++) {
91             String JavaDoc contactId = ids[i];
92             AssociationStore.getInstance().addAssociation(SERVICE_ID, tagId,
93                     createURI(folderId, contactId).toString());
94         }
95     }
96
97     @Override JavaDoc
98     protected boolean isTagged(ITag tag) {
99         String JavaDoc[] ids = ((AddressbookFrameMediator) getFrameMediator())
100                 .getTable().getUids();
101         boolean tagged = true;
102         for (int i = 0; i < ids.length; i++) {
103             String JavaDoc contactId = ids[i];
104
105             tagged &= checkAssocation(folderId, contactId, tag);
106         }
107
108         return tagged;
109     }
110
111     @Override JavaDoc
112     protected void removeAllTags() {
113         IContactItem contactItem = ((AddressbookFrameMediator) getFrameMediator())
114                 .getTable().getSelectedItem();
115         String JavaDoc contactId = contactItem.getId();
116
117         for (Iterator JavaDoc<ITag> iter = TagManager.getInstance().getAllTags(); iter
118                 .hasNext();) {
119             ITag tag = iter.next();
120
121             AssociationStore.getInstance().removeAssociation(SERVICE_ID,
122                     tag.getId(), createURI(folderId, contactId).toString());
123         }
124     }
125
126     @Override JavaDoc
127     protected void removeTag(String JavaDoc tagId) {
128
129         String JavaDoc[] ids = ((AddressbookFrameMediator) getFrameMediator())
130                 .getTable().getUids();
131         for (int i = 0; i < ids.length; i++) {
132             String JavaDoc contactId = ids[i];
133             AssociationStore.getInstance().removeAssociation(SERVICE_ID, tagId,
134                     createURI(folderId, contactId).toString());
135         }
136
137     }
138
139     // create URI representing the contact
140
public static URI JavaDoc createURI(String JavaDoc folderId, Object JavaDoc contactId) {
141         URI JavaDoc uri = null;
142         try {
143             uri = new URI JavaDoc("columba://org.columba.contact/" + folderId + "/"
144                     + contactId);
145         } catch (URISyntaxException JavaDoc e) {
146             e.printStackTrace();
147         }
148         return uri;
149     }
150
151     // check if contact is tagged
152
private boolean checkAssocation(String JavaDoc folderId, String JavaDoc contactId, ITag tag) {
153         URI JavaDoc uri = createURI(folderId, contactId);
154         Collection JavaDoc<IAssociation> c = AssociationStore.getInstance()
155                 .getAllAssociations(uri.toString());
156
157         for (IAssociation as : c) {
158             if (as.getServiceId().equals(SERVICE_ID)
159                     && (as.getMetaDataId() != null)
160                     && (as.getMetaDataId().equals(tag.getId()))) {
161                 return true;
162             }
163         }
164         return false;
165     }
166
167 }
168
Popular Tags