Search in sources :

Example 1 with ReportedData

use of org.jivesoftware.smackx.search.ReportedData in project Spark by igniterealtime.

the class SearchForm method performSearch.

/**
 * Starts a search based on the Answered form.
 */
public void performSearch() {
    searchResults.clearTable();
    SwingWorker worker = new SwingWorker() {

        ReportedData data;

        public Object construct() {
            try {
                Form answerForm = questionForm.getFilledForm();
                data = searchManager.getSearchResults(answerForm, serviceName);
            } catch (XMPPException | SmackException e) {
                Log.error("Unable to load search service.", e);
            }
            return data;
        }

        public void finished() {
            if (data != null) {
                searchResults.showUsersFound(data);
                searchResults.invalidate();
                searchResults.validate();
                searchResults.repaint();
            } else {
                UIManager.put("OptionPane.okButtonText", Res.getString("ok"));
                JOptionPane.showMessageDialog(searchResults, Res.getString("message.no.results.found"), Res.getString("title.notification"), JOptionPane.ERROR_MESSAGE);
            }
        }
    };
    worker.start();
}
Also used : Form(org.jivesoftware.smackx.xdata.Form) SmackException(org.jivesoftware.smack.SmackException) SwingWorker(org.jivesoftware.spark.util.SwingWorker) XMPPException(org.jivesoftware.smack.XMPPException) ReportedData(org.jivesoftware.smackx.search.ReportedData)

Example 2 with ReportedData

use of org.jivesoftware.smackx.search.ReportedData in project Spark by igniterealtime.

the class ChatSearch method search.

public void search(String query) {
    final List<ChatSearchResult> results = new ArrayList<ChatSearchResult>();
    AgentSession agentSession = FastpathPlugin.getAgentSession();
    try {
        Form form = agentSession.getTranscriptSearchForm();
        Form filledForm = form.createAnswerForm();
        filledForm.setAnswer("queryString", query);
        // Define Workgroups
        final List<String> workgroups = new ArrayList<String>();
        workgroups.add(FastpathPlugin.getWorkgroup().getWorkgroupJID());
        filledForm.setAnswer("workgroups", workgroups);
        ReportedData reportedData = null;
        try {
            reportedData = agentSession.searchTranscripts(filledForm);
            for (final ReportedData.Row row : reportedData.getRows()) {
                ChatSearchResult result = new ChatSearchResult(row, query);
                results.add(result);
            }
        } catch (XMPPException | SmackException e) {
            Log.error(e);
        }
        Collections.sort(results, dateComporator);
        DefaultListModel model = new DefaultListModel();
        final JList list = new JList(model);
        list.setCellRenderer(new HistoryItemRenderer());
        Iterator<ChatSearchResult> iter = results.iterator();
        while (iter.hasNext()) {
            ChatSearchResult result = iter.next();
            String person = result.getUsername();
            String question = result.getQuestion();
            String sessionID = result.getSessionID();
            Date date = result.getStartDate();
            final SearchItem item = new SearchItem(person, date, question);
            item.setSessionID(sessionID);
            model.addElement(item);
        }
        list.addMouseListener(new MouseAdapter() {

            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) {
                    SearchItem item = (SearchItem) list.getSelectedValue();
                    Transcript transcript = null;
                    try {
                        transcript = FastpathPlugin.getAgentSession().getTranscript(item.getSessionID());
                    } catch (XMPPException | SmackException ee) {
                        Log.error("Error showing transcripts.", ee);
                    }
                    if (transcript == null) {
                        return;
                    }
                    ChatViewer chatViewer = new ChatViewer(transcript);
                    final JFrame frame = new JFrame(FpRes.getString("title.chat.transcript"));
                    frame.setIconImage(SparkManager.getMainWindow().getIconImage());
                    frame.getContentPane().setLayout(new BorderLayout());
                    frame.getContentPane().add(chatViewer, BorderLayout.CENTER);
                    frame.pack();
                    frame.setSize(600, 400);
                    frame.setLocationRelativeTo(SparkManager.getMainWindow());
                    frame.setVisible(true);
                }
            }
        });
        JScrollPane scrollPane = new JScrollPane(list);
        scrollPane.getViewport().setBackground(Color.white);
        JFrame frame = new JFrame(FpRes.getString("title.search.results"));
        frame.setIconImage(SparkManager.getMainWindow().getIconImage());
        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
        final BackgroundPane titlePane = new BackgroundPane() {

            private static final long serialVersionUID = -5603280927139789177L;

            public Dimension getPreferredSize() {
                final Dimension size = super.getPreferredSize();
                size.width = 0;
                return size;
            }
        };
        titlePane.setLayout(new GridBagLayout());
        titlePane.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.LIGHT_GRAY));
        JLabel userImage = new JLabel(FastpathRes.getImageIcon(FastpathRes.FASTPATH_IMAGE_24x24));
        userImage.setHorizontalAlignment(JLabel.LEFT);
        userImage.setText(FpRes.getString("title.chat.transcripts.search"));
        titlePane.add(userImage, new GridBagConstraints(0, 0, 4, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
        userImage.setFont(new Font("Dialog", Font.BOLD, 12));
        JLabel itemsFound = new JLabel(Integer.toString(results.size()));
        titlePane.add(new JLabel(FpRes.getString("title.number.of.conversations.found")), new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
        titlePane.add(itemsFound, new GridBagConstraints(1, 1, 3, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
        JLabel searchTerm = new JLabel(FpRes.getString("query") + ": " + query);
        titlePane.add(searchTerm, new GridBagConstraints(0, 2, 4, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 5, 5), 0, 0));
        frame.getContentPane().add(titlePane, BorderLayout.NORTH);
        frame.pack();
        frame.setSize(400, 400);
        GraphicUtils.centerWindowOnScreen(frame);
        frame.setVisible(true);
    } catch (XMPPException | SmackException e) {
        Log.error(e);
    }
}
Also used : GridBagConstraints(java.awt.GridBagConstraints) Insets(java.awt.Insets) GridBagLayout(java.awt.GridBagLayout) Form(org.jivesoftware.smackx.xdata.Form) ArrayList(java.util.ArrayList) ChatViewer(org.jivesoftware.fastpath.workspace.panes.ChatViewer) DefaultListModel(javax.swing.DefaultListModel) BackgroundPane(org.jivesoftware.fastpath.workspace.panes.BackgroundPane) Font(java.awt.Font) BorderLayout(java.awt.BorderLayout) JFrame(javax.swing.JFrame) AgentSession(org.jivesoftware.smackx.workgroup.agent.AgentSession) JScrollPane(javax.swing.JScrollPane) Transcript(org.jivesoftware.smackx.workgroup.packet.Transcript) MouseEvent(java.awt.event.MouseEvent) SmackException(org.jivesoftware.smack.SmackException) MouseAdapter(java.awt.event.MouseAdapter) JLabel(javax.swing.JLabel) Dimension(java.awt.Dimension) Date(java.util.Date) HistoryItemRenderer(org.jivesoftware.fastpath.workspace.panes.HistoryItemRenderer) XMPPException(org.jivesoftware.smack.XMPPException) JList(javax.swing.JList) ReportedData(org.jivesoftware.smackx.search.ReportedData)

Example 3 with ReportedData

use of org.jivesoftware.smackx.search.ReportedData in project Spark by igniterealtime.

the class RosterDialog method searchForContact.

/**
 * Creates a Popupdialog above the Search Button displaying matching
 * Contacts
 *
 * @param byname
 *            , the Searchname, atleast 5 Chars long
 * @param event
 *            , the MouseEvent which triggered it
 * @throws XMPPException
 */
public void searchForContact(String byname, MouseEvent event) throws XMPPException, SmackException.NotConnectedException, SmackException.NoResponseException {
    UIManager.put("OptionPane.okButtonText", Res.getString("ok"));
    if (byname.contains("@")) {
        byname = byname.substring(0, byname.indexOf("@"));
    }
    if (byname.length() <= 1) {
        JOptionPane.showMessageDialog(jidField, Res.getString("message.search.input.short"), Res.getString("title.notification"), JOptionPane.ERROR_MESSAGE);
    } else {
        JPopupMenu popup = new JPopupMenu();
        JMenuItem header = new JMenuItem(Res.getString("group.search.results") + ":");
        header.setBackground(UIManager.getColor("List.selectionBackground"));
        header.setForeground(Color.red);
        popup.add(header);
        for (String search : _usersearchservice) {
            ReportedData data;
            UserSearchManager usersearchManager = new UserSearchManager(SparkManager.getConnection());
            Form f = usersearchManager.getSearchForm(search);
            Form answer = f.createAnswerForm();
            answer.setAnswer("Name", true);
            answer.setAnswer("Email", true);
            answer.setAnswer("Username", true);
            answer.setAnswer("search", byname);
            data = usersearchManager.getSearchResults(answer, search);
            ArrayList<String> columnnames = new ArrayList<>();
            for (ReportedData.Column column : data.getColumns()) {
                String label = column.getLabel();
                columnnames.add(label);
            }
            for (ReportedData.Row row : data.getRows()) {
                if (!row.getValues(columnnames.get(0)).isEmpty()) {
                    String s = row.getValues(columnnames.get(0)).get(0);
                    final JMenuItem item = new JMenuItem(s);
                    popup.add(item);
                    item.addActionListener(e -> {
                        jidField.setText(item.getText());
                        nicknameField.setText(XmppStringUtils.parseLocalpart(item.getText()));
                    });
                }
            }
        }
        if (popup.getComponentCount() > 2) {
            popup.setVisible(true);
            popup.show(_searchForName, event.getX(), event.getY());
        } else if (popup.getComponentCount() == 2) {
            jidField.setText(((JMenuItem) popup.getComponent(1)).getText());
            nicknameField.setText(XmppStringUtils.parseLocalpart(((JMenuItem) popup.getComponent(1)).getText()));
        } else {
            JOptionPane.showMessageDialog(jidField, Res.getString("message.no.results.found"), Res.getString("title.notification"), JOptionPane.ERROR_MESSAGE);
        }
    }
}
Also used : Form(org.jivesoftware.smackx.xdata.Form) UserSearchManager(org.jivesoftware.smackx.search.UserSearchManager) ArrayList(java.util.ArrayList) JMenuItem(javax.swing.JMenuItem) JPopupMenu(javax.swing.JPopupMenu) ReportedData(org.jivesoftware.smackx.search.ReportedData)

Aggregations

ReportedData (org.jivesoftware.smackx.search.ReportedData)3 Form (org.jivesoftware.smackx.xdata.Form)3 ArrayList (java.util.ArrayList)2 SmackException (org.jivesoftware.smack.SmackException)2 XMPPException (org.jivesoftware.smack.XMPPException)2 BorderLayout (java.awt.BorderLayout)1 Dimension (java.awt.Dimension)1 Font (java.awt.Font)1 GridBagConstraints (java.awt.GridBagConstraints)1 GridBagLayout (java.awt.GridBagLayout)1 Insets (java.awt.Insets)1 MouseAdapter (java.awt.event.MouseAdapter)1 MouseEvent (java.awt.event.MouseEvent)1 Date (java.util.Date)1 DefaultListModel (javax.swing.DefaultListModel)1 JFrame (javax.swing.JFrame)1 JLabel (javax.swing.JLabel)1 JList (javax.swing.JList)1 JMenuItem (javax.swing.JMenuItem)1 JPopupMenu (javax.swing.JPopupMenu)1