use of org.jivesoftware.spark.component.JiveTreeNode in project Spark by igniterealtime.
the class RoomBrowser method setupRoomInformationUI.
private void setupRoomInformationUI(String roomJID, final RoomInfo roomInfo, final DiscoverItems items) {
descriptionValue.setText(Res.getString("message.no.description.available"));
subjectValue.setText(Res.getString("message.no.subject.available"));
occupantsValue.setText("n/a");
roomNameValue.setText("n/a");
try {
descriptionValue.setText(roomInfo.getDescription());
subjectValue.setText(roomInfo.getSubject());
if (roomInfo.getOccupantsCount() == -1) {
occupantsValue.setText("n/a");
} else {
occupantsValue.setText(Integer.toString(roomInfo.getOccupantsCount()));
}
roomNameValue.setText(roomInfo.getRoom());
for (DiscoverItems.Item item : items.getItems()) {
String jid = item.getEntityID();
rootNode.add(new JiveTreeNode(jid, false, SparkRes.getImageIcon(SparkRes.SMALL_USER1_INFORMATION)));
}
tree.expandRow(0);
} catch (Exception e) {
Log.error(e);
}
final JOptionPane pane;
// Create the title panel for this dialog
TitlePanel titlePanel = new TitlePanel(Res.getString("title.view.room.information"), Res.getString("message.room.information.for", roomJID), SparkRes.getImageIcon(SparkRes.BLANK_IMAGE), true);
// Construct main panel w/ layout.
final JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
mainPanel.add(titlePanel, BorderLayout.NORTH);
// The user should only be able to close this dialog.
Object[] options = { Res.getString("close") };
pane = new JOptionPane(this, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null, options, options[0]);
mainPanel.add(pane, BorderLayout.CENTER);
final JOptionPane p = new JOptionPane();
final JDialog dlg = p.createDialog(SparkManager.getMainWindow(), Res.getString("title.view.room.information"));
dlg.setModal(false);
dlg.pack();
dlg.setSize(450, 400);
dlg.setResizable(true);
dlg.setContentPane(mainPanel);
dlg.setLocationRelativeTo(SparkManager.getMainWindow());
PropertyChangeListener changeListener = e -> {
String value = (String) pane.getValue();
if (Res.getString("close").equals(value)) {
pane.setValue(JOptionPane.UNINITIALIZED_VALUE);
dlg.dispose();
}
};
pane.addPropertyChangeListener(changeListener);
dlg.setVisible(true);
dlg.toFront();
dlg.requestFocus();
}
use of org.jivesoftware.spark.component.JiveTreeNode in project Spark by igniterealtime.
the class CustomMessages method reloadTree.
private static void reloadTree(JiveTreeNode rootNode, Tree tree) {
StatusBar statusBar = SparkManager.getWorkspace().getStatusBar();
rootNode.removeAllChildren();
Iterator<StatusItem> statusItems = statusBar.getStatusList().iterator();
while (statusItems.hasNext()) {
StatusItem statusItem = statusItems.next();
JiveTreeNode node = new JiveTreeNode(statusItem.getText(), false, statusItem.getIcon());
List<CustomStatusItem> newItems = load();
Iterator<CustomStatusItem> cMessages = newItems.iterator();
node.setAllowsChildren(true);
while (cMessages.hasNext()) {
CustomStatusItem csi = cMessages.next();
if (csi.getType().equals(statusItem.getText())) {
JiveTreeNode subNode = new JiveTreeNode(csi.getStatus(), false);
node.add(subNode);
}
}
rootNode.add(node);
}
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
model.nodeStructureChanged(rootNode);
tree.expandTree();
}
use of org.jivesoftware.spark.component.JiveTreeNode in project Spark by igniterealtime.
the class CustomMessages method editCustomMessages.
public static void editCustomMessages() {
final JiveTreeNode rootNode = new JiveTreeNode(Res.getString("status.custom.messages"));
final Tree tree = new Tree(rootNode);
tree.setCellRenderer(new JiveTreeCellRenderer());
final List<CustomStatusItem> customItems = load();
final StatusBar statusBar = SparkManager.getWorkspace().getStatusBar();
Iterator<StatusItem> statusItems = statusBar.getStatusList().iterator();
while (statusItems.hasNext()) {
StatusItem item = statusItems.next();
JiveTreeNode node = new JiveTreeNode(item.getText(), false, item.getIcon());
Iterator<CustomStatusItem> cMessages = customItems.iterator();
node.setAllowsChildren(true);
while (cMessages.hasNext()) {
CustomStatusItem csi = cMessages.next();
if (csi.getType().equals(item.getText())) {
JiveTreeNode subNode = new JiveTreeNode(csi.getStatus(), false);
node.add(subNode);
}
}
rootNode.add(node);
}
final JScrollPane pane = new JScrollPane(tree);
// The user should only be able to close this dialog.
Object[] options = { Res.getString("close") };
final JOptionPane optionPane = new JOptionPane(pane, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null, options, options[0]);
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
mainPanel.add(optionPane, BorderLayout.CENTER);
final JDialog optionsDialog = new JDialog(SparkManager.getMainWindow(), Res.getString("title.edit.custom.message"), true);
optionsDialog.setContentPane(mainPanel);
optionsDialog.pack();
optionsDialog.setLocationRelativeTo(SparkManager.getMainWindow());
optionPane.addPropertyChangeListener(propertyChangeEvent -> {
String value = (String) optionPane.getValue();
if (Res.getString("close").equals(value)) {
optionsDialog.setVisible(false);
}
});
for (int i = 0; i <= tree.getRowCount(); i++) {
tree.expandPath(tree.getPathForRow(i));
}
tree.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent mouseEvent) {
checkPopup(mouseEvent);
}
public void mouseReleased(MouseEvent mouseEvent) {
checkPopup(mouseEvent);
}
public void checkPopup(MouseEvent event) {
if (!event.isPopupTrigger()) {
return;
}
TreePath path = tree.getPathForLocation(event.getX(), event.getY());
if (path != null) {
tree.setSelectionPath(path);
}
final JiveTreeNode selectedNode = (JiveTreeNode) tree.getLastSelectedPathComponent();
if (selectedNode == null || selectedNode.getParent() == null) {
return;
} else if (selectedNode.getParent() == rootNode) {
JPopupMenu popup = new JPopupMenu();
Action addAction = new AbstractAction() {
private static final long serialVersionUID = 2187174931315380754L;
public void actionPerformed(ActionEvent actionEvent) {
CustomStatus status = new CustomStatus();
String type = (String) selectedNode.getUserObject();
status.invoke(type);
reloadTree(rootNode, tree);
}
};
addAction.putValue(Action.NAME, Res.getString("menuitem.add"));
popup.add(addAction);
popup.show(tree, event.getX(), event.getY());
return;
}
final JiveTreeNode parentNode = (JiveTreeNode) selectedNode.getParent();
final String messageStatus = (String) selectedNode.getUserObject();
final String messageType = (String) parentNode.getUserObject();
if (event.isPopupTrigger()) {
JPopupMenu popup = new JPopupMenu();
Action deleteAction = new AbstractAction() {
private static final long serialVersionUID = -4421868467918912876L;
public void actionPerformed(ActionEvent actionEvent) {
List<CustomStatusItem> list = new ArrayList<>();
// Refresh customItems list
List<CustomStatusItem> customItems = load();
Iterator<CustomStatusItem> iter = customItems.iterator();
while (iter.hasNext()) {
CustomStatusItem item = iter.next();
if (item.getType().equals(messageType) && item.getStatus().equals(messageStatus)) {
} else {
list.add(item);
}
}
parentNode.remove(selectedNode);
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
model.nodeStructureChanged(parentNode);
save(list);
}
};
deleteAction.putValue(Action.NAME, Res.getString("menuitem.delete"));
popup.add(deleteAction);
Action editAction = new AbstractAction() {
private static final long serialVersionUID = 39916149252596354L;
public void actionPerformed(ActionEvent actionEvent) {
List<CustomStatusItem> newItems = load();
Iterator<CustomStatusItem> iter = newItems.iterator();
while (iter.hasNext()) {
CustomStatusItem item = iter.next();
if (item.getType().equals(messageType) && item.getStatus().equals(messageStatus)) {
CustomStatus customStatus = new CustomStatus();
customStatus.showEditDialog(item);
// Reload tree.
reloadTree(rootNode, tree);
break;
}
}
}
};
editAction.putValue(Action.NAME, Res.getString("menuitem.edit"));
popup.add(editAction);
popup.show(tree, event.getX(), event.getY());
}
}
});
optionsDialog.setVisible(true);
optionsDialog.toFront();
optionsDialog.requestFocus();
}
use of org.jivesoftware.spark.component.JiveTreeNode in project Spark by igniterealtime.
the class BookmarksUI method addBookmark.
/**
* Adds a new bookmark to a particular service node.
*
* @param serviceNode the service node.
* @param roomName the name of the room to bookmark.
* @param roomJID the jid of the room.
* @return the new bookmark created.
*/
public JiveTreeNode addBookmark(JiveTreeNode serviceNode, String roomName, String roomJID) {
JiveTreeNode roomNode = new JiveTreeNode(roomName, false, SparkRes.getImageIcon(SparkRes.BOOKMARK_ICON));
roomNode.setAssociatedObject(roomJID);
serviceNode.add(roomNode);
final DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
model.nodeStructureChanged(serviceNode);
return roomNode;
}
use of org.jivesoftware.spark.component.JiveTreeNode in project Spark by igniterealtime.
the class WorkgroupInvitationDialog method hasSelectedAgent.
/**
* Returns the agent selected.
*
* @param chatRoom the room this roster will be used with.
* @param transfer true if this will be a transfer.
* @return true if a valid agent has been selected.
*/
public boolean hasSelectedAgent(ChatRoom chatRoom, boolean transfer) {
final JiveTreeNode workgroupsNode = new JiveTreeNode("Workgroups", true);
final JiveTreeNode queueNode = new JiveTreeNode("Queues", true);
final String workgroupService = "workgroup." + SparkManager.getSessionManager().getServerAddress();
final String jid = SparkManager.getSessionManager().getJID();
String room = chatRoom.getRoomname();
Collection agents = null;
try {
agents = getAvailableAgents(FastpathPlugin.getAgentSession().getAgentRoster(), room);
} catch (SmackException.NotConnectedException e) {
Log.warning("Unable to get agent roster.", e);
}
// Clear jid field
jidField.setText("");
String title = FpRes.getString("invite.agent");
String acceptButton = FpRes.getString("invite");
if (transfer) {
title = FpRes.getString("transfer.to.agent");
acceptButton = FpRes.getString("transfer");
}
String stockMessage = FpRes.getString("message.transfering.to.user");
if (!transfer) {
stockMessage = FpRes.getString("message.join.me.in.chat");
}
rootNode = new JiveTreeNode("Ask For Assistance", true);
tree = new Tree(rootNode);
tree.setCellRenderer(new JiveTreeCellRenderer());
// This will remove lines from the tree and setup initial l&f
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setRowHeight(16);
tree.setExpandsSelectedPaths(true);
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
TreePath path = e.getNewLeadSelectionPath();
Object o = path.getLastPathComponent();
if (o instanceof JiveTreeNode) {
JiveTreeNode node = (JiveTreeNode) o;
JiveTreeNode parentNode = (JiveTreeNode) node.getParent();
if (parentNode == workgroupsNode) {
jidField.setText(node.getUserObject().toString() + "@" + workgroupService);
} else if (parentNode == queueNode) {
jidField.setText(FastpathPlugin.getWorkgroup().getWorkgroupJID() + "/" + node.getUserObject().toString());
} else {
String agent = getAgent();
jidField.setText(agent);
}
}
}
});
// Create message field
messageField = new JTextArea();
messageField.setWrapStyleWord(true);
inviteLabel = new JLabel();
if (transfer) {
inviteLabel.setText(FpRes.getString("transfer.to") + ":");
} else {
inviteLabel.setText(FpRes.getString("invite") + ":");
}
if (transfer) {
// Create the title panel for this dialog
titlePanel = new TitlePanel(FpRes.getString("title.transfer"), FpRes.getString("message.transfer.to.another.agent"), FastpathRes.getImageIcon(FastpathRes.CHATTING_AGENT_IMAGE), true);
} else {
// Create the title panel for this dialog
titlePanel = new TitlePanel(FpRes.getString("title.invitation"), FpRes.getString("message.invite.another.agent"), FastpathRes.getImageIcon(FastpathRes.CHATTING_AGENT_IMAGE), true);
}
// Build Tree
String joinedWorkgroupName = XmppStringUtils.parseLocalpart(FastpathPlugin.getWorkgroup().getWorkgroupJID());
final JiveTreeNode workgroupNode = new JiveTreeNode(joinedWorkgroupName, true);
final Iterator agentIter = agents.iterator();
while (agentIter.hasNext()) {
while (agentIter.hasNext()) {
String agentName = UserManager.unescapeJID((String) agentIter.next());
final JiveTreeNode agentNode = new JiveTreeNode(agentName, false, FastpathRes.getImageIcon(FastpathRes.GREEN_BALL));
workgroupNode.add(agentNode);
}
if (workgroupNode.getChildCount() > 0) {
rootNode.add(workgroupNode);
}
}
Collection workgroupAgents;
try {
workgroupAgents = Agent.getWorkgroups(workgroupService, jid, SparkManager.getConnection());
} catch (XMPPException | SmackException e) {
Log.error(e);
workgroupAgents = Collections.EMPTY_LIST;
}
if (workgroupAgents.size() > 0) {
// Add workgroups to combobox
Iterator<String> workgroups = workgroupAgents.iterator();
while (workgroups.hasNext()) {
String workgroup = workgroups.next();
String workgroupName = XmppStringUtils.parseLocalpart(workgroup);
final JiveTreeNode wgNode = new JiveTreeNode(workgroupName, false, FastpathRes.getImageIcon(FastpathRes.FASTPATH_IMAGE_16x16));
workgroupsNode.add(wgNode);
}
rootNode.add(workgroupsNode);
}
Iterator iter = FastpathPlugin.getAgentSession().getQueues();
while (iter.hasNext()) {
final WorkgroupQueue queue = (WorkgroupQueue) iter.next();
if (queue.getStatus() == WorkgroupQueue.Status.OPEN) {
final JiveTreeNode qNode = new JiveTreeNode(queue.getName(), false, FastpathRes.getImageIcon(FastpathRes.FASTPATH_IMAGE_16x16));
queueNode.add(qNode);
}
}
rootNode.add(queueNode);
// New Roster tree. Do not show agents at all.
final UserManager userManager = SparkManager.getUserManager();
Collection jids = userManager.getUserJidsInRoom(room, false);
roster = new WorkgroupRosterTree(jids, false, workgroups);
try {
rosterTree = roster.getRosterTree();
JiveTreeNode node = (JiveTreeNode) rosterTree.getModel().getRoot();
rootNode.add(node);
} catch (Exception e) {
Log.error("Error checking for selected agent", e);
}
// Construct main panel w/ layout.
final JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
mainPanel.add(titlePanel, BorderLayout.NORTH);
// The user should only be able to close this dialog.
Object[] options = { acceptButton, FpRes.getString("cancel") };
// Create objects to add to mainPanel.
final JPanel parentPanel = new JPanel();
final JLabel messageLabel = new JLabel();
final JLabel agentLabel = new JLabel();
parentPanel.setLayout(new GridBagLayout());
// Update Labels using ResourceUtils
ResourceUtils.resLabel(messageLabel, messageField, FpRes.getString("label.message.to.agent"));
ResourceUtils.resLabel(agentLabel, tree, FpRes.getString("label.select.agent"));
// Add Components to Parent Panel
parentPanel.add(agentLabel, new GridBagConstraints(0, 0, 3, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 0, 5), 0, 0));
parentPanel.add(new JScrollPane(tree), new GridBagConstraints(0, 1, 3, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 100));
parentPanel.add(messageLabel, new GridBagConstraints(0, 3, 3, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 0, 5), 0, 0));
parentPanel.add(new JScrollPane(messageField), new GridBagConstraints(0, 4, 3, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 25));
parentPanel.add(inviteLabel, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
parentPanel.add(jidField, new GridBagConstraints(1, 2, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
// Use line wrap.
messageField.setLineWrap(true);
// Update MessageField with stock message
messageField.setText(stockMessage);
// Add Parent Object to master OptionPane
pane = new JOptionPane(parentPanel, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION, null, options, options[0]);
mainPanel.add(pane, BorderLayout.CENTER);
dlg = new JDialog(SparkManager.getChatManager().getChatContainer().getChatFrame(), title, true);
dlg.pack();
dlg.setSize(500, 500);
dlg.setContentPane(mainPanel);
dlg.setLocationRelativeTo(chatRoom);
pane.addPropertyChangeListener(this);
// expand the tree for displaying
for (int i = 0; i <= tree.getRowCount(); i++) {
tree.expandPath(tree.getPathForRow(i));
}
dlg.setVisible(true);
dlg.toFront();
dlg.requestFocus();
if (!isValid) {
return false;
}
return true;
}
Aggregations