Browse Source
* commit 'b16be7bef1ba1539f2c6eb1f28fe49864db97b9e': REPORT-55795 【10.0.19】报错规范——设计器远程设计连接部分 fix 单元测试 无jira 解决冲突 错误提交回退 无jira 解决冲突 错误提交回退 REPORT-55795 【10.0.19】报错规范——设计器远程设计连接部分feature/big-screen
superman
3 years ago
16 changed files with 601 additions and 139 deletions
@ -0,0 +1,239 @@ |
|||||||
|
package com.fr.design.dialog; |
||||||
|
|
||||||
|
import com.fr.base.GraphHelper; |
||||||
|
import com.fr.design.dialog.link.MessageWithLink; |
||||||
|
import com.fr.design.gui.ibutton.UIButton; |
||||||
|
import com.fr.design.gui.icontainer.UIScrollPane; |
||||||
|
import com.fr.design.gui.ilable.UILabel; |
||||||
|
import com.fr.design.gui.itextarea.UITextArea; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.utils.DesignUtils; |
||||||
|
import com.fr.design.utils.gui.GUICoreUtils; |
||||||
|
import com.fr.general.IOUtils; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
import java.awt.BorderLayout; |
||||||
|
import java.awt.Color; |
||||||
|
import java.awt.Dialog; |
||||||
|
import java.awt.Dimension; |
||||||
|
import java.awt.FlowLayout; |
||||||
|
import java.awt.Frame; |
||||||
|
import java.awt.Point; |
||||||
|
import java.awt.Window; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.awt.event.MouseAdapter; |
||||||
|
import java.awt.event.MouseEvent; |
||||||
|
import java.io.PrintWriter; |
||||||
|
import java.io.StringWriter; |
||||||
|
import javax.swing.BorderFactory; |
||||||
|
import javax.swing.JComponent; |
||||||
|
import javax.swing.JPanel; |
||||||
|
import javax.swing.SwingUtilities; |
||||||
|
|
||||||
|
/** |
||||||
|
* 带链接的错误详情弹窗 |
||||||
|
* |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/2 |
||||||
|
*/ |
||||||
|
public class UIDetailErrorLinkDialog extends UIDialog { |
||||||
|
|
||||||
|
private static final Color LINK_COLOR = new Color(51, 152, 253); |
||||||
|
private static final int GAP_5 = 5; |
||||||
|
private static final int GAP_10 = 10; |
||||||
|
private static final String TAG_A_START = "<a>"; |
||||||
|
private static final String TAG_A_END = "</a>"; |
||||||
|
|
||||||
|
private final Dimension dimension = new Dimension(300, 180); |
||||||
|
|
||||||
|
public static Builder newBuilder() { |
||||||
|
return new Builder(); |
||||||
|
} |
||||||
|
|
||||||
|
private UIDetailErrorLinkDialog(Frame parent, Builder builder) { |
||||||
|
super(parent); |
||||||
|
init(builder); |
||||||
|
} |
||||||
|
|
||||||
|
private UIDetailErrorLinkDialog(Dialog parent, Builder builder) { |
||||||
|
super(parent); |
||||||
|
init(builder); |
||||||
|
} |
||||||
|
|
||||||
|
private void init(Builder builder) { |
||||||
|
this.setTitle(builder.title); |
||||||
|
// 顶部 图标和提示
|
||||||
|
UILabel errorIcon = new UILabel(IOUtils.readIcon("com/fr/design/images/lookandfeel/Information_Icon_Error_32x32.png")); |
||||||
|
UILabel errorInfo= new UILabel(builder.reason); |
||||||
|
JPanel topPane = new JPanel(new FlowLayout(FlowLayout.LEFT, GAP_10, GAP_5)); |
||||||
|
topPane.add(errorIcon); |
||||||
|
topPane.add(errorInfo); |
||||||
|
|
||||||
|
// 中部 详细内容
|
||||||
|
JPanel contentPane = new JPanel(new BorderLayout()); |
||||||
|
contentPane.setBorder(BorderFactory.createEmptyBorder(0, GAP_5,0,0)); |
||||||
|
UILabel errorCodeLabel = new UILabel(Toolkit.i18nText("Fine_Design_Basic_Error_Code", builder.errorCode)); |
||||||
|
UILabel link = new UILabel(Toolkit.i18nText("Fine_Design_Basic_Show_Error_Stack")); |
||||||
|
link.setForeground(LINK_COLOR); |
||||||
|
link.addMouseListener(new MouseAdapter() { |
||||||
|
@Override |
||||||
|
public void mousePressed(MouseEvent e) { |
||||||
|
StringWriter stackTraceWriter = new StringWriter(); |
||||||
|
builder.throwable.printStackTrace(new PrintWriter(stackTraceWriter)); |
||||||
|
StackPane stackPane = new StackPane(stackTraceWriter.toString()); |
||||||
|
BasicDialog dialog = stackPane.showLargeWindow(UIDetailErrorLinkDialog.this, null); |
||||||
|
dialog.setVisible(true); |
||||||
|
} |
||||||
|
}); |
||||||
|
contentPane.add(errorCodeLabel, BorderLayout.NORTH); |
||||||
|
contentPane.add(createComponent(builder), BorderLayout.CENTER); |
||||||
|
contentPane.add(link, BorderLayout.SOUTH); |
||||||
|
|
||||||
|
// 确定 + 取消
|
||||||
|
JPanel actionPane = new JPanel(new FlowLayout(FlowLayout.RIGHT, GAP_10, GAP_10)); |
||||||
|
actionPane.add(createButton(Toolkit.i18nText("Fine-Design_Report_OK"))); |
||||||
|
actionPane.add(createButton(Toolkit.i18nText("Fine-Design_Basic_Cancel"))); |
||||||
|
this.getContentPane().add(topPane, BorderLayout.NORTH); |
||||||
|
this.getContentPane().add(contentPane, BorderLayout.CENTER); |
||||||
|
this.getContentPane().add(actionPane, BorderLayout.SOUTH); |
||||||
|
this.setSize(dimension); |
||||||
|
this.setResizable(false); |
||||||
|
GUICoreUtils.centerWindow(this); |
||||||
|
} |
||||||
|
|
||||||
|
private UIButton createButton(String content) { |
||||||
|
UIButton button = new UIButton(content); |
||||||
|
button.addActionListener(new ActionListener() { |
||||||
|
@Override |
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
UIDetailErrorLinkDialog.this.dispose(); |
||||||
|
} |
||||||
|
}); |
||||||
|
return button; |
||||||
|
} |
||||||
|
|
||||||
|
private JComponent createComponent(Builder builder) { |
||||||
|
JPanel panel = new JPanel(new BorderLayout()); |
||||||
|
boolean existDetailReason = StringUtils.isNotEmpty(builder.detailReason); |
||||||
|
int maxWidth = dimension.width; |
||||||
|
if (existDetailReason) { |
||||||
|
String message = Toolkit.i18nText("Fine_Design_Basic_Detail_Error_Info", builder.detailReason); |
||||||
|
UILabel label = new UILabel(message); |
||||||
|
maxWidth = Math.max(maxWidth, GraphHelper.getWidth(message, label.getFont())); |
||||||
|
panel.add(label, BorderLayout.NORTH); |
||||||
|
} |
||||||
|
String solution = existDetailReason ? builder.solution : Toolkit.i18nText("Fine_Design_Basic_Detail_Error_Info", builder.solution); |
||||||
|
if (builder.solution.contains(TAG_A_START)) { |
||||||
|
String[] solutionP1 = solution.split(TAG_A_START); |
||||||
|
String[] solutionP2 = solutionP1[1].split(TAG_A_END); |
||||||
|
MessageWithLink messageWithLink; |
||||||
|
if (solutionP2.length == 2) { |
||||||
|
messageWithLink = new MessageWithLink(solutionP1[0], solutionP2[0], builder.link, solutionP2[1]); |
||||||
|
} else { |
||||||
|
messageWithLink = new MessageWithLink(solutionP1[0], solutionP2[0], builder.link); |
||||||
|
} |
||||||
|
|
||||||
|
panel.add(messageWithLink, BorderLayout.CENTER); |
||||||
|
} else { |
||||||
|
UILabel solutionLabel = new UILabel(solution); |
||||||
|
panel.add(solutionLabel, BorderLayout.CENTER); |
||||||
|
} |
||||||
|
dimension.width = Math.max(maxWidth, GraphHelper.getWidth(solution, DesignUtils.getDefaultGUIFont())); |
||||||
|
return panel; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void checkValid() throws Exception { |
||||||
|
// do nothing
|
||||||
|
} |
||||||
|
|
||||||
|
class StackPane extends BasicPane { |
||||||
|
|
||||||
|
public StackPane(String stack) { |
||||||
|
setLayout(new BorderLayout()); |
||||||
|
UITextArea textArea = new UITextArea(); |
||||||
|
textArea.setEditable(false); |
||||||
|
textArea.setText(stack); |
||||||
|
UIScrollPane scrollPane = new UIScrollPane(textArea); |
||||||
|
add(scrollPane); |
||||||
|
// 滚动条默认在顶部
|
||||||
|
SwingUtilities.invokeLater(new Runnable() { |
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
scrollPane.getViewport().setViewPosition(new Point(0, 0)); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String title4PopupWindow() { |
||||||
|
return Toolkit.i18nText("Fine_Design_Basic_Error_Stack"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static class Builder { |
||||||
|
private Window window; |
||||||
|
private String title; |
||||||
|
private String reason; |
||||||
|
private String errorCode; |
||||||
|
private String detailReason; |
||||||
|
private String solution; |
||||||
|
private String link; |
||||||
|
private Throwable throwable; |
||||||
|
|
||||||
|
private Builder() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public Builder setTitle(String title) { |
||||||
|
this.title = title; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder setReason(String reason) { |
||||||
|
this.reason = reason; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder setErrorCode(String errorCode) { |
||||||
|
this.errorCode = errorCode; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder setSolution(String solution) { |
||||||
|
this.solution = solution; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder setDetailReason(String detailReason) { |
||||||
|
this.detailReason = detailReason; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder setThrowable(Throwable throwable) { |
||||||
|
this.throwable = throwable; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder setWindow(Window window) { |
||||||
|
this.window = window; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public Builder setLink(String link) { |
||||||
|
this.link = link; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public UIDetailErrorLinkDialog build() { |
||||||
|
if (this.window instanceof Frame) { |
||||||
|
return new UIDetailErrorLinkDialog((Frame) window, this); |
||||||
|
} else { |
||||||
|
return new UIDetailErrorLinkDialog((Dialog) window, this); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
package com.fr.env; |
||||||
|
|
||||||
|
import com.fr.design.DesignerEnvManager; |
||||||
|
import com.fr.design.env.DesignerWorkspaceInfo; |
||||||
|
import com.fr.general.locale.LocaleCenter; |
||||||
|
import com.fr.general.locale.LocaleMark; |
||||||
|
import com.fr.locale.InterProviderFactory; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/9 |
||||||
|
*/ |
||||||
|
public class HelpLink { |
||||||
|
|
||||||
|
public static String getLink(String solution) { |
||||||
|
Map<String, String> map = new HashMap<>(); |
||||||
|
String currentName = DesignerEnvManager.getEnvManager().getCurEnvName(); |
||||||
|
DesignerWorkspaceInfo workspaceInfo = DesignerEnvManager.getEnvManager().getWorkspaceInfo(currentName); |
||||||
|
LocaleMark<String> linkMark = LocaleCenter.getMark(RemoteDesignLocaleMark.class); |
||||||
|
String link = linkMark.getValue(); |
||||||
|
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_Change_PassWord"), workspaceInfo.getConnection().getUrl() + RemoteWorkspaceURL.SYSTEM_LOGIN_PATH); |
||||||
|
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_Cert_Error_Solution"), link); |
||||||
|
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_Connection_Unknown_Error_Solution"), link); |
||||||
|
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_NetWork_Connection_Error_Solution"), link); |
||||||
|
return map.get(solution); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,36 @@ |
|||||||
|
package com.fr.env; |
||||||
|
|
||||||
|
import com.fr.general.CloudCenter; |
||||||
|
import com.fr.general.GeneralContext; |
||||||
|
import com.fr.general.locale.LocaleMark; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Locale; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/9 |
||||||
|
*/ |
||||||
|
public class RemoteDesignLocaleMark implements LocaleMark<String> { |
||||||
|
|
||||||
|
private Map<Locale, String> map = new HashMap<>(); |
||||||
|
private static final String REMOTE_DESIGN_CN = CloudCenter.getInstance().acquireUrlByKind("help.remote.design.zh_CN", "https://help.fanruan.com/finereport/doc-view-3925.html"); |
||||||
|
private static final String REMOTE_DESIGN_EN = CloudCenter.getInstance().acquireUrlByKind("help.remote.design.en_US", "https://help.fanruan.com/finereport-en/doc-view-3862.html"); |
||||||
|
|
||||||
|
|
||||||
|
public RemoteDesignLocaleMark() { |
||||||
|
map.put(Locale.CHINA, REMOTE_DESIGN_CN); |
||||||
|
map.put(Locale.KOREA, REMOTE_DESIGN_EN); |
||||||
|
map.put(Locale.JAPAN, REMOTE_DESIGN_EN); |
||||||
|
map.put(Locale.US, REMOTE_DESIGN_EN); |
||||||
|
map.put(Locale.TAIWAN, REMOTE_DESIGN_CN); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getValue() { |
||||||
|
String result = map.get(GeneralContext.getLocale()); |
||||||
|
return result == null ? REMOTE_DESIGN_CN : result; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
package com.fr.env.handler; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/5 |
||||||
|
*/ |
||||||
|
public interface Handler<T, R> { |
||||||
|
|
||||||
|
/** |
||||||
|
* @param t |
||||||
|
* @return 是否需要继续处理 |
||||||
|
*/ |
||||||
|
R handle(T t); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,88 @@ |
|||||||
|
package com.fr.env.handler; |
||||||
|
|
||||||
|
import com.fr.design.EnvChangeEntrance; |
||||||
|
import com.fr.design.dialog.FineJOptionPane; |
||||||
|
import com.fr.design.env.DesignerWorkspaceInfo; |
||||||
|
import com.fr.design.env.DesignerWorkspaceType; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.env.handler.impl.CancelHandler; |
||||||
|
import com.fr.env.handler.impl.CommonHandler; |
||||||
|
import com.fr.env.handler.impl.ExecutionHandler; |
||||||
|
import com.fr.env.handler.impl.UnexpectedHandler; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
import javax.swing.UIManager; |
||||||
|
|
||||||
|
|
||||||
|
import static javax.swing.JOptionPane.ERROR_MESSAGE; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/5 |
||||||
|
*/ |
||||||
|
public class RemoteDesignExceptionHandler { |
||||||
|
|
||||||
|
private static final RemoteDesignExceptionHandler INSTANCE = new RemoteDesignExceptionHandler(); |
||||||
|
|
||||||
|
public static RemoteDesignExceptionHandler getInstance() { |
||||||
|
return INSTANCE; |
||||||
|
} |
||||||
|
|
||||||
|
private final List<Handler<Throwable, ResultWrapper>> testList = new ArrayList<>(); |
||||||
|
|
||||||
|
private final List<Handler<Throwable, ResultWrapper>> switchList = new ArrayList<>(); |
||||||
|
|
||||||
|
private RemoteDesignExceptionHandler() { |
||||||
|
// 要保证顺序
|
||||||
|
testList.add(new CancelHandler()); |
||||||
|
testList.add(new ExecutionHandler()); |
||||||
|
testList.add(new UnexpectedHandler()); |
||||||
|
testList.add(new CommonHandler(false)); |
||||||
|
|
||||||
|
switchList.add(new CancelHandler()); |
||||||
|
switchList.add(new ExecutionHandler()); |
||||||
|
switchList.add(new UnexpectedHandler()); |
||||||
|
switchList.add(new CommonHandler(true)); |
||||||
|
} |
||||||
|
|
||||||
|
public void handle(Throwable e, List<Handler<Throwable, ResultWrapper>> list) { |
||||||
|
Throwable throwable = e; |
||||||
|
ResultWrapper wrapper; |
||||||
|
for (Handler<Throwable, ResultWrapper> handler : list) { |
||||||
|
wrapper = handler.handle(throwable); |
||||||
|
throwable = wrapper.getThrowable(); |
||||||
|
if (!wrapper.isNext()) { |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
FineLoggerFactory.getLogger().error(throwable.getMessage(), throwable); |
||||||
|
} |
||||||
|
|
||||||
|
public void handleInSwitch(Throwable e, DesignerWorkspaceInfo workspaceInfo) { |
||||||
|
if (workspaceInfo == null || workspaceInfo.getType() == DesignerWorkspaceType.Local) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
FineJOptionPane.showMessageDialog(EnvChangeEntrance.getInstance().getDialog(), |
||||||
|
Toolkit.i18nText("Fine-Design_Basic_Switch_Workspace_Failed"), |
||||||
|
Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), |
||||||
|
ERROR_MESSAGE, |
||||||
|
UIManager.getIcon("OptionPane.errorIcon")); |
||||||
|
return; |
||||||
|
} |
||||||
|
handle(e, switchList); |
||||||
|
} |
||||||
|
|
||||||
|
public void handleInStart(Throwable e, DesignerWorkspaceInfo workspaceInfo) { |
||||||
|
if (workspaceInfo == null || workspaceInfo.getType() == DesignerWorkspaceType.Local) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
return; |
||||||
|
} |
||||||
|
handle(e, testList); |
||||||
|
} |
||||||
|
|
||||||
|
public void handleInTest(Throwable e) { |
||||||
|
handle(e, testList); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,30 @@ |
|||||||
|
package com.fr.env.handler; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/5 |
||||||
|
*/ |
||||||
|
public class ResultWrapper { |
||||||
|
|
||||||
|
private final boolean next; |
||||||
|
|
||||||
|
private final Throwable throwable; |
||||||
|
|
||||||
|
public ResultWrapper(Throwable throwable) { |
||||||
|
this(true, throwable); |
||||||
|
} |
||||||
|
|
||||||
|
public ResultWrapper(boolean next, Throwable e) { |
||||||
|
this.next = next; |
||||||
|
this.throwable = e; |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isNext() { |
||||||
|
return next; |
||||||
|
} |
||||||
|
|
||||||
|
public Throwable getThrowable() { |
||||||
|
return throwable; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
package com.fr.env.handler.impl; |
||||||
|
|
||||||
|
import com.fr.env.handler.Handler; |
||||||
|
import com.fr.env.handler.ResultWrapper; |
||||||
|
import java.util.concurrent.CancellationException; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/5 |
||||||
|
*/ |
||||||
|
public class CancelHandler implements Handler<Throwable, ResultWrapper> { |
||||||
|
|
||||||
|
@Override |
||||||
|
public ResultWrapper handle(Throwable e) { |
||||||
|
return new ResultWrapper(!(e instanceof CancellationException), e); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,48 @@ |
|||||||
|
package com.fr.env.handler.impl; |
||||||
|
|
||||||
|
import com.fr.base.exception.ExceptionDescriptor; |
||||||
|
import com.fr.design.EnvChangeEntrance; |
||||||
|
import com.fr.design.dialog.UIDetailErrorLinkDialog; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.env.HelpLink; |
||||||
|
import com.fr.env.handler.Handler; |
||||||
|
import com.fr.env.handler.ResultWrapper; |
||||||
|
import javax.swing.SwingUtilities; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/5 |
||||||
|
*/ |
||||||
|
public class CommonHandler implements Handler<Throwable, ResultWrapper> { |
||||||
|
|
||||||
|
private final boolean onSwitch; |
||||||
|
|
||||||
|
public CommonHandler(boolean onSwitch) { |
||||||
|
this.onSwitch = onSwitch; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public ResultWrapper handle(Throwable e) { |
||||||
|
if (e instanceof ExceptionDescriptor) { |
||||||
|
ExceptionDescriptor exceptionDescriptor = (ExceptionDescriptor) e; |
||||||
|
SwingUtilities.invokeLater(new Runnable() { |
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
UIDetailErrorLinkDialog detailErrorLinkDialog = UIDetailErrorLinkDialog.newBuilder(). |
||||||
|
setWindow(onSwitch ? DesignerContext.getDesignerFrame() : EnvChangeEntrance.getInstance().getDialog()). |
||||||
|
setErrorCode(exceptionDescriptor.errorCode()). |
||||||
|
setReason(exceptionDescriptor.reason()). |
||||||
|
setSolution(exceptionDescriptor.solution()). |
||||||
|
setDetailReason(exceptionDescriptor.detailReason()). |
||||||
|
setTitle(Toolkit.i18nText("Fine-Design_Basic_Connection_Failed")). |
||||||
|
setLink(HelpLink.getLink(exceptionDescriptor.solution())). |
||||||
|
setThrowable(e).build(); |
||||||
|
detailErrorLinkDialog.setVisible(true); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
return new ResultWrapper(e); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
package com.fr.env.handler.impl; |
||||||
|
|
||||||
|
import com.fr.env.handler.Handler; |
||||||
|
import com.fr.env.handler.ResultWrapper; |
||||||
|
import java.util.concurrent.ExecutionException; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/5 |
||||||
|
*/ |
||||||
|
public class ExecutionHandler implements Handler<Throwable, ResultWrapper> { |
||||||
|
|
||||||
|
@Override |
||||||
|
public ResultWrapper handle(Throwable e) { |
||||||
|
if (e instanceof ExecutionException) { |
||||||
|
return new ResultWrapper(e.getCause()); |
||||||
|
} |
||||||
|
return new ResultWrapper(e.getCause()); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
package com.fr.env.handler.impl; |
||||||
|
|
||||||
|
import com.fr.base.exception.ExceptionDescriptor; |
||||||
|
import com.fr.env.handler.Handler; |
||||||
|
import com.fr.env.handler.ResultWrapper; |
||||||
|
import com.fr.workspace.engine.convert.ExceptionConverter; |
||||||
|
|
||||||
|
/** |
||||||
|
* 出现预料之外的情况异常处理器 |
||||||
|
* |
||||||
|
* @author hades |
||||||
|
* @version 10.0 |
||||||
|
* Created by hades on 2021/8/5 |
||||||
|
*/ |
||||||
|
public class UnexpectedHandler implements Handler<Throwable, ResultWrapper> { |
||||||
|
|
||||||
|
@Override |
||||||
|
public ResultWrapper handle(Throwable e) { |
||||||
|
if (!(e instanceof ExceptionDescriptor)) { |
||||||
|
return new ResultWrapper(ExceptionConverter.getInstance().convert(e)) ; |
||||||
|
} |
||||||
|
return new ResultWrapper(e); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue