pluginviewer.java.svn-base
来自「开源项目openfire的完整源程序」· SVN-BASE 代码 · 共 574 行 · 第 1/2 页
SVN-BASE
574 行
try {
int result = httpclient.executeMethod(post);
if (result != 200) {
return;
}
long length = post.getResponseContentLength();
int contentLength = (int)length;
progressBar = new JProgressBar(0, contentLength);
final JFrame frame = new JFrame(Res.getString("message.downloading", plugin.getName()));
frame.setIconImage(SparkRes.getImageIcon(SparkRes.SMALL_MESSAGE_IMAGE).getImage());
final Thread thread = new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(2000);
InputStream stream = post.getResponseBodyAsStream();
URL url = new URL(plugin.getDownloadURL());
String name = URLFileSystem.getFileName(url);
String directoryName = URLFileSystem.getName(url);
File pluginDownload = new File(PluginManager.PLUGINS_DIRECTORY, name);
FileOutputStream out = new FileOutputStream(pluginDownload);
copy(stream, out);
out.close();
frame.dispose();
// Remove SparkPlugUI
// Clear all selections
Component[] comps = availablePanel.getComponents();
for (int i = 0; i < comps.length; i++) {
Component comp = comps[i];
if (comp instanceof SparkPlugUI) {
SparkPlugUI sparkPlug = (SparkPlugUI)comp;
if (sparkPlug.getPlugin().getDownloadURL().equals(plugin.getDownloadURL())) {
availablePanel.remove(sparkPlug);
PluginManager.getInstance().addPlugin(sparkPlug.getPlugin());
sparkPlug.showOperationButton();
installedPanel.add(sparkPlug);
sparkPlug.getPlugin().setPluginDir(new File(PluginManager.PLUGINS_DIRECTORY, directoryName));
installedPanel.invalidate();
installedPanel.repaint();
availablePanel.invalidate();
availablePanel.invalidate();
availablePanel.validate();
availablePanel.repaint();
}
}
}
}
catch (Exception ex) {
}
finally {
// Release current connection to the connection pool once you are done
post.releaseConnection();
}
}
});
frame.getContentPane().setLayout(new GridBagLayout());
frame.getContentPane().add(new JLabel(Res.getString("message.downloading.spark.plug")), new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
frame.getContentPane().add(progressBar, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
frame.pack();
frame.setSize(400, 100);
GraphicUtils.centerWindowOnComponent(frame, this);
frame.setVisible(true);
thread.start();
}
catch (IOException e) {
Log.error(e);
}
}
public Collection getPluginList(InputStream response) {
final List pluginList = new ArrayList();
SAXReader saxReader = new SAXReader();
Document pluginXML = null;
try {
pluginXML = saxReader.read(response);
}
catch (DocumentException e) {
Log.error(e);
}
List plugins = pluginXML.selectNodes("/plugins/plugin");
Iterator iter = plugins.iterator();
while (iter.hasNext()) {
PublicPlugin publicPlugin = new PublicPlugin();
String clazz = null;
String name = null;
try {
Element plugin = (Element)iter.next();
try {
String version = plugin.selectSingleNode("minSparkVersion").getText();
if (!isGreaterOrEqual(JiveInfo.getVersion(), version)){
Log.error("Unable to load plugin " + name + " due to min version incompatibility.");
continue;
}
}
catch (Exception e) {
Log.error("Unable to load plugin " + name + " due to no minSparkVersion.");
continue;
}
name = plugin.selectSingleNode("name").getText();
clazz = plugin.selectSingleNode("class").getText();
publicPlugin.setPluginClass(clazz);
publicPlugin.setName(name);
try {
String version = plugin.selectSingleNode("version").getText();
publicPlugin.setVersion(version);
String author = plugin.selectSingleNode("author").getText();
publicPlugin.setAuthor(author);
Node emailNode = plugin.selectSingleNode("email");
if (emailNode != null) {
publicPlugin.setEmail(emailNode.getText());
}
Node descriptionNode = plugin.selectSingleNode("description");
if (descriptionNode != null) {
publicPlugin.setDescription(descriptionNode.getText());
}
Node homePageNode = plugin.selectSingleNode("homePage");
if (homePageNode != null) {
publicPlugin.setHomePage(homePageNode.getText());
}
Node downloadNode = plugin.selectSingleNode("downloadURL");
if (downloadNode != null) {
String downloadURL = downloadNode.getText();
publicPlugin.setDownloadURL(downloadURL);
}
Node changeLog = plugin.selectSingleNode("changeLog");
if (changeLog != null) {
publicPlugin.setChangeLogAvailable(true);
}
Node readMe = plugin.selectSingleNode("readme");
if (readMe != null) {
publicPlugin.setReadMeAvailable(true);
}
Node smallIcon = plugin.selectSingleNode("smallIcon");
if (smallIcon != null) {
publicPlugin.setSmallIconAvailable(true);
}
Node largeIcon = plugin.selectSingleNode("largeIcon");
if (largeIcon != null) {
publicPlugin.setLargeIconAvailable(true);
}
}
catch (Exception e) {
System.out.println("We can ignore these.");
}
pluginList.add(publicPlugin);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
return pluginList;
}
/**
* Common code for copy routines. By convention, the streams are
* closed in the same method in which they were opened. Thus,
* this method does not close the streams when the copying is done.
*/
private void copy(final InputStream in, final OutputStream out) {
int read = 0;
while (true) {
try {
try {
Thread.sleep(10);
}
catch (InterruptedException e) {
Log.error(e);
}
final byte[] buffer = new byte[4096];
int bytesRead = in.read(buffer);
if (bytesRead < 0) {
break;
}
out.write(buffer, 0, bytesRead);
read += bytesRead;
progressBar.setValue(read);
}
catch (IOException e) {
Log.error(e);
}
}
}
private void addSparkPlugUIListener(final SparkPlugUI ui) {
ui.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent mouseEvent) {
// Clear all selections
Component[] comps = installedPanel.getComponents();
for (int i = 0; i < comps.length; i++) {
Component comp = (Component)comps[i];
if (comp instanceof SparkPlugUI) {
SparkPlugUI sparkPlug = (SparkPlugUI)comp;
sparkPlug.setSelected(false);
}
}
// Clear all selections
comps = availablePanel.getComponents();
for (int i = 0; i < comps.length; i++) {
Component comp = comps[i];
if (comp instanceof SparkPlugUI) {
SparkPlugUI sparkPlug = (SparkPlugUI)comp;
sparkPlug.setSelected(false);
}
}
ui.setSelected(true);
final PluginManager pluginManager = PluginManager.getInstance();
ui.getInstallButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
boolean isInstalled = pluginManager.isInstalled(ui.getPlugin());
if (isInstalled) {
boolean uninstalled = uninstall(ui.getPlugin());
if (uninstalled) {
installedPanel.remove(ui);
installedPanel.invalidate();
installedPanel.repaint();
return;
}
}
else {
downloadPlugin(ui.getPlugin());
}
}
});
}
});
}
public void uninstall() {
// Do nothing.
}
/**
* Returns true if the first version number is greater than the second.
*
* @param firstVersion the first version number.
* @param secondVersion the second version number.
* @return returns true if the first version is greater than the second.
*/
public boolean isGreaterOrEqual(String firstVersion, String secondVersion) {
return firstVersion.compareTo(secondVersion) >= 0;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?