From 8ba66293908d0ee0d4fc30315068c28e13ebfbf9 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Mon, 10 Sep 2018 17:49:40 +0800 Subject: [PATCH 1/6] =?UTF-8?q?REPORT-10896=20=E5=A4=9A=E4=BA=BA=E8=BF=9C?= =?UTF-8?q?=E7=A8=8B=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/DesignerEnvManager.java | 32 +++----- .../design/file/HistoryTemplateListCache.java | 10 ++- .../com/fr/design/file/TemplateTreePane.java | 82 ++++++++++++------- .../DesignerFrameFileDealerPane.java | 29 ++++--- .../mainframe/socketio/DesignerSocketIO.java | 13 ++- 5 files changed, 93 insertions(+), 73 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index 16d00156b..d054ab959 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -26,6 +26,7 @@ import com.fr.general.xml.GeneralXMLTools; import com.fr.log.FineLoggerFactory; import com.fr.stable.CommonUtils; import com.fr.stable.Constants; +import com.fr.stable.CoreConstants; import com.fr.stable.EnvChangedListener; import com.fr.stable.ListMap; import com.fr.stable.ProductConstants; @@ -38,6 +39,7 @@ import com.fr.stable.xml.XMLReadable; import com.fr.stable.xml.XMLTools; import com.fr.stable.xml.XMLWriter; import com.fr.stable.xml.XMLableReader; +import com.fr.third.org.apache.commons.io.FilenameUtils; import com.fr.workspace.WorkContext; import com.fr.workspace.WorkContextCallback; @@ -850,10 +852,9 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { * @param filePath 文件路径 */ public void addRecentOpenedFilePath(String filePath) { + filePath = FilenameUtils.standard(filePath); // 先删除. - if (getRecentOpenedFilePathList().contains(filePath)) { - getRecentOpenedFilePathList().remove(filePath); - } + getRecentOpenedFilePathList().remove(filePath); getRecentOpenedFilePathList().add(0, filePath); checkRecentOpenedFileNum(); @@ -862,8 +863,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { /** * 替换近期打开的文件路径 * - * @param oldPath 旧的路径 - * @param newPath 新的路径 + * @param oldPath path 使用 unix 分隔符 + * @param newPath path 使用 unix 分隔符 */ public void replaceRecentOpenedFilePath(String oldPath, String newPath) { List list = getRecentOpenedFilePathList(); @@ -872,28 +873,22 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { list.remove(oldPath); list.add(index, newPath); } - oldPath = oldPath.replaceAll("\\\\", "/"); - if (list.contains(oldPath)) { - int index = list.indexOf(oldPath); - list.remove(oldPath); - list.add(index, newPath); - } } /** * 替换近期打开的文件路径 * * @param type 文件类型,文件夹true,文件false - * @param oldPath 旧的路径 使用反斜杠分割 - * @param newPath 新的路径 使用反斜杠分割 + * @param oldPath path 使用 unix 分隔符 + * @param newPath path 使用 unix 分隔符 */ public void replaceRecentOpenedFilePath(boolean type, String oldPath, String newPath) { List list = getRecentOpenedFilePathList(); ListIterator iterator = list.listIterator(); while (iterator.hasNext()) { - String s = iterator.next().replaceAll("/", "\\\\"); - if (type ? s.contains(oldPath + "\\") : s.equals(oldPath)) { + String s = FilenameUtils.standard(iterator.next()); + if (type ? s.contains(oldPath + CoreConstants.SEPARATOR) : s.equals(oldPath)) { s = s.replace(oldPath, newPath); iterator.set(s); } @@ -916,9 +911,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { * @param filePath 文件路径 */ public void removeRecentOpenedFilePath(String filePath) { - if (getRecentOpenedFilePathList().contains(filePath)) { - getRecentOpenedFilePathList().remove(filePath); - } + filePath = FilenameUtils.standard(filePath); + getRecentOpenedFilePathList().remove(filePath); } @@ -1637,7 +1631,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { if (reader.isChildNode()) { String n = reader.getTagName(); if ("Path".equals(n)) { - String path = reader.getElementValue(); + String path = FilenameUtils.standard(reader.getElementValue()); if (StringUtils.isNotEmpty(path)) { recentOpenedFileList.add(path); } diff --git a/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java b/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java index 13fd85955..70fbde3f1 100644 --- a/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java +++ b/designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java @@ -11,7 +11,9 @@ import com.fr.file.FILE; import com.fr.file.FileNodeFILE; import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; +import com.fr.stable.CoreConstants; import com.fr.stable.StringUtils; +import com.fr.third.org.apache.commons.io.FilenameUtils; import java.util.ArrayList; import java.util.Collections; @@ -270,8 +272,8 @@ public class HistoryTemplateListCache implements CallbackEvent { template = this.getCurrentEditingTemplate(); if (template != null) { - String editingPath = template.getEditingFILE().getPath().replaceAll("/", "\\\\"); - if (isDir ? editingPath.contains(from + "\\") : editingPath.equals(from)) { + String editingPath = FilenameUtils.standard(template.getEditingFILE().getPath()); + if (isDir ? editingPath.contains(from + CoreConstants.SEPARATOR) : editingPath.equals(from)) { FILE renameFile = template.getEditingFILE(); renameFile.setPath(editingPath.replace(from, to)); } @@ -279,8 +281,8 @@ public class HistoryTemplateListCache implements CallbackEvent { for (int i = 0; i < this.getHistoryCount(); i++) { template = this.get(i); - String editingPath = template.getEditingFILE().getPath().replaceAll("/", "\\\\"); - if (isDir ? editingPath.contains(from + "\\") : editingPath.equals(from)) { + String editingPath = FilenameUtils.standard(template.getEditingFILE().getPath()); + if (isDir ? editingPath.contains(from + CoreConstants.SEPARATOR) : editingPath.equals(from)) { FILE renameFile = template.getEditingFILE(); renameFile.setPath(editingPath.replace(from, to)); } 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 3344d69f2..2a8b543d7 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 @@ -5,6 +5,8 @@ package com.fr.design.file; import com.fr.base.FRContext; import com.fr.base.io.FileAssistUtilsOperator; +import com.fr.design.DesignerEnvManager; +import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.itree.filetree.TemplateFileTree; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; @@ -20,8 +22,10 @@ import com.fr.general.IOUtils; import com.fr.log.FineLoggerFactory; import com.fr.stable.CoreConstants; import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; import com.fr.workspace.WorkContext; +import com.fr.workspace.connect.WorkspaceConnection; import javax.swing.JOptionPane; import javax.swing.JPanel; @@ -186,6 +190,26 @@ public class TemplateTreePane extends JPanel implements FileOperations { */ @Override public void openFile() { + // 判断是否是远程设计的锁定文件 + if (!WorkContext.getCurrent().isLocal()) { + FileNode node = reportletsTree.getSelectedFileNode(); + if (node == null) { + return; + } + + String envName = DesignerEnvManager.getEnvManager().getCurEnvName(); + DesignerWorkspaceInfo info = DesignerEnvManager.getEnvManager().getWorkspaceInfo(envName); + + String username = null; + if (info != null) { + WorkspaceConnection connection = info.getConnection(); + username = connection == null ? StringUtils.EMPTY : connection.getUserName(); + } + String lock = node.getLock(); + if (lock != null && !lock.equals(username)) { + return; + } + } String reportPath = reportletsTree.getSelectedTemplatePath(); final String selectedFilePath = StableUtils.pathJoin(ProjectConstants.REPORTLETS_NAME, reportPath); DesignerContext.getDesignerFrame().openTemplate(new FileNodeFILE(new FileNode(selectedFilePath, false))); @@ -226,11 +250,6 @@ public class TemplateTreePane extends JPanel implements FileOperations { public void deleteFile() { - String tipContent = - countSelectedFolder() > 0 - ? Toolkit.i18nText("Fine-Design_Basic_Confirm_Delete_Folder") - : Toolkit.i18nText("Fine-Design_Basic_Confirm_Delete_File"); - ExpandMutableTreeNode[] treeNodes = reportletsTree.getSelectedTreeNodes(); // 筛选可以删除的文件 ArrayList deletableNodes = new ArrayList<>(); @@ -238,40 +257,49 @@ public class TemplateTreePane extends JPanel implements FileOperations { for (ExpandMutableTreeNode treeNode : treeNodes) { checkFreeOrLock(treeNode, deletableNodes, lockedNodes); } - - boolean success = false; - if (lockedNodes.isEmpty()) { + String tipContent = + countSelectedFolder() > 0 + ? Toolkit.i18nText("Fine-Design_Basic_Confirm_Delete_Folder") + : Toolkit.i18nText("Fine-Design_Basic_Confirm_Delete_File"); + if (JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), tipContent, UIManager.getString("OptionPane.titleText"), YES_NO_OPTION) - == JOptionPane.OK_OPTION) { + == JOptionPane.YES_OPTION) { // 删除所有选中的即可 - success = deleteNodes(Arrays.asList(treeNodes)); + if (!deleteNodes(Arrays.asList(treeNodes))) { + JOptionPane.showConfirmDialog(null, + Toolkit.i18nText("Fine-Design_Basic_Delete_Failure"), + UIManager.getString("OptionPane.titleText"), + JOptionPane.DEFAULT_OPTION, + JOptionPane.ERROR_MESSAGE); + } } - } else { + String tipContent = + countSelectedFolder() > 0 + ? Toolkit.i18nText("Fine-Design_Basic_Confirm_Delete_Unlock_File_And_Folder") + : Toolkit.i18nText("Fine-Design_Basic_Confirm_Delete_Unlock_File"); + if (JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), - Toolkit.i18nText("Fine-Design_Basic_Confirm_Delete_Unlock_File"), + tipContent, UIManager.getString("OptionPane.titleText"), YES_NO_OPTION) == JOptionPane.YES_OPTION) { // 删除其他 - success = deleteNodes(deletableNodes); + if (!deleteNodes(deletableNodes)) { + JOptionPane.showConfirmDialog(null, + Toolkit.i18nText("Fine-Design_Basic_Delete_Failure"), + UIManager.getString("OptionPane.titleText"), + JOptionPane.DEFAULT_OPTION, + JOptionPane.ERROR_MESSAGE); + } } } - - if (!success) { - JOptionPane.showConfirmDialog(null, - Toolkit.i18nText("Fine-Design_Basic_Delete_Failure"), - UIManager.getString("OptionPane.titleText"), - JOptionPane.DEFAULT_OPTION, - JOptionPane.ERROR_MESSAGE); - } - reportletsTree.refresh(); } @@ -314,15 +342,7 @@ public class TemplateTreePane extends JPanel implements FileOperations { boolean childrenEmptyLock = true; for (ExpandMutableTreeNode child : children) { - - boolean childEmptyLock = checkFreeOrLock(child, dNodes, lNodes); - if (childEmptyLock) { - dNodes.add(child); - } else { - lNodes.add(child); - } - - childrenEmptyLock = childrenEmptyLock && childEmptyLock; + childrenEmptyLock = checkFreeOrLock(child, dNodes, lNodes) && childrenEmptyLock; } boolean emptyLock = childrenEmptyLock && selfEmptyLock; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 83e30eecf..5e1c6b2a4 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -36,6 +36,7 @@ import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; import com.fr.stable.CoreConstants; import com.fr.stable.StringUtils; +import com.fr.third.org.apache.commons.io.FilenameUtils; import com.fr.workspace.WorkContext; import javax.swing.BorderFactory; @@ -394,8 +395,8 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt fnf = new FileNodeFILE(node); String oldName = fnf.getName(); - String suffix = fnf.isDirectory() ? "" : oldName.substring(oldName.lastIndexOf(CoreConstants.DOT), oldName.length()); - oldName = oldName.replaceAll(suffix, ""); + String suffix = fnf.isDirectory() ? StringUtils.EMPTY : oldName.substring(oldName.lastIndexOf(CoreConstants.DOT), oldName.length()); + oldName = oldName.replaceAll(suffix, StringUtils.EMPTY); this.setLayout(new BorderLayout()); this.setModal(true); @@ -509,11 +510,11 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt String userInput = nameField.getText().trim(); - String path = fnf.getPath(); + String path = FilenameUtils.standard(fnf.getPath()); String oldName = fnf.getName(); - String suffix = fnf.isDirectory() ? "" : oldName.substring(oldName.lastIndexOf(CoreConstants.DOT), oldName.length()); - oldName = oldName.replaceAll(suffix, ""); + String suffix = fnf.isDirectory() ? StringUtils.EMPTY : oldName.substring(oldName.lastIndexOf(CoreConstants.DOT), oldName.length()); + oldName = oldName.replaceAll(suffix, StringUtils.EMPTY); // 输入为空或者没有修改 if (ComparatorUtils.equals(userInput, oldName)) { @@ -521,18 +522,16 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt return; } - String oldPath = path.replaceAll(CoreConstants.SEPARATOR, "\\\\"); - - String parentPath = fnf.getParent().getPath().replaceAll(CoreConstants.SEPARATOR, "\\\\"); + String parentPath = FilenameUtils.standard(fnf.getParent().getPath()); // 简单执行old new 替换是不可行的,例如 /abc/abc/abc/abc/ - String newPath = parentPath + "\\" + userInput + suffix; + String newPath = parentPath + CoreConstants.SEPARATOR + userInput + suffix; - HistoryTemplateListCache.getInstance().rename(fnf, oldPath, newPath); - DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(fnf.isDirectory(), oldPath, newPath); + HistoryTemplateListCache.getInstance().rename(fnf, path, newPath); + DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(fnf.isDirectory(), path, newPath); //模版重命名 - boolean success = selectedOperation.rename(fnf, oldPath, newPath); + boolean success = selectedOperation.rename(fnf, path, newPath); selectedOperation.refresh(); DesignerContext.getDesignerFrame().setTitle(); this.dispose(); @@ -552,8 +551,8 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt String userInput = nameField.getText().trim(); String oldName = fnf.getName(); - String suffix = fnf.isDirectory() ? "" : oldName.substring(oldName.lastIndexOf(CoreConstants.DOT), oldName.length()); - oldName = oldName.replaceAll(suffix, ""); + String suffix = fnf.isDirectory() ? StringUtils.EMPTY : oldName.substring(oldName.lastIndexOf(CoreConstants.DOT), oldName.length()); + oldName = oldName.replaceAll(suffix, StringUtils.EMPTY); if (StringUtils.isEmpty(userInput)) { confirmButton.setEnabled(false); @@ -714,7 +713,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt //新建文件夹 boolean success = selectedOperation.mkdir( - selectedOperation.getFileNode().getParent() + CoreConstants.SEPARATOR + userInput + FilenameUtils.standard(selectedOperation.getFileNode().getParent() + CoreConstants.SEPARATOR + userInput) ); selectedOperation.refresh(); this.dispose(); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java b/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java index e9b12e7b1..4f5c6e371 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java @@ -2,8 +2,9 @@ package com.fr.design.mainframe.socketio; import com.fr.config.RemoteConfigEvent; import com.fr.decision.webservice.utils.DecisionServiceConstants; +import com.fr.design.EnvChangeEntrance; +import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.TemplatePane; import com.fr.design.mainframe.loghandler.DesignerLogHandler; import com.fr.event.EventDispatcher; import com.fr.log.FineLoggerFactory; @@ -84,9 +85,13 @@ public class DesignerSocketIO { try { SwingUtilities.invokeAndWait(new Runnable() { public void run() { - JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Remote_Disconnected"), - null, 0, UIManager.getIcon("OptionPane.errorIcon")); - TemplatePane.getInstance().editItems(); + JOptionPane.showMessageDialog( + DesignerContext.getDesignerFrame(), + Toolkit.i18nText("Fine-Design_Basic_Remote_Disconnected"), + UIManager.getString("OptionPane.messageDialogTitle"), + JOptionPane.ERROR_MESSAGE, + UIManager.getIcon("OptionPane.errorIcon")); + EnvChangeEntrance.getInstance().chooseEnv(); } }); } catch (Exception e) { From 965d4207050ed16b6f506bbfe1f77d5f742daefa Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 11 Sep 2018 00:29:21 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9=20=E4=BA=A4=E4=BA=92=E4=BF=AE=E8=AE=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DesignerFrameFileDealerPane.java | 32 +++++-------------- 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 5e1c6b2a4..a9baaf54c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -10,12 +10,7 @@ import com.fr.design.constants.UIConstants; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.data.tabledata.ResponseDataSourceChange; -import com.fr.design.file.FileOperations; -import com.fr.design.file.FileToolbarStateChangeListener; -import com.fr.design.file.HistoryTemplateListCache; -import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.file.MutilTempalteTabPane; -import com.fr.design.file.TemplateTreePane; +import com.fr.design.file.*; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.imenu.UIMenuHighLight; @@ -39,29 +34,16 @@ import com.fr.stable.StringUtils; import com.fr.third.org.apache.commons.io.FilenameUtils; import com.fr.workspace.WorkContext; -import javax.swing.BorderFactory; -import javax.swing.JDialog; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.SwingConstants; -import javax.swing.UIManager; +import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import java.awt.BorderLayout; -import java.awt.CardLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.FlowLayout; +import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; -import java.util.ArrayList; -import java.util.HashMap; +import java.util.*; import java.util.List; -import java.util.Map; -import java.util.Set; import static javax.swing.JOptionPane.WARNING_MESSAGE; @@ -664,6 +646,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt confirmClose(); } }); + confirmButton.setEnabled(false); // 取消按钮 UIButton cancelButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Cancel")); @@ -700,7 +683,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt this.setAlwaysOnTop(true); this.setIconImage(BaseUtils.readImage("/com/fr/base/images/oem/logo.png")); this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); - GUICoreUtils.centerWindow(this); + GUICoreUtils.setWindowCenter(DesignerContext.getDesignerFrame(), this); this.setVisible(true); } @@ -718,7 +701,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt selectedOperation.refresh(); this.dispose(); if (!success) { - JOptionPane.showConfirmDialog(null, + JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Make_Failure"), UIManager.getString("OptionPane.titleText"), JOptionPane.DEFAULT_OPTION, @@ -733,6 +716,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt if (StringUtils.isEmpty(userInput)) { confirmButton.setEnabled(false); + return; } if (selectedOperation.duplicated(userInput, StringUtils.EMPTY)) { From 87711970404bd946fe5b6657d400c5114d3c89e8 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 11 Sep 2018 02:19:20 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=EF=BC=8C?= =?UTF-8?q?=E8=87=AA=E6=B5=8Bbug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/file/TemplateTreePane.java | 7 ++- .../DesignerFrameFileDealerPane.java | 58 +++++++++++++++---- 2 files changed, 51 insertions(+), 14 deletions(-) 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 2a8b543d7..2b5f2d358 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 @@ -311,8 +311,11 @@ public class TemplateTreePane extends JPanel implements FileOperations { FileNodeFILE nodeFILE = new FileNodeFILE((FileNode) node); if (nodeFILE.exists()) { FileAssistUtilsOperator fileAssistUtils = WorkContext.getCurrent().get(FileAssistUtilsOperator.class); - success = fileAssistUtils.moveToTrash(nodeFILE.getPath()) && success; - HistoryTemplateListCache.getInstance().deleteFile(nodeFILE); + if (fileAssistUtils.moveToTrash(nodeFILE.getPath())) { + HistoryTemplateListCache.getInstance().deleteFile(nodeFILE); + } else { + success = false; + } } } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index a9baaf54c..63d3bd6c6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -10,7 +10,13 @@ import com.fr.design.constants.UIConstants; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.data.tabledata.ResponseDataSourceChange; -import com.fr.design.file.*; +import com.fr.design.file.FileOperations; +import com.fr.design.file.FileToolbarStateChangeListener; +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.file.MutilTempalteTabPane; +import com.fr.design.file.SaveSomeTemplatePane; +import com.fr.design.file.TemplateTreePane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.imenu.UIMenuHighLight; @@ -34,16 +40,29 @@ import com.fr.stable.StringUtils; import com.fr.third.org.apache.commons.io.FilenameUtils; import com.fr.workspace.WorkContext; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.JDialog; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.UIManager; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Set; import static javax.swing.JOptionPane.WARNING_MESSAGE; @@ -509,19 +528,34 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt // 简单执行old new 替换是不可行的,例如 /abc/abc/abc/abc/ String newPath = parentPath + CoreConstants.SEPARATOR + userInput + suffix; - HistoryTemplateListCache.getInstance().rename(fnf, path, newPath); - DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(fnf.isDirectory(), path, newPath); //模版重命名 - boolean success = selectedOperation.rename(fnf, path, newPath); - selectedOperation.refresh(); - DesignerContext.getDesignerFrame().setTitle(); + this.dispose(); - if (!success) { - JOptionPane.showConfirmDialog(null, + boolean success = false; + SaveSomeTemplatePane saveSomeTempaltePane = new SaveSomeTemplatePane(true); + // 只有一个文件未保存时 + if (HistoryTemplateListCache.getInstance().getHistoryCount() == 1) { + int choose = saveSomeTempaltePane.saveLastOneTemplate(); + if (choose != JOptionPane.CANCEL_OPTION) { + success = selectedOperation.rename(fnf, path, newPath); + } + } else { + if (saveSomeTempaltePane.showSavePane()) { + success = selectedOperation.rename(fnf, path, newPath); + } + } + + if (success) { + HistoryTemplateListCache.getInstance().rename(fnf, path, newPath); + DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(fnf.isDirectory(), path, newPath); + selectedOperation.refresh(); + DesignerContext.getDesignerFrame().setTitle(); + } else { + JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Rename_Failure"), - UIManager.getString("OptionPane.titleText"), + UIManager.getString("OptionPane.messageDialogTitle"), JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE); } From bfc608c6b05f77b684e94389f6ec420d4d5851bc Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 11 Sep 2018 10:42:18 +0800 Subject: [PATCH 4/6] =?UTF-8?q?bug=20=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/file/TemplateTreePane.java | 10 ++--- .../DesignerFrameFileDealerPane.java | 15 ++++--- .../java/com/fr/file/FILEChooserPane.java | 44 ++++++++++++------- 3 files changed, 42 insertions(+), 27 deletions(-) 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 2b5f2d358..509e484ae 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 @@ -266,14 +266,14 @@ public class TemplateTreePane extends JPanel implements FileOperations { if (JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), tipContent, - UIManager.getString("OptionPane.titleText"), + UIManager.getString("OptionPane.messageDialogTitle"), YES_NO_OPTION) == JOptionPane.YES_OPTION) { // 删除所有选中的即可 if (!deleteNodes(Arrays.asList(treeNodes))) { JOptionPane.showConfirmDialog(null, Toolkit.i18nText("Fine-Design_Basic_Delete_Failure"), - UIManager.getString("OptionPane.titleText"), + UIManager.getString("OptionPane.messageDialogTitle"), JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE); } @@ -287,14 +287,14 @@ public class TemplateTreePane extends JPanel implements FileOperations { if (JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), tipContent, - UIManager.getString("OptionPane.titleText"), + UIManager.getString("OptionPane.messageDialogTitle"), YES_NO_OPTION) == JOptionPane.YES_OPTION) { // 删除其他 if (!deleteNodes(deletableNodes)) { JOptionPane.showConfirmDialog(null, Toolkit.i18nText("Fine-Design_Basic_Delete_Failure"), - UIManager.getString("OptionPane.titleText"), + UIManager.getString("OptionPane.messageDialogTitle"), JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE); } @@ -406,7 +406,7 @@ public class TemplateTreePane extends JPanel implements FileOperations { if (!lockedNodes.isEmpty()) { JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Warn_Rename_Lock_File"), - UIManager.getString("OptionPane.titleText"), + UIManager.getString("OptionPane.messageDialogTitle"), JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE); return true; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 63d3bd6c6..a0d1531e4 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -510,6 +510,8 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt private void confirmClose() { String userInput = nameField.getText().trim(); + // 处理不合法的文件夹名称 + userInput = userInput.replaceAll("[\\\\/:*?\"<>|]", StringUtils.EMPTY); String path = FilenameUtils.standard(fnf.getPath()); @@ -527,13 +529,12 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt // 简单执行old new 替换是不可行的,例如 /abc/abc/abc/abc/ String newPath = parentPath + CoreConstants.SEPARATOR + userInput + suffix; - - - //模版重命名 - this.dispose(); + //模版重命名 boolean success = false; + + // 提醒保存文件 SaveSomeTemplatePane saveSomeTempaltePane = new SaveSomeTemplatePane(true); // 只有一个文件未保存时 if (HistoryTemplateListCache.getInstance().getHistoryCount() == 1) { @@ -572,6 +573,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt if (StringUtils.isEmpty(userInput)) { confirmButton.setEnabled(false); + return; } if (ComparatorUtils.equals(userInput, oldName)) { @@ -724,6 +726,9 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt private void confirmClose() { String userInput = nameField.getText().trim(); + // 处理不合法的文件夹名称 + userInput = userInput.replaceAll("[\\\\/:*?\"<>|]", StringUtils.EMPTY); + if (StringUtils.isEmpty(userInput)) { return; } @@ -737,7 +742,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt if (!success) { JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Make_Failure"), - UIManager.getString("OptionPane.titleText"), + UIManager.getString("OptionPane.messageDialogTitle"), JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE); } diff --git a/designer-base/src/main/java/com/fr/file/FILEChooserPane.java b/designer-base/src/main/java/com/fr/file/FILEChooserPane.java index 447ebc367..1e4ec0d65 100644 --- a/designer-base/src/main/java/com/fr/file/FILEChooserPane.java +++ b/designer-base/src/main/java/com/fr/file/FILEChooserPane.java @@ -58,6 +58,7 @@ import javax.swing.ListModel; import javax.swing.ListSelectionModel; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; +import javax.swing.UIManager; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.ListSelectionEvent; @@ -1545,25 +1546,34 @@ public class FILEChooserPane extends BasicPane { String userInput = nameField.getText().trim(); - currentDirectory.createFolder(userInput); - - refreshSubFileListModel(); - - setSelectedFileName(userInput); - // ben:这里处理有些不妥,取文件时没有考虑filefilter,不过效果一样,取的时候应该用subfilelist得data - FILE[] allFiles = currentDirectory.listFiles(); - int place = 0; - for (int i = 0; i < allFiles.length; i++) { - if (ComparatorUtils.equals(allFiles[i].getName(), userInput) && allFiles[i].isDirectory()) { - place = i; - break; + // 处理不合法的文件夹名称 + userInput = userInput.replaceAll("[\\\\/:*?\"<>|]", StringUtils.EMPTY); + + if (currentDirectory.createFolder(userInput)) { + refreshSubFileListModel(); + setSelectedFileName(userInput); + // ben:这里处理有些不妥,取文件时没有考虑filefilter,不过效果一样,取的时候应该用subfilelist得data + FILE[] allFiles = currentDirectory.listFiles(); + int place = 0; + for (int i = 0; i < allFiles.length; i++) { + if (ComparatorUtils.equals(allFiles[i].getName(), userInput) && allFiles[i].isDirectory()) { + place = i; + break; + } } + scrollPane.revalidate(); + scrollPane.repaint(); + int total = scrollPane.getVerticalScrollBar().getMaximum(); + int value = total * place / subFileList.getModel().getSize(); + scrollPane.getVerticalScrollBar().setValue(value); + + } else { + JOptionPane.showConfirmDialog(FILEChooserPane.this, + Toolkit.i18nText("Fine-Design_Basic_Make_Failure"), + UIManager.getString("OptionPane.messageDialogTitle"), + JOptionPane.DEFAULT_OPTION, + JOptionPane.ERROR_MESSAGE); } - scrollPane.revalidate(); - scrollPane.repaint(); - int total = scrollPane.getVerticalScrollBar().getMaximum(); - int value = total * place / subFileList.getModel().getSize(); - scrollPane.getVerticalScrollBar().setValue(value); this.dispose(); } From ff520def37d587f091de7f14f889e991daf3ffe5 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 11 Sep 2018 12:26:34 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=A4=9A=E4=BA=BA=E8=BF=9C=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/file/TemplateTreePane.java | 15 +++++++++++++-- .../mainframe/DesignerFrameFileDealerPane.java | 10 ++++++++++ .../mainframe/socketio/DesignerSocketIO.java | 10 ++++++++-- 3 files changed, 31 insertions(+), 4 deletions(-) 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 509e484ae..f40036fe9 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 @@ -25,7 +25,7 @@ import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; import com.fr.workspace.WorkContext; -import com.fr.workspace.connect.WorkspaceConnection; +import com.fr.workspace.connect.WorkspaceConnectionInfo; import javax.swing.JOptionPane; import javax.swing.JPanel; @@ -48,6 +48,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Enumeration; +import static javax.swing.JOptionPane.WARNING_MESSAGE; import static javax.swing.JOptionPane.YES_NO_OPTION; public class TemplateTreePane extends JPanel implements FileOperations { @@ -202,7 +203,7 @@ public class TemplateTreePane extends JPanel implements FileOperations { String username = null; if (info != null) { - WorkspaceConnection connection = info.getConnection(); + WorkspaceConnectionInfo connection = info.getConnection(); username = connection == null ? StringUtils.EMPTY : connection.getUserName(); } String lock = node.getLock(); @@ -285,6 +286,16 @@ public class TemplateTreePane extends JPanel implements FileOperations { ? Toolkit.i18nText("Fine-Design_Basic_Confirm_Delete_Unlock_File_And_Folder") : Toolkit.i18nText("Fine-Design_Basic_Confirm_Delete_Unlock_File"); + if (deletableNodes.isEmpty()) { + // 提醒被锁定模板无法删除 + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), + Toolkit.i18nText("Fine-Design_Basic_Unable_Delete_Locked_File"), + Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), + WARNING_MESSAGE); + return; + } + + if (JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), tipContent, UIManager.getString("OptionPane.messageDialogTitle"), diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index a0d1531e4..d0800c087 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -310,6 +310,16 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } FileNode node = selectedOperation.getFileNode(); + String lock = node.getLock(); + if (lock != null && !lock.equals(node.getUserID())) { + // 提醒被锁定模板无法重命名 + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), + Toolkit.i18nText("Fine-Design_Basic_Unable_Rename_Locked_File"), + Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), + WARNING_MESSAGE); + return; + } + new FileRenameDialog(node); MutilTempalteTabPane.getInstance().repaint(); } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java b/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java index 4e7d42e7d..8ac8b8da9 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java @@ -8,6 +8,7 @@ import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.loghandler.DesignerLogHandler; import com.fr.event.EventDispatcher; import com.fr.log.FineLoggerFactory; +import com.fr.report.RemoteDesignConstants; import com.fr.serialization.SerializerHelper; import com.fr.stable.ArrayUtils; import com.fr.third.apache.log4j.spi.LoggingEvent; @@ -16,6 +17,7 @@ import com.fr.workspace.WorkContext; import com.fr.workspace.Workspace; import com.fr.workspace.base.WorkspaceConstants; import com.fr.workspace.engine.server.rpc.netty.RemoteCallClient; +import com.fr.workspace.server.WorkspaceConnection; import com.fr.workspace.server.socket.SocketInfoOperator; import io.socket.client.IO; import io.socket.client.Socket; @@ -111,12 +113,16 @@ public class DesignerSocketIO { private static String getSocketUri(Workspace current) throws IOException { URL url = new URL(current.getPath()); int port = WorkContext.getCurrent().get(SocketInfoOperator.class).getPort(); - return String.format("%s://%s:%s%s?%s=%s", + WorkspaceConnection connection = RemoteCallClient.getInstance().getConnection(); + return String.format("%s://%s:%s%s?%s=%s&%s=%s", url.getProtocol(), url.getHost(), port, WorkspaceConstants.WS_NAMESPACE, DecisionServiceConstants.WEB_SOCKET_TOKEN_NAME, - RemoteCallClient.getInstance().getConnection()); + connection.getToken(), + RemoteDesignConstants.USER_LOCK_ID, + connection.getId() + ); } } From 295a93d6b38f807883d4abab57e0146bbc413091 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 11 Sep 2018 12:39:38 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=A4=9A=E4=BA=BA=E8=BF=9C=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/file/TemplateTreePane.java | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) 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 f40036fe9..fbe7d4eca 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 @@ -5,8 +5,6 @@ package com.fr.design.file; import com.fr.base.FRContext; import com.fr.base.io.FileAssistUtilsOperator; -import com.fr.design.DesignerEnvManager; -import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.itree.filetree.TemplateFileTree; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; @@ -22,10 +20,8 @@ import com.fr.general.IOUtils; import com.fr.log.FineLoggerFactory; import com.fr.stable.CoreConstants; import com.fr.stable.StableUtils; -import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; import com.fr.workspace.WorkContext; -import com.fr.workspace.connect.WorkspaceConnectionInfo; import javax.swing.JOptionPane; import javax.swing.JPanel; @@ -197,17 +193,8 @@ public class TemplateTreePane extends JPanel implements FileOperations { if (node == null) { return; } - - String envName = DesignerEnvManager.getEnvManager().getCurEnvName(); - DesignerWorkspaceInfo info = DesignerEnvManager.getEnvManager().getWorkspaceInfo(envName); - - String username = null; - if (info != null) { - WorkspaceConnectionInfo connection = info.getConnection(); - username = connection == null ? StringUtils.EMPTY : connection.getUserName(); - } String lock = node.getLock(); - if (lock != null && !lock.equals(username)) { + if (lock != null && !lock.equals(node.getUserID())) { return; } }