workspace.java
来自「开源项目openfire的完整源程序」· Java 代码 · 共 467 行 · 第 1/2 页
JAVA
467 行
/**
* $Revision: $
* $Date: $
*
* Copyright (C) 2006 Jive Software. All rights reserved.
*
* This software is published under the terms of the GNU Lesser Public License (LGPL),
* a copy of which is included in this distribution.
*/
package org.jivesoftware.spark;
import org.jivesoftware.MainWindow;
import org.jivesoftware.MainWindowListener;
import org.jivesoftware.Spark;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.filter.PacketTypeFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.debugger.EnhancedDebuggerWindow;
import org.jivesoftware.smackx.packet.DelayInformation;
import org.jivesoftware.smackx.packet.VCard;
import org.jivesoftware.spark.component.tabbedPane.SparkTabbedPane;
import org.jivesoftware.spark.filetransfer.SparkTransferManager;
import org.jivesoftware.spark.search.SearchManager;
import org.jivesoftware.spark.ui.ChatContainer;
import org.jivesoftware.spark.ui.ChatRoom;
import org.jivesoftware.spark.ui.ChatRoomNotFoundException;
import org.jivesoftware.spark.ui.CommandPanel;
import org.jivesoftware.spark.ui.ContactItem;
import org.jivesoftware.spark.ui.ContactList;
import org.jivesoftware.spark.ui.conferences.ConferenceServices;
import org.jivesoftware.spark.ui.status.StatusBar;
import org.jivesoftware.spark.util.ModelUtil;
import org.jivesoftware.spark.util.TaskEngine;
import org.jivesoftware.spark.util.log.Log;
import org.jivesoftware.sparkimpl.plugin.alerts.BroadcastPlugin;
import org.jivesoftware.sparkimpl.plugin.bookmarks.BookmarkPlugin;
import org.jivesoftware.sparkimpl.plugin.gateways.GatewayPlugin;
import org.jivesoftware.sparkimpl.plugin.manager.Enterprise;
import org.jivesoftware.sparkimpl.plugin.transcripts.ChatTranscriptPlugin;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.util.TimerTask;
import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
/**
* The inner Container for Spark. The Workspace is the container for all plugins into the Spark
* install. Plugins would use this for the following:
* <p/>
* <ul>
* <li>Add own tab to the main tabbed pane. ex.
* <p/>
* <p/>
* Workspace workspace = SparkManager.getWorkspace();
* JButton button = new JButton("HELLO SPARK USERS");
* workspace.getWorkspacePane().addTab("MyPlugin", button);
* </p>
* <p/>
* <li>Retrieve the ContactList.
*/
public class Workspace extends JPanel implements PacketListener {
private SparkTabbedPane workspacePane;
private StatusBar statusBox;
private CommandPanel commandPanel;
private ContactList contactList;
private ConferenceServices conferences;
private ChatTranscriptPlugin transcriptPlugin;
private GatewayPlugin gatewayPlugin;
private BookmarkPlugin bookmarkPlugin;
private BroadcastPlugin broadcastPlugin;
private static Workspace singleton;
private static final Object LOCK = new Object();
private JPanel cardPanel;
private CardLayout cardLayout;
public static final String WORKSPACE_PANE = "WORKSPACE_PANE";
/**
* Returns the singleton instance of <CODE>Workspace</CODE>,
* creating it if necessary.
* <p/>
*
* @return the singleton instance of <Code>Workspace</CODE>
*/
public static Workspace getInstance() {
// Synchronize on LOCK to ensure that we don't end up creating
// two singletons.
synchronized (LOCK) {
if (null == singleton) {
Workspace controller = new Workspace();
singleton = controller;
return controller;
}
}
return singleton;
}
/**
* Creates the instance of the SupportChatWorkspace.
*/
private Workspace() {
final MainWindow mainWindow = SparkManager.getMainWindow();
// Add MainWindow listener
mainWindow.addMainWindowListener(new MainWindowListener() {
public void shutdown() {
final ChatContainer container = SparkManager.getChatManager().getChatContainer();
// Close all Chats.
for (ChatRoom chatRoom : container.getChatRooms()) {
// Leave ChatRoom
container.leaveChatRoom(chatRoom);
}
conferences.shutdown();
gatewayPlugin.shutdown();
bookmarkPlugin.shutdown();
broadcastPlugin.shutdown();
}
public void mainWindowActivated() {
}
public void mainWindowDeactivated() {
}
});
// Initialize workspace pane, defaulting the tabs to the bottom.
workspacePane = new SparkTabbedPane(JTabbedPane.BOTTOM);
workspacePane.setActiveButtonBold(true);
// Add Panels.
cardLayout = new CardLayout();
cardPanel = new JPanel(cardLayout);
cardPanel.setOpaque(false);
cardPanel.add(WORKSPACE_PANE, this);
statusBox = new StatusBar();
commandPanel = new CommandPanel();
// Build default workspace
this.setLayout(new GridBagLayout());
add(workspacePane, new GridBagConstraints(0, 9, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(0, 4, 4, 4), 0, 0));
add(statusBox, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(2, 4, 4, 4), 0, 0));
add(commandPanel, new GridBagConstraints(0, 5, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(2, 4, 0, 4), 0, 0));
this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F12"), "showDebugger");
this.getActionMap().put("showDebugger", new AbstractAction("showDebugger") {
public void actionPerformed(ActionEvent evt) {
EnhancedDebuggerWindow window = EnhancedDebuggerWindow.getInstance();
window.setVisible(true);
}
});
// Set background
setBackground(Color.white);
}
/**
* Builds the Workspace layout.
*/
public void buildLayout() {
new Enterprise();
// Initialize Contact List
contactList = new ContactList();
conferences = new ConferenceServices();
// Init contact list.
contactList.initialize();
// Load VCard information for status box
statusBox.loadVCard();
// Initialise TransferManager
SparkTransferManager.getInstance();
}
/**
* Starts the Loading of all Spark Plugins.
*/
public void loadPlugins() {
// Add presence and message listeners
// we listen for these to force open a 1-1 peer chat window from other operators if
// one isn't already open
PacketFilter workspaceMessageFilter = new PacketTypeFilter(Message.class);
// Add the packetListener to this instance
SparkManager.getSessionManager().getConnection().addPacketListener(this, workspaceMessageFilter);
// Make presence available to anonymous requests, if from anonymous user in the system.
PacketListener workspacePresenceListener = new PacketListener() {
public void processPacket(Packet packet) {
Presence presence = (Presence)packet;
if (presence.getProperty("anonymous") != null) {
boolean isAvailable = statusBox.getPresence().getMode() == Presence.Mode.available;
Presence reply = new Presence(Presence.Type.available);
if (!isAvailable) {
reply.setType(Presence.Type.unavailable);
}
reply.setTo(presence.getFrom());
SparkManager.getSessionManager().getConnection().sendPacket(reply);
}
}
};
SparkManager.getSessionManager().getConnection().addPacketListener(workspacePresenceListener, new PacketTypeFilter(Presence.class));
// Send Available status
final Presence presence = SparkManager.getWorkspace().getStatusBar().getPresence();
SparkManager.getSessionManager().changePresence(presence);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?