/** * $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.Color; import java.awt.FlowLayout; 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.Date; import java.util.Iterator; import java.util.Map; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import org.jivesoftware.fastpath.FastpathPlugin; import org.jivesoftware.fastpath.FpRes; import org.jivesoftware.fastpath.resources.FastpathRes; import org.jivesoftware.fastpath.workspace.assistants.RoomInformation; import org.jivesoftware.fastpath.workspace.util.RequestUtils; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smackx.Form; import org.jivesoftware.smackx.FormField; import org.jivesoftware.smackx.workgroup.agent.Offer; import org.jivesoftware.spark.component.LinkLabel; import org.jivesoftware.spark.component.RolloverButton; import org.jivesoftware.spark.component.WrappedLabel; import org.jivesoftware.spark.util.ModelUtil; import org.jivesoftware.spark.util.ResourceUtils; import org.jivesoftware.spark.util.SwingWorker; import org.jivesoftware.spark.util.log.Log; public class ChatQueue extends JPanel { private static final long serialVersionUID = 1L; private JLabel nameLabel = new JLabel(); private RolloverButton acceptButton; private RolloverButton declineButton; private LinkLabel viewLabel; private Offer offer; private JProgressBar progressBar; public ChatQueue() { setLayout(new GridBagLayout()); setBackground(Color.white); acceptButton = new RolloverButton(FastpathRes.getImageIcon(FastpathRes.CIRCLE_CHECK_IMAGE)); declineButton = new RolloverButton(FastpathRes.getImageIcon(FastpathRes.SMALL_DELETE)); ResourceUtils.resButton(acceptButton, FpRes.getString("button.accept")); ResourceUtils.resButton(declineButton, FpRes.getString("button.reject")); progressBar = new JProgressBar(); progressBar.setFont(new Font("Dialog", Font.BOLD, 11)); final JPanel topPanel = new JPanel(); topPanel.setBackground(Color.white); topPanel.setLayout(new GridBagLayout()); topPanel.add(nameLabel, new GridBagConstraints(0, 0, 3, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0)); nameLabel.setFont(new Font("Dialog", Font.BOLD, 12)); add(topPanel, new GridBagConstraints(0, 0, 3, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); } private void showInformation() { if (offer == null) { return; } Map metadata = offer.getMetaData(); RoomInformation roomInformation = new RoomInformation(); roomInformation.showAllInformation(metadata); roomInformation.showRoomInformation(); } public void offerRecieved(Offer offer) { this.offer = offer; // Retrieve workgroup form Form form; try { form = FastpathPlugin.getWorkgroup().getWorkgroupForm(); } catch (XMPPException e) { Log.error("Unable to retrieve Workgroup form.", e); return; } final RequestUtils utils = new RequestUtils(offer.getMetaData()); nameLabel.setText(FpRes.getString("message.incoming.chat.request", utils.getUsername())); nameLabel.setIcon(FastpathRes.getImageIcon(FastpathRes.FASTPATH_IMAGE_16x16)); Color linkColor = new Color(69, 92, 137); int count = 1; Iterator fields = form.getFields(); while (fields.hasNext()) { FormField field = (FormField)fields.next(); String variable = field.getVariable(); String label = field.getLabel(); if (label != null) { final JLabel nameLabel = new JLabel(label); nameLabel.setFont(new Font("Dialog", Font.BOLD, 11)); String value = utils.getValue(variable); if (value == null) { value = ""; } final WrappedLabel valueLabel = new WrappedLabel(); valueLabel.setBackground(Color.white); valueLabel.setText(value); add(nameLabel, new GridBagConstraints(0, count, 1, 1, 0.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0)); add(valueLabel, new GridBagConstraints(1, count, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0)); count++; } } add(progressBar, new GridBagConstraints(0, count, 3, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(15, 5, 5, 5), 0, 0)); count++; viewLabel = new LinkLabel(FpRes.getString("message.view.more.information"), null, linkColor, Color.red); add(viewLabel, new GridBagConstraints(0, count, 1, 1, 0.0, 1.0, GridBagConstraints.SOUTH, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0)); final JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); buttonPanel.setOpaque(false); buttonPanel.add(acceptButton); buttonPanel.add(declineButton); add(buttonPanel, new GridBagConstraints(1, count, 2, 1, 1.0, 1.0, GridBagConstraints.SOUTH, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0)); viewLabel.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { showInformation(); } }); final Date endTime = offer.getExpiresDate(); Date now = new Date(); long mill = endTime.getTime() - now.getTime(); int seconds = (int)(mill / 1000); progressBar.setMaximum(seconds); progressBar.setValue(seconds); SwingWorker worker = new SwingWorker() { public Object construct() { while (true) { Date now = new Date(); if (now.getTime() >= endTime.getTime()) { break; } try { Thread.sleep(1000); } catch (InterruptedException e) { Log.error(e); } progressBar.setValue(progressBar.getValue() - 1); progressBar.setStringPainted(true); int seconds = (int)(endTime.getTime() - now.getTime()) / 1000; if (seconds <= 60) { String timeString = seconds + " " + FpRes.getString("seconds"); progressBar.setString(timeString); } else { long difference = endTime.getTime() - now.getTime(); String timeString = ModelUtil.getTimeFromLong(difference); progressBar.setString(timeString); } } return progressBar; } }; worker.start(); } public RolloverButton getAcceptButton() { return acceptButton; } public RolloverButton getDeclineButton() { return declineButton; } public Offer getOffer() { return offer; } }