diff --git a/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java b/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java index fa1fe545e..b3c090d54 100644 --- a/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java +++ b/designer-base/src/main/java/com/fr/design/data/BasicTableDataTreePane.java @@ -378,12 +378,8 @@ public abstract class BasicTableDataTreePane extends DockingView implements Resp protected boolean isDsNameRepeaded(String name) { allDSNames = DesignTableDataManager.getAllDSNames(tc.getBook()); - for (int i = 0; i < allDSNames.length; i++) { - if (ComparatorUtils.equals(name, allDSNames[i])) { - return true; - } - } - return false; + Set allDSNamesWithoutPermissions = DesignTableDataManager.getAllDSNamesWithoutPermissions(tc.getBook()); + return allDSNamesWithoutPermissions.contains(name); } protected KeyAdapter getTableTreeNodeListener(final UpdateAction editAction, final UpdateAction previewTableDataAction, final UpdateAction removeAction, final TableDataSourceOP op, final TableDataTree dataTree) { diff --git a/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java b/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java index e18b2a47d..5134e88c8 100644 --- a/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java +++ b/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java @@ -48,6 +48,7 @@ import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -295,6 +296,27 @@ public abstract class DesignTableDataManager { return list.toArray(new String[0]); } + /** + * 获取所有的数据集名称,无论模板是不是有数据集的权限 + */ + public static Set getAllDSNamesWithoutPermissions(TableDataSource source) { + Set names = new HashSet<>(); + Map resMap = new HashMap<>(); + // 模板数据集 + addTemplateData(resMap, source); + // 存储过程 + addStoreProcedureData(resMap); + for (Map.Entry entry : resMap.entrySet()) { + names.add(entry.getKey()); + } + //服务器数据集 + Map tableDatas = TableDataConfig.getInstance().getTableDatas(); + for (Map.Entry entry : tableDatas.entrySet()) { + names.add(entry.getKey()); + } + return names; + } + /** * 不根据过滤设置,返回当前模板数据集、服务器数据集、存储过程本身,是有顺序的 */ diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java index eaa4c37d8..0e0a655a0 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java @@ -22,7 +22,6 @@ import com.fr.file.ConnectionConfig; import com.fr.file.ConnectionOperator; import com.fr.general.NameObject; import com.fr.log.FineLoggerFactory; -import com.fr.regist.FRCoreContext; import com.fr.stable.ArrayUtils; import com.fr.stable.Nameable; import com.fr.stable.StringUtils; @@ -30,6 +29,7 @@ import com.fr.stable.core.PropertyChangeAdapter; import com.fr.transaction.Configurations; import com.fr.transaction.WorkerFacade; import com.fr.workspace.WorkContext; +import com.fr.workspace.server.database.DataBaseTypeOperator; import java.awt.Window; import java.sql.SQLException; @@ -115,6 +115,8 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh /** * 创建菜单项 + *

+ * 方法中获取limitDatabaseType使用了远程rpc调用,可能会比较耗时 * * @return 菜单项 */ @@ -132,8 +134,8 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh DatabaseConnectionPane.JNDI.class ); NameableCreator[] creators; - if (FRCoreContext.getLicense().limitDatabaseType()) { - // 不支持JDNI,屏蔽接口 + if (WorkContext.getCurrent().get(DataBaseTypeOperator.class).limitDatabaseType()) { + // 不支持JNDI,屏蔽接口 creators = new NameableCreator[]{jdbc}; } else { creators = new NameableCreator[]{jdbc, jndi}; diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionManagerPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionManagerPane.java index 0c1d88022..264145221 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionManagerPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionManagerPane.java @@ -1,14 +1,17 @@ package com.fr.design.data.datapane.connect; import com.fr.data.impl.Connection; +import com.fr.data.impl.JDBCDatabaseConnection; import com.fr.design.gui.frpane.LoadingBasicPane; import com.fr.design.gui.ilist.ListModelElement; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.file.ConnectionConfig; import com.fr.general.NameObject; -import com.fr.license.database.DatabaseTypeValidateUtil; import com.fr.license.exception.DataBaseNotSupportedException; import com.fr.stable.Nameable; +import com.fr.workspace.WorkContext; +import com.fr.workspace.server.database.DataBaseTypeOperator; +import com.fr.workspace.server.database.DatabaseResultBean; import javax.swing.JPanel; import java.awt.BorderLayout; @@ -73,14 +76,13 @@ public class ConnectionManagerPane extends LoadingBasicPane implements Connectio ListModelElement selectedValue = this.connectionListPane.getSelectedValue(); if (selectedValue != null) { Nameable wrapper = selectedValue.wrapper; - try { - Connection connection = (Connection) ((NameObject) wrapper).getObject(); - DatabaseTypeValidateUtil.validateDatabaseType(connection.getDriver(), connection.feature()); - } catch (DataBaseNotSupportedException e) { - // 仅抛出数据库类型不支持异常 - throw e; - } catch (Exception e) { - // ignore + Connection connection = (Connection) ((NameObject) wrapper).getObject(); + // 仅校验jdbc连接,其他插件数据连接不进行校验 + if (connection instanceof JDBCDatabaseConnection) { + DatabaseResultBean bean = WorkContext.getCurrent().get(DataBaseTypeOperator.class).validateDatabaseType(connection.getDriver(), connection.feature()); + if (bean.equals(DatabaseResultBean.DefaultBean())) { + throw new DataBaseNotSupportedException(bean.getMsg()); + } } } }