use of org.jivesoftware.smack.roster.RosterEntry in project Spark by igniterealtime.
the class ContactGroupTransferHandler method addContactItem.
private void addContactItem(final ContactGroup contactGroup, final ContactItem item) {
ContactItem newContact = UIComponentRegistry.createContactItem(Res.getString("group.empty"), null, null);
newContact.setPresence(item.getPresence());
newContact.setIcon(item.getIcon());
newContact.getNicknameLabel().setFont(item.getNicknameLabel().getFont());
if (!PresenceManager.isOnline(item.getJID())) {
contactGroup.addOfflineContactItem(item.getAlias(), item.getNickname(), item.getJID(), null);
} else {
contactGroup.addContactItem(newContact);
}
contactGroup.clearSelection();
// Updating group title
contactGroup.fireContactGroupUpdated();
final ContactGroup oldGroup = getContactGroup(item.getGroupName());
SwingWorker worker = new SwingWorker() {
public Object construct() {
Roster roster = Roster.getInstanceFor(SparkManager.getConnection());
RosterEntry entry = roster.getEntry(item.getJID());
RosterGroup groupFound = null;
for (RosterGroup group : roster.getGroups()) {
if (group.getName().equals(contactGroup.getGroupName())) {
try {
groupFound = group;
group.addEntry(entry);
} catch (XMPPException | SmackException e1) {
Log.error(e1);
return false;
}
}
}
// This is a new group
if (groupFound == null) {
groupFound = roster.createGroup(contactGroup.getGroupName());
try {
groupFound.addEntry(entry);
} catch (XMPPException | SmackException e) {
Log.error(e);
}
}
return true;
}
public void finished() {
if ((Boolean) get()) {
// Now try and remove the group from the old one.
removeContactItem(oldGroup, item);
}
}
};
worker.start();
}
use of org.jivesoftware.smack.roster.RosterEntry in project Spark by igniterealtime.
the class ContactItem method updatePresenceIcon.
/**
* Updates the icon of the user based on their presence.
*
* @param presence the users presence.
*/
public void updatePresenceIcon(Presence presence) {
ChatManager chatManager = SparkManager.getChatManager();
boolean handled = chatManager.fireContactItemPresenceChanged(this, presence);
if (handled) {
return;
}
String status = presence.getStatus();
Icon statusIcon = SparkRes.getImageIcon(SparkRes.GREEN_BALL);
boolean isAvailable = false;
if (status == null && presence.isAvailable()) {
Presence.Mode mode = presence.getMode();
if (mode == Presence.Mode.available) {
status = Res.getString("status.online");
isAvailable = true;
} else if (mode == Presence.Mode.away) {
status = Res.getString("status.away");
statusIcon = SparkRes.getImageIcon(SparkRes.IM_AWAY);
} else if (mode == Presence.Mode.chat) {
status = Res.getString("status.free.to.chat");
} else if (mode == Presence.Mode.dnd) {
status = Res.getString("status.do.not.disturb");
statusIcon = SparkRes.getImageIcon(SparkRes.IM_AWAY);
} else if (mode == Presence.Mode.xa) {
status = Res.getString("status.extended.away");
statusIcon = SparkRes.getImageIcon(SparkRes.IM_AWAY);
}
}
if (presence.isAvailable() && (presence.getMode() == Presence.Mode.dnd || presence.getMode() == Presence.Mode.away || presence.getMode() == Presence.Mode.xa)) {
statusIcon = SparkRes.getImageIcon(SparkRes.IM_AWAY);
} else if (presence.isAvailable()) {
isAvailable = true;
} else if (!presence.isAvailable()) {
getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, fontSize));
getNicknameLabel().setForeground((Color) UIManager.get("ContactItemOffline.color"));
RosterEntry entry = Roster.getInstanceFor(SparkManager.getConnection()).getEntry(getJID());
if (entry != null && (entry.getType() == RosterPacket.ItemType.none || entry.getType() == RosterPacket.ItemType.from) && RosterPacket.ItemStatus.SUBSCRIPTION_PENDING == entry.getStatus()) {
// Do not move out of group.
setIcon(SparkRes.getImageIcon(SparkRes.SMALL_QUESTION));
getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, fontSize));
setStatusText(Res.getString("status.pending"));
} else {
// We should keep the offline bullet (not available) instead of putting icon null.
setIcon(SparkRes.getImageIcon(SparkRes.CLEAR_BALL_ICON));
setFont(new Font("Dialog", Font.PLAIN, fontSize));
getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, fontSize));
setAvailable(false);
if (ModelUtil.hasLength(status)) {
setStatusText(status);
} else {
setStatusText("");
}
}
sideIcon.setIcon(null);
setAvailable(false);
return;
}
Icon sIcon = PresenceManager.getIconFromPresence(presence);
if (sIcon != null) {
setIcon(sIcon);
} else {
setIcon(statusIcon);
}
if (status != null) {
setStatus(status);
}
if (PresenceManager.isOnPhone(presence)) {
statusIcon = SparkRes.getImageIcon(SparkRes.ON_PHONE_IMAGE);
setIcon(statusIcon);
}
// Always change nickname label to black.
getNicknameLabel().setForeground((Color) UIManager.get("ContactItemNickname.foreground"));
if (isAvailable) {
getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, fontSize));
if (Res.getString("status.online").equals(status) || Res.getString("available").equalsIgnoreCase(status)) {
setStatusText("");
} else {
setStatusText(status);
}
} else if (presence.isAvailable()) {
LocalPreferences pref = SettingsManager.getLocalPreferences();
if (pref.isGrayingOutEnabled()) {
getNicknameLabel().setFont(new Font("Dialog", Font.ITALIC, fontSize));
getNicknameLabel().setForeground(Color.gray);
} else {
getNicknameLabel().setFont(new Font("Dialog", Font.PLAIN, fontSize));
getNicknameLabel().setForeground(Color.black);
}
if (status != null) {
setStatusText(status);
}
}
setAvailable(true);
}
use of org.jivesoftware.smack.roster.RosterEntry in project Spark by igniterealtime.
the class SubscriptionDialog method addEntry.
/**
* Adds a new entry to the users Roster.
*
* @param jid the jid.
* @param nickname the nickname.
* @param group the contact group.
* @return the new RosterEntry.
*/
public RosterEntry addEntry(String jid, String nickname, String group) {
String[] groups = { group };
Roster roster = Roster.getInstanceFor(SparkManager.getConnection());
RosterEntry userEntry = roster.getEntry(jid);
boolean isSubscribed = true;
if (userEntry != null) {
isSubscribed = userEntry.getGroups().size() == 0;
}
if (isSubscribed) {
try {
roster.createEntry(jid, nickname, new String[] { group });
} catch (XMPPException | SmackException e) {
Log.error("Unable to add new entry " + jid, e);
}
return roster.getEntry(jid);
}
try {
RosterGroup rosterGroup = roster.getGroup(group);
if (rosterGroup == null) {
rosterGroup = roster.createGroup(group);
}
if (userEntry == null) {
roster.createEntry(jid, nickname, groups);
userEntry = roster.getEntry(jid);
} else {
userEntry.setName(nickname);
rosterGroup.addEntry(userEntry);
}
userEntry = roster.getEntry(jid);
} catch (XMPPException | SmackException ex) {
Log.error(ex);
}
return userEntry;
}
use of org.jivesoftware.smack.roster.RosterEntry in project Spark by igniterealtime.
the class RosterDialog method addEntry.
/**
* Adds a new entry to the users Roster.
*
* @param jid the jid.
* @param nickname the nickname.
* @param group the contact group.
* @return the new RosterEntry.
*/
public RosterEntry addEntry(String jid, String nickname, String group) {
String[] groups = { group };
Roster roster = Roster.getInstanceFor(SparkManager.getConnection());
RosterEntry userEntry = roster.getEntry(jid);
boolean isSubscribed = true;
if (userEntry != null) {
isSubscribed = userEntry.getGroups().size() == 0;
}
if (isSubscribed) {
try {
roster.createEntry(jid, nickname, new String[] { group });
} catch (XMPPException | SmackException e) {
Log.error("Unable to add new entry " + jid, e);
}
return roster.getEntry(jid);
}
try {
RosterGroup rosterGroup = roster.getGroup(group);
if (rosterGroup == null) {
rosterGroup = roster.createGroup(group);
}
if (userEntry == null) {
roster.createEntry(jid, nickname, groups);
userEntry = roster.getEntry(jid);
} else {
userEntry.setName(nickname);
rosterGroup.addEntry(userEntry);
}
userEntry = roster.getEntry(jid);
} catch (XMPPException | SmackException ex) {
Log.error(ex);
}
return userEntry;
}
use of org.jivesoftware.smack.roster.RosterEntry in project Spark by igniterealtime.
the class RosterTree method buildFromRoster.
private void buildFromRoster() {
final Roster roster = Roster.getInstanceFor(SparkManager.getConnection());
roster.addRosterListener(new RosterListener() {
public void entriesAdded(Collection<String> addresses) {
}
public void entriesUpdated(Collection<String> addresses) {
}
public void entriesDeleted(Collection<String> addresses) {
}
public void presenceChanged(Presence presence) {
// changePresence(presence.getFrom(), presence.getMode() == Presence.Mode.available);
}
});
for (RosterGroup group : roster.getGroups()) {
final JiveTreeNode groupNode = new JiveTreeNode(group.getName(), true);
groupNode.setAllowsChildren(true);
if (group.getEntryCount() > 0) {
rootNode.add(groupNode);
}
for (RosterEntry entry : group.getEntries()) {
String name = entry.getName();
if (name == null) {
name = entry.getUser();
}
final JiveTreeNode entryNode = new JiveTreeNode(name, false);
final Presence usersPresence = PresenceManager.getPresence(entry.getUser());
addressMap.put(entryNode, entry.getUser());
boolean showUnavailableAgents = true;
if (usersPresence.isAvailable() && !usersPresence.isAway()) {
groupNode.add(entryNode);
} else if (showUnavailableAgents) {
groupNode.add(entryNode);
}
changePresence(entry.getUser(), usersPresence);
final DefaultTreeModel model = (DefaultTreeModel) rosterTree.getModel();
model.nodeStructureChanged(groupNode);
}
}
}
Aggregations