Skip to content

Commit

Permalink
MessageListView: add tagging support
Browse files Browse the repository at this point in the history
CreateTag, GetTag: request/response messages

AccountHandler: tagMessage
  • Loading branch information
pfn committed Nov 6, 2009
1 parent bf88357 commit a380a5d
Show file tree
Hide file tree
Showing 7 changed files with 127 additions and 15 deletions.
Expand Up @@ -2,7 +2,7 @@ moveItemTitle: Move Message
moveItemPrompt: File message into folder:

tagTitle: Tag message
tagText: Enter tags for this message
tagText: Enter tags (comma [,] separated) for this message:

hideAction: Hide alert window
hideActionMnemonic: VK_W
Expand Down
16 changes: 16 additions & 0 deletions src/java/com/zimbra/app/soap/messages/CreateTagRequest.java
@@ -0,0 +1,16 @@
package com.zimbra.app.soap.messages;

import com.zimbra.app.soap.Element;
import com.zimbra.app.soap.Type;

@Element(ns="urn:zimbraMail")
public class CreateTagRequest {
@Element(name="tag")
public Tag tag = new Tag();

@Element(name="tag")
public static class Tag {
@Element(type=Type.ATTRIBUTE)
public String name;
}
}
10 changes: 10 additions & 0 deletions src/java/com/zimbra/app/soap/messages/CreateTagResponse.java
@@ -0,0 +1,10 @@
package com.zimbra.app.soap.messages;

import com.zimbra.app.soap.Element;

@Element(ns="urn:zimbraMail")
public class CreateTagResponse {

@Element(name="tag", optional=false)
public GetTagResponse.Tag tag;
}
7 changes: 7 additions & 0 deletions src/java/com/zimbra/app/soap/messages/GetTagRequest.java
@@ -0,0 +1,7 @@
package com.zimbra.app.soap.messages;

import com.zimbra.app.soap.Element;

@Element(ns="urn:zimbraMail")
public class GetTagRequest {
}
22 changes: 22 additions & 0 deletions src/java/com/zimbra/app/soap/messages/GetTagResponse.java
@@ -0,0 +1,22 @@
package com.zimbra.app.soap.messages;

import com.zimbra.app.soap.Element;
import com.zimbra.app.soap.Type;

import java.util.ArrayList;

@Element(ns="urn:zimbraMail")
public class GetTagResponse {

@Element(name="tag")
public ArrayList<Tag> tags = new ArrayList<Tag>();

@Element(name="tag")
public static class Tag {
@Element(type=Type.ATTRIBUTE, optional=false)
public String name;

@Element(type=Type.ATTRIBUTE, optional=false)
public int id;
}
}
59 changes: 59 additions & 0 deletions src/java/com/zimbra/app/systray/AccountHandler.java
Expand Up @@ -21,6 +21,8 @@
import com.zimbra.app.soap.messages.AuthResponse;
import com.zimbra.app.soap.messages.BatchRequest;
import com.zimbra.app.soap.messages.BatchResponse;
import com.zimbra.app.soap.messages.CreateTagRequest;
import com.zimbra.app.soap.messages.CreateTagResponse;
import com.zimbra.app.soap.messages.DismissCalendarItemAlarmRequest;
import com.zimbra.app.soap.messages.DismissCalendarItemAlarmResponse;
import com.zimbra.app.soap.messages.GetFolderRequest;
Expand All @@ -29,6 +31,8 @@
import com.zimbra.app.soap.messages.GetInfoResponse;
import com.zimbra.app.soap.messages.GetPrefsRequest;
import com.zimbra.app.soap.messages.GetPrefsResponse;
import com.zimbra.app.soap.messages.GetTagRequest;
import com.zimbra.app.soap.messages.GetTagResponse;
import com.zimbra.app.soap.messages.MsgActionRequest;
import com.zimbra.app.soap.messages.MsgActionResponse;
import com.zimbra.app.soap.messages.SearchRequest;
Expand Down Expand Up @@ -453,6 +457,61 @@ public void dismissAppointmentAlarms(List<Appointment> appts) {
}
}

public void tagMessage(Message m, String[] tags) {
GetTagRequest greq = new GetTagRequest();
currentAccount.set(account);

try {
GetTagResponse gresp = SoapInterface.call(greq,
GetTagResponse.class, account.getServiceURL(), authToken);
HashSet<String> toCreate = new HashSet<String>();
HashMap<String,Integer> tagMap =
new HashMap<String,Integer>();
for (GetTagResponse.Tag t : gresp.tags)
tagMap.put(t.name, t.id);
for (String t : tags) {
if (!tagMap.containsKey(t)) {
toCreate.add(t);
}
}
for (String t : toCreate) {
CreateTagRequest creq = new CreateTagRequest();
creq.tag.name = t;
CreateTagResponse cresp = SoapInterface.call(creq,
CreateTagResponse.class, account.getServiceURL(),
authToken);
tagMap.put(t, cresp.tag.id);
}
HashSet<Integer> tagIds = new HashSet<Integer>();
for (String t : tags) {
tagIds.add(tagMap.get(t));
}

StringBuilder b = new StringBuilder();
for (Integer i : tagIds) {
b.append(i).append(",");
}
b.setLength(b.length() - 1);
doMessageAction(m, MessageAction.UPDATE, b.toString());
} catch (SOAPFaultException e) {
showMessage(account.getAccountName() + " : " +
e.reason.text, "Tag Message",
JOptionPane.ERROR_MESSAGE);
} catch (IOException e) {
e.printStackTrace();
showMessage(account.getAccountName() + " : " +
e.getLocalizedMessage(), "IOException",
JOptionPane.ERROR_MESSAGE);
} catch (SOAPException e) {
e.printStackTrace();
showMessage(account.getAccountName() + " : " +
e.getLocalizedMessage(), "SOAPException",
JOptionPane.ERROR_MESSAGE);
}

currentAccount.set(null);
}

public void moveMessage(Message m, String folder) {
String folderId = null;
for (GetFolderResponse.Folder f : mailFolders) {
Expand Down
26 changes: 12 additions & 14 deletions src/java/com/zimbra/app/systray/MessageListView.java
Expand Up @@ -118,20 +118,18 @@ public void run() {
new Runnable() {
@Override
public void run() {
//Message m = (Message) list.getSelectedValue();
/*
String tags = JOptionPane.showInputDialog(dlg,
getString("tagText"), getString("tagTitle"),
JOptionPane.QUESTION_MESSAGE);
if (tags == null || "".equals(tags.trim()))
return;
*/
// TODO implement tagItem
//doMessageAction(m, MessageAction.UPDATE, tags);
JOptionPane.showMessageDialog(dlg,
"Tagging messages is not implemented, yet",
"Not yet implemented", JOptionPane.INFORMATION_MESSAGE);
//dismissMessageAlert(m);
Message m = (Message) list.getSelectedValue();
AccountHandler ah = zt.getAccountHandlerBy(m.getAccount());
String tags = JOptionPane.showInputDialog(dlg,
getString("tagText"), getString("tagTitle"),
JOptionPane.QUESTION_MESSAGE);
if (tags == null || "".equals(tags.trim()))
return;
String[] tagList = tags.split(",");
for (int i = 0; i < tagList.length; i++)
tagList[i] = tagList[i].trim();
ah.tagMessage(m, tagList);
dismissMessageAlert(m);
}
});

Expand Down

0 comments on commit a380a5d

Please sign in to comment.