From 3d5f28fd959399424b04ab9512b452907cfcfbc3 Mon Sep 17 00:00:00 2001 From: Maximus <2788852163@qq.com> Date: Fri, 8 Jul 2022 14:13:00 +0800 Subject: [PATCH 1/9] =?UTF-8?q?KERNEL-11853=20=E8=AE=BE=E7=BD=AE=E7=9A=84?= =?UTF-8?q?=E5=88=86=E9=92=9F=E6=95=B0=E5=8F=AF=E4=BB=A5=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=B0=8F=E6=95=B0=EF=BC=8C=E4=BD=86=E4=B8=8D=E8=83=BD=E5=B0=8F?= =?UTF-8?q?=E4=BA=8E1=E5=88=86=E9=92=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datapane/ESDStrategyConfigPane.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/ESDStrategyConfigPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/ESDStrategyConfigPane.java index 39b4ecb00f..f3df21df9c 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/ESDStrategyConfigPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/ESDStrategyConfigPane.java @@ -133,7 +133,7 @@ public class ESDStrategyConfigPane extends BasicBeanPane { ob = StrategyConfigHelper.createStrategyConfig(true, false, true); } this.strategyConfig = ob; - this.updateInterval.setText(ob.getUpdateInterval() <= 0 ? "0" : String.format("%.0f", ob.getUpdateInterval() / (double) CacheConstants.MILLIS_OF_MINUTE)); + this.updateInterval.setText(ob.getUpdateInterval() <= 0 ? "0" : String.valueOf(ob.getUpdateInterval() / (double) CacheConstants.MILLIS_OF_MINUTE)); this.schemaTime.setText(StringUtils.join(",", ob.getUpdateSchema().toArray(new String[0]))); this.shouldEvolve.setSelected(ob.shouldEvolve()); this.selectBySchema.setSelected(ob.isScheduleBySchema()); @@ -185,7 +185,6 @@ public class ESDStrategyConfigPane extends BasicBeanPane { this.schemaTimeCheckTips.setVisible(true); throw new IllegalArgumentException("[ESD]Update schema time interval is to short."); } - } else { Collections.addAll(schemaTimes, text.split(",")); } @@ -200,8 +199,15 @@ public class ESDStrategyConfigPane extends BasicBeanPane { String interval = this.updateInterval.getText(); if (checkUpdateInterval(interval)) { long intervalMillis = StringUtils.isEmpty(interval) ? 0 : (long) (Double.parseDouble(interval) * CacheConstants.MILLIS_OF_MINUTE); - config.setUpdateInterval(intervalMillis); + if (intervalMillis >= CacheConstants.MILLIS_OF_MINUTE) { + config.setUpdateInterval(intervalMillis); + } else { + this.updateIntervalCheckTips.setText(InterProviderFactory.getDesignI18nProvider().i18nText("Fine-Design_ESD_Error_Time_Interval_Too_Short")); + this.updateIntervalCheckTips.setVisible(true); + throw new IllegalArgumentException("[ESD]Update schema time interval is to short."); + } } else { + this.updateIntervalCheckTips.setText(InterProviderFactory.getDesignI18nProvider().i18nText("Fine-Design_ESD_Error_Time_Format")); this.updateIntervalCheckTips.setVisible(true); throw new IllegalArgumentException("[ESD]Error update interval format."); } @@ -220,7 +226,7 @@ public class ESDStrategyConfigPane extends BasicBeanPane { private boolean checkUpdateInterval(String intervalValue) { try { - return !StringUtils.isEmpty(intervalValue) && !(Integer.parseInt(intervalValue) <= 0); + return !StringUtils.isEmpty(intervalValue) && !(Double.parseDouble(intervalValue) <= 0); } catch (NumberFormatException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } @@ -228,6 +234,7 @@ public class ESDStrategyConfigPane extends BasicBeanPane { return false; } + private boolean checkCornTimeInterval (String cronText) { // 判断后两次更新时间间隔,如果小于1分钟就返回false try { From 6f8d015598e6015f6bddcc8ff8c2413a9b0d8c1d Mon Sep 17 00:00:00 2001 From: "John.Ying" Date: Mon, 11 Jul 2022 21:12:05 +0800 Subject: [PATCH 2/9] =?UTF-8?q?REPORT-75072=20fix:SocketIO=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E5=A4=B1=E8=B4=A5=EF=BC=8C=E7=AB=AF=E5=8F=A3=E8=A2=AB?= =?UTF-8?q?=E5=8D=A0=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/start/module/DesignerActivator.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index 02152beb17..d3a30eb59b 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -497,10 +497,9 @@ public class DesignerActivator extends Activator implements Prepare { @Override public void prepare() { - - OptimizeUtil.close(() -> { + if (!OptimizeUtil.isOpen()) { LoginAuthServer.getInstance().compatibleStart(); - }); + } ContentReplacerCenter.getInstance().register(); EventDispatcher.listen(DesignerLaunchStatus.STARTUP_COMPLETE, new Listener() { @Override From 82a8701eb50dcfb8b674da8263bca3ba8d924d4a Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 15 Jul 2022 16:43:07 +0800 Subject: [PATCH 3/9] =?UTF-8?q?REPORT-75786=2011.0feature=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E8=AE=BE=E8=AE=A1=E5=99=A8=E6=97=A0=E6=B3=95=E5=90=AF?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/start/MainDesigner.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/start/MainDesigner.java b/designer-realize/src/main/java/com/fr/start/MainDesigner.java index e6e8d090a4..9d4d3eb145 100644 --- a/designer-realize/src/main/java/com/fr/start/MainDesigner.java +++ b/designer-realize/src/main/java/com/fr/start/MainDesigner.java @@ -119,9 +119,8 @@ public class MainDesigner extends BaseDesigner { * @param args 参数 */ public static void main(String[] args) { - DesignerStartupContext.getRecorder().start(); - + showSplash(); startPreload0(); DeepLinkManager.getInstance().start(args); @@ -192,12 +191,6 @@ public class MainDesigner extends BaseDesigner { }; PreLoadService.getInstance().addRunnable(fontLoad); - CompletableFuture splashFuture = CompletableFuture.runAsync(() -> { - DesignerEnvManager.getEnvManager(false); - }) - .thenRun(MainDesigner::showSplash); - PreLoadService.getInstance().addFuture(splashFuture); - } private static void showSplash() { From 84cbc7e64d0f76c3f3170fe9e1a283dc9d8c3790 Mon Sep 17 00:00:00 2001 From: Yvan Date: Fri, 15 Jul 2022 17:49:53 +0800 Subject: [PATCH 4/9] =?UTF-8?q?REPORT-72635=20-=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E9=9D=A2=E6=9D=BF=E4=B8=BA=E7=A9=BA=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=88=E5=90=AB=E6=8E=A7=E5=88=B6=E6=9D=83?= =?UTF-8?q?=E9=99=90=EF=BC=89=20=E3=80=90=E9=97=AE=E9=A2=98=E5=8E=9F?= =?UTF-8?q?=E5=9B=A0=E3=80=91=E8=BF=AD=E4=BB=A3=E4=BB=BB=E5=8A=A1=EF=BC=8C?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=B8=8E=E6=94=B9=E5=8A=A8=E6=80=9D=E8=B7=AF?= =?UTF-8?q?=E8=AF=A6=E8=A7=81https://kms.fineres.com/pages/viewpage.action?= =?UTF-8?q?=3FpageId=3D443822299=20=E3=80=90=E6=94=B9=E5=8A=A8=E6=80=9D?= =?UTF-8?q?=E8=B7=AF=E3=80=91=E5=90=8C=E4=B8=8A=20=E3=80=90review=E5=BB=BA?= =?UTF-8?q?=E8=AE=AE=E3=80=91=E6=97=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datapane/TableDataTreePane.java | 55 +++++++++- .../datapane/auth/TableDataAuthHelper.java | 40 +++++++ .../connect/ConnectionComboBoxPanel.java | 38 +++++-- .../connect/ConnectionTableProcedurePane.java | 102 +++++++++++++++--- .../connect/ItemEditableComboBoxPanel.java | 16 +++ .../tabledatapane/DBTableDataPane.java | 54 +++++++++- .../loading/SwitchableTableDataPane.java | 23 ++++ .../loading/TableDataLoadingPane.java | 54 ++++++++++ .../tabledatapane/loading/TipsPane.java | 45 ++++++++ 9 files changed, 396 insertions(+), 31 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/data/datapane/auth/TableDataAuthHelper.java create mode 100644 designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/SwitchableTableDataPane.java create mode 100644 designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/TableDataLoadingPane.java create mode 100644 designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/TipsPane.java diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java index 112adff560..a093f10396 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java @@ -13,6 +13,7 @@ import com.fr.design.data.BasicTableDataTreePane; import com.fr.design.data.BasicTableDataUtils; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.StrategyConfigAttrUtils; +import com.fr.design.data.datapane.auth.TableDataAuthHelper; import com.fr.design.data.datapane.management.clip.TableDataTreeClipboard; import com.fr.design.data.datapane.management.search.pane.TableDataSearchRemindPane; import com.fr.design.data.datapane.management.search.pane.TreeSearchToolbarPane; @@ -22,6 +23,7 @@ import com.fr.design.data.tabledata.StoreProcedureWorkerListener; import com.fr.design.data.tabledata.paste.TableDataFollowingPasteUtils; import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane; import com.fr.design.data.tabledata.tabledatapane.DBTableDataPane; +import com.fr.design.data.tabledata.tabledatapane.loading.TableDataLoadingPane; import com.fr.design.data.tabledata.wrapper.AbstractTableDataWrapper; import com.fr.design.data.tabledata.wrapper.TableDataWrapper; import com.fr.design.data.tabledata.wrapper.TemplateTableDataWrapper; @@ -39,7 +41,6 @@ import com.fr.design.gui.itextfield.UITextField; import com.fr.design.gui.itoolbar.UIToolbar; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.design.i18n.Toolkit; -import com.fr.design.icon.IconPathConstants; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.menu.LineSeparator; @@ -87,6 +88,7 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; @@ -1017,8 +1019,55 @@ public class TableDataTreePane extends BasicTableDataTreePane { AbstractTableDataPane tableDataPane = wrapper.creatTableDataPane(); - //下面创建creatTableDataPane后会直接populate,所以populate时不能用后设置的一些参数,比如name - dgEdit(tableDataPane, dsName, false); + String tableDataName = wrapper.getTableDataName(); + if (TableDataAuthHelper.needCheckAuthWhenEdit(wrapper.getTableData())) { + // 先打开一个Loading面板 + TableDataLoadingPane loadingPane = new TableDataLoadingPane(); + BasicDialog loadingDialog = loadingPane.showLargeWindow(SwingUtilities.getWindowAncestor(TableDataTreePane.this), new DialogActionAdapter() { + @Override + public void doOk() { + super.doOk(); + } + + @Override + public void doCancel() { + super.doCancel(); + } + }); + loadingDialog.setVisible(true); + + // 查询权限 + new SwingWorker() { + @Override + protected Boolean doInBackground() throws Exception { + Collection noAuthConnections = TableDataAuthHelper.getNoAuthConnections(); + return !noAuthConnections.contains(tableDataName); + } + + @Override + protected void done() { + try { + Boolean hasAuth = get(); + if (hasAuth) { + // 有权限时,关闭Loading面板,打开编辑面板 + loadingDialog.setVisible(false); + dgEdit(tableDataPane, dsName, false); + } else { + // 无权限时,给出无权限提示 + loadingPane.switchTo(TableDataLoadingPane.NO_AUTH_PANE_NAME); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error("loading connection error in remote design", e.getMessage()); + // 查询权限失败时,给出报错提示 + loadingPane.switchTo(TableDataLoadingPane.ERROR_NAME); + } + } + }.execute(); + } else { + // 无需检查权限时,直接打开数据库查询编辑面板 + //下面创建creatTableDataPane后会直接populate,所以populate时不能用后设置的一些参数,比如name + dgEdit(tableDataPane, dsName, false); + } } } diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/auth/TableDataAuthHelper.java b/designer-base/src/main/java/com/fr/design/data/datapane/auth/TableDataAuthHelper.java new file mode 100644 index 0000000000..2d7a6c4c7a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/data/datapane/auth/TableDataAuthHelper.java @@ -0,0 +1,40 @@ +package com.fr.design.data.datapane.auth; + +import com.fr.base.TableData; +import com.fr.data.impl.DBTableData; +import com.fr.decision.base.util.CollectionUtil; +import com.fr.stable.collections.CollectionUtils; +import com.fr.workspace.WorkContext; +import com.fr.workspace.server.connection.DBConnectAuth; + +import javax.swing.SwingWorker; +import java.util.Collection; +import java.util.Collections; + +/** + * 数据连接权限相关的工具类 + * @author Yvan + */ +public class TableDataAuthHelper { + + /** + * 编辑数据集时是否需要检查权限 + * @param tableData + * @return + */ + public static boolean needCheckAuthWhenEdit(TableData tableData) { + // 远程设计下,编辑DBTableData时需要判断权限 + return !WorkContext.getCurrent().isLocal() && tableData instanceof DBTableData; + } + + /** + * 获取无权限数据连接集合 + * 远程下需要调用RPC,为耗时操作,谨慎使用 + * @return + */ + public static Collection getNoAuthConnections() { + // 获取无权限连接集合 + Collection noAuthConnections = WorkContext.getCurrent().get(DBConnectAuth.class).getNoAuthConnections(); + return noAuthConnections == null ? Collections.emptyList() : noAuthConnections; + } +} diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionComboBoxPanel.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionComboBoxPanel.java index 640fb2762a..76f32d6f0c 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionComboBoxPanel.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionComboBoxPanel.java @@ -138,18 +138,34 @@ public class ConnectionComboBoxPanel extends ItemEditableComboBoxPanel { if (connection instanceof NameDatabaseConnection) { this.setSelectedItem(((NameDatabaseConnection) connection).getName()); } else { - String s = DesignerEnvManager.getEnvManager().getRecentSelectedConnection(); - if (StringUtils.isNotBlank(s)) { - // 之前的写法有多线程问题,nameList异步尚未初始化完成的时候,这里可能无法匹配设置数据连接名称,导致DBTableDataPane打开后连接面板空白 - // 这里的需求无非是设置上一次使用的数据连接,做个简单检查这个连接是否存在即可,存在就设置 - if (nameList.contains(s)) { - this.setSelectedItem(s); - } - } - // alex:如果这个ComboBox还是没有选中,那么选中第一个 - if (StringUtils.isBlank(this.getSelectedItem()) && this.getConnectionSize() > 0) { - this.setSelectedItem(this.getConnection(0)); + setRecentConnection(); + } + } + + /** + * 下拉框选项设置成最近选择的connection,如果最近选择不存在,则选择列表中的第一个 + */ + protected void setRecentConnection() { + String s = DesignerEnvManager.getEnvManager().getRecentSelectedConnection(); + if (StringUtils.isNotBlank(s)) { + // 之前的写法有多线程问题,nameList异步尚未初始化完成的时候,这里可能无法匹配设置数据连接名称,导致DBTableDataPane打开后连接面板空白 + // 这里的需求无非是设置上一次使用的数据连接,做个简单检查这个连接是否存在即可,存在就设置 + if (nameList.contains(s)) { + this.setSelectedItem(s); } } + // alex:如果这个ComboBox还是没有选中,那么选中第一个 + if (StringUtils.isBlank(this.getSelectedItem()) && this.getConnectionSize() > 0) { + this.setSelectedItem(this.getConnection(0)); + } + } + + /** + * 是否无选中状态(空白item也视为无选中) + * @return + */ + protected boolean isSelectedItemEmpty() { + String selectedItem = this.getSelectedItem(); + return selectedItem == null || StringUtils.equals(selectedItem, EMPTY.toString()); } } diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionTableProcedurePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionTableProcedurePane.java index a979a20cd6..03722eb9cb 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionTableProcedurePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionTableProcedurePane.java @@ -1,26 +1,32 @@ package com.fr.design.data.datapane.connect; import com.fr.base.BaseUtils; +import com.fr.base.svg.IconUtils; import com.fr.data.core.db.TableProcedure; import com.fr.data.impl.AbstractDatabaseConnection; import com.fr.data.impl.Connection; import com.fr.design.border.UIRoundedBorder; import com.fr.design.constants.UIConstants; +import com.fr.design.data.tabledata.tabledatapane.DBTableDataPane; +import com.fr.design.data.tabledata.tabledatapane.loading.SwitchableTableDataPane; import com.fr.design.dialog.BasicPane; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilist.TableViewList; import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.general.GeneralContext; import com.fr.stable.ArrayUtils; +import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.ToolTipManager; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -45,7 +51,39 @@ public class ConnectionTableProcedurePane extends BasicPane { private java.util.List listeners = new java.util.ArrayList(); public ConnectionTableProcedurePane() { + init(null); + } + + /** + * 传入父容器 + * @param parent + */ + public ConnectionTableProcedurePane(SwitchableTableDataPane parent) { + init(parent); + } + + private void init(SwitchableTableDataPane parent) { this.setLayout(new BorderLayout(4, 4)); + // 初始化数据连接下拉框 + initConnectionComboBox(parent); + // 初始化中间的面板 + JPanel centerPane = initCenterPane(); + this.add(connectionComboBox, BorderLayout.NORTH); + this.add(centerPane, BorderLayout.CENTER); + this.setPreferredSize(new Dimension(WIDTH, getPreferredSize().height)); + addKeyMonitor(); + } + + private JPanel initCenterPane() { + JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + // 搜索面板 + centerPane.add(createSearchPane(), BorderLayout.NORTH); + // 数据库表视图面板 + centerPane.add(createTableViewBorderPane(), BorderLayout.CENTER); + return centerPane; + } + + private void initConnectionComboBox(SwitchableTableDataPane parent) { connectionComboBox = new ConnectionComboBoxPanel(com.fr.data.impl.Connection.class) { @Override @@ -60,10 +98,34 @@ public class ConnectionTableProcedurePane extends BasicPane { search(true); } } + + @Override + protected void afterRefreshItems() { + // 刷新完成后,如果未选中(在nameList初始化完成之前可能会出现),则尝试再次设置 + if (isSelectedItemEmpty()) { + setRecentConnection(); + } + // 获取数据连接之后,让父容器切换面板 + if (parent != null) { + parent.switchTo(SwitchableTableDataPane.CONTENT_PANE_NAME); + } + } + + @Override + protected void refreshItemsError() { + // 获取数据连接出现错误时,也让父容器从Loading面板切换至内容面板 + if (parent != null) { + parent.switchTo(SwitchableTableDataPane.CONTENT_PANE_NAME); + } + } }; + connectionComboBox.addComboBoxActionListener(filter); + } + + private JPanel createTableViewBorderPane() { tableViewList = new TableViewList(); ToolTipManager.sharedInstance().registerComponent(tableViewList); - connectionComboBox.addComboBoxActionListener(filter); + tableViewList.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent evt) { if (evt.getClickCount() >= 2) { @@ -80,23 +142,37 @@ public class ConnectionTableProcedurePane extends BasicPane { } } }); - JPanel filterPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + UIScrollPane tableViewListPane = new UIScrollPane(tableViewList); + tableViewListPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC)); + JPanel tableViewBorderPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + tableViewBorderPane.add(tableViewListPane, BorderLayout.CENTER); JPanel checkBoxgroupPane = createCheckBoxgroupPane(); if (checkBoxgroupPane != null) { - filterPane.add(createCheckBoxgroupPane(), BorderLayout.NORTH); + tableViewBorderPane.add(createCheckBoxgroupPane(), BorderLayout.SOUTH); } + return tableViewBorderPane; + } + + /** + * 创建搜索Panel,用于搜索表或视图 + * @return + */ + private JPanel createSearchPane() { + JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel searchPane = new JPanel(new BorderLayout(10, 0)); + searchPane.setBorder(BorderFactory.createLineBorder(UIConstants.TOOLBAR_BORDER_COLOR)); + searchPane.setBackground(Color.WHITE); searchField = new UITextField(); - searchPane.add(searchField, BorderLayout.CENTER); + searchField.setBorderPainted(false); + searchField.setPlaceholder(Toolkit.i18nText("Fine-Design_Basic_Table_Search")); searchField.getDocument().addDocumentListener(searchListener); - filterPane.add(searchPane, BorderLayout.CENTER); - UIScrollPane tableViewListPane = new UIScrollPane(tableViewList); - tableViewListPane.setBorder(new UIRoundedBorder(UIConstants.LINE_COLOR, 1, UIConstants.ARC)); - this.add(connectionComboBox, BorderLayout.NORTH); - this.add(tableViewListPane, BorderLayout.CENTER); - this.add(filterPane, BorderLayout.SOUTH); - this.setPreferredSize(new Dimension(WIDTH, getPreferredSize().height)); - addKeyMonitor(); + // 搜索图标 + UILabel searchLabel = new UILabel(IconUtils.readIcon("/com/fr/design/images/data/search")); + searchLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); + searchPane.add(searchField, BorderLayout.CENTER); + searchPane.add(searchLabel, BorderLayout.EAST); + panel.add(searchPane, BorderLayout.CENTER); + return panel; } protected void filter(Connection connection, String conName, List nameList) { @@ -224,4 +300,4 @@ public class ConnectionTableProcedurePane extends BasicPane { */ public void actionPerformed(TableProcedure target); } -} \ No newline at end of file +} diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ItemEditableComboBoxPanel.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ItemEditableComboBoxPanel.java index d0738e57b8..a430a13bd1 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ItemEditableComboBoxPanel.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ItemEditableComboBoxPanel.java @@ -127,10 +127,12 @@ public abstract class ItemEditableComboBoxPanel extends JPanel { itemComboBox.setMaximumRowCount(itemComboBox.getMaximumRowCount() + 1); itemComboBox.setMaximumRowCount(itemComboBox.getMaximumRowCount() - 1); } + afterRefreshItems(); } catch (Exception e) { if (!(e instanceof CancellationException)) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } + refreshItemsError(); } } @@ -160,6 +162,20 @@ public abstract class ItemEditableComboBoxPanel extends JPanel { */ protected abstract java.util.Iterator items(); + /** + * 刷新ComboBox.items之后 + */ + protected void afterRefreshItems() { + // 空实现,供子类重写 + } + + /** + * 刷新ComboBox.items时出现异常 + */ + protected void refreshItemsError() { + // 空实现,供子类重写 + } + /* * 弹出对话框编辑Items */ diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java index e73f64eb36..d0ffd7f22c 100644 --- a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java +++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java @@ -20,6 +20,8 @@ import com.fr.design.data.datapane.preview.sql.PreviewPerformedSqlPane; import com.fr.design.data.datapane.sqlpane.SQLEditPane; import com.fr.design.data.tabledata.strategy.StrategyConfigHandler; import com.fr.design.data.tabledata.tabledatapane.db.StrategyConfigFrom; +import com.fr.design.data.tabledata.tabledatapane.loading.SwitchableTableDataPane; +import com.fr.design.data.tabledata.tabledatapane.loading.TipsPane; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.DialogActionAdapter; @@ -36,6 +38,7 @@ import com.fr.design.gui.itoolbar.UIToolbar; import com.fr.design.gui.syntax.ui.rsyntaxtextarea.SyntaxConstants; import com.fr.design.gui.syntax.ui.rtextarea.RTextScrollPane; import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.menu.SeparatorDef; import com.fr.design.menu.ToolBarDef; @@ -70,6 +73,7 @@ import javax.swing.SwingUtilities; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import java.awt.BorderLayout; +import java.awt.CardLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionEvent; @@ -86,7 +90,7 @@ import java.util.List; * @version 10.0 * Created by rinoux on 2020/7/22 */ -public class DBTableDataPane extends AbstractTableDataPane { +public class DBTableDataPane extends AbstractTableDataPane implements SwitchableTableDataPane { private static final int BOTTOM = 6; private static final String PREVIEW_BUTTON = Toolkit.i18nText("Fine-Design_Basic_Preview"); @@ -109,14 +113,42 @@ public class DBTableDataPane extends AbstractTableDataPane { private StrategyConfigHandler configHandler; + private CardLayout card; + /** 数据库查询面板真正的内容面板 */ + private JPanel contentPane; + /** 加载中面板 */ + private JPanel loadingPane; public DBTableDataPane() { + initCards(); + initContentPane(); + } + + /** + * 初始化内容面板 + */ + protected void initContentPane() { init(); initMainSplitPane(); } + /** + * 初始化cardLayout以及LoadingPane等,并且布局切到LoadingPane + */ + protected void initCards() { + card = new CardLayout(); + setLayout(card); + + loadingPane = new TipsPane(true); + contentPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + + add(LOADING_PANE_NAME, loadingPane); + add(CONTENT_PANE_NAME, contentPane); + switchTo(LOADING_PANE_NAME); + } + private void init() { - setLayout(new BorderLayout(4, 4)); + contentPane.setLayout(new BorderLayout(4, 4)); this.sqlTextPane = new SQLEditPane(); this.sqlTextPane.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_SQL); @@ -130,7 +162,7 @@ public class DBTableDataPane extends AbstractTableDataPane { editorPane = new UITableEditorPane<>(model); - this.connectionTableProcedurePane = new ConnectionTableProcedurePane() { + this.connectionTableProcedurePane = new ConnectionTableProcedurePane(this) { @Override protected void filter(Connection connection, String conName, List nameList) { connection.addConnection(nameList, conName, new Class[]{ @@ -231,7 +263,21 @@ public class DBTableDataPane extends AbstractTableDataPane { JSplitPane mainSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, this.connectionTableProcedurePane, sqlSplitPane); mainSplitPane.setBorder(BorderFactory.createLineBorder(GUICoreUtils.getTitleLineBorderColor())); mainSplitPane.setOneTouchExpandable(true); - add(mainSplitPane, BorderLayout.CENTER); + contentPane.add(mainSplitPane, BorderLayout.CENTER); + } + + @Override + public void switchTo(String panelName) { + try { + if (panelName != null) { + card.show(this, panelName); + } + } catch (IllegalArgumentException ingore) { + // 有些直接继承此面板或者替换掉此面板的插件,在未适配此功能时会出现报错,因为不是CardLayout,无法切换,这里处理下 + FineLoggerFactory.getLogger().info("cannot switch pane by {}", this.getClass().getName()); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } } private boolean isPreviewOrRefreshButton(FocusEvent e) { diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/SwitchableTableDataPane.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/SwitchableTableDataPane.java new file mode 100644 index 0000000000..221ee1cbba --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/SwitchableTableDataPane.java @@ -0,0 +1,23 @@ +package com.fr.design.data.tabledata.tabledatapane.loading; + + + +/** + * 可切换的DBTableData对应的数据集面板,需要使用CardLayout布局 + * 主要是给插件适配用的 + * @author Yvan + */ +public interface SwitchableTableDataPane { + + /** Loading面板 */ + String LOADING_PANE_NAME = "Loading"; + /** 内容面板 */ + String CONTENT_PANE_NAME = "Content"; + + /** + * 根据面板名称切换面板 + * @param paneName 面板名称 + */ + void switchTo(String paneName); + +} diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/TableDataLoadingPane.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/TableDataLoadingPane.java new file mode 100644 index 0000000000..75ec0cb2dc --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/TableDataLoadingPane.java @@ -0,0 +1,54 @@ +package com.fr.design.data.tabledata.tabledatapane.loading; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.i18n.Toolkit; + +import javax.swing.JPanel; +import java.awt.CardLayout; + +/** + * @author Yvan + */ +public class TableDataLoadingPane extends BasicPane { + + /** Loading面板 */ + public static final String LOADING_PANE_NAME = "Loading"; + /** 无权限提示面板 */ + public static final String NO_AUTH_PANE_NAME = "NoAuthority"; + /** 错误提示面板 */ + public static final String ERROR_NAME = "Error"; + + private CardLayout card; + + /** 加载中面板 */ + private JPanel loadingPane; + /** 错误提示面板 */ + private JPanel errorPane; + /** 数据连接无权限面板 */ + private JPanel noAuthorityPane; + + public TableDataLoadingPane() { + initPanes(); + } + + private void initPanes() { + card = new CardLayout(); + this.setLayout(card); + loadingPane = new TipsPane(true); + errorPane = new TipsPane(Toolkit.i18nText("Fine-Design_Basic_Database_Connection_Error")); + noAuthorityPane = new TipsPane(Toolkit.i18nText("Fine-Design_Basic_Database_Connection_No_Auth")); + add(LOADING_PANE_NAME, loadingPane); + add(NO_AUTH_PANE_NAME, noAuthorityPane); + add(ERROR_NAME, errorPane); + switchTo(LOADING_PANE_NAME); + } + + public void switchTo(String panelName) { + card.show(this, panelName); + } + + @Override + protected String title4PopupWindow() { + return "数据集查询"; + } +} diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/TipsPane.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/TipsPane.java new file mode 100644 index 0000000000..40fcb6ef28 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/TipsPane.java @@ -0,0 +1,45 @@ +package com.fr.design.data.tabledata.tabledatapane.loading; + +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; + +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import javax.swing.SwingConstants; +import java.awt.BorderLayout; + +/** + * 提示面板,支持自定义提示,支持进度条配置可选 + * @author Yvan + */ +public class TipsPane extends JPanel { + + /** + * 默认提示 + */ + private static final String LOADING = Toolkit.i18nText("Fine-Design_Basic_Loading_And_Waiting"); + + public TipsPane () { + this(LOADING, false); + } + + public TipsPane (String tip) { + this(tip, false); + } + + public TipsPane (boolean needProgressBar) { + this(LOADING, needProgressBar); + } + + public TipsPane (String tips, boolean needProgressBar) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + UILabel tipsLabel = new UILabel(tips, SwingConstants.CENTER); + this.add(tipsLabel, BorderLayout.CENTER); + if (needProgressBar) { + JProgressBar progressBar = new JProgressBar(); + progressBar.setIndeterminate(true); + this.add(progressBar, BorderLayout.SOUTH); + } + } +} From 479ea1a2f54cdb70059a2dec865ef34407d5b4a8 Mon Sep 17 00:00:00 2001 From: "Link.Zhao" Date: Mon, 18 Jul 2022 20:09:54 +0800 Subject: [PATCH 5/9] =?UTF-8?q?REPORT-75919=20=E3=80=90=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E3=80=91=E6=9B=B4=E6=96=B0=E6=97=A5=E5=BF=97-=E4=BA=A4?= =?UTF-8?q?=E4=BA=92=E9=97=AE=E9=A2=98=201=E3=80=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BA=A4=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/gui/ilable/ActionLabel.java | 21 +++++- .../update/ui/dialog/UpdateMainDialog.java | 69 +++++++++---------- .../update/ui/widget/UpdateInfoTable.java | 6 ++ .../ui/widget/UpdateInfoTableCellRender.java | 6 +- .../widget/UpdateInfoTextAreaCellRender.java | 4 +- 5 files changed, 61 insertions(+), 45 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/ilable/ActionLabel.java b/designer-base/src/main/java/com/fr/design/gui/ilable/ActionLabel.java index 85d73515e5..c98455a58f 100644 --- a/designer-base/src/main/java/com/fr/design/gui/ilable/ActionLabel.java +++ b/designer-base/src/main/java/com/fr/design/gui/ilable/ActionLabel.java @@ -14,11 +14,18 @@ import java.awt.event.MouseEvent; public class ActionLabel extends UILabel { private ActionListener actionListener; private Color color; + // 文字是否有下划线 + private boolean drawUnderLine = true; public ActionLabel(String text) { this(text, Color.blue); } + public ActionLabel(String text, boolean drawUnderLine) { + this(text, Color.blue); + this.drawUnderLine = drawUnderLine; + } + public ActionLabel(String text, Color color) { super(text); this.color = color; @@ -39,7 +46,9 @@ public class ActionLabel extends UILabel { super.paintComponent(_gfx); _gfx.setColor(this.color); - _gfx.drawLine(0, this.getHeight() - 1, this.getWidth(), this.getHeight() - 1); + if (drawUnderLine) { + _gfx.drawLine(0, this.getHeight() - 1, this.getWidth(), this.getHeight() - 1); + } } private MouseInputAdapter mouseInputAdapter = new MouseInputAdapter() { @@ -95,4 +104,12 @@ public class ActionLabel extends UILabel { } } }; -} \ No newline at end of file + + public boolean isDrawUnderLine() { + return drawUnderLine; + } + + public void setDrawUnderLine(boolean drawUnderLine) { + this.drawUnderLine = drawUnderLine; + } +} diff --git a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java index 2ac320aff7..f4648c0250 100644 --- a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java @@ -96,8 +96,6 @@ public class UpdateMainDialog extends UIDialog { private LoadingLabel loadingLabel; //更新按钮 private UIButton updateButton; - //有新版本提示标签 - private UILabel updateLabel; //jar包版本信息面板,包括当前版本和最新版本 private JPanel jarVersionInfoPane; @@ -160,13 +158,8 @@ public class UpdateMainDialog extends UIDialog { progressBar.setStringPainted(true); progressBar.setPreferredSize(PROGRESSBAR); - updateLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_New_Version_Available")); - updateLabel.setHorizontalAlignment(SwingConstants.RIGHT); - updateLabel.setVisible(false); - progressBarPane.add(GUICoreUtils.createBorderLayoutPane( - progressBar, BorderLayout.CENTER, - updateLabel, BorderLayout.EAST + progressBar, BorderLayout.CENTER ), BorderLayout.CENTER); updateActionPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ @@ -186,7 +179,7 @@ public class UpdateMainDialog extends UIDialog { double[] rowUpdatePaneSize = {UPDATE_PANE_ROW_SIZE, TableLayout.PREFERRED, TableLayout.PREFERRED}; double[] columnUpdatePaneSize = {TableLayout.PREFERRED, TableLayout.FILL, TableLayout.PREFERRED}; double[] rowUpdateContentPaneSize = {TableLayout.PREFERRED}; - double[] columnUpdateContentPaneSize = {TableLayout.PREFERRED, TableLayout.FILL, TableLayout.PREFERRED}; + double[] columnUpdateContentPaneSize = {TableLayout.PREFERRED, TableLayout.FILL}; double[] rowUpdateSubContentPaneSize = {UPDATE_CONTENT_PANE_ROW_SIZE, TableLayout.PREFERRED, TableLayout.PREFERRED, TableLayout.PREFERRED, UPDATE_CONTENT_PANE_ROW_SIZE}; double[] columnUpdateSubContentPaneSize = {UPDATE_CONTENT_PANE_COLUMN_SIZE, TableLayout.PREFERRED, TableLayout.PREFERRED}; double[] columnUpdateSubContentPaneLabelSize = {UPDATE_CONTENT_PANE_LABEL_COLUMN_SIZE, TableLayout.PREFERRED}; @@ -198,7 +191,7 @@ public class UpdateMainDialog extends UIDialog { JPanel jarUpdateContentPane2 = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ new Component[]{new UILabel(), new UILabel(), new UILabel()}, new Component[]{new UILabel(), updateVersionReminderPane, new UILabel()}, - new Component[]{new UILabel(), initPaneContent(Color.WHITE, rowUpdateContentPaneSize, columnUpdateSubContentPaneLabelSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_JAR_Version")), jarCurrentLabel), new UILabel()}, + new Component[]{new UILabel(), initPaneContent(Color.WHITE, rowUpdateContentPaneSize, columnUpdateSubContentPaneLabelSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_JAR_Version")), jarCurrentLabel), jarRestoreLabel}, new Component[]{new UILabel(), initPaneContent(Color.WHITE, rowUpdateContentPaneSize, columnUpdateSubContentPaneLabelSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Latest_JAR")), loadingLabel), getNewFeatureActionLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Latest_Feature_Detail"))}, new Component[]{new UILabel(), new UILabel(), new UILabel()} @@ -207,7 +200,7 @@ public class UpdateMainDialog extends UIDialog { jarUpdateContentPane.add(jarUpdateContentPane2); jarVersionInfoPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ new Component[]{new UILabel(), new UILabel(), new UILabel()}, - new Component[]{new UILabel(), initPaneContent(getBackground(), rowUpdateContentPaneSize, columnUpdateContentPaneSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_JarUpdate")), new UILabel(), jarRestoreLabel), new UILabel()}, + new Component[]{new UILabel(), initPaneContent(getBackground(), rowUpdateContentPaneSize, columnUpdateContentPaneSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_JarUpdate")), new UILabel()), new UILabel()}, new Component[]{new UILabel(), jarUpdateContentPane, new UILabel()} }, rowUpdatePaneSize, columnUpdatePaneSize, LayoutConstants.VGAP_LARGE); } @@ -225,7 +218,7 @@ public class UpdateMainDialog extends UIDialog { new Component[]{new UILabel(), new UILabel(), new UILabel()} }, searchRow, searchColumn, LayoutConstants.VGAP_LARGE); - String[] columnNames = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Date"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Content"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_SignHeader")}; + String[] columnNames = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Date"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Version"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Content"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_SignHeader")}; initUpdateInfoTable(columnNames); UIScrollPane uiScrollPane = new UIScrollPane(updateInfoTable); @@ -236,31 +229,32 @@ public class UpdateMainDialog extends UIDialog { } private void initUpdateInfoTable(String[] columnNames) { - int updateTimeColIndex = 0; - int updateTitleColIndex = 1; - int updateSignColIndex = 2; - updateInfoTable = new UpdateInfoTable(columnNames); updateInfoTable.setShowGrid(false); updateInfoTable.setCellSelectionEnabled(false); TableRowSorter sorter = new TableRowSorter<>(updateInfoTable.getDataModel()); - sorter.setSortable(updateTimeColIndex, true); - sorter.setSortable(updateTitleColIndex, false); - sorter.setSortable(updateSignColIndex, false); + sorter.setSortable(UpdateInfoTable.UPDATE_DATE_INDEX, true); + sorter.setSortable(UpdateInfoTable.UPDATE_VERSION_INDEX, true); + sorter.setSortable(UpdateInfoTable.UPDATE_TITLE_INDEX, false); + sorter.setSortable(UpdateInfoTable.SIGN_INDEX, false); updateInfoTable.setRowSorter(sorter); List sortKeys = new ArrayList<>(); - sortKeys.add(new RowSorter.SortKey(updateTimeColIndex, SortOrder.DESCENDING)); + sortKeys.add(new RowSorter.SortKey(UpdateInfoTable.UPDATE_DATE_INDEX, SortOrder.DESCENDING)); + sortKeys.add(new RowSorter.SortKey(UpdateInfoTable.UPDATE_VERSION_INDEX, SortOrder.DESCENDING)); sorter.setSortKeys(sortKeys); updateInfoTable.getTableHeader().setReorderingAllowed(false); - updateInfoTable.getColumnModel().getColumn(updateTimeColIndex).setMaxWidth(UPDATE_INFO_TABLE_HEADER_TIME_WIDTH); - updateInfoTable.getColumnModel().getColumn(updateTimeColIndex).setMinWidth(UPDATE_INFO_TABLE_HEADER_TIME_WIDTH); - updateInfoTable.getColumnModel().getColumn(updateSignColIndex).setMaxWidth(0); - updateInfoTable.getColumnModel().getColumn(updateSignColIndex).setMinWidth(0); - updateInfoTable.getTableHeader().getColumnModel().getColumn(updateSignColIndex).setMaxWidth(0); - updateInfoTable.getTableHeader().getColumnModel().getColumn(updateSignColIndex).setMinWidth(0); + updateInfoTable.getColumnModel().getColumn(UpdateInfoTable.UPDATE_DATE_INDEX).setMaxWidth(UPDATE_INFO_TABLE_HEADER_TIME_WIDTH); + updateInfoTable.getColumnModel().getColumn(UpdateInfoTable.UPDATE_DATE_INDEX).setMinWidth(UPDATE_INFO_TABLE_HEADER_TIME_WIDTH); + updateInfoTable.getColumnModel().getColumn(UpdateInfoTable.UPDATE_VERSION_INDEX).setMaxWidth(UPDATE_INFO_TABLE_HEADER_TIME_WIDTH); + updateInfoTable.getColumnModel().getColumn(UpdateInfoTable.UPDATE_VERSION_INDEX).setMinWidth(UPDATE_INFO_TABLE_HEADER_TIME_WIDTH); + updateInfoTable.getColumnModel().getColumn(UpdateInfoTable.SIGN_INDEX).setMaxWidth(0); + updateInfoTable.getColumnModel().getColumn(UpdateInfoTable.SIGN_INDEX).setMinWidth(0); + updateInfoTable.getTableHeader().getColumnModel().getColumn(UpdateInfoTable.SIGN_INDEX).setMaxWidth(0); + updateInfoTable.getTableHeader().getColumnModel().getColumn(UpdateInfoTable.SIGN_INDEX).setMinWidth(0); updateInfoTable.getColumn(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Date")).setCellRenderer(new UpdateInfoTableCellRender()); + updateInfoTable.getColumn(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Version")).setCellRenderer(new UpdateInfoTableCellRender()); updateInfoTable.getColumn(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Content")).setCellRenderer(new UpdateInfoTextAreaCellRender()); } @@ -304,18 +298,18 @@ public class UpdateMainDialog extends UIDialog { updateButton.setEnabled(false); double[] rowSize = {TableLayout.PREFERRED}; + double[] colSize = {TableLayout.PREFERRED}; + UILabel versionLabel = new UILabel(UpdateConstants.DEFAULT_APP_NAME + StringUtils.BLANK + ProductConstants.VERSION); + versionLabel.setFont(new Font("Default", Font.BOLD, 16)); + - double[] colSize = {UPDATE_CONTENT_PANE_LABEL_COLUMN_SIZE, TableLayout.PREFERRED}; updateVersionReminderPane = initPaneContent( - Color.WHITE, rowSize, colSize, - new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Designer_Version")), - new UILabel(UpdateConstants.DEFAULT_APP_NAME + StringUtils.BLANK + ProductConstants.VERSION) + Color.WHITE, rowSize, colSize, versionLabel ); String notInstallVersion = InterProviderFactory.getProvider().getLocText("Fine-Core_Basic_About_No_Build"); String versionBuildNo = GeneralUtils.getVersion() + HYPHEN + GeneralUtils.readBuildNO(); jarCurrentLabel = new UILabel(ComparatorUtils.equals(notInstallVersion, GeneralUtils.readBuildNO()) ? notInstallVersion : versionBuildNo, SwingConstants.CENTER); - UILabel noJarPreviousRevision = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_No_Previous_Version")); UpdateActionLabel jarRestorePreviousRevision = new UpdateActionLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Restore"), false); jarRestorePreviousRevision.setForeground(new Color(RESTORE_LABEL_COLOR)); jarRestorePreviousRevision.addActionListener(new ActionListener() { @@ -327,7 +321,7 @@ public class UpdateMainDialog extends UIDialog { }); //choose RestoreLabel to show boolean isNeedRestore = ArrayUtils.isNotEmpty(UpdateFileUtils.listBackupVersions()); - jarRestoreLabel = isNeedRestore ? jarRestorePreviousRevision : noJarPreviousRevision; + jarRestoreLabel = isNeedRestore ? jarRestorePreviousRevision : null; } private void initComponents() { @@ -542,7 +536,8 @@ public class UpdateMainDialog extends UIDialog { private ArrayList generateUpdateInfoList(JSONArray jsonArray, String keyword) throws Exception { for (int i = 0; i < jsonArray.length(); i++) { JSONObject jo = (JSONObject) jsonArray.get(i); - String updateTitle = (String) jo.get("jiraId") + jo.get("info"); + String updateTitle = (String) jo.get("jiraId") + " " + jo.get("info"); + String updateVersionStr = (String) jo.get("version"); String updateTimeStr = (String) jo.get("updateTime"); Date updateTime = UPDATELOG_FORMAT.parse(updateTimeStr); //形如 Build#release-2018.07.31.03.03.52.80 @@ -557,7 +552,7 @@ public class UpdateMainDialog extends UIDialog { } } if (isValidLogInfo(updateTitle)) { - updateInfoList.add(new Object[]{UPDATE_INFO_TABLE_FORMAT.format(updateTime), updateTitle, updateTime.after(curJarDate)}); + updateInfoList.add(new Object[]{UPDATE_INFO_TABLE_FORMAT.format(updateTime), updateVersionStr, updateTitle, updateTime.after(curJarDate)}); } } return new ArrayList<>(updateInfoList); @@ -590,14 +585,12 @@ public class UpdateMainDialog extends UIDialog { Date currentDate = (new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss")).parse(currentNO, new ParsePosition(currentNO.indexOf("-") + 1)); if (DateUtils.subtractDate(jarDate, currentDate, DateUtils.SECOND) > 0) { updateButton.setEnabled(true); - updateLabel.setVisible(true); loadingLabel.stopLoading(buildNO.contains("-") ? buildNO.substring(buildNO.lastIndexOf("-") + 1) : buildNO); } else { loadingLabel.stopLoading(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_Already_Latest_Version")); } } else { updateButton.setEnabled(true); - updateLabel.setVisible(true); loadingLabel.stopLoading(buildNO.contains("-") ? buildNO.substring(buildNO.lastIndexOf("-") + 1) : buildNO); } @@ -666,7 +659,8 @@ public class UpdateMainDialog extends UIDialog { } private ActionLabel getNewFeatureActionLabel(final String text){ - ActionLabel actionLabel = new ActionLabel(text); + ActionLabel actionLabel = new ActionLabel(text, new Color(RESTORE_LABEL_COLOR)); + actionLabel.setDrawUnderLine(false); actionLabel.addActionListener(new NewFeatureAction()); return actionLabel; } @@ -701,7 +695,6 @@ public class UpdateMainDialog extends UIDialog { progressBar.setString(Toolkit.i18nText("Fine-Design_Update_Info_Wait_Message")); UpdateCallBack callBack = new UpdateProgressCallBack(progressBar); updateButton.setEnabled(false); - updateLabel.setVisible(false); RestoreResultDialog.deletePreviousPropertyFile(); final String installLib = StableUtils.pathJoin(StableUtils.getInstallHome(), ProjectConstants.LOGS_NAME, UpdateConstants.INSTALL_LIB); final JFrame frame = DesignerContext.getDesignerFrame(); diff --git a/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTable.java b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTable.java index c7690f3d55..1b704826f7 100644 --- a/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTable.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTable.java @@ -10,6 +10,12 @@ import java.util.Vector; * Created by XINZAI on 2018/8/21. */ public class UpdateInfoTable extends JTable { + + public static int UPDATE_DATE_INDEX = 0; + public static int UPDATE_VERSION_INDEX = 1; + public static int UPDATE_TITLE_INDEX = 2; + public static int SIGN_INDEX = 3; + private UpdateInfoTableModel dataModel; public UpdateInfoTable(TableModel dm) { diff --git a/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTableCellRender.java b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTableCellRender.java index 9a853762e8..21998babad 100644 --- a/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTableCellRender.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTableCellRender.java @@ -18,11 +18,11 @@ public class UpdateInfoTableCellRender extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); cell.setBackground((row & 1) != 0 ? new Color(0xf0f0f0) : Color.WHITE); - if ((Boolean) table.getValueAt(row, 2)) { + if ((Boolean) table.getValueAt(row, UpdateInfoTable.SIGN_INDEX)) { cell.setBackground(new Color(0xdfecfd)); } - if (column == 0) { - //设置首列日期居中显示 + if (column == UpdateInfoTable.UPDATE_DATE_INDEX || column == UpdateInfoTable.UPDATE_VERSION_INDEX) { + //设置日期,版本居中显示 setHorizontalAlignment(JLabel.CENTER); for (int i = 1; row - i >= 0; i++) { diff --git a/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTextAreaCellRender.java b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTextAreaCellRender.java index 4f9836d4c4..93edd98392 100644 --- a/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTextAreaCellRender.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/widget/UpdateInfoTextAreaCellRender.java @@ -35,9 +35,9 @@ public class UpdateInfoTextAreaCellRender extends JTextArea implements TableCell setText(value == null ? "" : value.toString()); setBackground((row & 1) != 0 ? new Color(0xf0f0f0) : Color.WHITE); - if ((Boolean) table.getValueAt(row, 2)) { + if ((Boolean) table.getValueAt(row, UpdateInfoTable.SIGN_INDEX)) { setBackground(new Color(0xdfecfd)); } return this; } -} \ No newline at end of file +} From 92342129f5da37be9d0de3bbbe64dbfc7e8ac979 Mon Sep 17 00:00:00 2001 From: Yvan Date: Tue, 19 Jul 2022 11:58:20 +0800 Subject: [PATCH 6/9] =?UTF-8?q?REPORT-76076=20=E6=8F=92=E4=BB=B6=E7=AE=A1?= =?UTF-8?q?=E7=90=86-=E6=8F=92=E4=BB=B6=E7=AE=A1=E7=90=86=E6=9C=BA?= =?UTF-8?q?=E5=88=B6=E4=BC=98=E5=8C=96-=E5=86=85=E7=BD=AE=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E5=A4=9A=E6=97=B6=EF=BC=8C=E6=B6=88=E6=81=AF=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E6=98=BE=E7=A4=BA=E5=BC=82=E5=B8=B8=20=E3=80=90?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=8E=9F=E5=9B=A0=E3=80=91=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E9=80=9A=E7=9F=A5=E4=B8=AD=E5=BF=83=E7=9A=84=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=BC=B9=E7=AA=97=EF=BC=8C=E5=BC=B9=E7=AA=97=E7=9A=84?= =?UTF-8?q?=E5=AE=BD=E5=BA=A6=E6=98=AF=E7=94=B1=E6=B6=88=E6=81=AF=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E9=95=BF=E5=BA=A6=E5=86=B3=E5=AE=9A=E7=9A=84=EF=BC=8C?= =?UTF-8?q?=E6=89=80=E4=BB=A5=E6=8F=92=E4=BB=B6=E8=BF=87=E5=A4=9A=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E4=BC=9A=E6=8A=8A=E5=BC=B9=E7=AA=97=E6=8B=89=E5=BE=97?= =?UTF-8?q?=E5=BE=88=E9=95=BF=20=E3=80=90=E6=94=B9=E5=8A=A8=E6=80=9D?= =?UTF-8?q?=E8=B7=AF=E3=80=91=E8=B7=9F=E4=BA=A7=E5=93=81=E6=B2=9F=E9=80=9A?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=88=86=E8=A1=8C=E9=80=BB?= =?UTF-8?q?=E8=BE=91=20=E3=80=90review=E5=BB=BA=E8=AE=AE=E3=80=91=E6=97=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../remind/PluginErrorDesignReminder.java | 30 +++++++++++++++---- .../remind/PluginErrorDesignReminderTest.java | 25 ++++++++++++++++ 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/plugin/remind/PluginErrorDesignReminder.java b/designer-base/src/main/java/com/fr/design/plugin/remind/PluginErrorDesignReminder.java index 7128fcc283..6ba1c115ba 100644 --- a/designer-base/src/main/java/com/fr/design/plugin/remind/PluginErrorDesignReminder.java +++ b/designer-base/src/main/java/com/fr/design/plugin/remind/PluginErrorDesignReminder.java @@ -7,7 +7,6 @@ import com.fr.design.notification.Notification; import com.fr.design.notification.NotificationCenter; import com.fr.plugin.error.PluginErrorRemindHandler; import com.fr.plugin.error.PluginErrorReminder; -import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.collections.CollectionUtils; import com.fr.workspace.WorkContext; @@ -23,9 +22,10 @@ import java.util.List; public class PluginErrorDesignReminder implements PluginErrorReminder { private static final String MESSAGE_ID = "plugin-invalidate-remind"; - private static final String COMMA = "、"; - private static final String COLON = ":"; - private static final String NEW_LINE_TAG = "
"; + public static final String COMMA = "、"; + public static final String COLON = ":"; + public static final String NEW_LINE_TAG = "
"; + private static final int MAX_PLUGIN_NAME_PER_LINE = 3; private static class Holder { private static final PluginErrorDesignReminder INSTANCE = new PluginErrorDesignReminder(); @@ -84,13 +84,33 @@ public class PluginErrorDesignReminder implements PluginErrorReminder { .append(Toolkit.i18nText("Fine-Design_Plugin_Embed_Notice")) .append(COLON) .append(NEW_LINE_TAG) - .append(StableUtils.join(invalidatePluginNames, COMMA)) + .append(NEW_LINE_TAG) + .append(dealWithPluginNames(invalidatePluginNames)) + .append(NEW_LINE_TAG) .append(NEW_LINE_TAG) .append(Toolkit.i18nText("Fine-Design_Plugin_Embed_Description")) .append(NEW_LINE_TAG) .toString(); } + /** + * 处理消息中的插件名称展示 + * 由于Notification那边展示的弹窗是随消息宽度变化的,所以插件名称很多时会变得很长。这里做个分行 + * @return + * @param invalidatePluginNames + */ + public String dealWithPluginNames(List invalidatePluginNames) { + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < invalidatePluginNames.size(); i++) { + String pluginName = invalidatePluginNames.get(i); + builder.append(pluginName); + if (i != invalidatePluginNames.size() - 1) { + builder.append(i % MAX_PLUGIN_NAME_PER_LINE == (MAX_PLUGIN_NAME_PER_LINE - 1) ? NEW_LINE_TAG : COMMA); + } + } + return builder.toString(); + } + /** * 构建通知对象 * @param message diff --git a/designer-base/src/test/java/com/fr/design/plugin/remind/PluginErrorDesignReminderTest.java b/designer-base/src/test/java/com/fr/design/plugin/remind/PluginErrorDesignReminderTest.java index 19f4ba66c7..b7df5af5a7 100644 --- a/designer-base/src/test/java/com/fr/design/plugin/remind/PluginErrorDesignReminderTest.java +++ b/designer-base/src/test/java/com/fr/design/plugin/remind/PluginErrorDesignReminderTest.java @@ -5,6 +5,7 @@ import com.fr.workspace.WorkContext; import com.fr.workspace.empty.EmptyWorkspace; import junit.framework.TestCase; import org.easymock.EasyMock; +import org.junit.Assert; import org.junit.Before; import org.junit.runner.RunWith; import org.powermock.api.easymock.PowerMock; @@ -12,6 +13,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; /** * @author Yvan @@ -44,4 +47,26 @@ public class PluginErrorDesignReminderTest extends TestCase { PowerMock.verifyAll(); } + + public void testDealWithPluginNames() { + List pluginNames1 = Arrays.asList("1"); + String content1 = PluginErrorDesignReminder.getInstance().dealWithPluginNames(pluginNames1); + Assert.assertFalse(content1.contains(PluginErrorDesignReminder.COMMA)); + Assert.assertFalse(content1.contains(PluginErrorDesignReminder.NEW_LINE_TAG)); + + List pluginNames2 = Arrays.asList("1", "2"); + String content2 = PluginErrorDesignReminder.getInstance().dealWithPluginNames(pluginNames2); + Assert.assertTrue(content2.contains(PluginErrorDesignReminder.COMMA)); + Assert.assertFalse(content2.contains(PluginErrorDesignReminder.NEW_LINE_TAG)); + + List pluginNames3 = Arrays.asList("1", "2", "3", "4"); + String content3 = PluginErrorDesignReminder.getInstance().dealWithPluginNames(pluginNames3); + Assert.assertTrue(content3.contains(PluginErrorDesignReminder.COMMA)); + Assert.assertTrue(content3.contains(PluginErrorDesignReminder.NEW_LINE_TAG)); + + List pluginNames4 = Arrays.asList("1", "2", "3"); + String content4 = PluginErrorDesignReminder.getInstance().dealWithPluginNames(pluginNames4); + Assert.assertTrue(content4.contains(PluginErrorDesignReminder.COMMA)); + Assert.assertFalse(content4.contains(PluginErrorDesignReminder.NEW_LINE_TAG)); + } } From cc491a24fe9165fa9448788a3e0ad924263f7e0c Mon Sep 17 00:00:00 2001 From: Yvan Date: Tue, 19 Jul 2022 17:35:43 +0800 Subject: [PATCH 7/9] =?UTF-8?q?REPORT-76174=20=E3=80=90=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E3=80=91=E3=80=90=E6=95=B0=E6=8D=AE=E8=BF=9E=E6=8E=A5=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E4=B8=BA=E7=A9=BA=E3=80=91=E6=95=B0=E6=8D=AE=E8=A1=A8?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E6=A1=86-=E4=BA=A4=E4=BA=92=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20=E3=80=90=E9=97=AE=E9=A2=98=E5=8E=9F=E5=9B=A0?= =?UTF-8?q?=E3=80=911.=20=E5=BC=80=E5=8F=91=E7=9A=84=E6=97=B6=E5=80=99?= =?UTF-8?q?=E6=B2=A1=E5=81=9A=E8=BF=99=E4=B8=AATextField=E9=BC=A0=E6=A0=87?= =?UTF-8?q?=E6=82=AC=E6=B5=AE=E5=8F=98=E8=89=B2=E7=9A=84=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=9B2.=20=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81=E8=B4=A8?= =?UTF-8?q?=E9=87=8F=E9=97=AE=E9=A2=98=20=E3=80=90=E6=94=B9=E5=8A=A8?= =?UTF-8?q?=E6=80=9D=E8=B7=AF=E3=80=911.=20=E5=8A=A0=E4=B8=8A=E6=82=AC?= =?UTF-8?q?=E6=B5=AE=E5=8F=98=E8=89=B2=E8=BE=B9=E6=A1=86=E7=9A=84=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=9B2.=20=E4=BB=A3=E7=A0=81=E8=B4=A8=E9=87=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9=20=E3=80=90review=E5=BB=BA?= =?UTF-8?q?=E8=AE=AE=E3=80=91=E6=97=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/data/datapane/TableDataTreePane.java | 15 ++------------- .../connect/ConnectionTableProcedurePane.java | 13 +++++++++++++ .../loading/TableDataLoadingPane.java | 2 +- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java index a093f10396..4ffcfc8cda 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java @@ -1023,19 +1023,7 @@ public class TableDataTreePane extends BasicTableDataTreePane { if (TableDataAuthHelper.needCheckAuthWhenEdit(wrapper.getTableData())) { // 先打开一个Loading面板 TableDataLoadingPane loadingPane = new TableDataLoadingPane(); - BasicDialog loadingDialog = loadingPane.showLargeWindow(SwingUtilities.getWindowAncestor(TableDataTreePane.this), new DialogActionAdapter() { - @Override - public void doOk() { - super.doOk(); - } - - @Override - public void doCancel() { - super.doCancel(); - } - }); - loadingDialog.setVisible(true); - + BasicDialog loadingDialog = loadingPane.showLargeWindow(SwingUtilities.getWindowAncestor(TableDataTreePane.this), null); // 查询权限 new SwingWorker() { @Override @@ -1063,6 +1051,7 @@ public class TableDataTreePane extends BasicTableDataTreePane { } } }.execute(); + loadingDialog.setVisible(true); } else { // 无需检查权限时,直接打开数据库查询编辑面板 //下面创建creatTableDataPane后会直接populate,所以populate时不能用后设置的一些参数,比如name diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionTableProcedurePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionTableProcedurePane.java index 03722eb9cb..613eed9a48 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionTableProcedurePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionTableProcedurePane.java @@ -166,6 +166,19 @@ public class ConnectionTableProcedurePane extends BasicPane { searchField.setBorderPainted(false); searchField.setPlaceholder(Toolkit.i18nText("Fine-Design_Basic_Table_Search")); searchField.getDocument().addDocumentListener(searchListener); + searchField.addMouseListener(new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + super.mouseEntered(e); + searchPane.setBorder(BorderFactory.createLineBorder(UIConstants.CHECKBOX_HOVER_SELECTED)); + } + + @Override + public void mouseExited(MouseEvent e) { + super.mouseExited(e); + searchPane.setBorder(BorderFactory.createLineBorder(UIConstants.TOOLBAR_BORDER_COLOR)); + } + }); // 搜索图标 UILabel searchLabel = new UILabel(IconUtils.readIcon("/com/fr/design/images/data/search")); searchLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/TableDataLoadingPane.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/TableDataLoadingPane.java index 75ec0cb2dc..c3f12c3e7f 100644 --- a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/TableDataLoadingPane.java +++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/loading/TableDataLoadingPane.java @@ -49,6 +49,6 @@ public class TableDataLoadingPane extends BasicPane { @Override protected String title4PopupWindow() { - return "数据集查询"; + return Toolkit.i18nText("Fine-Design_Basic_DS-Database_Query"); } } From eb9646e0782ac274e09e9fc32da7bc664df6da6c Mon Sep 17 00:00:00 2001 From: "Link.Zhao" Date: Wed, 20 Jul 2022 10:19:03 +0800 Subject: [PATCH 8/9] =?UTF-8?q?REPORT-75919=20=E3=80=90=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E3=80=91=E6=9B=B4=E6=96=B0=E6=97=A5=E5=BF=97-=E4=BA=A4?= =?UTF-8?q?=E4=BA=92=E9=97=AE=E9=A2=98=201=E3=80=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BA=A4=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/update/ui/dialog/UpdateMainDialog.java | 1 - 1 file changed, 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java index f4648c0250..bcdb25f954 100644 --- a/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java +++ b/designer-base/src/main/java/com/fr/design/update/ui/dialog/UpdateMainDialog.java @@ -200,7 +200,6 @@ public class UpdateMainDialog extends UIDialog { jarUpdateContentPane.add(jarUpdateContentPane2); jarVersionInfoPane = TableLayoutHelper.createCommonTableLayoutPane(new Component[][]{ new Component[]{new UILabel(), new UILabel(), new UILabel()}, - new Component[]{new UILabel(), initPaneContent(getBackground(), rowUpdateContentPaneSize, columnUpdateContentPaneSize, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Updater_JarUpdate")), new UILabel()), new UILabel()}, new Component[]{new UILabel(), jarUpdateContentPane, new UILabel()} }, rowUpdatePaneSize, columnUpdatePaneSize, LayoutConstants.VGAP_LARGE); } From d38584e6e84ec9265a0bbce9381db857fa10b441 Mon Sep 17 00:00:00 2001 From: Yvan Date: Wed, 20 Jul 2022 20:11:18 +0800 Subject: [PATCH 9/9] =?UTF-8?q?REPORT-76291=20=E3=80=90=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E3=80=91=E3=80=90=E6=95=B0=E6=8D=AE=E8=BF=9E=E6=8E=A5=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E3=80=91=E6=AC=A1=E7=AE=A1=E6=9F=A5=E7=9C=8B=E6=97=A0?= =?UTF-8?q?=E6=9D=83=E9=99=90=E7=9A=84=E6=95=B0=E6=8D=AE=E9=9B=86=EF=BC=8C?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E6=8F=90=E7=A4=BA=20=E3=80=90=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E5=8E=9F=E5=9B=A0=E3=80=91=E8=8E=B7=E5=8F=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=BF=9E=E6=8E=A5=E5=90=8D=E7=A7=B0=E7=9A=84=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=E9=94=99=E4=BA=86=EF=BC=8C=E8=AF=AF=E5=86=99=E6=88=90?= =?UTF-8?q?=E4=BA=86=E8=8E=B7=E5=8F=96=E6=95=B0=E6=8D=AE=E9=9B=86=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=EF=BC=8C=E5=9B=A0=E6=AD=A4=E5=88=A4=E6=96=AD=E6=88=90?= =?UTF-8?q?=E4=BA=86=E6=9C=89=E6=9D=83=E9=99=90=20=E3=80=90=E6=94=B9?= =?UTF-8?q?=E5=8A=A8=E6=80=9D=E8=B7=AF=E3=80=91=E6=94=B9=E7=94=A8=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E6=96=B9=E5=BC=8F=E8=8E=B7=E5=8F=96=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E7=9A=84=E5=90=8D=E7=A7=B0=20=E3=80=90review?= =?UTF-8?q?=E5=BB=BA=E8=AE=AE=E3=80=91=E6=97=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/datapane/TableDataTreePane.java | 6 +++-- .../datapane/auth/TableDataAuthHelper.java | 23 ++++++++++++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java index 4ffcfc8cda..573b35f791 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java @@ -1019,7 +1019,6 @@ public class TableDataTreePane extends BasicTableDataTreePane { AbstractTableDataPane tableDataPane = wrapper.creatTableDataPane(); - String tableDataName = wrapper.getTableDataName(); if (TableDataAuthHelper.needCheckAuthWhenEdit(wrapper.getTableData())) { // 先打开一个Loading面板 TableDataLoadingPane loadingPane = new TableDataLoadingPane(); @@ -1028,8 +1027,11 @@ public class TableDataTreePane extends BasicTableDataTreePane { new SwingWorker() { @Override protected Boolean doInBackground() throws Exception { + // 获取无权限连接名称集合 Collection noAuthConnections = TableDataAuthHelper.getNoAuthConnections(); - return !noAuthConnections.contains(tableDataName); + // 获取当前数据集对应的数据连接名称 + String connectionName = TableDataAuthHelper.getConnectionNameByDBTableData((DBTableData) wrapper.getTableData()); + return !noAuthConnections.contains(connectionName); } @Override diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/auth/TableDataAuthHelper.java b/designer-base/src/main/java/com/fr/design/data/datapane/auth/TableDataAuthHelper.java index 2d7a6c4c7a..382e04dd94 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/auth/TableDataAuthHelper.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/auth/TableDataAuthHelper.java @@ -1,13 +1,13 @@ package com.fr.design.data.datapane.auth; import com.fr.base.TableData; +import com.fr.data.impl.Connection; import com.fr.data.impl.DBTableData; -import com.fr.decision.base.util.CollectionUtil; -import com.fr.stable.collections.CollectionUtils; +import com.fr.data.impl.NameDatabaseConnection; +import com.fr.stable.StringUtils; import com.fr.workspace.WorkContext; import com.fr.workspace.server.connection.DBConnectAuth; -import javax.swing.SwingWorker; import java.util.Collection; import java.util.Collections; @@ -37,4 +37,21 @@ public class TableDataAuthHelper { Collection noAuthConnections = WorkContext.getCurrent().get(DBConnectAuth.class).getNoAuthConnections(); return noAuthConnections == null ? Collections.emptyList() : noAuthConnections; } + + /** + * 通过数据集获取其数据连接的名称 + * + * 注意: + * 1. Connection接口本身是不提供名称的,只有我们内部为了使用方便,将其包装成了NameDataBaseConnection + * 如果不是NameDataBaseConnection类型,则无名称,因此这里只能用判断类型的方式获取名称 + * 2. 仅支持DBTableData获取连接名 + * @return + */ + public static String getConnectionNameByDBTableData(DBTableData tableData) { + Connection database = tableData.getDatabase(); + if (database instanceof NameDatabaseConnection) { + return ((NameDatabaseConnection) database).getName(); + } + return StringUtils.EMPTY; + } }