Browse Source

REPORT-33018 fix 沿用之前的方案逻辑 防止产生假保存

final/10.0
hades 4 years ago
parent
commit
0b3aac756a
  1. 37
      designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java
  2. 19
      designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java

37
designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java

@ -42,14 +42,6 @@ public class HistoryTemplateListCache implements CallbackEvent {
private List<JTemplate<?, ?>> historyList;
private JTemplate<?, ?> editingTemplate;
/**
* 当设计器打开的模板数大于模板缓存对象个数时会产生JVirtualTemplate(个数=打开的总模板数 - 缓存模板数)
* 每次点击切换模板时当切换到JVirtualTemplate会创建真实的JTemplate但是该JTemplate创建后不会释放掉需要调用whenClose主动释放
* 该变量对JVirtualTemplate创建真实的JTemplate管理
*/
private JTemplate<?, ?> currentVirtualReplaceTemplate;
public static HistoryTemplateListCache getInstance() {
return Holder.INSTANCE;
}
@ -120,14 +112,6 @@ public class HistoryTemplateListCache implements CallbackEvent {
* @see DesignerFrameFileDealerPane#setCurrentEditingTemplate(JTemplate)
*/
public void setCurrentEditingTemplate(JTemplate<?, ?> jt) {
// 模板之间切换 如果存在上次JVirtualTemplate创建的真实模板 需要在此关闭,并释放掉
boolean canReleaseVirtualReplaceTemplate = this.currentVirtualReplaceTemplate != null && jt != null
&& !ComparatorUtils.equals(this.currentVirtualReplaceTemplate.getEditingFILE(), jt.getEditingFILE());
if (canReleaseVirtualReplaceTemplate) {
HistoryTemplateListCache.getInstance().releaseVirtualReplaceTemplate();
}
this.editingTemplate = jt;
//如果当前历史面板中没有
@ -438,25 +422,4 @@ public class HistoryTemplateListCache implements CallbackEvent {
jt.refreshResource();
}
}
public void setCurrentVirtualReplaceTemplate(JTemplate<?, ?> currentVirtualReplaceTemplate) {
// 保证先释放
releaseVirtualReplaceTemplate();
this.currentVirtualReplaceTemplate = currentVirtualReplaceTemplate;
}
public JTemplate<?, ?> getCurrentVirtualReplaceTemplate() {
return currentVirtualReplaceTemplate;
}
/**
* 释放JVirtualTemplate创建的真实模板JTemplate
*/
private void releaseVirtualReplaceTemplate() {
if (this.currentVirtualReplaceTemplate != null) {
this.currentVirtualReplaceTemplate.whenClose();
this.currentVirtualReplaceTemplate = null;
}
}
}

19
designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java

@ -1101,19 +1101,20 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
*/
private void openFile(FILE tplFile) {
boolean virtualTemplate = false;
if (tplFile != null) {
int index = HistoryTemplateListCache.getInstance().contains(tplFile);
if (index != -1) {
JTemplate jt = HistoryTemplateListCache.getInstance().getHistoryList().get(index);
if (jt instanceof JVirtualTemplate) {
JTemplate currentVirtualReplaceTemplate = HistoryTemplateListCache.getInstance().getCurrentVirtualReplaceTemplate();
if (currentVirtualReplaceTemplate != null && ComparatorUtils.equals(currentVirtualReplaceTemplate.getEditingFILE(), jt.getEditingFILE())) {
// 防止在打开了模板的情况下 去双击目录树对应的模板重复创建JTemplate
currentVirtualReplaceTemplate.activeOldJTemplate();
// 如果是JVirtualTemplate 创建真实JTemplate
JTemplate realJTemplate = JTemplateFactory.createJTemplate(tplFile);
if (realJTemplate == null) {
return;
}
virtualTemplate = true;
// 由JVirtualTemplate激活真实JTemplate 本质在historyList中进行替换
// 同时 realJTemplate被管理起来 不需要主动释放 关闭时会自动释放
jt.activeJTemplate(index, realJTemplate);
return;
} else {
jt.activeOldJTemplate();
return;
@ -1125,12 +1126,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
if (jt == null) {
return;
}
// 将JVirtualTemplate创建的真实模板管理起来
if (virtualTemplate) {
HistoryTemplateListCache.getInstance().setCurrentVirtualReplaceTemplate(jt);
}
// 新的form不往前兼容
if (inValidDesigner(jt)) {
this.addAndActivateJTemplate();

Loading…
Cancel
Save