From ccec9eef462ac3ad357f5ea6a3bcb6a1842b2be1 Mon Sep 17 00:00:00 2001 From: "Leo.Qin" Date: Mon, 20 Feb 2023 16:52:20 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-90013=20=E4=BF=AE=E6=94=B9=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datapane/connect/ConnectionListPane.java | 56 +++++++++++++++++-- 1 file changed, 52 insertions(+), 4 deletions(-) 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 185336baa..f83675739 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,6 +22,7 @@ import com.fr.file.ConnectionConfig; import com.fr.file.ConnectionOperator; import com.fr.general.NameObject; import com.fr.license.database.BaseDataBaseTypePoint; +import com.fr.license.database.DBTypes; import com.fr.license.exception.DataBaseNotSupportedException; import com.fr.log.FineLoggerFactory; import com.fr.stable.ArrayUtils; @@ -34,6 +35,7 @@ import com.fr.workspace.WorkContext; import com.fr.workspace.server.database.DataBaseTypeOperator; import org.jetbrains.annotations.NotNull; +import javax.swing.SwingWorker; import java.awt.Window; import java.sql.SQLException; import java.util.ArrayList; @@ -45,6 +47,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; +import java.util.concurrent.ExecutionException; /** * Connection List Pane. @@ -54,6 +57,7 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh private boolean isNamePermitted = true; private final HashMap renameMap = new HashMap<>(); private final Map populatedConnectionsSnapshot = new LinkedHashMap<>(); + private static List supportedDatabaseTypes = new ArrayList<>(); public ConnectionListPane() { renameMap.clear(); @@ -67,6 +71,30 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh rename(selectedName, getEditingName()); } }); + + getSupportedTypes(); + } + + /** + * 获取本地、远程环境lic中未受限制的数据库类型信息 + */ + private static void getSupportedTypes() { + SwingWorker, Void> getSupportedTypesWorker = new SwingWorker, Void>() { + @Override + protected List doInBackground() { + return WorkContext.getCurrent().get(DataBaseTypeOperator.class).getSupportedDatabaseTypes(); + } + + @Override + protected void done() { + try { + supportedDatabaseTypes = get(); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + } + }; + getSupportedTypesWorker.execute(); } @Override @@ -250,20 +278,40 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh for (ConnectionBean bean : addedOrUpdatedConnections) { Connection connection = bean.getConnection(); // 仅校验jdbc连接,其他插件数据连接不进行校验 - boolean connectionIsNotSupported = connection instanceof JDBCDatabaseConnection && !WorkContext.getCurrent().get(DataBaseTypeOperator.class).supportDatabaseType(connection.getDriver(), connection.feature()); - if (connectionIsNotSupported) { + if (connection instanceof JDBCDatabaseConnection) { BaseDataBaseTypePoint dataBaseTypePoint = BaseDataBaseTypePoint.getDataBaseTypePoint(connection.getDriver(), connection.feature()); - if (dataBaseTypePoint != null && dataBaseTypePoint.getDataBaseType() != null) { + + if (connectionIsNotSupported(connection, dataBaseTypePoint)) { notSupportedConnections.addAll(dataBaseTypePoint.getDataBaseType()); } } } } + if (!notSupportedConnections.isEmpty()) { - List supportedDatabaseTypes = WorkContext.getCurrent().get(DataBaseTypeOperator.class).getSupportedDatabaseTypes(); throw new DataBaseNotSupportedException(notSupportedConnections, supportedDatabaseTypes); } + } + + /** + * 校验当前数据连接是否被限制 + */ + private static boolean connectionIsNotSupported(Connection connection, BaseDataBaseTypePoint dataBaseTypePoint) { + return !validateFRDemo(connection.getDriver(), connection.feature()) && + (dataBaseTypePoint != null && !supportedDatabaseTypes.containsAll(dataBaseTypePoint.getDatabaseType())); + } + + /** + * 校验当前是否为FRDemo,不对其进行限制 + */ + private static boolean validateFRDemo(String driver, String url) { + if (DBTypes.Sqlite.getDriver().equals(driver) && url.contains(DBTypes.Sqlite.getUrlKey())) { + // 产品:对sqlite类型只允许示例连接FRDemo + String databaseName = url.substring(url.lastIndexOf("/") + 1); + return StringUtils.equals("FRDemo.db", databaseName); + } + return false; }