You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
3.4 KiB
90 lines
3.4 KiB
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.RemoteWorkspaceURL; |
|
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<RefWrapper, ResultWrapper>> testList = new ArrayList<>(); |
|
|
|
private final List<Handler<RefWrapper, 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<RefWrapper, ResultWrapper>> list, DesignerWorkspaceInfo workspaceInfo) { |
|
Throwable throwable = e; |
|
ResultWrapper wrapper; |
|
String link = workspaceInfo.getConnection().getUrl() + RemoteWorkspaceURL.SYSTEM_LOGIN_PATH; |
|
for (Handler<RefWrapper, ResultWrapper> handler : list) { |
|
wrapper = handler.handle(new RefWrapper(throwable, link)); |
|
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, workspaceInfo); |
|
} |
|
|
|
public void handleInStart(Throwable e, DesignerWorkspaceInfo workspaceInfo) { |
|
if (workspaceInfo == null || workspaceInfo.getType() == DesignerWorkspaceType.Local) { |
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
return; |
|
} |
|
handle(e, testList, workspaceInfo); |
|
} |
|
|
|
public void handleInTest(Throwable e, DesignerWorkspaceInfo workspaceInfo) { |
|
handle(e, testList, workspaceInfo); |
|
} |
|
|
|
}
|
|
|