diff --git a/designer-base/src/main/java/com/fr/design/carton/CartonThreadExecutorPool.java b/designer-base/src/main/java/com/fr/design/carton/CartonThreadExecutorPool.java index 624bb2bb6..39525110b 100644 --- a/designer-base/src/main/java/com/fr/design/carton/CartonThreadExecutorPool.java +++ b/designer-base/src/main/java/com/fr/design/carton/CartonThreadExecutorPool.java @@ -65,7 +65,7 @@ public class CartonThreadExecutorPool extends ThreadPoolExecutor { JSONObject jsonObject = new JSONObject(); jsonObject.put(Toolkit.i18nText("Fine-Design_Basic_Carton_Output_Time"), simpleDateFormatThreadSafe.format(System.currentTimeMillis())); jsonObject.put(Toolkit.i18nText("Fine-Design_Basic_Carton_Event_Number"), "swingWorker_" + hangNumber); - jsonObject.put(Toolkit.i18nText("Fine-Design_Basic_Carton_Duration_Task_Execute"), timeSoFar()); + jsonObject.put(Toolkit.i18nText("Fine-Design_Basic_Carton_Duration_Task_Execute"), timeSoFar() + "ms"); jsonObject.put(Toolkit.i18nText("Fine-Design_Basic_Carton_Stack_Info"), stackTrace); EventDispatchThreadHangMonitor.outPutJournalLog(jsonObject.toString(), SwitchForSwingChecker.TIMER_CHECK_FLAG); EventDispatchThreadHangMonitor.checkForDeadlock(); @@ -128,7 +128,7 @@ public class CartonThreadExecutorPool extends ThreadPoolExecutor { jsonObject.put(Toolkit.i18nText("Fine-Design_Basic_Carton_Output_Time"), simpleDateFormatThreadSafe.format(System.currentTimeMillis())); jsonObject.put(Toolkit.i18nText("Fine-Design_Basic_Carton_Event_Number"), "swingWorker_" + concurrentHashMap.get(currentThreadId).hangNumber); jsonObject.put(Toolkit.i18nText("Fine-Design_Basic_Carton_Task_Start_Time"), simpleDateFormatThreadSafe.format(concurrentHashMap.get(currentThreadId).startTime)); - jsonObject.put(Toolkit.i18nText("Fine-Design_Basic_Carton_Task_Total_Time"), runTime); + jsonObject.put(Toolkit.i18nText("Fine-Design_Basic_Carton_Task_Total_Time"), runTime + "ms"); EventDispatchThreadHangMonitor.outPutJournalLog(jsonObject.toString(), SwitchForSwingChecker.EASY_CHECK_FLAG); } diff --git a/designer-base/src/main/java/com/fr/design/carton/EventDispatchThreadHangMonitor.java b/designer-base/src/main/java/com/fr/design/carton/EventDispatchThreadHangMonitor.java index 83c3f670e..f472d901a 100644 --- a/designer-base/src/main/java/com/fr/design/carton/EventDispatchThreadHangMonitor.java +++ b/designer-base/src/main/java/com/fr/design/carton/EventDispatchThreadHangMonitor.java @@ -179,7 +179,7 @@ public final class EventDispatchThreadHangMonitor extends EventQueue { JSONObject jsonObject = new JSONObject(); jsonObject.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Carton_Output_Time"), simpleDateFormat.format(System.currentTimeMillis())); jsonObject.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Carton_Event_Number"), "eventQueue_" + hangNumber); - jsonObject.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Carton_Duration_Task_Execute"), timeSoFar()); + jsonObject.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Carton_Duration_Task_Execute"), timeSoFar() + "ms"); jsonObject.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Carton_Stack_Info"), stackTrace); outPutJournalLog(jsonObject.toString(), SwitchForSwingChecker.TIMER_CHECK_FLAG); checkForDeadlock(); @@ -195,13 +195,27 @@ public final class EventDispatchThreadHangMonitor extends EventQueue { //事件处理完后的时间判断 public void dispose() { if (timeSoFar() > UNREASONABLE_DISPATCH_DURATION_MS) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Carton_Output_Time"), simpleDateFormat.format(System.currentTimeMillis())); - jsonObject.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Carton_Event_Number"), "eventQueue_" + hangNumber); - jsonObject.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Carton_Task_Start_Time"), simpleDateFormat.format(startDispatchTimeMillis)); + exportCartonLog(true); + } else if (lastReportedStack != null){ + exportCartonLog(false); + } + } + + /** + * + * @param flag 判断一下输出日志时要输出哪个时间 + */ + private void exportCartonLog(boolean flag) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Carton_Output_Time"), simpleDateFormat.format(System.currentTimeMillis())); + jsonObject.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Carton_Event_Number"), "eventQueue_" + hangNumber); + jsonObject.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Carton_Task_Start_Time"), simpleDateFormat.format(startDispatchTimeMillis)); + if (flag) { jsonObject.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Carton_Task_Total_Time"), timeSoFar() + "ms"); - outPutJournalLog(jsonObject.toString(), SwitchForSwingChecker.EASY_CHECK_FLAG); + } else { + jsonObject.put(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Carton_Task_Total_Time"), totalTime() + "ms"); } + outPutJournalLog(jsonObject.toString(), SwitchForSwingChecker.EASY_CHECK_FLAG); } } diff --git a/designer-base/src/main/java/com/fr/design/carton/SwitchForSwingChecker.java b/designer-base/src/main/java/com/fr/design/carton/SwitchForSwingChecker.java index ec1b427dd..683179293 100644 --- a/designer-base/src/main/java/com/fr/design/carton/SwitchForSwingChecker.java +++ b/designer-base/src/main/java/com/fr/design/carton/SwitchForSwingChecker.java @@ -180,7 +180,7 @@ public class SwitchForSwingChecker implements XMLReadable, XMLWriter { CartonUploadMessage cartonUploadMessage = new CartonUploadMessage(); JSONObject x = (JSONObject) jsonObject; cartonUploadMessage.setHangCount(x.getString(Toolkit.i18nText("Fine-Design_Basic_Carton_Event_Number"))); - cartonUploadMessage.setSlowTime(x.getString(Toolkit.i18nText("Fine-Design_Basic_Carton_Output_Time")) + "ms"); + cartonUploadMessage.setSlowTime(x.getString(Toolkit.i18nText("Fine-Design_Basic_Carton_Output_Time"))); cartonUploadMessage.setThreadTime("undefined"); //这个跟输出到文件中的格式匹配,参考EventDis里的stackTraceToString方法 String indentation = " "; @@ -308,4 +308,5 @@ public class SwitchForSwingChecker implements XMLReadable, XMLWriter { writer.attr("easyChecker", easyChecker); writer.end(); } + } diff --git a/designer-base/src/main/java/com/fr/design/file/DefaultTemplateTreeDefineProcessor.java b/designer-base/src/main/java/com/fr/design/file/DefaultTemplateTreeDefineProcessor.java index aa75d7f09..103bf5ee3 100644 --- a/designer-base/src/main/java/com/fr/design/file/DefaultTemplateTreeDefineProcessor.java +++ b/designer-base/src/main/java/com/fr/design/file/DefaultTemplateTreeDefineProcessor.java @@ -207,7 +207,7 @@ public class DefaultTemplateTreeDefineProcessor extends AbstractTemplateTreeDefi for (ExpandMutableTreeNode treeNode : treeNodeList) { FileOperationHelper.getInstance().checkFreeOrLock(treeNode, pasteNodes, lockedNodes); } - if (pasteNodes.isEmpty()) { + if (pasteNodes.isEmpty() || !lockedNodes.isEmpty()) { //提示:复制的文件都不能黏贴 FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Confirm_Paste_Unlock_File"), @@ -215,18 +215,7 @@ public class DefaultTemplateTreeDefineProcessor extends AbstractTemplateTreeDefi WARNING_MESSAGE); return; } - if (lockedNodes.isEmpty()) { - doPaste(targetDir, pasteNodes); - } else { - if (FineJOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), - Toolkit.i18nText("Fine-Design_Basic_Confirm_Paste_Other_File"), - Toolkit.i18nText("Fine-Design_Basic_Confirm"), - YES_NO_OPTION) - == JOptionPane.YES_OPTION) { - // 黏贴其他可黏贴的文件 - doPaste(targetDir, pasteNodes); - } - } + doPaste(targetDir, pasteNodes); } /** @@ -329,21 +318,20 @@ public class DefaultTemplateTreeDefineProcessor extends AbstractTemplateTreeDefi WARNING_MESSAGE); return; } + // 筛选可以移动的文件 + ArrayList moveNodes = new ArrayList<>(); + ArrayList lockedNodes = new ArrayList<>(); + for (ExpandMutableTreeNode treeNode : getFileTree().getSelectedTreeNodes()) { + FileOperationHelper.getInstance().checkFreeOrLock(treeNode, moveNodes, lockedNodes); + } - ExpandMutableTreeNode[] selectedTreeNodes = getFileTree().getSelectedTreeNodes(); - for (ExpandMutableTreeNode treeNode : selectedTreeNodes) { - if (treeNode.getUserObject() instanceof FileNode) { - FileNode node = (FileNode) treeNode.getUserObject(); - String lock = node.getLock(); - if (lock != null && !lock.equals(node.getUserID())) { - // 提醒被锁定模板无法移动 - FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), - Toolkit.i18nText("Fine-Design_Basic_Unable_Move_Locked_File"), - Toolkit.i18nText("Fine-Design_Basic_Alert"), - WARNING_MESSAGE); - return; - } - } + if (!lockedNodes.isEmpty()) { + // 提醒被锁定模板无法移动 + FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), + Toolkit.i18nText("Fine-Design_Basic_Unable_Move_Locked_File"), + Toolkit.i18nText("Fine-Design_Basic_Alert"), + WARNING_MESSAGE); + return; } new TemplateMoveDialog(); diff --git a/designer-base/src/main/java/com/fr/design/file/FileOperationHelper.java b/designer-base/src/main/java/com/fr/design/file/FileOperationHelper.java index 8c2eb9ac8..2cf2ef9d1 100644 --- a/designer-base/src/main/java/com/fr/design/file/FileOperationHelper.java +++ b/designer-base/src/main/java/com/fr/design/file/FileOperationHelper.java @@ -40,10 +40,10 @@ public class FileOperationHelper { HistoryTemplateListCache.getInstance().deleteFile(nodeFILE); FineLoggerFactory.getLogger().info("template {} move to {} success.", sourceFileNode.getEnvPath(), targetDir); } else { - //删除失败,将复制过去的文件删掉 - TemplateResourceManager.getResource().delete(new FileNodeFILE(targetPath)); + //删除源文件失败,将复制过去的文件删掉 + TemplateResourceManager.getResource().delete(new FileNodeFILE(new FileNode(targetPath, sourceFileNode.isDirectory()))); FineLoggerFactory.getLogger().error("template {} move to {} failed.", sourceFileNode.getEnvPath(), targetDir); - targetPath = StringUtils.EMPTY; + throw new ResourceIOException(String.format("template %s move to %s failed", sourceFileNode.getEnvPath(), targetDir)); } } return targetPath; @@ -79,13 +79,16 @@ public class FileOperationHelper { public boolean checkFreeOrLock(ExpandMutableTreeNode node, ArrayList dNodes, ArrayList lNodes) { // 自己没锁 boolean selfEmptyLock = false; + boolean dir = false; Object userObj = node.getUserObject(); if (userObj instanceof FileNode) { - String lock = ((FileNode) userObj).getLock(); - selfEmptyLock = lock == null || ((FileNode) userObj).getUserID().equals(lock); + FileNode fileNode = (FileNode) userObj; + String lock = fileNode.getLock(); + selfEmptyLock = lock == null || fileNode.getUserID().equals(lock); + dir = fileNode.isDirectory(); } - if (node.isLeaf()) { + if (!dir) { if (selfEmptyLock) { dNodes.add(node); } else { @@ -130,7 +133,9 @@ public class FileOperationHelper { FileNode[] fileNodes = TemplateTreePane.getInstance().getTemplateFileTree().listFile(sourceDir); if (ArrayUtils.isEmpty(fileNodes)) { //空目录:相当于新建一个目录 - DesignerFrameFileDealerPane.getInstance().getSelectedOperation().mkdir(targetDir); + if (!DesignerFrameFileDealerPane.getInstance().getSelectedOperation().mkdir(targetDir)) { + throw new ResourceIOException(String.format("copy dir failed: from %s to %s.", sourceDir, targetDir)); + } return; } for (FileNode fileNode : fileNodes) { diff --git a/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java b/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java index 381f20172..18abbb7e2 100644 --- a/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java +++ b/designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java @@ -393,6 +393,7 @@ public class TemplateTreePane extends JPanel implements FileOperations { if (TemplateTreeSearchManager.getInstance().isInSearchMode()) { TemplateTreeSearchManager.getInstance().deleteMatchedNode(deletedPaths); TemplateTreeSearchManager.getInstance().updateTemplateTree(); + TemplateTreeSearchManager.getInstance().setRefreshing(false); } else { TreePath[] paths = reportletsTree.getSelectionPaths(); if (paths == null) { diff --git a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java index 609e99e86..0a0d6c5d3 100644 --- a/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java +++ b/designer-base/src/main/java/com/fr/design/gui/itree/filetree/TemplateFileTree.java @@ -35,6 +35,8 @@ public class TemplateFileTree extends EnvFileTree { protected Map allTreeNode = new ConcurrentHashMap<>(); protected Map calculateNode = new ConcurrentHashMap<>(); protected Map> currentTreeMode = new ConcurrentHashMap<>(); + private static final int MAX_NODE_EXPAND_NUM = 50; + private static final int MAX_MATCHED_NODE_NUM = 500; public TemplateFileTree() { super(ProjectConstants.REPORTLETS_NAME, null, null); @@ -272,7 +274,10 @@ public class TemplateFileTree extends EnvFileTree { refreshTreeNode4TreeSearch(root); sortTreeNode(root); ((DefaultTreeModel) this.getModel()).reload(root); - root.expandCurrentTreeNode(this); + if (currentTreeMode.keySet().size() < MAX_NODE_EXPAND_NUM || TemplateTreeSearchManager.getInstance().matchesNode().length < MAX_MATCHED_NODE_NUM) { + //要展开的节点比较多的话,全部展开会有性能问题 + root.expandCurrentTreeNode(this); + } } /** diff --git a/designer-base/src/main/java/com/fr/design/mainframe/manager/search/TemplateTreeSearchManager.java b/designer-base/src/main/java/com/fr/design/mainframe/manager/search/TemplateTreeSearchManager.java index c9b875c56..2695c2443 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/manager/search/TemplateTreeSearchManager.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/manager/search/TemplateTreeSearchManager.java @@ -12,7 +12,9 @@ import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; import javax.swing.SwingUtilities; +import javax.swing.SwingWorker; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -129,7 +131,14 @@ public class TemplateTreeSearchManager { setTreeSearchStatus(TreeSearchStatus.SEARCHING); rendererHelper.replaceTreeRenderer(getCurrentTemplateTree(), searchText); FineLoggerFactory.getLogger().debug("start template search for search text: {}", searchText); - treeSearcher.startSearch(searchText); + new SwingWorker() { + + @Override + protected Void doInBackground() throws Exception { + treeSearcher.startSearch(searchText); + return null; + } + }.execute(); } /** @@ -203,7 +212,13 @@ public class TemplateTreeSearchManager { } public void deleteMatchedNode(Set fileNodes) { - treeSearcher.getMatchSets().removeAll(fileNodes); + Set deleteNode = new HashSet<>(); + for (FileNode matchedNode : treeSearcher.getMatchSets()) { + if (fileNodes.stream().anyMatch(fileNode -> fileNode.getEnvPath().equals(matchedNode.getEnvPath()))) { + deleteNode.add(matchedNode); + } + } + treeSearcher.getMatchSets().removeAll(deleteNode); } /** diff --git a/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/common/TemplateDirSearchCallBack.java b/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/common/TemplateDirSearchCallBack.java index 65ac5a020..37853c937 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/common/TemplateDirSearchCallBack.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/common/TemplateDirSearchCallBack.java @@ -24,10 +24,8 @@ public class TemplateDirSearchCallBack implements TreeSearchCallback { if (TemplateDirTreeSearchManager.getInstance().getTreeSearchStatus() != TreeSearchStatus.SEARCHING) { return; } - if (treeSearchResult.isSuccess()) { - // 添加结果 - addToTreeSearcher(treeSearchResult); - } + // 添加结果 + addToTreeSearcher(treeSearchResult); if (treeSearcher.getCalculatedCount() == treeSearcher.getAllDirSize()) { updateTemplateTree(); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/common/TemplateSearchCallBack.java b/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/common/TemplateSearchCallBack.java index 925760f79..5905ea9a3 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/common/TemplateSearchCallBack.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/common/TemplateSearchCallBack.java @@ -24,10 +24,8 @@ public class TemplateSearchCallBack implements TreeSearchCallback { if (TemplateTreeSearchManager.getInstance().getTreeSearchStatus() != TreeSearchStatus.SEARCHING) { return; } - if (treeSearchResult.isSuccess()) { - // 添加结果 - addToTreeSearcher(treeSearchResult); - } + // 添加结果 + addToTreeSearcher(treeSearchResult); updateTemplateTree(); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/common/TemplateSearchTask.java b/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/common/TemplateSearchTask.java index a23775bbb..b1cc74374 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/common/TemplateSearchTask.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/common/TemplateSearchTask.java @@ -63,7 +63,8 @@ public class TemplateSearchTask implements TreeSearchTask { * @param fileNode */ private TreeSearchResult dealWithErrorTemplateWrapper(FileNode fileNode) { - return new TemplateSearchResult.Builder().buildSuccess(false).build(); + return new TemplateSearchResult.Builder().buildSuccess(false) + .buildAddToCalculated(Arrays.asList(fileNode.getEnvPath())).build(); } /** diff --git a/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/pre/TemplatePreSearchCallBack.java b/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/pre/TemplatePreSearchCallBack.java index 83176f100..fd2c6853b 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/pre/TemplatePreSearchCallBack.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/pre/TemplatePreSearchCallBack.java @@ -17,9 +17,7 @@ public class TemplatePreSearchCallBack extends TemplateSearchCallBack { @Override public void done(TreeSearchResult searchResult) { - if (searchResult.isSuccess()) { - addToTreeSearcher(searchResult); - } + addToTreeSearcher(searchResult); } /** diff --git a/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/pre/TemplatePreSearchTask.java b/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/pre/TemplatePreSearchTask.java index 496eef514..5eed45062 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/pre/TemplatePreSearchTask.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/manager/search/searcher/control/pre/TemplatePreSearchTask.java @@ -37,7 +37,7 @@ public class TemplatePreSearchTask implements TreeSearchTask { FineLoggerFactory.getLogger().info("[Template Search] calculate {} child nodes success. total child node num is: {}", fileNode.getEnvPath(), allChildNode.size()); } catch (Exception e) { FineLoggerFactory.getLogger().error("[Template Search] calculate {} child nodes failed", fileNode.getEnvPath()); - result = new TemplateSearchResult.Builder().buildSuccess(false).build(); + result = new TemplateSearchResult.Builder().buildAddToNotCalculated(new ArrayList<>()).buildSuccess(false).build(); } callback.done(result); } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/action/StartUseAction.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/action/StartUseAction.java index 2315fbb0e..de813883f 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/action/StartUseAction.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/action/StartUseAction.java @@ -2,6 +2,7 @@ package com.fr.design.mainframe.alphafine.action; import com.fr.common.util.Strings; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.alphafine.AlphaFineHelper; import com.fr.design.mainframe.alphafine.download.FineMarketConstants; import com.fr.design.mainframe.alphafine.download.FineMarketDownloadManager; @@ -53,25 +54,33 @@ public class StartUseAction implements ActionListener { }.execute(); } + /** + * 打开模板并打开文件目录 + * */ void open(String fileName) throws IOException { if (Strings.isEmpty(fileName)) { return; } + // 打开模板 + openInDesigner(fileName); + + // 打开系统文件夹 + File parentDir = new File(fileName).getParentFile(); + Desktop.getDesktop().open(parentDir); + } + + void openInDesigner(String fileName) { File fileNeedOpen = new File(fileName); if (fileName.endsWith(FineMarketConstants.ZIP)) { - File[] files = fileNeedOpen.listFiles(); + File[] files = fileNeedOpen.getParentFile().listFiles(); fileNeedOpen = getFirstCptOrFrm(files); } else if (fileName.endsWith(FineMarketConstants.RAR)) { - // rar直接打开系统文件夹 - File parentDir = new File(fileName).getParentFile(); - Desktop.getDesktop().open(parentDir); + // rar资源没有解压,所以不用打开模板 return; } - openInDesigner(fileNeedOpen); - } - void openInDesigner(File file) { - DesignerContext.getDesignerFrame().openTemplate(new FileFILE(file)); + // 打开模板 + DesignerContext.getDesignerFrame().openTemplate(new FileFILE(fileNeedOpen)); } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/download/FineMarketDownloadManager.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/download/FineMarketDownloadManager.java index 08a785311..c95ee8bde 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/download/FineMarketDownloadManager.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/download/FineMarketDownloadManager.java @@ -13,9 +13,9 @@ import com.fr.design.mainframe.alphafine.search.helper.FineMarketClientHelper; import com.fr.design.mainframe.toast.SimpleToast; import com.fr.log.FineLoggerFactory; import com.fr.third.jodd.io.ZipUtil; -import com.fr.workspace.WorkContext; import javax.swing.SwingUtilities; +import javax.swing.filechooser.FileSystemView; import java.awt.Window; import java.io.File; import java.io.IOException; @@ -57,8 +57,8 @@ public class FineMarketDownloadManager { } private String install(TemplateResource resource, Window parentWindow) { - // 获取报表录作为下载位置 - String workDir = WorkContext.getCurrent().getPath() + FineMarketConstants.REPORTLETS; + // 默认下载到桌面 + String workDir = FileSystemView.getFileSystemView().getHomeDirectory().getPath(); File destDir = new File(workDir); DownloadProcess downloadProcess = new DownloadProcess(parentWindow); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/helper/FineMarketClientHelper.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/helper/FineMarketClientHelper.java index 52e7e3a80..07fd402fb 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/helper/FineMarketClientHelper.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/helper/FineMarketClientHelper.java @@ -35,6 +35,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -154,18 +155,20 @@ public class FineMarketClientHelper { * */ private File createDestFile(File destDir, TemplateResource resource) { String fileName = resource.getName(); + File finalDir = new File(StableUtils.pathJoin(FileCommonUtils.getAbsolutePath(destDir), fileName)); try { - File finalDir = new File(StableUtils.pathJoin(FileCommonUtils.getAbsolutePath(destDir), fileName)); if (!finalDir.exists()) { finalDir.mkdir(); } // 获取文件名(含后缀) fileName = resource.getFileName(); + String prefix = fileName.substring(0, fileName.length() - 4); + String suffix = fileName.substring(fileName.length() - 4); // 处理重复文件名 - String fileNameFormat = "(%d)" + fileName; - Pattern pattern = Pattern.compile("\\((\\d)\\)" + fileName); + String fileNameFormat = prefix + "(%d)" + suffix; + Pattern pattern = Pattern.compile(prefix + "\\((\\d)\\)" + suffix); int cnt = 0; File[] files = finalDir.listFiles(); @@ -178,15 +181,14 @@ public class FineMarketClientHelper { cnt++; fileName = String.format(fileNameFormat, cnt); - - File destFile = new File(StableUtils.pathJoin(FileCommonUtils.getAbsolutePath(finalDir), fileName)); - destFile.createNewFile(); return destFile; } catch (Exception e) { FineLoggerFactory.getLogger().error(e, e.getMessage()); } - return null; + fileName = UUID.randomUUID() + fileName; + File dest = new File(StableUtils.pathJoin(FileCommonUtils.getAbsolutePath(finalDir), fileName)); + return dest; } private static CloseableHttpResponse getDownloadHttpResponse(String url) throws Exception { diff --git a/designer-realize/src/main/java/com/fr/design/webattr/WriteWebSettingPane.java b/designer-realize/src/main/java/com/fr/design/webattr/WriteWebSettingPane.java index 527acb4c4..dd93281ac 100644 --- a/designer-realize/src/main/java/com/fr/design/webattr/WriteWebSettingPane.java +++ b/designer-realize/src/main/java/com/fr/design/webattr/WriteWebSettingPane.java @@ -4,7 +4,6 @@ import com.fr.base.BaseUtils; import com.fr.design.ExtraDesignClassManager; import com.fr.design.gui.core.WidgetOption; import com.fr.design.gui.ibutton.UIColorButton; -import com.fr.design.gui.ibutton.UINoThemeColorButton; import com.fr.design.gui.ibutton.UIRadioButton; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.ilable.UILabel; @@ -45,7 +44,7 @@ public class WriteWebSettingPane extends WebSettingPane { protected JPanel createOtherSetPane() { colorBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Set_Background_Of_Current_Row") + ":"); colorBox.setSelected(true); - colorButton = new UINoThemeColorButton(BaseUtils.readIcon("/com/fr/design/images/gui/color/background.png")); + colorButton = new UIColorButton(BaseUtils.readIcon("/com/fr/design/images/gui/color/background.png")); colorBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { colorButton.setEnabled(colorBox.isSelected());