|
|
|
import { shortcut, store } from '@core/core';
|
|
|
|
import { FormItem } from '../components/form_item/form_item';
|
|
|
|
import { Collapse, EVENT_CHANGE } from 'src/modules/components/collapse/collapse';
|
|
|
|
import { ConnectionJdecModel } from './connection_jdbc.model';
|
|
|
|
import { ConnectionJDBC } from 'src/modules/crud/crud.typings';
|
|
|
|
import { getAllDatabaseTypes, getJdbcDatabaseType, resolveUrlInfo } from '../../../app.service';
|
|
|
|
import { CONNECTION_LAYOUT, CONNECT_SSH_TYPE } from '@constants/constant';
|
|
|
|
import { VerticalLayout } from '@fui/core';
|
|
|
|
import { ApiFactory } from '../../../crud/apiFactory';
|
|
|
|
|
|
|
|
const api = new ApiFactory().create();
|
|
|
|
|
|
|
|
@shortcut()
|
|
|
|
@store(ConnectionJdecModel)
|
|
|
|
export class ConnectionJdbc extends BI.Widget {
|
|
|
|
static xtype = 'dec.dcm.connection_jdbc';
|
|
|
|
|
|
|
|
model: ConnectionJdecModel['model'];
|
|
|
|
allDatabaseTypes = getAllDatabaseTypes();
|
|
|
|
|
|
|
|
sshSet: VerticalLayout;
|
|
|
|
sslSet: VerticalLayout;
|
|
|
|
advancedSet: VerticalLayout;
|
|
|
|
parallelLoadSet: VerticalLayout;
|
|
|
|
|
|
|
|
render() {
|
|
|
|
const connectionData = this.model.connectionSelectedOne.connectionData as ConnectionJDBC;
|
|
|
|
const {
|
|
|
|
driver,
|
|
|
|
driverSource,
|
|
|
|
database,
|
|
|
|
user,
|
|
|
|
originalCharsetName,
|
|
|
|
schema,
|
|
|
|
connectionPoolAttr,
|
|
|
|
authType,
|
|
|
|
principal,
|
|
|
|
url,
|
|
|
|
fetchSize,
|
|
|
|
// ssh
|
|
|
|
usingSsh,
|
|
|
|
sshIp,
|
|
|
|
sshPort,
|
|
|
|
sshUser,
|
|
|
|
sshType,
|
|
|
|
sshSecret,
|
|
|
|
sshPrivateKeyPath,
|
|
|
|
// ssl
|
|
|
|
usingSsl,
|
|
|
|
caCertificate,
|
|
|
|
verifyCa,
|
|
|
|
sslClientPrivateKey,
|
|
|
|
sslClientCertificate,
|
|
|
|
// 并行装载
|
|
|
|
parallelLoad,
|
|
|
|
// HDFS
|
|
|
|
hdfs,
|
|
|
|
} = connectionData;
|
|
|
|
const databaseType = getJdbcDatabaseType(database, driver);
|
|
|
|
const { host, port, catalog, databaseName, version } = resolveUrlInfo(url, database);
|
|
|
|
this.version = !BI.isUndefined(databaseType.versions) ? (version ?? databaseType.versions[0]) : version;
|
|
|
|
const { hgap, vgap } = CONNECTION_LAYOUT;
|
|
|
|
|
|
|
|
return {
|
|
|
|
type: BI.VerticalLayout.xtype,
|
|
|
|
hgap,
|
|
|
|
vgap,
|
|
|
|
items: [
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Basic_Version'),
|
|
|
|
invisible: BI.isUndefined(this.version),
|
|
|
|
value: BI.i18nText('Dec-Migration_Database_Version', this.version),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
_tgap: BI.isUndefined(this.version) ? vgap : 0,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Driver'),
|
|
|
|
value: BI.isKey(driverSource) ? `${driver} (${driverSource})` : driver,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: 'catalog',
|
|
|
|
invisible: database !== 'starrocks',
|
|
|
|
value: catalog,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Database_Name'),
|
|
|
|
value: databaseName,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Host'),
|
|
|
|
value: host,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Database_Port'),
|
|
|
|
value: port,
|
|
|
|
},
|
|
|
|
authType
|
|
|
|
? {
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_AuthType'),
|
|
|
|
value: authType,
|
|
|
|
}
|
|
|
|
: {
|
|
|
|
type: BI.Layout.xtype,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: authType ? BI.i18nText('Dec-Dcm_Connection_Form_Principal') : BI.i18nText('Dec-Dcm_Connection_Form_UserName'),
|
|
|
|
value: authType ? principal : user,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: authType ? BI.i18nText('Dec-Dcm_Connection_Form_KeyPath') : BI.i18nText('Dec-Dcm_Connection_Form_Password'),
|
|
|
|
value: '******',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_OriginalCharsetName'),
|
|
|
|
value: originalCharsetName ? originalCharsetName : BI.i18nText('Dec-Dcm_Connection_Form_Default'),
|
|
|
|
},
|
|
|
|
// HDFS设置
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
invisible: BI.isNull(hdfs),
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Address', 'HDFS'),
|
|
|
|
value: hdfs?.hdfsAddress,
|
|
|
|
},
|
|
|
|
// 并行装载设置
|
|
|
|
{
|
|
|
|
type: Collapse.xtype,
|
|
|
|
invisible: BI.isNull(parallelLoad),
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Setting', BI.i18nText('Dec-Dcm_Connection_Parallel_Load')),
|
|
|
|
listeners: [
|
|
|
|
{
|
|
|
|
eventName: EVENT_CHANGE,
|
|
|
|
action: (isCollapse: boolean) => {
|
|
|
|
this.parallelLoadSet.setVisible(!isCollapse);
|
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: BI.VerticalLayout.xtype,
|
|
|
|
invisible: true,
|
|
|
|
ref: (_ref: VerticalLayout) => {
|
|
|
|
this.parallelLoadSet = _ref;
|
|
|
|
},
|
|
|
|
items: [
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
_bgap: vgap,
|
|
|
|
name: `${BI.i18nText('Dec-Dcm_Connection_Server_Address')}-${BI.i18nText('Dec-Memory_Detection_Server_Cluster_Node', '1')}`,
|
|
|
|
value: parallelLoad?.serverAddress,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
_bgap: vgap,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Reuse_Temporary_Table'),
|
|
|
|
value: parallelLoad?.reuseTemporaryTable,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
_bgap: vgap,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Temporary_File_Pieces_Limit'),
|
|
|
|
value: parallelLoad?.filePiecesLimit,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Temporary_File_Size_Limit'),
|
|
|
|
value: parallelLoad?.fileSizeLimit,
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Pattern'),
|
|
|
|
value: schema,
|
|
|
|
invisible: !databaseType.hasSchema,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Database_URL'),
|
|
|
|
value: url,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Database_Max_Active'),
|
|
|
|
value: connectionPoolAttr.maxActive,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Database_Test_On_Borrow'),
|
|
|
|
value: connectionPoolAttr.testOnBorrow ? BI.i18nText('Dec-Dcm_Yes') : BI.i18nText('Dec-Dcm_No'),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_SQL_Validation_Query'),
|
|
|
|
value: api.getPlain(connectionPoolAttr.validationQuery || ''),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Database_Max_Wait'),
|
|
|
|
value: connectionPoolAttr.maxWait,
|
|
|
|
unit: BI.i18nText('Dec-Dcm_Millisecond'),
|
|
|
|
},
|
|
|
|
// ssh设置
|
|
|
|
{
|
|
|
|
type: Collapse.xtype,
|
|
|
|
width: 100,
|
|
|
|
invisible: !usingSsh,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Setting', 'SSH'),
|
|
|
|
listeners: [
|
|
|
|
{
|
|
|
|
eventName: EVENT_CHANGE,
|
|
|
|
action: (isCollapse: boolean) => {
|
|
|
|
this.sshSet.setVisible(!isCollapse);
|
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
el: {
|
|
|
|
type: BI.VerticalLayout.xtype,
|
|
|
|
bgap: vgap,
|
|
|
|
invisible: true,
|
|
|
|
ref: (_ref: VerticalLayout) => {
|
|
|
|
this.sshSet = _ref;
|
|
|
|
},
|
|
|
|
items: [
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Host'),
|
|
|
|
value: sshIp,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Database_Port'),
|
|
|
|
value: sshPort,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_UserName'),
|
|
|
|
value: sshUser,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_VerifyType'),
|
|
|
|
value: CONNECT_SSH_TYPE.find((SSH_TYPE) => sshType === SSH_TYPE.value).text,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
invisible: sshType !== 'KEY',
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_PrivateKey'),
|
|
|
|
value: sshPrivateKeyPath,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: CONNECT_SSH_TYPE.find((SSH_TYPE) => sshType === SSH_TYPE.value).secretFormName,
|
|
|
|
value: sshSecret,
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
// ssl设置
|
|
|
|
{
|
|
|
|
type: Collapse.xtype,
|
|
|
|
width: 100,
|
|
|
|
invisible: !usingSsl,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Setting', 'SSL'),
|
|
|
|
listeners: [
|
|
|
|
{
|
|
|
|
eventName: EVENT_CHANGE,
|
|
|
|
action: (isCollapse: boolean) => {
|
|
|
|
this.sslSet.setVisible(!isCollapse);
|
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
el: {
|
|
|
|
type: BI.VerticalLayout.xtype,
|
|
|
|
bgap: vgap,
|
|
|
|
invisible: true,
|
|
|
|
ref: (_ref: VerticalLayout) => {
|
|
|
|
this.sslSet = _ref;
|
|
|
|
},
|
|
|
|
items: [
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_CA_Certificate'),
|
|
|
|
value: caCertificate,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
invisible: !caCertificate,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Verify_CA_Certificate'),
|
|
|
|
value: verifyCa ? BI.i18nText('Dec-Dcm_Yes') : BI.i18nText('Dec-Dcm_No'),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Client') + BI.i18nText('Dec-Dcm_Connection_Form_SecretKey'),
|
|
|
|
value: sslClientPrivateKey,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Client') + BI.i18nText('Dec-Dcm_Connection_Form_Certificate'),
|
|
|
|
value: sslClientCertificate,
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
// 更多设置
|
|
|
|
{
|
|
|
|
type: Collapse.xtype,
|
|
|
|
width: 100,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Database_More_Setting'),
|
|
|
|
listeners: [
|
|
|
|
{
|
|
|
|
eventName: EVENT_CHANGE,
|
|
|
|
action: (isCollapse: boolean) => {
|
|
|
|
this.advancedSet.setVisible(!isCollapse);
|
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
el: {
|
|
|
|
type: BI.VerticalLayout.xtype,
|
|
|
|
bgap: vgap,
|
|
|
|
invisible: true,
|
|
|
|
ref: (_ref: VerticalLayout) => {
|
|
|
|
this.advancedSet = _ref;
|
|
|
|
},
|
|
|
|
items: [
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Database_Initial_Size'),
|
|
|
|
value: connectionPoolAttr.initialSize,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Database_Min_Idle'),
|
|
|
|
value: connectionPoolAttr.minIdle,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Database_Test_On_Return'),
|
|
|
|
value: connectionPoolAttr.testOnReturn ? BI.i18nText('Dec-Dcm_Yes') : BI.i18nText('Dec-Dcm_No'),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Database_Test_While_Idle'),
|
|
|
|
value: connectionPoolAttr.testWhileIdle ? BI.i18nText('Dec-Dcm_Yes') : BI.i18nText('Dec-Dcm_No'),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Database_Test_Between_Eviction_Millis'),
|
|
|
|
value: connectionPoolAttr.timeBetweenEvictionRunsMillis,
|
|
|
|
unit: BI.i18nText('Dec-Dcm_Millisecond'),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Database_Tests_PerEviction_Run_Num'),
|
|
|
|
value: connectionPoolAttr.numTestsPerEvictionRun,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: BI.i18nText('Dec-Dcm_Connection_Form_Database_Min_Evictable_Idle_Time_Millis'),
|
|
|
|
value: connectionPoolAttr.minEvictableIdleTimeMillis,
|
|
|
|
unit: BI.i18nText('BI-Basic_Seconds'),
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: FormItem.xtype,
|
|
|
|
name: 'Fetchsize',
|
|
|
|
value: fetchSize,
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|