From 1987927759d80c828bead3bf708b7b03a4c59c91 Mon Sep 17 00:00:00 2001 From: vito Date: Sun, 17 Apr 2016 02:04:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=95=86=E5=BA=97=E7=9A=84?= =?UTF-8?q?=E4=B8=80=E4=BA=9Bjava=E6=95=B0=E6=8D=AEAPI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/extra/PluginTask.java | 15 ++- .../src/com/fr/design/extra/exe/Command.java | 4 +- .../extra/exe/InstallFromDiskExecutor.java | 15 +-- .../extra/exe/InstallOnlineExecutor.java | 14 +-- .../extra/exe/ModifyStatusExecutor.java | 3 +- .../design/extra/exe/UninstallExecutor.java | 3 +- .../extra/exe/UpdateFromDiskExecutor.java | 3 +- .../extra/exe/UpdateOnlineExecutor.java | 95 +++++++++++++++++-- 8 files changed, 128 insertions(+), 24 deletions(-) diff --git a/designer_base/src/com/fr/design/extra/PluginTask.java b/designer_base/src/com/fr/design/extra/PluginTask.java index e67f4e426..a86e088b3 100644 --- a/designer_base/src/com/fr/design/extra/PluginTask.java +++ b/designer_base/src/com/fr/design/extra/PluginTask.java @@ -2,6 +2,7 @@ package com.fr.design.extra; import com.fr.design.extra.exe.Executor; import com.fr.design.extra.exe.Command; +import com.fr.stable.StringUtils; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Task; @@ -10,6 +11,7 @@ import netscape.javascript.JSObject; /** * 插件安装,卸载,更新等任务 + * * @param */ public class PluginTask extends Task { @@ -40,8 +42,17 @@ public class PluginTask extends Task { Command[] commands = executor.getCommands(); for (Command command : commands) { String message = command.getExecuteMessage(); - updateMessage(message); - command.run(); + if (StringUtils.isNotBlank(message)) { + updateMessage(message); + } + command.run(new Process() { + @Override + public void process(String s) { + if (StringUtils.isNotBlank(s)) { + updateMessage(s); + } + } + }); } return null; } diff --git a/designer_base/src/com/fr/design/extra/exe/Command.java b/designer_base/src/com/fr/design/extra/exe/Command.java index 5b117586e..c16b0c288 100644 --- a/designer_base/src/com/fr/design/extra/exe/Command.java +++ b/designer_base/src/com/fr/design/extra/exe/Command.java @@ -1,5 +1,7 @@ package com.fr.design.extra.exe; +import com.fr.design.extra.Process; + /** * Created by richie on 16/3/19. */ @@ -7,5 +9,5 @@ public interface Command { String getExecuteMessage(); - void run(); + void run(Process process); } diff --git a/designer_base/src/com/fr/design/extra/exe/InstallFromDiskExecutor.java b/designer_base/src/com/fr/design/extra/exe/InstallFromDiskExecutor.java index cb803f314..da5222f96 100644 --- a/designer_base/src/com/fr/design/extra/exe/InstallFromDiskExecutor.java +++ b/designer_base/src/com/fr/design/extra/exe/InstallFromDiskExecutor.java @@ -1,12 +1,12 @@ package com.fr.design.extra.exe; -import com.fr.design.RestartHelper; import com.fr.design.extra.After; import com.fr.design.extra.PluginHelper; import com.fr.design.extra.PluginWebBridge; +import com.fr.design.extra.Process; import com.fr.general.FRLogger; import com.fr.general.Inter; -import org.apache.poi.poifs.crypt.AgileDecryptor; +import com.fr.plugin.PluginVerifyException; import javax.swing.*; import java.io.File; @@ -37,7 +37,8 @@ public class InstallFromDiskExecutor implements Executor { } @Override - public void run() { + public void run(Process process) { + } }, new Command() { @@ -47,7 +48,7 @@ public class InstallFromDiskExecutor implements Executor { } @Override - public void run() { + public void run(Process process) { try { PluginHelper.installPluginFromDisk(new File(filePath), new After() { @Override @@ -56,8 +57,10 @@ public class InstallFromDiskExecutor implements Executor { PluginWebBridge.getHelper().showRestartMessage(Inter.getLocText("FR-Designer-Plugin_Install_Successful")); } }); - } catch (Exception e1) { - FRLogger.getLogger().error(e1.getMessage()); + } catch (PluginVerifyException e) { + JOptionPane.showMessageDialog(null, e.getMessage(), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); + } catch (Exception e) { + FRLogger.getLogger().error(e.getMessage()); } } } diff --git a/designer_base/src/com/fr/design/extra/exe/InstallOnlineExecutor.java b/designer_base/src/com/fr/design/extra/exe/InstallOnlineExecutor.java index 348898877..bd3711bd6 100644 --- a/designer_base/src/com/fr/design/extra/exe/InstallOnlineExecutor.java +++ b/designer_base/src/com/fr/design/extra/exe/InstallOnlineExecutor.java @@ -2,12 +2,12 @@ package com.fr.design.extra.exe; import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; -import com.fr.design.RestartHelper; import com.fr.design.extra.After; import com.fr.design.extra.PluginHelper; import com.fr.design.extra.PluginWebBridge; import com.fr.design.extra.Process; import com.fr.general.Inter; +import com.fr.plugin.PluginVerifyException; import javax.swing.*; @@ -24,7 +24,7 @@ public class InstallOnlineExecutor implements Executor { @Override public String getTaskFinishMessage() { - return "已成功安裝"; + return "task succeed"; } @Override @@ -37,14 +37,14 @@ public class InstallOnlineExecutor implements Executor { } @Override - public void run() { + public void run(final Process process) { String username = DesignerEnvManager.getEnvManager().getBBSName(); String password = DesignerEnvManager.getEnvManager().getBBSPassword(); try { - PluginHelper.downloadPluginFile(pluginID,username,password, new Process() { + PluginHelper.downloadPluginFile(pluginID, username, password, new Process() { @Override public void process(Double integer) { - + process.process(Math.round(integer * 100) + "%"); } }); } catch (Exception e) { @@ -59,7 +59,7 @@ public class InstallOnlineExecutor implements Executor { } @Override - public void run() { + public void run(Process process) { try { PluginHelper.installPluginFromDisk(PluginHelper.getDownloadTempFile(), new After() { @Override @@ -67,6 +67,8 @@ public class InstallOnlineExecutor implements Executor { PluginWebBridge.getHelper().showRestartMessage(Inter.getLocText("FR-Designer-Plugin_Update_Successful")); } }); + } catch (PluginVerifyException e) { + JOptionPane.showMessageDialog(null, e.getMessage(), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); } catch (InterruptedException e) { e.printStackTrace(); } catch (Exception e) { diff --git a/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java b/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java index 2d5b0f8c7..c3fb43262 100644 --- a/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java +++ b/designer_base/src/com/fr/design/extra/exe/ModifyStatusExecutor.java @@ -2,6 +2,7 @@ package com.fr.design.extra.exe; import com.fr.base.FRContext; import com.fr.design.extra.PluginWebBridge; +import com.fr.design.extra.Process; import com.fr.general.Inter; import com.fr.plugin.Plugin; import com.fr.plugin.PluginLoader; @@ -34,7 +35,7 @@ public class ModifyStatusExecutor implements Executor { return StringUtils.EMPTY; } @Override - public void run() { + public void run(Process process) { plugin = PluginLoader.getLoader().getPluginById(pluginID); active = !plugin.isActive(); plugin.setActive(active); diff --git a/designer_base/src/com/fr/design/extra/exe/UninstallExecutor.java b/designer_base/src/com/fr/design/extra/exe/UninstallExecutor.java index 56b1c5304..3f0845a7a 100644 --- a/designer_base/src/com/fr/design/extra/exe/UninstallExecutor.java +++ b/designer_base/src/com/fr/design/extra/exe/UninstallExecutor.java @@ -3,6 +3,7 @@ package com.fr.design.extra.exe; import com.fr.base.FRContext; import com.fr.design.RestartHelper; import com.fr.design.extra.PluginHelper; +import com.fr.design.extra.Process; import com.fr.general.Inter; import com.fr.plugin.Plugin; import com.fr.plugin.PluginLoader; @@ -35,7 +36,7 @@ public class UninstallExecutor implements Executor { } @Override - public void run() { + public void run(Process process) { int rv = JOptionPane.showOptionDialog( null, Inter.getLocText("FR-Designer-Plugin_Will_Be_Delete"), diff --git a/designer_base/src/com/fr/design/extra/exe/UpdateFromDiskExecutor.java b/designer_base/src/com/fr/design/extra/exe/UpdateFromDiskExecutor.java index 26615b9b3..5c8c6e361 100644 --- a/designer_base/src/com/fr/design/extra/exe/UpdateFromDiskExecutor.java +++ b/designer_base/src/com/fr/design/extra/exe/UpdateFromDiskExecutor.java @@ -1,6 +1,7 @@ package com.fr.design.extra.exe; import com.fr.design.extra.PluginWebBridge; +import com.fr.design.extra.Process; import java.io.File; @@ -30,7 +31,7 @@ public class UpdateFromDiskExecutor implements Executor { } @Override - public void run() { + public void run(Process process) { PluginWebBridge.getHelper().updateFileFromDisk(new File(filePath)); } } diff --git a/designer_base/src/com/fr/design/extra/exe/UpdateOnlineExecutor.java b/designer_base/src/com/fr/design/extra/exe/UpdateOnlineExecutor.java index a5f49ea6e..4621dc3db 100644 --- a/designer_base/src/com/fr/design/extra/exe/UpdateOnlineExecutor.java +++ b/designer_base/src/com/fr/design/extra/exe/UpdateOnlineExecutor.java @@ -1,23 +1,106 @@ package com.fr.design.extra.exe; +import com.fr.base.FRContext; +import com.fr.design.DesignerEnvManager; +import com.fr.design.RestartHelper; +import com.fr.design.extra.After; +import com.fr.design.extra.PluginHelper; +import com.fr.design.extra.Process; +import com.fr.general.Inter; +import com.fr.plugin.Plugin; +import com.fr.plugin.PluginLoader; + +import javax.swing.*; +import java.io.File; + /** * Created by richie on 16/3/19. */ public class UpdateOnlineExecutor implements Executor { - private String pluginID; - - public UpdateOnlineExecutor(String pluginID) { - this.pluginID = pluginID; + private String[] pluginIDs; + private static final int PERCENT_100 = 100; + public UpdateOnlineExecutor(String[] pluginIDs) { + this.pluginIDs = pluginIDs; } + @Override public String getTaskFinishMessage() { - return "插件已更新完毕:" + pluginID; + return "task succeed"; } @Override public Command[] getCommands() { - return new Command[0]; + return new Command[]{ + new Command() { + @Override + public String getExecuteMessage() { + return null; + } + + @Override + public void run(Process process) { + for (int i = 0; i < pluginIDs.length; i++) { + Plugin plugin = PluginLoader.getLoader().getPluginById(pluginIDs[i]); + String id = null; + if (plugin != null) { + id = plugin.getId(); + } + String username = DesignerEnvManager.getEnvManager().getBBSName(); + String password = DesignerEnvManager.getEnvManager().getBBSPassword(); + try { + PluginHelper.downloadPluginFile(id, username, password, new Process() { + @Override + public void process(Double integer) { + } + }); + updateFileFromDisk(PluginHelper.getDownloadTempFile()); + process.process(PERCENT_100 / pluginIDs.length * (i + 1) + "%"); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage(), e); + } + } + int rv = JOptionPane.showOptionDialog( + null, + Inter.getLocText("FR-Designer-Plugin_Update_Successful"), + Inter.getLocText("FR-Designer-Plugin_Warning"), + JOptionPane.YES_NO_OPTION, + JOptionPane.INFORMATION_MESSAGE, + null, + new String[]{Inter.getLocText("FR-Designer-Basic_Restart_Designer"), + Inter.getLocText("FR-Designer-Basic_Restart_Designer_Later") + }, + null + ); + if (rv == JOptionPane.OK_OPTION) { + RestartHelper.restart(); + } + } + } + }; + } + + private void updateFileFromDisk(File fileOnDisk){ + try { + Plugin plugin = PluginHelper.readPlugin(fileOnDisk); + if (plugin == null) { + JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Plugin_Illegal_Plugin_Zip"), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); + return; + } + Plugin oldPlugin = PluginLoader.getLoader().getPluginById(plugin.getId()); + if (oldPlugin != null) { + String[] files = PluginHelper.uninstallPlugin(FRContext.getCurrentEnv(), oldPlugin); + PluginHelper.installPluginFromUnzippedTempDir(FRContext.getCurrentEnv(), plugin, new After() { + @Override + public void done() { + } + }); + } else { + JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Plugin_Cannot_Update_Not_Install"), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); + } + } catch (Exception e1) { + JOptionPane.showMessageDialog(null, e1.getMessage(), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); + } } }