-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathUserPostedMentionQueryHandler.java
More file actions
99 lines (84 loc) · 3.45 KB
/
Copy pathUserPostedMentionQueryHandler.java
File metadata and controls
99 lines (84 loc) · 3.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
* Copyright 2011 buddycloud
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.buddycloud.pusher.handler.internal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.buddycloud.pusher.NotificationSettings;
import org.buddycloud.pusher.Pusher;
import org.buddycloud.pusher.Pushers;
import org.buddycloud.pusher.Pusher.Event;
import org.buddycloud.pusher.db.DataSource;
import org.buddycloud.pusher.handler.AbstractQueryHandler;
import org.buddycloud.pusher.utils.NotificationUtils;
import org.buddycloud.pusher.utils.XMPPUtils;
import org.dom4j.Element;
import org.xmpp.packet.IQ;
/**
* @author Abmar
*
*/
public class UserPostedMentionQueryHandler extends AbstractQueryHandler {
private static final String NAMESPACE = "http://buddycloud.com/pusher/userposted-mention";
/**
* @param namespace
* @param properties
*/
public UserPostedMentionQueryHandler(Properties properties, DataSource dataSource) {
super(NAMESPACE, properties, dataSource);
}
/* (non-Javadoc)
* @see com.buddycloud.pusher.handler.AbstractQueryHandler#handleQuery(org.xmpp.packet.IQ)
*/
@Override
protected IQ handleQuery(IQ iq) {
Element queryElement = iq.getElement().element("query");
Element authorJidElement = queryElement.element("authorJid");
Element channelElement = queryElement.element("channel");
Element mentionedJidElement = queryElement.element("mentionedJid");
Element postContentElement = queryElement.element("postContent");
if (authorJidElement == null || channelElement == null || mentionedJidElement == null) {
return XMPPUtils.error(iq,
"You must provide the userJid, the channel and the channelOwner", getLogger());
}
String authorJid = authorJidElement.getText();
String mentionedJid = mentionedJidElement.getText();
String channelJid = channelElement.getText();
String postContent = postContentElement.getText();
Map<String, String> tokens = new HashMap<String, String>();
tokens.put("AUTHOR_JID", authorJid);
tokens.put("MENTIONED_JID", mentionedJid);
tokens.put("CHANNEL_JID", channelJid);
tokens.put("CONTENT", postContent);
List<NotificationSettings> allNotificationSettings = NotificationUtils.getNotificationSettings(
mentionedJid, getDataSource());
for (NotificationSettings notificationSettings : allNotificationSettings) {
if (!notificationSettings.getPostMentionedMe()) {
getLogger().warn("User " + mentionedJid + " won't receive mention notifications.");
continue;
}
if (notificationSettings.getTarget() == null) {
getLogger().warn("User " + mentionedJid + " has no target registered.");
continue;
}
Pusher pusher = Pushers.getInstance(getProperties()).get(notificationSettings.getType());
pusher.push(notificationSettings.getTarget(), Event.MENTION, tokens);
}
return createResponse(iq, "User [" + authorJid + "] mentioned [" + mentionedJidElement + "] " +
"on channel [" + channelJid + "].");
}
}