/** * $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.spark.ui; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.TimerTask; import javax.swing.JButton; import javax.swing.JPanel; import org.jivesoftware.resource.SparkRes; import org.jivesoftware.smack.ConnectionListener; import org.jivesoftware.spark.SparkManager; import org.jivesoftware.spark.component.RolloverButton; import org.jivesoftware.spark.util.SwingTimerTask; import org.jivesoftware.spark.util.SwingWorker; import org.jivesoftware.spark.util.TaskEngine; /** * Used for silent reconnecting<br> * Displays a little Icon at first position in commandpanel * * @author wolf.posdorfer * */ public class ReconnectPanelIcon implements ConnectionListener { private static final long serialVersionUID = 437696141257704105L; private RolloverButton _button; private JPanel _commandpanel; private boolean _closedOnError; /** * creates a new Panel * * @param groupName */ public ReconnectPanelIcon() { _commandpanel = SparkManager.getWorkspace().getCommandPanel(); _button = new RolloverButton(SparkRes.getImageIcon(SparkRes.BUSY_IMAGE)); _button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { startReconnecting(); } }); } public JPanel getPanel() { return _commandpanel; } public JButton getButton() { return _button; } /** * Starts the Timer for Icon-reconnection */ public void startReconnecting() { if (!SparkManager.getConnection().isConnected()) { TimerTask task = new SwingTimerTask() { public void doRun() { reconnect(); } }; TaskEngine.getInstance().schedule(task, 100); } SparkManager.getPreferenceManager(); } public void setClosedOnError(boolean onError) { _closedOnError = onError; } /** * Reconnect Thread */ private void reconnect() { try { if (_closedOnError) { SparkManager.getConnection().connect(); } else { SparkManager.getMainWindow().logout(false); } } catch (Exception ex) { ex.printStackTrace(); } } public void setReconnectText(String text) { _button.setToolTipText(text); } public void remove() { SwingWorker worker = new SwingWorker() { @Override public Object construct() { return 42; } @Override public void finished() { _commandpanel.remove(_button); } }; worker.start(); } @Override public void connectionClosed() { } @Override public void connectionClosedOnError(Exception e) { } @Override public void reconnectingIn(int seconds) { } @Override public void reconnectionSuccessful() { } @Override public void reconnectionFailed(Exception e) { } }