/** * $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.sparkplugin.ui.transfer; import org.jivesoftware.spark.plugin.phone.resource.PhoneRes; import org.jivesoftware.sparkplugin.ui.TelephoneTextField; import org.jivesoftware.smack.Roster; import org.jivesoftware.smack.RosterGroup; import org.jivesoftware.spark.SparkManager; import org.jivesoftware.spark.component.RolloverButton; import org.jivesoftware.spark.component.VerticalFlowLayout; import org.jivesoftware.spark.component.panes.CollapsiblePane; import org.jivesoftware.spark.util.ModelUtil; import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; /** * TransferManager is used to transfer a specific call to another user within your Contact List. * * @author Derek DeMoro */ public class TransferManager extends JPanel implements TransferListener { private static final long serialVersionUID = 2830745814617073226L; private TelephoneTextField callField; private RolloverButton callButton; private JDialog dialog; private String dialedNumber; private List<TransferGroupUI> groups = new ArrayList<TransferGroupUI>(); public TransferManager() { setLayout(new GridBagLayout()); setBackground(Color.white); Roster roster = SparkManager.getConnection().getRoster(); callField = new TelephoneTextField(); callButton = new RolloverButton("Transfer", PhoneRes.getImageIcon("TRANSFER_IMAGE")); callButton.setMargin(new Insets(0, 0, 0, 0)); add(callField, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 0), 0, 0)); add(callButton, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(5, 5, 5, 0), 0, 0)); callField.getTextComponent().addCaretListener(new CaretListener() { public void caretUpdate(CaretEvent caretEvent) { callButton.setEnabled(ModelUtil.hasLength(callField.getText()) && callField.isEdited()); callField.validateTextField(); } }); callField.getTextComponent().addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (!callField.isEnabled() || !callField.isEdited() || !ModelUtil.hasLength(callField.getText())) { return; } if (e.getKeyCode() == KeyEvent.VK_ENTER) { transferCall(); } } public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { return; } // Go through groups and sort. :) for (TransferGroupUI group : groups) { group.sort(callField.getText()); } } }); callButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { transferCall(); } }); callButton.setEnabled(false); final JPanel groupsPanel = new JPanel(new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 0, true, false)); groupsPanel.setBackground(Color.white); final List<String> groupNames = new ArrayList<String>(); for (RosterGroup rosterGroup : roster.getGroups()) { groupNames.add(rosterGroup.getName()); } // Sort to add groups alphabetically. Collections.sort(groupNames); for (String groupName : groupNames) { TransferGroupUI group = new TransferGroupUI(groupName); groups.add(group); group.addTransferListener(this); if (group.hasTelephoneContacts()) { CollapsiblePane pane = new CollapsiblePane(groupName); pane.setContentPane(group); groupsPanel.add(pane); } } // Add Scroll Pane to Panel final JScrollPane scrollPane = new JScrollPane(groupsPanel); scrollPane.getVerticalScrollBar().setBlockIncrement(50); scrollPane.getVerticalScrollBar().setUnitIncrement(20); add(scrollPane, new GridBagConstraints(0, 1, 2, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 0), 0, 0)); } /** * Disposes of the modal dialog and places the call. */ private void transferCall() { dialedNumber = callField.getText(); dialog.dispose(); } public void numberSelected(String number) { callField.setText(number); } /** * Displays the transfer dialog. * * @param parent the parent frame. * @return the number selected, if available. Otherwise null is returned. */ public String getNumber(JFrame parent) { dialog = new JDialog(parent, "Transfer Call", true); dialog.setLocationRelativeTo(parent); dialog.getContentPane().setLayout(new BorderLayout()); dialog.getContentPane().add(this, BorderLayout.CENTER); dialog.pack(); dialog.setSize(350, 400); dialog.setVisible(true); return dialedNumber; } }