|
|
|
@ -65,6 +65,9 @@ import java.util.HashSet;
|
|
|
|
|
import static javax.swing.JOptionPane.QUESTION_MESSAGE; |
|
|
|
|
|
|
|
|
|
public class EnvChangeEntrance { |
|
|
|
|
private static final String BRANCH_TAG = "#"; |
|
|
|
|
private static final String BRANCH_BEGIN = "-"; |
|
|
|
|
private static final int BRANCH_SUB_LENGTH = 13; |
|
|
|
|
|
|
|
|
|
public static EnvChangeEntrance getInstance() { |
|
|
|
|
return HOLDER.singleton; |
|
|
|
@ -116,19 +119,14 @@ public class EnvChangeEntrance {
|
|
|
|
|
if (!checkValid) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
WorkContext.switchTo(workspace, new WorkContextCallback() { |
|
|
|
|
@Override |
|
|
|
|
public void done() { |
|
|
|
|
DesignerEnvManager.getEnvManager().setCurEnvName(envName); |
|
|
|
|
DesignUtils.refreshDesignerFrame(); |
|
|
|
|
DesignTableDataManager.fireDSChanged(new HashMap<String, String>()); |
|
|
|
|
if (WorkContext.getCurrent().isLocal()) { |
|
|
|
|
//初始化一下serverTray
|
|
|
|
|
ServerTray.init(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
//如果是相同环境
|
|
|
|
|
if (isSameEnv(workspace)) { |
|
|
|
|
//目前切换到相同环境需要更新一下名字,后续如果有别的操作直接往里面加就行了
|
|
|
|
|
switch2SameEnv(envName); |
|
|
|
|
} else { |
|
|
|
|
//切换到新环境,做下封装
|
|
|
|
|
switch2OtherEnv(workspace, envName); |
|
|
|
|
} |
|
|
|
|
// REPORT-25688如果是war包部署的服务器,给与提示
|
|
|
|
|
if (WorkContext.getCurrent().isWarDeploy()) { |
|
|
|
|
FineJOptionPane.showMessageDialog(null, Toolkit.i18nText("Fine-Design_Basic_War_Deploy_Tip"), |
|
|
|
@ -156,6 +154,47 @@ public class EnvChangeEntrance {
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 切换到其他环境 |
|
|
|
|
* |
|
|
|
|
* @param workspace 要切换的环境 |
|
|
|
|
* @param envName 要切换的环境名称 |
|
|
|
|
*/ |
|
|
|
|
private void switch2OtherEnv(Workspace workspace, String envName) { |
|
|
|
|
WorkContext.switchTo(workspace, new WorkContextCallback() { |
|
|
|
|
@Override |
|
|
|
|
public void done() { |
|
|
|
|
DesignerEnvManager.getEnvManager().setCurEnvName(envName); |
|
|
|
|
DesignUtils.refreshDesignerFrame(); |
|
|
|
|
DesignTableDataManager.fireDSChanged(new HashMap<String, String>()); |
|
|
|
|
if (WorkContext.getCurrent().isLocal()) { |
|
|
|
|
//初始化一下serverTray
|
|
|
|
|
ServerTray.init(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 切换到相同环境要做的事情 |
|
|
|
|
* |
|
|
|
|
* @param envName 当前的环境名 |
|
|
|
|
*/ |
|
|
|
|
private void switch2SameEnv(String envName) { |
|
|
|
|
//当前环境名称可能重命名更改过,需要更新一下,防止启动失败
|
|
|
|
|
DesignerEnvManager.getEnvManager().setCurEnvName(envName); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 是否切换到相同环境 |
|
|
|
|
* |
|
|
|
|
* @param workspace 要切换的环境 |
|
|
|
|
* @return 是则返回true |
|
|
|
|
*/ |
|
|
|
|
private boolean isSameEnv(Workspace workspace) { |
|
|
|
|
return AssistUtils.equals(WorkContext.getCurrent(), workspace); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 这个功能留着,可能会加回来,先做注释处理 |
|
|
|
|
* 切换远程环境之前,进行版本检测,当版本不一致的时候,提示。 |
|
|
|
@ -201,13 +240,14 @@ public class EnvChangeEntrance {
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
/** |
|
|
|
|
* 对选择的环境做服务检测 |
|
|
|
|
* |
|
|
|
|
* @param selectedEnv 选择的工作环境 |
|
|
|
|
*/ |
|
|
|
|
public void showServiceDialog(DesignerWorkspaceInfo selectedEnv) throws Exception { |
|
|
|
|
//是否需要做服务校验
|
|
|
|
|
if(needCheckBranch(selectedEnv)) { |
|
|
|
|
if (needCheckBranch(selectedEnv)) { |
|
|
|
|
String localBranch; |
|
|
|
|
String remoteBranch; |
|
|
|
|
WorkspaceConnectionInfo connectionInfo = selectedEnv.getConnection(); |
|
|
|
@ -228,18 +268,18 @@ public class EnvChangeEntrance {
|
|
|
|
|
StringBuilder textBuilder = new StringBuilder(); |
|
|
|
|
for (Class clazz : noExistServiceSet) { |
|
|
|
|
WorkspaceAPI workspaceAPI = (WorkspaceAPI) clazz.getAnnotation(WorkspaceAPI.class); |
|
|
|
|
if(workspaceAPI == null){ |
|
|
|
|
if (workspaceAPI == null) { |
|
|
|
|
FineLoggerFactory.getLogger().info("workspace service {} get annotation failed", clazz); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
if(workspaceAPI.ignore()){ |
|
|
|
|
if (workspaceAPI.ignore()) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
String descriptionOfCN = InterProviderFactory.getProvider().getLocText(workspaceAPI.description()); |
|
|
|
|
textBuilder.append(descriptionOfCN).append("\n"); |
|
|
|
|
} |
|
|
|
|
String areaText = textBuilder.toString(); |
|
|
|
|
if(StringUtils.isEmpty(areaText)){ |
|
|
|
|
if (StringUtils.isEmpty(areaText)) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -251,24 +291,25 @@ public class EnvChangeEntrance {
|
|
|
|
|
* 判断是否需要做版本验证,判断依据为 |
|
|
|
|
* 1、选择的环境为远程环境 |
|
|
|
|
* 2、一个月内不弹出是否勾选 |
|
|
|
|
* |
|
|
|
|
* @param selectedEnv 选择的环境 |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
private boolean needCheckBranch(DesignerWorkspaceInfo selectedEnv){ |
|
|
|
|
if(selectedEnv.getType() == DesignerWorkspaceType.Remote){ |
|
|
|
|
private boolean needCheckBranch(DesignerWorkspaceInfo selectedEnv) { |
|
|
|
|
if (selectedEnv.getType() == DesignerWorkspaceType.Remote) { |
|
|
|
|
try { |
|
|
|
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); |
|
|
|
|
Calendar calendar = Calendar.getInstance(); |
|
|
|
|
if(StringUtils.isEmpty(selectedEnv.getRemindTime())){ |
|
|
|
|
if (StringUtils.isEmpty(selectedEnv.getRemindTime())) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
//获取记录的时间
|
|
|
|
|
Date remindTime = format.parse(selectedEnv.getRemindTime()); |
|
|
|
|
calendar.setTime(remindTime); |
|
|
|
|
//获取一个月后的时间
|
|
|
|
|
calendar.add(Calendar.MONTH,1); |
|
|
|
|
calendar.add(Calendar.MONTH, 1); |
|
|
|
|
//与当前时间作对比,然后判断是否提示
|
|
|
|
|
if(new Date().after(calendar.getTime())){ |
|
|
|
|
if (new Date().after(calendar.getTime())) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} catch (ParseException e) { |
|
|
|
@ -280,21 +321,22 @@ public class EnvChangeEntrance {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取不存在的服务列表 |
|
|
|
|
* |
|
|
|
|
* @param info 环境连接信息 |
|
|
|
|
* @return 以Set形式返回不存在的服务 |
|
|
|
|
*/ |
|
|
|
|
public Set<Class> getNoExistServiceSet(WorkspaceConnectionInfo info){ |
|
|
|
|
public Set<Class> getNoExistServiceSet(WorkspaceConnectionInfo info) { |
|
|
|
|
Set<Class> noExistServiceSet = new HashSet<Class>(); |
|
|
|
|
Set<Class> remoteServiceSet = new HashSet<Class>(); |
|
|
|
|
Set<Class> localServiceSet = FineObjectPool.getInstance().getServerPool().keySet(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
JSONArray serviceArray = new FunctionalHttpRequest(info).getServiceList(); |
|
|
|
|
for(int i = 0; i < serviceArray.size(); i++){ |
|
|
|
|
try{ |
|
|
|
|
for (int i = 0; i < serviceArray.size(); i++) { |
|
|
|
|
try { |
|
|
|
|
Class clazz = Class.forName((String) serviceArray.get(i)); |
|
|
|
|
remoteServiceSet.add(clazz); |
|
|
|
|
} catch (Exception e){ |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -304,12 +346,12 @@ public class EnvChangeEntrance {
|
|
|
|
|
} catch (WorkspaceConnectionException e) { |
|
|
|
|
FineLoggerFactory.getLogger().info(e.getMessage()); |
|
|
|
|
//根据本地的服务列表做逐一检测
|
|
|
|
|
for(Class clazz : localServiceSet) { |
|
|
|
|
for (Class clazz : localServiceSet) { |
|
|
|
|
Method testMethod = Reflect.on(Method.class).create(clazz, "connectTest", new Class[0], String.class, new Class[0], 1025, 8, null, null, null, null).get(); |
|
|
|
|
WorkspaceProxyPool proxyPool = (WorkspaceProxyPool) (((RemoteWorkspace) WorkContext.getCurrent()).getClient()).getPool(); |
|
|
|
|
Result result = proxyPool.testInvoker(testMethod); |
|
|
|
|
Exception invokeException = (Exception) result.getException(); |
|
|
|
|
if(invokeException != null){ |
|
|
|
|
if (invokeException != null) { |
|
|
|
|
Exception cause = (Exception) invokeException.getCause(); |
|
|
|
|
//获取被包装最底层的异常
|
|
|
|
|
while (cause != null) { |
|
|
|
@ -317,26 +359,27 @@ public class EnvChangeEntrance {
|
|
|
|
|
cause = (Exception) invokeException.getCause(); |
|
|
|
|
} |
|
|
|
|
//该异常表示服务不存在
|
|
|
|
|
if(invokeException instanceof ClassNotFoundException){ |
|
|
|
|
if (invokeException instanceof ClassNotFoundException) { |
|
|
|
|
noExistServiceSet.add(clazz); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return noExistServiceSet; |
|
|
|
|
} catch (Exception e){ |
|
|
|
|
FineLoggerFactory.getLogger().error(e.getMessage(),e); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
|
|
|
return noExistServiceSet; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 格式化分支版本号 |
|
|
|
|
* |
|
|
|
|
* @param branch 初始的分支版本号 |
|
|
|
|
* @return 格式化后的版本号 |
|
|
|
|
*/ |
|
|
|
|
private String formatBranch(String branch){ |
|
|
|
|
if(branch.contains("#")){ |
|
|
|
|
return branch.substring(branch.lastIndexOf("-") + 1, branch.length() - 13); |
|
|
|
|
private String formatBranch(String branch) { |
|
|
|
|
if (branch.contains(BRANCH_TAG)) { |
|
|
|
|
return branch.substring(branch.lastIndexOf(BRANCH_BEGIN) + 1, branch.length() - BRANCH_SUB_LENGTH); |
|
|
|
|
} |
|
|
|
|
return branch; |
|
|
|
|
} |
|
|
|
|