use of org.jivesoftware.spark.ui.ContactItem in project Spark by igniterealtime.
the class OnlineAgents method init.
public void init() {
if (agentRoster != null) {
return;
}
SwingWorker agentWorker = new SwingWorker() {
Collection<String> agentSet;
public Object construct() {
// Initialize Agent Roster
try {
agentRoster = FastpathPlugin.getAgentSession().getAgentRoster();
agentSet = agentRoster.getAgents();
return agentSet;
} catch (SmackException.NotConnectedException e) {
Log.error("Unable to load agent roster.", e);
return null;
}
}
public void finished() {
final List<String> agentList = new ArrayList<>(agentSet);
Collections.sort(agentList);
for (String agent : agentList) {
String nickname = SparkManager.getUserManager().getUserNicknameFromJID(agent);
if (nickname == null) {
nickname = agent;
}
ContactItem item = new ContactItem(nickname, nickname, agent) {
private static final long serialVersionUID = -8888899031363239813L;
public String getToolTipText() {
Presence agentPresence = agentRoster.getPresence(agent);
return buildTooltip(agentPresence);
}
};
Presence agentPresence = agentRoster.getPresence(agent);
item.setPresence(agentPresence);
}
agentRoster.addListener(new OnlineAgentListener());
}
};
agentWorker.start();
}
use of org.jivesoftware.spark.ui.ContactItem in project Spark by igniterealtime.
the class UserManager method searchContacts.
public void searchContacts(String contact, final JFrame parent) {
if (parents.get(parent) == null && parent.getGlassPane() != null) {
parents.put(parent, parent.getGlassPane());
}
// Make sure we are using the default glass pane
final Component glassPane = parents.get(parent);
parent.setGlassPane(glassPane);
final Map<String, ContactItem> contactMap = new HashMap<>();
final List<ContactItem> contacts = new ArrayList<>();
final ContactList contactList = SparkManager.getWorkspace().getContactList();
for (ContactGroup contactGroup : contactList.getContactGroups()) {
contactGroup.clearSelection();
for (ContactItem contactItem : contactGroup.getContactItems()) {
if (!contactMap.containsKey(contactItem.getJID())) {
contacts.add(contactItem);
contactMap.put(contactItem.getJID(), contactItem);
}
}
}
// Sort
Collections.sort(contacts, itemComparator);
final JContactItemField contactField = new JContactItemField(new ArrayList<>(contacts));
JPanel layoutPanel = new JPanel();
layoutPanel.setLayout(new GridBagLayout());
JLabel enterLabel = new JLabel(Res.getString("label.contact.to.find"));
enterLabel.setFont(new Font("dialog", Font.BOLD, 10));
layoutPanel.add(enterLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 0, 5), 0, 0));
layoutPanel.add(contactField, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 50, 0));
layoutPanel.setBorder(BorderFactory.createBevelBorder(0));
contactField.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent keyEvent) {
if (keyEvent.getKeyChar() == KeyEvent.VK_ENTER) {
if (ModelUtil.hasLength(contactField.getText())) {
ContactItem item = contactMap.get(contactField.getText());
if (item == null) {
item = contactField.getSelectedContactItem();
}
if (item != null) {
parent.setGlassPane(glassPane);
parent.getGlassPane().setVisible(false);
contactField.dispose();
SparkManager.getChatManager().activateChat(item.getJID(), item.getDisplayName());
}
}
} else if (keyEvent.getKeyChar() == KeyEvent.VK_ESCAPE) {
parent.setGlassPane(glassPane);
parent.getGlassPane().setVisible(false);
contactField.dispose();
}
}
});
contactField.getList().addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e)) {
contactField.setSelectetIndex(e);
ContactItem item = contactField.getSelectedContactItem();
MouseEvent exx = new MouseEvent((Component) e.getSource(), e.getID(), e.getWhen(), e.getModifiers(), e.getX() + 20, e.getY(), e.getClickCount(), false);
SparkManager.getContactList().setSelectedUser(item.getJID());
SparkManager.getContactList().showPopup(contactField.getPopup(), exx, item);
}
if (e.getClickCount() == 2) {
if (ModelUtil.hasLength(contactField.getText())) {
ContactItem item = contactMap.get(contactField.getText());
if (item == null) {
item = contactField.getSelectedContactItem();
}
if (item != null) {
parent.setGlassPane(glassPane);
parent.getGlassPane().setVisible(false);
contactField.dispose();
SparkManager.getChatManager().activateChat(item.getJID(), item.getDisplayName());
}
}
}
}
});
final JPanel mainPanel = new JPanel(new BorderLayout());
mainPanel.setLayout(new GridBagLayout());
mainPanel.add(layoutPanel, new GridBagConstraints(0, 0, 1, 1, 0.5, 0.5, GridBagConstraints.NORTH, GridBagConstraints.NONE, new Insets(SparkManager.getMainWindow().getTopToolBar().getHeight() + SparkManager.getWorkspace().getStatusBar().getHeight() + 47, 1, 5, 1), 200, 0));
mainPanel.setOpaque(false);
contactField.setText(contact);
parent.setGlassPane(mainPanel);
parent.getGlassPane().setVisible(true);
contactField.focus();
mainPanel.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent mouseEvent) {
parent.setGlassPane(glassPane);
parent.getGlassPane().setVisible(false);
contactField.dispose();
}
});
parent.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent) {
parent.setGlassPane(glassPane);
parent.getGlassPane().setVisible(false);
contactField.dispose();
parent.removeWindowListener(this);
}
public void windowDeactivated(final WindowEvent windowEvent) {
TimerTask task = new SwingTimerTask() {
public void doRun() {
if (contactField.canClose()) {
windowClosing(windowEvent);
}
}
};
TaskEngine.getInstance().schedule(task, 250);
}
});
}
use of org.jivesoftware.spark.ui.ContactItem in project Spark by igniterealtime.
the class Workspace method handleOfflineMessage.
/**
* Creates a new room if necessary and inserts an offline message.
*
* @param message The Offline message.
*/
private void handleOfflineMessage(Message message) throws SmackException.NotConnectedException {
if (!ModelUtil.hasLength(message.getBody())) {
return;
}
String bareJID = XmppStringUtils.parseBareJid(message.getFrom());
ContactItem contact = contactList.getContactItemByJID(bareJID);
String nickname = XmppStringUtils.parseLocalpart(bareJID);
if (contact != null) {
nickname = contact.getDisplayName();
}
// Create the room if it does not exist.
ChatRoom room = SparkManager.getChatManager().createChatRoom(bareJID, nickname, nickname);
if (!SparkManager.getChatManager().getChatContainer().getChatFrame().isVisible()) {
SparkManager.getChatManager().getChatContainer().getChatFrame().setVisible(true);
}
// Insert offline message
room.getTranscriptWindow().insertMessage(nickname, message, ChatManager.FROM_COLOR);
room.addToTranscript(message, true);
// Send display and notified message back.
SparkManager.getMessageEventManager().sendDeliveredNotification(message.getFrom(), message.getStanzaId());
SparkManager.getMessageEventManager().sendDisplayedNotification(message.getFrom(), message.getStanzaId());
}
use of org.jivesoftware.spark.ui.ContactItem in project Spark by igniterealtime.
the class SparkTransferManager method handleTransferRequest.
private void handleTransferRequest(FileTransferRequest request, ContactList contactList) {
// Check if a listener handled this request
if (fireTransferListeners(request)) {
return;
}
String requestor = request.getRequestor();
String bareJID = XmppStringUtils.parseBareJid(requestor);
String fileName = request.getFileName();
ContactItem contactItem = contactList.getContactItemByJID(bareJID);
ChatRoom chatRoom;
if (contactItem != null) {
chatRoom = SparkManager.getChatManager().createChatRoom(bareJID, contactItem.getDisplayName(), contactItem.getDisplayName());
} else {
chatRoom = SparkManager.getChatManager().createChatRoom(bareJID, bareJID, bareJID);
}
TranscriptWindow transcriptWindow = chatRoom.getTranscriptWindow();
transcriptWindow.insertCustomText(Res.getString("message.file.transfer.chat.window"), true, false, Color.BLACK);
final ReceiveFileTransfer receivingMessageUI = new ReceiveFileTransfer();
receivingMessageUI.acceptFileTransfer(request);
chatRoom.addClosingListener(() -> receivingMessageUI.cancelTransfer());
transcriptWindow.addComponent(receivingMessageUI);
chatRoom.increaseUnreadMessageCount();
chatRoom.scrollToBottom();
String fileTransMsg = contactItem.getDisplayName() + " " + Res.getString("message.file.transfer.short.message") + " " + fileName;
SparkManager.getChatManager().getChatContainer().fireNotifyOnMessage(chatRoom, true, fileTransMsg, Res.getString("message.file.transfer.notification"));
}
use of org.jivesoftware.spark.ui.ContactItem in project Spark by igniterealtime.
the class JContactItemField method showPopupMenu.
private void showPopupMenu() {
model.removeAllElements();
String typedItem = textField.getText();
final List<ContactItem> validItems = new ArrayList<>();
for (ContactItem contactItem : items) {
String nickname = contactItem.getDisplayName().toLowerCase();
if (nickname.startsWith(typedItem.toLowerCase())) {
validItems.add(contactItem);
} else if (typedItem.length() > 2 && nickname.contains(typedItem.toLowerCase())) {
validItems.add(contactItem);
}
}
if (validItems.size() > 0) {
for (final ContactItem label : validItems) {
model.addElement(label);
}
}
if (validItems.size() != 0) {
popup.pack();
if (validItems.size() * 16 <= SparkManager.getContactList().getHeight() - SparkManager.getSearchManager().getSearchServiceUI().getHeight() - 14) {
popup.setSize(textField.getWidth(), validItems.size() * 16 + 5);
} else {
popup.setSize(textField.getWidth(), SparkManager.getContactList().getHeight() - SparkManager.getSearchManager().getSearchServiceUI().getHeight() - 14);
}
Point pt = textField.getLocationOnScreen();
pt.translate(0, textField.getHeight());
popup.setLocation(pt);
popup.toFront();
popup.setVisible(true);
}
// set initial selection
if (validItems.size() > 0) {
list.setSelectedIndex(0);
}
}
Aggregations