diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java
index 92fdd4878a..ea591f3bf4 100644
--- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java
+++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java
@@ -3,6 +3,7 @@ package com.fr.design.extra.exe.callback;
import com.fr.design.bridge.exec.JSCallback;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.extra.PluginOperateUtils;
+import com.fr.design.extra.exe.callback.handle.PluginCallBackHelper;
import com.fr.design.i18n.Toolkit;
import com.fr.log.FineLoggerFactory;
@@ -73,7 +74,7 @@ public class InstallFromDiskCallback extends AbstractPluginTaskCallback {
}else {
jsCallback.execute("failed");
FineLoggerFactory.getLogger().info(Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Failed"));
- FineJOptionPane.showMessageDialog(null, pluginInfo, Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), FineJOptionPane.ERROR_MESSAGE);
+ PluginCallBackHelper.showErrorMessage(result, pluginInfo);
}
}
}
diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java
index 0b1eb33fb9..09c360b4f1 100644
--- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java
+++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java
@@ -4,6 +4,7 @@ import com.fr.design.bridge.exec.JSCallback;
import com.fr.design.bridge.exec.JSExecutor;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.extra.PluginOperateUtils;
+import com.fr.design.extra.exe.callback.handle.PluginCallBackHelper;
import com.fr.design.i18n.Toolkit;
import com.fr.log.FineLoggerFactory;
@@ -63,7 +64,7 @@ public class InstallOnlineCallback extends AbstractDealPreTaskCallback {
} else {
jsCallback.execute("failed");
FineLoggerFactory.getLogger().info(Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Failed"));
- FineJOptionPane.showMessageDialog(null, pluginInfo, Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), FineJOptionPane.ERROR_MESSAGE);
+ PluginCallBackHelper.showErrorMessage(result, pluginInfo);
}
}
diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java
index 21c7871f52..31bf482ebe 100644
--- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java
+++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java
@@ -3,6 +3,7 @@ package com.fr.design.extra.exe.callback;
import com.fr.design.bridge.exec.JSCallback;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.extra.PluginOperateUtils;
+import com.fr.design.extra.exe.callback.handle.PluginCallBackHelper;
import com.fr.design.i18n.Toolkit;
import com.fr.log.FineLoggerFactory;
@@ -72,7 +73,7 @@ public class UpdateFromDiskCallback extends AbstractPluginTaskCallback {
}else {
jsCallback.execute("failed");
FineLoggerFactory.getLogger().info(Toolkit.i18nText("Fine-Design_Basic_Plugin_Update_Failed"));
- FineJOptionPane.showMessageDialog(null, pluginInfo, Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), FineJOptionPane.ERROR_MESSAGE);
+ PluginCallBackHelper.showErrorMessage(result, pluginInfo);
}
}
}
diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java
index 8dbad6a541..3469ed1a59 100644
--- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java
+++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java
@@ -3,6 +3,7 @@ package com.fr.design.extra.exe.callback;
import com.fr.design.bridge.exec.JSCallback;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.extra.PluginOperateUtils;
+import com.fr.design.extra.exe.callback.handle.PluginCallBackHelper;
import com.fr.design.i18n.Toolkit;
import com.fr.log.FineLoggerFactory;
@@ -38,7 +39,7 @@ public class UpdateOnlineCallback extends AbstractDealPreTaskCallback {
} else {
jsCallback.execute("failed");
FineLoggerFactory.getLogger().info(Toolkit.i18nText("Fine-Design_Basic_Plugin_Update_Failed"));
- FineJOptionPane.showMessageDialog(null, pluginInfo, Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), FineJOptionPane.ERROR_MESSAGE);
+ PluginCallBackHelper.showErrorMessage(result, pluginInfo);
}
}
}
diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/handle/PluginCallBackHelper.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/handle/PluginCallBackHelper.java
new file mode 100644
index 0000000000..fc5f957f63
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/handle/PluginCallBackHelper.java
@@ -0,0 +1,70 @@
+package com.fr.design.extra.exe.callback.handle;
+
+import com.fr.design.dialog.FineJOptionPane;
+import com.fr.design.dialog.link.MessageWithLink;
+import com.fr.design.i18n.Toolkit;
+import com.fr.plugin.error.PluginErrorCode;
+import com.fr.plugin.manage.control.PluginTaskResult;
+
+/**
+ * 帮助处理插件操作(安装、更新等)的弹窗
+ * @author Yvan
+ */
+public class PluginCallBackHelper {
+
+ private static final String NEW_LINE_TAG = "
";
+ private static final String REFERENCE = Toolkit.i18nText("Fine-Design_Basic_Plugin_File_Validate_Reference");
+ private static final String HELP_DOCUMENT_NAME = Toolkit.i18nText("Fine-Design_Basic_Plugin_File_Validate_HELP_DOCUMENT_NAME");
+ private static final String CONNECTOR = "-";
+ private static final String HELP_DOCUMENT_LINK = Toolkit.i18nText("Fine-Design_Basic_Plugin_File_Validate_HELP_DOCUMENT_LINK");
+
+
+ /**
+ * 展示插件操作失败后的提示弹窗
+ * @param result
+ * @param pluginInfo
+ */
+ public static void showErrorMessage(PluginTaskResult result, String pluginInfo) {
+ // 单独处理下插件完整性校验失败的提示
+ if (PluginCallBackHelper.needHandleInvalidatePackage(result)) {
+ MessageWithLink messageWithLink = PluginCallBackHelper.generate4InvalidatePackage(pluginInfo);
+ PluginTaskResultErrorDialog resultDialog = new PluginTaskResultErrorDialog(null, messageWithLink);
+ resultDialog.showResult();
+ } else {
+ FineJOptionPane.showMessageDialog(null, pluginInfo, Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), FineJOptionPane.ERROR_MESSAGE);
+ }
+ }
+
+ /**
+ * 判断是否需要处理 插件安装包校验失败 导致的安装失败任务
+ * @param result
+ * @return
+ */
+ private static boolean needHandleInvalidatePackage(PluginTaskResult result) {
+ return !result.isSuccess() && result.getCode() == PluginErrorCode.InstallPackageValidateFailed;
+ }
+
+ /**
+ * 根据插件原始报错信息,构建MessageWithLink
+ * @param originInfo
+ * @return
+ */
+ private static MessageWithLink generate4InvalidatePackage(String originInfo) {
+
+ return new MessageWithLink(getSupplementaryMessage(originInfo), HELP_DOCUMENT_NAME, HELP_DOCUMENT_LINK);
+ }
+
+ /**
+ * 根据插件原始报错信息,获取增加了补充说明后的信息
+ * @param originInfo
+ * @return
+ */
+ private static String getSupplementaryMessage(String originInfo) {
+ return new StringBuilder()
+ .append(originInfo)
+ .append(NEW_LINE_TAG)
+ .append(REFERENCE)
+ .append(CONNECTOR)
+ .toString();
+ }
+}
diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/handle/PluginTaskResultErrorDialog.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/handle/PluginTaskResultErrorDialog.java
new file mode 100644
index 0000000000..da4f432080
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/handle/PluginTaskResultErrorDialog.java
@@ -0,0 +1,86 @@
+package com.fr.design.extra.exe.callback.handle;
+
+import com.fr.base.svg.IconUtils;
+import com.fr.design.dialog.link.MessageWithLink;
+import com.fr.design.gui.ibutton.UIButton;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.layout.FRGUIPaneFactory;
+import com.fr.design.layout.VerticalFlowLayout;
+import com.fr.design.utils.gui.GUICoreUtils;
+
+import javax.swing.BorderFactory;
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+/**
+ * 当前仅处理Error提示,之后有需要再扩展
+ * @author Yvan
+ */
+public class PluginTaskResultErrorDialog extends JDialog {
+
+ private static final Dimension LABEL = new Dimension(60, 90);
+
+ private JPanel contentPane;
+
+ private UILabel errorLabel;
+
+ private UIButton confirmButton;
+
+ private MessageWithLink messageWithLink;
+
+ public PluginTaskResultErrorDialog(Frame parent, MessageWithLink messageWithLink) {
+ super(parent, true);
+ this.setTitle(Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"));
+ this.messageWithLink = messageWithLink;
+
+ initContentPane();
+ this.setLayout(FRGUIPaneFactory.createBorderLayout());
+ this.setResizable(false);
+ this.add(contentPane, BorderLayout.CENTER);
+ this.setSize(new Dimension( 380, 160));
+ GUICoreUtils.centerWindow(this);
+ }
+
+ /**
+ * 初始化内容面板
+ */
+ private void initContentPane() {
+ this.contentPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ // error图标
+ errorLabel = new UILabel(IconUtils.readIcon("/com/fr/design/standard/system/error_tips.svg"));
+ errorLabel.setPreferredSize(LABEL);
+ errorLabel.setBorder(BorderFactory.createEmptyBorder(10, 20, 40, 20));
+ // 提示内容
+ JPanel messagePane = FRGUIPaneFactory.createBorderLayout_S_Pane();
+ messagePane.add(errorLabel, BorderLayout.WEST);
+ messagePane.add(messageWithLink, BorderLayout.CENTER);
+ messagePane.setBorder(BorderFactory.createEmptyBorder(20, 10, 0, 10));
+ this.contentPane.add(messagePane, BorderLayout.CENTER);
+ // 确定按钮
+ confirmButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Button_OK"));
+ confirmButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ hideResult();
+ }
+ });
+ JPanel confirmPane = new JPanel(new VerticalFlowLayout());
+ confirmPane.add(confirmButton);
+ confirmPane.setBorder(BorderFactory.createEmptyBorder(0, 160, 10, 0));
+ this.contentPane.add(confirmPane, BorderLayout.SOUTH);
+ }
+
+ public void showResult() {
+ this.setVisible(true);
+ }
+
+ public void hideResult() {
+ this.setVisible(false);
+ }
+}
diff --git a/designer-base/src/main/resources/com/fr/design/standard/system/error_tips.svg b/designer-base/src/main/resources/com/fr/design/standard/system/error_tips.svg
new file mode 100644
index 0000000000..900205215b
--- /dev/null
+++ b/designer-base/src/main/resources/com/fr/design/standard/system/error_tips.svg
@@ -0,0 +1,14 @@
+