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 List<JTemplate<?, ?>> historyList;
private JTemplate<?, ?> editingTemplate; private JTemplate<?, ?> editingTemplate;
/**
* 当设计器打开的模板数大于模板缓存对象个数时会产生JVirtualTemplate(个数=打开的总模板数 - 缓存模板数)
* 每次点击切换模板时当切换到JVirtualTemplate会创建真实的JTemplate但是该JTemplate创建后不会释放掉需要调用whenClose主动释放
* 该变量对JVirtualTemplate创建真实的JTemplate管理
*/
private JTemplate<?, ?> currentVirtualReplaceTemplate;
public static HistoryTemplateListCache getInstance() { public static HistoryTemplateListCache getInstance() {
return Holder.INSTANCE; return Holder.INSTANCE;
} }
@ -120,14 +112,6 @@ public class HistoryTemplateListCache implements CallbackEvent {
* @see DesignerFrameFileDealerPane#setCurrentEditingTemplate(JTemplate) * @see DesignerFrameFileDealerPane#setCurrentEditingTemplate(JTemplate)
*/ */
public void setCurrentEditingTemplate(JTemplate<?, ?> jt) { 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; this.editingTemplate = jt;
//如果当前历史面板中没有 //如果当前历史面板中没有
@ -438,25 +422,4 @@ public class HistoryTemplateListCache implements CallbackEvent {
jt.refreshResource(); 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) { private void openFile(FILE tplFile) {
boolean virtualTemplate = false;
if (tplFile != null) { if (tplFile != null) {
int index = HistoryTemplateListCache.getInstance().contains(tplFile); int index = HistoryTemplateListCache.getInstance().contains(tplFile);
if (index != -1) { if (index != -1) {
JTemplate jt = HistoryTemplateListCache.getInstance().getHistoryList().get(index); JTemplate jt = HistoryTemplateListCache.getInstance().getHistoryList().get(index);
if (jt instanceof JVirtualTemplate) { if (jt instanceof JVirtualTemplate) {
JTemplate currentVirtualReplaceTemplate = HistoryTemplateListCache.getInstance().getCurrentVirtualReplaceTemplate(); // 如果是JVirtualTemplate 创建真实JTemplate
if (currentVirtualReplaceTemplate != null && ComparatorUtils.equals(currentVirtualReplaceTemplate.getEditingFILE(), jt.getEditingFILE())) { JTemplate realJTemplate = JTemplateFactory.createJTemplate(tplFile);
// 防止在打开了模板的情况下 去双击目录树对应的模板重复创建JTemplate if (realJTemplate == null) {
currentVirtualReplaceTemplate.activeOldJTemplate();
return; return;
} }
virtualTemplate = true; // 由JVirtualTemplate激活真实JTemplate 本质在historyList中进行替换
// 同时 realJTemplate被管理起来 不需要主动释放 关闭时会自动释放
jt.activeJTemplate(index, realJTemplate);
return;
} else { } else {
jt.activeOldJTemplate(); jt.activeOldJTemplate();
return; return;
@ -1125,12 +1126,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
if (jt == null) { if (jt == null) {
return; return;
} }
// 将JVirtualTemplate创建的真实模板管理起来
if (virtualTemplate) {
HistoryTemplateListCache.getInstance().setCurrentVirtualReplaceTemplate(jt);
}
// 新的form不往前兼容 // 新的form不往前兼容
if (inValidDesigner(jt)) { if (inValidDesigner(jt)) {
this.addAndActivateJTemplate(); this.addAndActivateJTemplate();

Loading…
Cancel
Save