Browse Source

Pull request #4: REPORT-111337 【设计器性能】设计器卡顿优化 打开模板动画优化

Merge in ~DESTINY.LIN/design from Fix-lag to fix-lag

* commit '1a04bcbf92a235300139c77b533141ed3b04aed3':
  REPORT-111337 【设计器性能】设计器卡顿优化 打开模板动画优化
fix-lag
Destiny.Lin-林锦龙 5 months ago
parent
commit
bac2522eb3
  1. 36
      designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java
  2. 35
      designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java
  3. 14
      designer-base/src/main/java/com/fr/design/worker/check/BaseCheckWorker.java
  4. 30
      designer-base/src/main/java/com/fr/design/worker/check/CheckLockResult.java
  5. 45
      designer-base/src/main/java/com/fr/design/worker/check/TemplateCheckResult.java

36
designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java

@ -19,8 +19,8 @@ import com.fr.design.mainframe.JTemplate;
import com.fr.design.mainframe.manager.search.TemplateTreeSearchManager;
import com.fr.design.mainframe.manager.search.searcher.control.pane.TemplateSearchRemindPane;
import com.fr.design.mainframe.vcs.common.VcsHelper;
import com.fr.design.worker.check.CheckLockResult;
import com.fr.design.worker.check.BaseCheckLockWorker;
import com.fr.design.worker.check.TemplateCheckResult;
import com.fr.design.worker.check.BaseCheckWorker;
import com.fr.file.FILE;
import com.fr.file.FileNodeFILE;
import com.fr.file.filetree.FileNode;
@ -242,45 +242,53 @@ public class TemplateTreePane extends JPanel implements FileOperations {
String reportPath = reportletsTree.getSelectedTemplatePath();
final String selectedFilePath = StableUtils.pathJoin(ProjectConstants.REPORTLETS_NAME, reportPath);
BaseCheckLockWorker checkLockWorker = getCheckLockWorker(node, selectedFilePath);
BaseCheckWorker checkLockWorker = getCheckLockWorker(node, selectedFilePath);
checkLockWorker.execute();
CheckLockResult checkLockResult = checkLockWorker.getResult();
TemplateCheckResult checkLockResult = checkLockWorker.getResult();
processLockResult(checkLockResult, node ,selectedFilePath);
}
@NotNull
private BaseCheckLockWorker getCheckLockWorker(FileNode node, String selectedFilePath) {
private BaseCheckWorker getCheckLockWorker(FileNode node, String selectedFilePath) {
String lock = node.getLock();
BaseCheckLockWorker checkLockWorker = new BaseCheckLockWorker(() -> {
return new BaseCheckWorker(() -> {
boolean showLockInfo = needShowLockInfo(lock, selectedFilePath, node);
UserInfo userInfo = null;
FileNodeFILE file = null;
boolean fileEnable = false;
if (showLockInfo) {
userInfo = WorkContext.getCurrent().get(LockInfoOperator.class).getUserInfo(selectedFilePath);
}
return new CheckLockResult(showLockInfo, userInfo);
file = new FileNodeFILE(new FileNode(selectedFilePath, false));
fileEnable = file.exists();
return new TemplateCheckResult(showLockInfo, userInfo, file, fileEnable);
}) {
@Override
public void dealResultWhenSlowly(CheckLockResult result) {
public void dealResultWhenSlowly(TemplateCheckResult result) {
processLockResult(result, node, selectedFilePath);
}
};
return checkLockWorker;
}
private void processLockResult(CheckLockResult checkLockResult, FileNode node, String selectedFilePath) {
if (checkLockResult != null) {
boolean showLockInfo = checkLockResult.isLock();
private void processLockResult(TemplateCheckResult checkResult, FileNode node, String selectedFilePath) {
if (checkResult != null) {
boolean showLockInfo = checkResult.isLock();
if (showLockInfo) {
node.setLock(UUID.randomUUID().toString());
// 对于开发者预览占位锁定 定位到tab中
checkDevelopForBiddenTemplate(selectedFilePath);
LockInfoDialog.show(checkLockResult.getUserInfo());
LockInfoDialog.show(checkResult.getUserInfo());
DesignerContext.getDesignerFrame().hideCover();
return;
} else {
node.setLock(null);
}
DesignerContext.getDesignerFrame().openTemplate(new FileNodeFILE(new FileNode(selectedFilePath, false)));
if (!checkResult.isFileEnable()) {
// 文件不可用就弹窗并返回
DesignerContext.getDesignerFrame().processTplFileNotAvailable();
return;
}
DesignerContext.getDesignerFrame().openTemplateWithoutCheckFile(checkResult.getFile());
} else {
if (!reportletsTree.getSelectedFileNode().isDirectory()) {
DesignerContext.getDesignerFrame().showOpenStatusLightly();

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

@ -1033,16 +1033,35 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
// p:判断一下,如何文件为空或者文件不存在,直接返回.
if (tplFile == null || !tplFile.exists()) {
FineJOptionPane.showMessageDialog(
this,
Toolkit.i18nText("Fine-Design_Basic_Warning_Template_Do_Not_Exsit"),
Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"),
JOptionPane.INFORMATION_MESSAGE
);
DesignerFrameFileDealerPane.getInstance().refresh();
processTplFileNotAvailable();
return;
}
openTemplate0(tplFile);
}
/**
* 处理文件不可用的情况
*/
public void processTplFileNotAvailable() {
// 如果不可用
FineJOptionPane.showMessageDialog(
this,
Toolkit.i18nText("Fine-Design_Basic_Warning_Template_Do_Not_Exsit"),
Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"),
JOptionPane.INFORMATION_MESSAGE
);
DesignerFrameFileDealerPane.getInstance().refresh();
}
/**
* 不经过文件校验直接打开模板需要前面的逻辑已经手动校验过
*/
public void openTemplateWithoutCheckFile(FILE tplFile) {
openTemplate0(tplFile);
}
private void openTemplate0(FILE tplFile) {
try {
openFile(tplFile);
} catch (DecryptTemplateException e) {
@ -1065,9 +1084,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
}
addAndActivateJTemplate();
}
}
/**
* 是否不合版本的设计器
*

14
designer-base/src/main/java/com/fr/design/worker/check/BaseCheckLockWorker.java → designer-base/src/main/java/com/fr/design/worker/check/BaseCheckWorker.java

@ -14,18 +14,18 @@ import java.util.concurrent.TimeoutException;
* @since 11.0
* Created on 2024/1/8
*/
public abstract class BaseCheckLockWorker extends SwingWorker<CheckLockResult, Void> {
public abstract class BaseCheckWorker extends SwingWorker<TemplateCheckResult, Void> {
private static final int TIME_OUT = 50;
private boolean slowly = false;
private final Callable<CheckLockResult> doInBackground;
private CheckLockResult result;
private final Callable<TemplateCheckResult> doInBackground;
private TemplateCheckResult result;
public BaseCheckLockWorker(Callable<CheckLockResult> doInBackground) {
public BaseCheckWorker(Callable<TemplateCheckResult> doInBackground) {
this.doInBackground = doInBackground;
}
@Override
protected CheckLockResult doInBackground() throws Exception {
protected TemplateCheckResult doInBackground() throws Exception {
return this.doInBackground.call();
}
@ -44,7 +44,7 @@ public abstract class BaseCheckLockWorker extends SwingWorker<CheckLockResult, V
/**
* 获取结果
*/
public CheckLockResult getResult() {
public TemplateCheckResult getResult() {
if (result != null) {
return result;
}
@ -62,5 +62,5 @@ public abstract class BaseCheckLockWorker extends SwingWorker<CheckLockResult, V
/**
* 如果获取结果超过TIME_OUT则通过这个方式处理后续
*/
public abstract void dealResultWhenSlowly(CheckLockResult result);
public abstract void dealResultWhenSlowly(TemplateCheckResult result);
}

30
designer-base/src/main/java/com/fr/design/worker/check/CheckLockResult.java

@ -1,30 +0,0 @@
package com.fr.design.worker.check;
import com.fr.workspace.base.UserInfo;
/**
* 信息检查结果
*
* @author Destiny.Lin
* @since 11.0
* Created on 2024/1/8
*/
public class CheckLockResult {
private boolean lock = false;
private UserInfo userInfo;
public CheckLockResult(boolean lock, UserInfo userInfo) {
this.lock = lock;
this.userInfo = userInfo;
}
public boolean isLock() {
return lock;
}
public UserInfo getUserInfo() {
return userInfo;
}
}

45
designer-base/src/main/java/com/fr/design/worker/check/TemplateCheckResult.java

@ -0,0 +1,45 @@
package com.fr.design.worker.check;
import com.fr.file.FileNodeFILE;
import com.fr.workspace.base.UserInfo;
/**
* 信息检查结果
*
* @author Destiny.Lin
* @since 11.0
* Created on 2024/1/8
*/
public class TemplateCheckResult {
private boolean lock = false;
private UserInfo userInfo;
private FileNodeFILE file;
private boolean fileEnable = false;
public TemplateCheckResult(boolean lock, UserInfo userInfo, FileNodeFILE file, boolean fileEnable) {
this.lock = lock;
this.userInfo = userInfo;
this.file = file;
this.fileEnable = fileEnable;
}
public boolean isLock() {
return lock;
}
public UserInfo getUserInfo() {
return userInfo;
}
public FileNodeFILE getFile() {
return file;
}
public boolean isFileEnable() {
return fileEnable;
}
}
Loading…
Cancel
Save