/spark/src/plugins/fastpath/src/java/org/jivesoftware/fastpath/workspace/panes/ChatHistory.java
Java | 236 lines | 166 code | 44 blank | 26 comment | 12 complexity | 7b034bd2c251432cb92670bab83cbcfe MD5 | raw file
- /**
- * $RCSfile: ,v $
- * $Revision: $
- * $Date: $
- *
- * Copyright (C) 2004-2011 Jive Software. All rights reserved.
- *
- * 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.jivesoftware.fastpath.workspace.panes;
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.Font;
- import java.awt.GridBagConstraints;
- import java.awt.GridBagLayout;
- import java.awt.Insets;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.util.Collection;
- import java.util.Date;
- import java.util.Iterator;
- import javax.swing.BorderFactory;
- import javax.swing.DefaultListModel;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JList;
- import javax.swing.JOptionPane;
- import javax.swing.JPanel;
- import javax.swing.JScrollPane;
- import org.jivesoftware.fastpath.FastpathPlugin;
- import org.jivesoftware.fastpath.FpRes;
- import org.jivesoftware.fastpath.resources.FastpathRes;
- import org.jivesoftware.smack.XMPPException;
- import org.jivesoftware.smack.util.StringUtils;
- import org.jivesoftware.smackx.workgroup.agent.AgentSession;
- import org.jivesoftware.smackx.workgroup.ext.history.AgentChatHistory;
- import org.jivesoftware.smackx.workgroup.ext.history.AgentChatSession;
- import org.jivesoftware.smackx.workgroup.packet.Transcript;
- import org.jivesoftware.spark.SparkManager;
- import org.jivesoftware.spark.util.ModelUtil;
- import org.jivesoftware.spark.util.log.Log;
- public class ChatHistory extends JPanel {
- private static final long serialVersionUID = 1L;
- private DefaultListModel model = new DefaultListModel();
- private AgentSession agentSession;
- private JList list;
- private JFrame mainFrame;
- private JFrame frame;
- public ChatHistory() {
- list = new JList(model);
- list.setCellRenderer(new HistoryItemRenderer());
- final JPanel mainPanel = new JPanel();
- mainPanel.setLayout(new BorderLayout());
- mainPanel.setBackground(Color.white);
- final BackgroundPane titlePane = new BackgroundPane() {
- 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();
- userImage.setHorizontalAlignment(JLabel.LEFT);
- userImage.setText(FpRes.getString("title.previous.chats"));
- userImage.setIcon(FastpathRes.getImageIcon(FastpathRes.FASTPATH_IMAGE_24x24));
- 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));
- mainPanel.add(titlePane, BorderLayout.NORTH);
- mainPanel.add(list, BorderLayout.CENTER);
- setLayout(new BorderLayout());
- add(mainPanel, BorderLayout.CENTER);
- init();
- list.addMouseListener(new MouseAdapter() {
- public void mouseClicked(MouseEvent e) {
- if (e.getClickCount() == 2) {
- HistoryItem historyItem = (HistoryItem)list.getSelectedValue();
- showTranscript(historyItem.getSessionID());
- }
- }
- });
- }
- public void showDialog() {
- AgentSession agentSession = FastpathPlugin.getAgentSession();
- String workgroupName = StringUtils.parseName(agentSession.getWorkgroupJID());
- if (mainFrame == null) {
- mainFrame = new JFrame(FpRes.getString("title.personal.chats"));
- }
- if (mainFrame.isVisible()) {
- return;
- }
- mainFrame.setIconImage(SparkManager.getMainWindow().getIconImage());
- mainFrame.getContentPane().setLayout(new BorderLayout());
- final JScrollPane scrollPane = new JScrollPane(this);
- scrollPane.getVerticalScrollBar().setBlockIncrement(50);
- scrollPane.getVerticalScrollBar().setUnitIncrement(20);
- mainFrame.getContentPane().add(scrollPane);
- mainFrame.pack();
- mainFrame.setSize(400, 400);
- mainFrame.setLocationRelativeTo(SparkManager.getMainWindow());
- mainFrame.setVisible(true);
- }
- public void init() {
- model.removeAllElements();
- AgentChatHistory history = null;
- agentSession = FastpathPlugin.getAgentSession();
- String jid = SparkManager.getSessionManager().getBareAddress();
- try {
- history = agentSession.getAgentHistory(jid, 10, null);
- }
- catch (XMPPException e1) {
- Log.error("Error retrieving chat history.", e1);
- }
- try {
- model.removeAllElements();
- Collection sessions = history.getAgentChatSessions();
- Iterator iter = sessions.iterator();
- while (iter.hasNext()) {
- AgentChatSession chatSession = (AgentChatSession)iter.next();
- // Then were in a group chat
- final String nickname = chatSession.getVisitorsName();
- String email = chatSession.getVisitorsEmail();
- String sessionID = chatSession.getSessionID();
- String duration = ModelUtil.getTimeFromLong(chatSession.getDuration());
- String question = chatSession.getQuestion();
- if (!ModelUtil.hasLength(question)) {
- question = "No question was asked.";
- }
- Date startDate = chatSession.getStartDate();
- HistoryItem historyItem = new HistoryItem(nickname, startDate, email, question, duration);
- historyItem.setSessionID(sessionID);
- model.addElement(historyItem);
- }
- list.validate();
- list.repaint();
- }
- catch (Exception e1) {
- Log.error("Error retrieving chat history.", e1);
- }
- }
- private void showTranscript(String sessionID) {
- if (frame == null) {
- frame = new JFrame(FpRes.getString("title.chat.transcript"));
- frame.setIconImage(SparkManager.getMainWindow().getIconImage());
- }
- if (frame.isVisible()) {
- return;
- }
- Transcript transcript = null;
- try {
- transcript = FastpathPlugin.getAgentSession().getTranscript(sessionID);
- }
- catch (XMPPException e) {
- Log.error("Error showing transcripts.", e);
- }
- if (transcript == null) {
- JOptionPane.showMessageDialog(this, FpRes.getString("message.transcript.not.found.error"), FpRes.getString("title.error"), JOptionPane.ERROR_MESSAGE);
- return;
- }
- final ChatViewer chatViewer = new ChatViewer(transcript);
- frame.getContentPane().removeAll();
- frame.getContentPane().setLayout(new BorderLayout());
- frame.getContentPane().add(chatViewer, BorderLayout.CENTER);
- frame.pack();
- frame.setSize(600, 400);
- frame.setLocationRelativeTo(mainFrame);
- frame.setVisible(true);
- }
- /**
- * Lets make sure that the panel doesn't stretch past the
- * scrollpane view pane.
- *
- * @return the preferred dimension
- */
- public Dimension getPreferredSize() {
- final Dimension size = super.getPreferredSize();
- size.width = 0;
- return size;
- }
- }