diff --git a/backend/src/main/java/com/stdproject/config/MessageSourceConfig.java b/backend/src/main/java/com/stdproject/config/MessageSourceConfig.java index 3f1b39f..3f7e22d 100644 --- a/backend/src/main/java/com/stdproject/config/MessageSourceConfig.java +++ b/backend/src/main/java/com/stdproject/config/MessageSourceConfig.java @@ -1,14 +1,9 @@ package com.stdproject.config; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.ResourceBundleMessageSource; -import org.springframework.stereotype.Component; - -import jakarta.annotation.PostConstruct; -import java.lang.reflect.Field; /** * 国际化配置类 @@ -27,29 +22,4 @@ public class MessageSourceConfig { return messageSource; } - @Component - public static class TranslatorInitializer { - - @Autowired - private MessageSource messageSource; - - @PostConstruct - public void initTranslator() { - try { - Class translatorClass = Class.forName("io.gisbi.i18n.Translator"); - Field messageSourceField = translatorClass.getDeclaredField("messageSource"); - messageSourceField.setAccessible(true); - messageSourceField.set(null, messageSource); - System.out.println("Translator.messageSource initialized successfully"); - } catch (Exception e) { - System.err.println("Failed to initialize Translator.messageSource: " + e.getMessage()); - // 如果Translator类不存在,创建一个简单的替代实现 - createFallbackTranslator(); - } - } - - private void createFallbackTranslator() { - System.out.println("Creating fallback translator implementation"); - } - } -} \ No newline at end of file + } \ No newline at end of file diff --git a/backend/src/main/java/com/stdproject/service/provider/CalciteProvider.java b/backend/src/main/java/com/stdproject/service/provider/CalciteProvider.java index cae0212..79ff034 100644 --- a/backend/src/main/java/com/stdproject/service/provider/CalciteProvider.java +++ b/backend/src/main/java/com/stdproject/service/provider/CalciteProvider.java @@ -2,6 +2,7 @@ package com.stdproject.service.provider; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.jcraft.jsch.Session; +import com.stdproject.common.BusinessException; import com.stdproject.controller.EngineRequest; import com.stdproject.entity.CoreDatasource; import com.stdproject.entity.CoreDriver; @@ -11,7 +12,6 @@ import com.stdproject.service.type.*; import com.stdproject.utils.EncryptUtils; import com.stdproject.utils.FieldUtils; import io.gisbi.constant.SQLConstants; -import io.gisbi.exception.DEException; import io.gisbi.extensions.datasource.dto.*; import io.gisbi.extensions.datasource.provider.DriverShim; import io.gisbi.extensions.datasource.provider.ExtendedJdbcClassLoader; @@ -98,7 +98,7 @@ public class CalciteProvider extends Provider { schemas.add(resultSet.getString(1)); } } catch (Exception e) { - DEException.throwException(e.getMessage()); + BusinessException.throwException(e.getMessage()); } return schemas; } @@ -111,7 +111,7 @@ public class CalciteProvider extends Provider { DatasourceConfiguration configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Pg.class); List schemas = getSchema(datasourceRequest); if (CollectionUtils.isEmpty(schemas) || !schemas.contains(configuration.getSchema())) { - DEException.throwException("无效的 schema!"); + BusinessException.throwException("无效的 schema!"); } break; default: @@ -148,13 +148,13 @@ public class CalciteProvider extends Provider { } } } catch (Exception e) { - DEException.throwException(e.getMessage()); + BusinessException.throwException(e.getMessage()); } return tables; } @Override - public Map fetchResultField(DatasourceRequest datasourceRequest) throws DEException { + public Map fetchResultField(DatasourceRequest datasourceRequest) throws BusinessException { // 不跨数据源 if (datasourceRequest.getDsList().size() == 1) { return jdbcFetchResultField(datasourceRequest); @@ -190,7 +190,7 @@ public class CalciteProvider extends Provider { } else { msg = e.getMessage(); } - DEException.throwException(Translator.get("i18n_fetch_error") + msg); + BusinessException.throwException(Translator.get("i18n_fetch_error") + msg); } finally { try { if (resultSet != null) resultSet.close(); @@ -205,7 +205,7 @@ public class CalciteProvider extends Provider { } @Override - public String transSqlDialect(String sql, Map dsMap) throws DEException { + public String transSqlDialect(String sql, Map dsMap) throws BusinessException { DatasourceSchemaDTO value = dsMap.entrySet().iterator().next().getValue(); try (Connection connection = getConnectionFromPool(value.getId());) { // 获取数据库version @@ -216,7 +216,7 @@ public class CalciteProvider extends Provider { SqlNode sqlNode = parser.parseStmt(); return sqlNode.toSqlString(getDialect(value)).toString(); } catch (Exception e) { - DEException.throwException(e.getMessage()); + BusinessException.throwException(e.getMessage()); } return null; } @@ -242,7 +242,7 @@ public class CalciteProvider extends Provider { } @Override - public List fetchTableField(DatasourceRequest datasourceRequest) throws DEException { + public List fetchTableField(DatasourceRequest datasourceRequest) throws BusinessException { List datasetTableFields = new ArrayList<>(); DatasourceSchemaDTO datasourceSchemaDTO = datasourceRequest.getDsList().entrySet().iterator().next().getValue(); datasourceRequest.setDatasource(datasourceSchemaDTO); @@ -259,7 +259,7 @@ public class CalciteProvider extends Provider { resultSet = statement.executeQuery(datasourceRequest.getQuery()); datasetTableFields.addAll(getField(resultSet, datasourceRequest)); } catch (Exception e) { - DEException.throwException(e.getMessage()); + BusinessException.throwException(e.getMessage()); } finally { if (resultSet != null) { try { @@ -296,7 +296,7 @@ public class CalciteProvider extends Provider { } } } catch (Exception e) { - DEException.throwException(e.getMessage()); + BusinessException.throwException(e.getMessage()); } finally { if (resultSet != null) { try { @@ -386,7 +386,7 @@ public class CalciteProvider extends Provider { conn = driverClass.connect(configuration.getJdbc(), props); } catch (Exception e) { - DEException.throwException(e.getMessage()); + BusinessException.throwException(e.getMessage()); } connectionObj.setConnection(conn); return connectionObj; @@ -412,7 +412,7 @@ public class CalciteProvider extends Provider { return drivers; } - public Map jdbcFetchResultField(DatasourceRequest datasourceRequest) throws DEException { + public Map jdbcFetchResultField(DatasourceRequest datasourceRequest) throws BusinessException { DatasourceSchemaDTO value = datasourceRequest.getDsList().entrySet().iterator().next().getValue(); datasourceRequest.setDatasource(value); @@ -442,9 +442,9 @@ public class CalciteProvider extends Provider { fieldList = getField(resultSet, datasourceRequest); dataList = getData(resultSet, datasourceRequest); } catch (SQLException e) { - DEException.throwException("SQL ERROR: " + e.getMessage()); + BusinessException.throwException("SQL ERROR: " + e.getMessage()); } catch (Exception e) { - DEException.throwException("Datasource connection exception: " + e.getMessage()); + BusinessException.throwException("Datasource connection exception: " + e.getMessage()); } finally { if (resultSet != null) { try { @@ -461,7 +461,7 @@ public class CalciteProvider extends Provider { } @Override - public void exec(DatasourceRequest datasourceRequest) throws DEException { + public void exec(DatasourceRequest datasourceRequest) throws BusinessException { DatasourceSchemaDTO value = datasourceRequest.getDsList().entrySet().iterator().next().getValue(); datasourceRequest.setDatasource(value); DatasourceConfiguration datasourceConfiguration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), DatasourceConfiguration.class); @@ -483,9 +483,9 @@ public class CalciteProvider extends Provider { } } catch (SQLException e) { - DEException.throwException("SQL ERROR: " + e.getMessage()); + BusinessException.throwException("SQL ERROR: " + e.getMessage()); } catch (Exception e) { - DEException.throwException("Datasource connection exception: " + e.getMessage()); + BusinessException.throwException("Datasource connection exception: " + e.getMessage()); } finally { if (resultSet != null) { try { @@ -498,7 +498,7 @@ public class CalciteProvider extends Provider { } @Override - public int executeUpdate(DatasourceRequest datasourceRequest) throws DEException { + public int executeUpdate(DatasourceRequest datasourceRequest) throws BusinessException { DatasourceSchemaDTO value = datasourceRequest.getDsList().entrySet().iterator().next().getValue(); datasourceRequest.setDatasource(value); DatasourceConfiguration datasourceConfiguration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), DatasourceConfiguration.class); @@ -521,9 +521,9 @@ public class CalciteProvider extends Provider { } } catch (SQLException e) { - DEException.throwException("SQL ERROR: " + e.getMessage()); + BusinessException.throwException("SQL ERROR: " + e.getMessage()); } catch (Exception e) { - DEException.throwException("Datasource connection exception: " + e.getMessage()); + BusinessException.throwException("Datasource connection exception: " + e.getMessage()); } finally { if (resultSet != null) { try { @@ -757,7 +757,7 @@ public class CalciteProvider extends Provider { Class.forName("org.apache.calcite.jdbc.Driver"); connection = DriverManager.getConnection("jdbc:calcite:", info); } catch (Exception e) { - DEException.throwException(e.getMessage()); + BusinessException.throwException(e.getMessage()); } return connection; } @@ -997,7 +997,7 @@ public class CalciteProvider extends Provider { list.add(row); } } catch (Exception e) { - DEException.throwException(e.getMessage()); + BusinessException.throwException(e.getMessage()); } return list; } @@ -1045,21 +1045,21 @@ public class CalciteProvider extends Provider { case oracle: configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Oracle.class); if (StringUtils.isEmpty(configuration.getSchema())) { - DEException.throwException(Translator.get("i18n_schema_is_empty")); + BusinessException.throwException(Translator.get("i18n_schema_is_empty")); } sql = String.format("SELECT a.COLUMN_NAME , a.DATA_TYPE , b.COMMENTS ,0 FROM all_tab_columns a LEFT JOIN all_col_comments b ON a.owner = b.owner AND a.table_name = b.table_name AND a.column_name = b.column_name WHERE a.owner = '%s' AND a.table_name = '%s' ORDER BY a.table_name, a.column_id", configuration.getSchema(), datasourceRequest.getTable()); break; case db2: configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Db2.class); if (StringUtils.isEmpty(configuration.getSchema())) { - DEException.throwException(Translator.get("i18n_schema_is_empty")); + BusinessException.throwException(Translator.get("i18n_schema_is_empty")); } sql = String.format("SELECT COLNAME , TYPENAME , REMARKS FROM SYSCAT.COLUMNS WHERE TABSCHEMA = '%s' AND TABNAME = '%s' ", configuration.getSchema(), datasourceRequest.getTable()); break; case sqlServer: configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Sqlserver.class); if (StringUtils.isEmpty(configuration.getSchema())) { - DEException.throwException(Translator.get("i18n_schema_is_empty")); + BusinessException.throwException(Translator.get("i18n_schema_is_empty")); } sql = String.format("SELECT \n" + " c.name ,t.name ,ep.value, 0 \n" + "FROM \n" + " sys.columns AS c\n" + "LEFT JOIN sys.extended_properties AS ep ON c.object_id = ep.major_id AND c.column_id = ep.minor_id\n" + "LEFT JOIN sys.types AS t ON c.user_type_id = t.user_type_id\n" + "LEFT JOIN sys.objects AS o ON c.object_id = o.object_id\n" + "WHERE o.name = '%s'", datasourceRequest.getTable()); @@ -1067,7 +1067,7 @@ public class CalciteProvider extends Provider { case pg: configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Pg.class); if (StringUtils.isEmpty(configuration.getSchema())) { - DEException.throwException(Translator.get("i18n_schema_is_empty")); + BusinessException.throwException(Translator.get("i18n_schema_is_empty")); } sql = String.format("SELECT\n" + " a.attname AS ColumnName,\n" + @@ -1122,7 +1122,7 @@ public class CalciteProvider extends Provider { return sql; } - private List getTablesSql(DatasourceRequest datasourceRequest) throws DEException { + private List getTablesSql(DatasourceRequest datasourceRequest) throws BusinessException { List tableSqls = new ArrayList<>(); DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(datasourceRequest.getDatasource().getType()); DatasourceConfiguration configuration = null; @@ -1167,7 +1167,7 @@ public class CalciteProvider extends Provider { case oracle: configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Oracle.class); if (StringUtils.isEmpty(configuration.getSchema())) { - DEException.throwException(Translator.get("i18n_schema_is_empty")); + BusinessException.throwException(Translator.get("i18n_schema_is_empty")); } tableSqls.add("select table_name, comments, owner from all_tab_comments where owner='" + configuration.getSchema() + "' AND table_type = 'TABLE'"); tableSqls.add("select table_name, comments, owner from all_tab_comments where owner='" + configuration.getSchema() + "' AND table_type = 'VIEW'"); @@ -1175,14 +1175,14 @@ public class CalciteProvider extends Provider { case db2: configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Db2.class); if (StringUtils.isEmpty(configuration.getSchema())) { - DEException.throwException(Translator.get("i18n_schema_is_empty")); + BusinessException.throwException(Translator.get("i18n_schema_is_empty")); } tableSqls.add("select TABNAME, REMARKS from syscat.tables WHERE TABSCHEMA ='DE_SCHEMA' AND \"TYPE\" = 'T'".replace("DE_SCHEMA", configuration.getSchema())); break; case sqlServer: configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Sqlserver.class); if (StringUtils.isEmpty(configuration.getSchema())) { - DEException.throwException(Translator.get("i18n_schema_is_empty")); + BusinessException.throwException(Translator.get("i18n_schema_is_empty")); } tableSqls.add("SELECT \n" + " t.name AS TableName, \n" + " ep.value AS TableDescription \n" + "FROM \n" + " sys.tables t \n" + "LEFT OUTER JOIN sys.schemas sc ON sc.schema_id =t.schema_id \n" + "LEFT OUTER JOIN \n" + " sys.extended_properties ep ON t.object_id = ep.major_id \n" + " AND ep.minor_id = 0 \n" + " AND ep.class = 1 \n" + " AND ep.name = 'MS_Description'\n" + "where sc.name ='DS_SCHEMA'".replace("DS_SCHEMA", configuration.getSchema())); tableSqls.add("SELECT \n" + " t.name AS TableName, \n" + " ep.value AS TableDescription \n" + "FROM \n" + " sys.views t \n" + "LEFT OUTER JOIN sys.schemas sc ON sc.schema_id =t.schema_id \n" + "LEFT OUTER JOIN \n" + " sys.extended_properties ep ON t.object_id = ep.major_id \n" + " AND ep.minor_id = 0 \n" + " AND ep.class = 1 \n" + " AND ep.name = 'MS_Description'\n" + "where sc.name ='DS_SCHEMA'".replace("DS_SCHEMA", configuration.getSchema())); @@ -1190,7 +1190,7 @@ public class CalciteProvider extends Provider { case pg: configuration = JsonUtil.parseObject(datasourceRequest.getDatasource().getConfiguration(), Pg.class); if (StringUtils.isEmpty(configuration.getSchema())) { - DEException.throwException(Translator.get("i18n_schema_is_empty")); + BusinessException.throwException(Translator.get("i18n_schema_is_empty")); } tableSqls.add("SELECT \n" + " relname AS TableName, \n" + " obj_description(relfilenode::regclass, 'pg_class') AS TableDescription \n" + "FROM \n" + " pg_class \n" + "WHERE \n" + " relkind in ('r','p', 'f') \n" + " AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'SCHEMA') ".replace("SCHEMA", configuration.getSchema())); break; @@ -1224,7 +1224,7 @@ public class CalciteProvider extends Provider { } - private String getSchemaSql(DatasourceDTO datasource) throws DEException { + private String getSchemaSql(DatasourceDTO datasource) throws BusinessException { DatasourceConfiguration.DatasourceType datasourceType = DatasourceConfiguration.DatasourceType.valueOf(datasource.getType()); switch (datasourceType) { case oracle: @@ -1245,14 +1245,14 @@ public class CalciteProvider extends Provider { public Statement getStatement(Connection connection, int queryTimeout) { if (connection == null) { - DEException.throwException("Failed to get connection!"); + BusinessException.throwException("Failed to get connection!"); } Statement stat = null; try { stat = connection.createStatement(); stat.setQueryTimeout(queryTimeout); } catch (Exception e) { - DEException.throwException(e.getMessage()); + BusinessException.throwException(e.getMessage()); } return stat; } @@ -1267,7 +1267,7 @@ public class CalciteProvider extends Provider { stat = connection.prepareStatement(sql); stat.setQueryTimeout(queryTimeout); } catch (Exception e) { - DEException.throwException(e.getMessage()); + BusinessException.throwException(e.getMessage()); } return stat; } else { @@ -1281,7 +1281,7 @@ public class CalciteProvider extends Provider { protected ExtendedJdbcClassLoader getCustomJdbcClassLoader(CoreDriver coreDriver) { if (coreDriver == null) { - DEException.throwException("Can not found custom Driver"); + BusinessException.throwException("Can not found custom Driver"); } ExtendedJdbcClassLoader customJdbcClassLoader = customJdbcClassLoaders.get(coreDriver.getId()); if (customJdbcClassLoader == null) { @@ -1323,7 +1323,7 @@ public class CalciteProvider extends Provider { customJdbcClassLoaders.put(coreDriver.getId(), customJdbcClassLoader); return customJdbcClassLoader; } catch (Exception e) { - DEException.throwException(e.getMessage()); + BusinessException.throwException(e.getMessage()); } return null; } @@ -1357,7 +1357,7 @@ public class CalciteProvider extends Provider { } - public void update(DatasourceDTO datasourceDTO) throws DEException { + public void update(DatasourceDTO datasourceDTO) throws BusinessException { DatasourceSchemaDTO datasourceSchemaDTO = new DatasourceSchemaDTO(); BeanUtils.copyBean(datasourceSchemaDTO, datasourceDTO); datasourceSchemaDTO.setSchemaAlias(String.format(SQLConstants.SCHEMA, datasourceSchemaDTO.getId())); @@ -1367,11 +1367,11 @@ public class CalciteProvider extends Provider { CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class); SchemaPlus rootSchema = buildSchema(datasourceRequest, calciteConnection); } catch (Exception e) { - DEException.throwException(e.getMessage()); + BusinessException.throwException(e.getMessage()); } } - public void updateDsPoolAfterCheckStatus(DatasourceDTO datasourceDTO) throws DEException { + public void updateDsPoolAfterCheckStatus(DatasourceDTO datasourceDTO) throws BusinessException { DatasourceSchemaDTO datasourceSchemaDTO = new DatasourceSchemaDTO(); BeanUtils.copyBean(datasourceSchemaDTO, datasourceDTO); datasourceSchemaDTO.setSchemaAlias(String.format(SQLConstants.SCHEMA, datasourceSchemaDTO.getId())); @@ -1391,11 +1391,11 @@ public class CalciteProvider extends Provider { startSshSession(configuration, null, datasourceDTO.getId()); } } catch (Exception e) { - DEException.throwException(e.getMessage()); + BusinessException.throwException(e.getMessage()); } } - public void delete(CoreDatasource datasource) throws DEException { + public void delete(CoreDatasource datasource) throws BusinessException { DatasourceSchemaDTO datasourceSchemaDTO = new DatasourceSchemaDTO(); BeanUtils.copyBean(datasourceSchemaDTO, datasource); datasourceSchemaDTO.setSchemaAlias(String.format(SQLConstants.SCHEMA, datasourceSchemaDTO.getId())); @@ -1409,7 +1409,7 @@ public class CalciteProvider extends Provider { rootSchema.removeSubSchema(datasourceSchemaDTO.getSchemaAlias()); } } catch (Exception e) { - DEException.throwException(e.getMessage()); + BusinessException.throwException(e.getMessage()); } Provider.getLPorts().remove(datasource.getId()); if (Provider.getSessions().get(datasource.getId()) != null) { @@ -1435,13 +1435,13 @@ public class CalciteProvider extends Provider { CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class); SchemaPlus rootSchema = calciteConnection.getRootSchema(); if (rootSchema.getSubSchema(String.format(SQLConstants.SCHEMA, dsId)) == null) { - DEException.throwException(Translator.get("i18n_check_datasource_connection")); + BusinessException.throwException(Translator.get("i18n_check_datasource_connection")); } JdbcSchema jdbcSchema = rootSchema.getSubSchema(String.format(SQLConstants.SCHEMA, dsId)).unwrap(JdbcSchema.class); BasicDataSource basicDataSource = (BasicDataSource) jdbcSchema.getDataSource(); return basicDataSource.getConnection(); } catch (Exception e) { - DEException.throwException(Translator.get("i18n_invalid_connection") + e.getMessage()); + BusinessException.throwException(Translator.get("i18n_invalid_connection") + e.getMessage()); } return null; } diff --git a/backend/src/main/java/io/gisbi/i18n/Translator.java b/backend/src/main/java/io/gisbi/i18n/Translator.java deleted file mode 100644 index b408b3c..0000000 --- a/backend/src/main/java/io/gisbi/i18n/Translator.java +++ /dev/null @@ -1,74 +0,0 @@ -package io.gisbi.i18n; - -import org.springframework.context.MessageSource; -import org.springframework.context.i18n.LocaleContextHolder; - -import java.util.Locale; - -/** - * 简单的国际化翻译器实现 - * 替代缺失的外部依赖 - */ -public class Translator { - - public static MessageSource messageSource; - - /** - * 获取国际化消息 - * @param key 消息键 - * @return 国际化消息 - */ - public static String get(String key) { - if (messageSource == null) { - // 如果messageSource为null,返回默认消息 - return getDefaultMessage(key); - } - - try { - Locale locale = LocaleContextHolder.getLocale(); - return messageSource.getMessage(key, null, locale); - } catch (Exception e) { - // 如果获取消息失败,返回默认消息 - return getDefaultMessage(key); - } - } - - /** - * 获取带参数的国际化消息 - * @param key 消息键 - * @param args 参数 - * @return 国际化消息 - */ - public static String get(String key, Object... args) { - if (messageSource == null) { - return getDefaultMessage(key); - } - - try { - Locale locale = LocaleContextHolder.getLocale(); - return messageSource.getMessage(key, args, locale); - } catch (Exception e) { - return getDefaultMessage(key); - } - } - - /** - * 获取默认消息 - * @param key 消息键 - * @return 默认消息 - */ - private static String getDefaultMessage(String key) { - switch (key) { - case "i18n_fetch_error": - return "数据获取错误: "; - case "i18n_schema_is_empty": - return "数据库模式为空"; - case "i18n_check_datasource_connection": - return "请检查数据源连接"; - case "i18n_invalid_connection": - return "无效的数据库连接: "; - default: - return key; // 如果没有找到对应的消息,返回键本身 - } - } -} \ No newline at end of file