pluginviewer.java
来自「开源项目openfire的完整源程序」· Java 代码 · 共 574 行 · 第 1/2 页
JAVA
574 行
/**
* $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.sparkimpl.plugin.viewer;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.protocol.Protocol;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.jivesoftware.resource.Res;
import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.spark.PluginManager;
import org.jivesoftware.spark.SparkManager;
import org.jivesoftware.spark.component.MessageDialog;
import org.jivesoftware.spark.component.VerticalFlowLayout;
import org.jivesoftware.spark.plugin.Plugin;
import org.jivesoftware.spark.plugin.PublicPlugin;
import org.jivesoftware.spark.util.GraphicUtils;
import org.jivesoftware.spark.util.ModelUtil;
import org.jivesoftware.spark.util.SwingWorker;
import org.jivesoftware.spark.util.URLFileSystem;
import org.jivesoftware.spark.util.log.Log;
import org.jivesoftware.sparkimpl.settings.JiveInfo;
import org.jivesoftware.sparkimpl.updater.EasySSLProtocolSocketFactory;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JToolBar;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.Color;
import java.awt.Component;
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.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class PluginViewer extends JPanel implements Plugin {
private JToolBar toolbar = new JToolBar();
private JButton installButton = new JButton();
private JButton uninstallButton = new JButton();
private JTabbedPane tabbedPane = new JTabbedPane();
private boolean loaded = false;
private String retrieveListURL = "http://www.igniterealtime.org/updater/plugins.jsp";
private JProgressBar progressBar;
private PluginViewer viewer;
private final JPanel installedPanel = new JPanel();
private final JPanel availablePanel = new JPanel();
public PluginViewer() {
setLayout(new GridBagLayout());
installedPanel.setLayout(new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 0, true, false));
installedPanel.setBackground(Color.white);
availablePanel.setLayout(new VerticalFlowLayout(VerticalFlowLayout.TOP, 0, 0, true, false));
availablePanel.setBackground(Color.white);
// Add TabbedPane
add(tabbedPane, new GridBagConstraints(0, 1, 2, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
// Add Tabs
tabbedPane.addTab(Res.getString("tab.installed.plugins"), new JScrollPane(installedPanel));
tabbedPane.addTab(Res.getString("tab.available.plugins"), new JScrollPane(availablePanel));
loadInstalledPlugins();
tabbedPane.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent changeEvent) {
if (tabbedPane.getSelectedIndex() == 1) {
if (true) {
loadAvailablePlugins();
loaded = true;
}
}
}
});
}
private void loadInstalledPlugins() {
PluginManager pluginManager = PluginManager.getInstance();
List plugins = pluginManager.getPublicPlugins();
Iterator iter = plugins.iterator();
while (iter.hasNext()) {
PublicPlugin plugin = (PublicPlugin)iter.next();
final SparkPlugUI ui = new SparkPlugUI(plugin);
ui.useLocalIcon();
installedPanel.add(ui);
addSparkPlugUIListener(ui);
}
}
public void initialize() {
// Add Plugins Menu
JMenuBar menuBar = SparkManager.getMainWindow().getJMenuBar();
int count = menuBar.getMenuCount();
// Get last menu which is help
JMenu sparkMenu = menuBar.getMenu(0);
JMenuItem viewPluginsMenu = new JMenuItem();
Action viewAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
invokeViewer();
}
};
viewAction.putValue(Action.NAME, "Plugins");
viewAction.putValue(Action.SMALL_ICON, SparkRes.getImageIcon(SparkRes.PLUGIN_IMAGE));
viewPluginsMenu.setAction(viewAction);
sparkMenu.insert(viewPluginsMenu, 2);
}
private boolean uninstall(PublicPlugin plugin) {
int ok = JOptionPane.showConfirmDialog(installedPanel, Res.getString("message.prompt.plugin.uninstall", plugin.getName()), Res.getString("title.confirmation"), JOptionPane.YES_NO_OPTION);
if (ok == JOptionPane.YES_OPTION) {
// Delete main jar.
File pluginDir = plugin.getPluginDir();
File pluginJAR = new File(plugin.getPluginDir().getParentFile(), pluginDir.getName() + ".jar");
boolean deleted = pluginJAR.delete();
JOptionPane.showMessageDialog(this, Res.getString("message.restart.spark.changes"), Res.getString("title.reminder"), JOptionPane.INFORMATION_MESSAGE);
PluginManager.getInstance().removePublicPlugin(plugin);
return true;
}
return false;
}
private void invokeViewer() {
viewer = new PluginViewer();
MessageDialog.showComponent(Res.getString("title.plugins"), "", null, viewer, SparkManager.getMainWindow(), 600, 600, false);
}
public void shutdown() {
}
public boolean canShutDown() {
return false;
}
private void loadAvailablePlugins() {
availablePanel.removeAll();
availablePanel.invalidate();
availablePanel.validate();
availablePanel.repaint();
JLabel label = new JLabel(Res.getString("message.loading.please.wait"));
availablePanel.add(label);
SwingWorker worker = new SwingWorker() {
Collection pluginList = null;
public Object construct() {
// Prepare HTTP post
final GetMethod post = new GetMethod(retrieveListURL);
// Get HTTP client
Protocol.registerProtocol("https", new Protocol("https", new EasySSLProtocolSocketFactory(), 443));
final HttpClient httpclient = new HttpClient();
String proxyHost = System.getProperty("http.proxyHost");
String proxyPort = System.getProperty("http.proxyPort");
if (ModelUtil.hasLength(proxyHost) && ModelUtil.hasLength(proxyPort)) {
try {
httpclient.getHostConfiguration().setProxy(proxyHost, Integer.parseInt(proxyPort));
}
catch (NumberFormatException e) {
Log.error(e);
}
}
// Execute request
try {
int result = httpclient.executeMethod(post);
if (result != 200) {
return null;
}
pluginList = getPluginList(post.getResponseBodyAsStream());
}
catch (Exception ex) {
}
return "ok";
}
public void finished() {
final PluginManager pluginManager = PluginManager.getInstance();
if (pluginList == null) {
availablePanel.removeAll();
availablePanel.invalidate();
availablePanel.validate();
availablePanel.repaint();
JOptionPane.showMessageDialog(availablePanel, Res.getString("message.plugins.not.available"), Res.getString("title.error"), JOptionPane.ERROR_MESSAGE);
return;
}
Iterator plugs = pluginList.iterator();
availablePanel.removeAll();
while (plugs.hasNext()) {
PublicPlugin plugin = (PublicPlugin)plugs.next();
if (!pluginManager.isInstalled(plugin)) {
SparkPlugUI ui = new SparkPlugUI(plugin);
availablePanel.add(ui);
addSparkPlugUIListener(ui);
}
}
availablePanel.invalidate();
availablePanel.validate();
availablePanel.repaint();
}
};
worker.start();
}
private void downloadPlugin(final PublicPlugin plugin) {
// Prepare HTTP post
final GetMethod post = new GetMethod(plugin.getDownloadURL());
// Get HTTP client
Protocol.registerProtocol("https", new Protocol("https", new EasySSLProtocolSocketFactory(), 443));
final HttpClient httpclient = new HttpClient();
String proxyHost = System.getProperty("http.proxyHost");
String proxyPort = System.getProperty("http.proxyPort");
if (ModelUtil.hasLength(proxyHost) && ModelUtil.hasLength(proxyPort)) {
try {
httpclient.getHostConfiguration().setProxy(proxyHost, Integer.parseInt(proxyPort));
}
catch (NumberFormatException e) {
Log.error(e);
}
}
// Execute request
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?