Skip to content

Commit

Permalink
#14 add websocket property in connection service
Browse files Browse the repository at this point in the history
  • Loading branch information
brandon-wonjune committed Aug 29, 2018
1 parent c34c536 commit 723596d
Show file tree
Hide file tree
Showing 4 changed files with 257 additions and 81 deletions.
Expand Up @@ -91,6 +91,35 @@ export class DataconnectionService extends AbstractService {
return this.get(url);
} // function - getDatabases

/**
* Get database list in connection
* @param {string} connectionId
* @param params
* @returns {Promise<any>}
*/
public getDatabaseListInConnection(connectionId: string, params: any): Promise<any> {
let url: string = this.API_URL + `connections/${connectionId}/databases`;
if (params) {
url += '?' + CommonUtil.objectToUrlString(params);
}
return this.get(url);
}

/**
* Get table list in connection
* @param {string} connectionId
* @param {string} databaseName
* @param params
* @returns {Promise<any>}
*/
public getTableListInConnection(connectionId: string, databaseName: string, params: any): Promise<any> {
let url: string = this.API_URL + `connections/${connectionId}/databases/${databaseName}/tables`;
if (params) {
url += '?' + CommonUtil.objectToUrlString(params);
}
return this.get(url);
}

// 커넥션 정보로만 데이터베이스 조회
public getDatabasesWithoutId(param: any): Promise<any> {
return this.post(this.API_URL + 'connections/query/databases', param);
Expand Down Expand Up @@ -123,17 +152,6 @@ export class DataconnectionService extends AbstractService {
return this.post(this.API_URL + 'connections/query/data', param);
}

// 데이터 테이블 조회 -> 이름으로
public getSearchTables(connectionId: string, databaseName: string, tableName: string, page?:Page): Promise<any> {
let url = this.API_URL + `connections/${connectionId}/databases/${databaseName}/tables?tableName=${tableName}`;

if (page) {
url += '&' + CommonUtil.objectToUrlString(page);
}

return this.get(url);
}

// 커넥션 상태 조회
public checkConnection(param: any) : Promise<any> {
return this.post(this.API_URL + 'connections/query/check', param);
Expand Down
Expand Up @@ -28,6 +28,7 @@ import { isUndefined } from 'util';
import { Page } from '../../../../domain/common/page';
import { AbstractWorkbenchComponent } from '../../abstract-workbench.component';
import { WorkbenchService } from '../../../service/workbench.service';
import { StringUtil } from '../../../../common/util/string.util';

@Component({
selector: 'detail-workbench-database',
Expand Down Expand Up @@ -74,6 +75,9 @@ export class DetailWorkbenchDatabase extends AbstractWorkbenchComponent implemen
@Output()
public schemaBrowserEvent: EventEmitter<string> = new EventEmitter();

// request reconnect count
private _getDatabaseListReconnectCount: number = 0;

/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
| Constructor
|-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
Expand Down Expand Up @@ -137,15 +141,19 @@ export class DetailWorkbenchDatabase extends AbstractWorkbenchComponent implemen
return;
}

// 호출 횟수 증가
this._getDatabaseListReconnectCount++;

this.loadingShow();

this.searchText = ( this.searchText ) ? this.searchText.trim().toLowerCase() : '';

this.page.page = pageNum;
(0 === pageNum) && ( this.databases = [] );

this.dataconnectionService.getDatabases(this.params.dataconnection.id, this.page, this.searchText.toLowerCase())
this.dataconnectionService.getDatabaseListInConnection(this.params.dataconnection.id, this._getParameterForDatabase(WorkbenchService.websocketId, this.page, this.searchText))
.then((data) => {
// 호출 횟수 초기화
this._getDatabaseListReconnectCount = 0;
if (data) {
this.databases = this.databases.concat(data.databases);
this.pageResult = data.page;
Expand All @@ -166,22 +174,43 @@ export class DetailWorkbenchDatabase extends AbstractWorkbenchComponent implemen
}
this.loadingHide();
})
.catch(error => this.commonExceptionHandler(error));
.catch((error) => {
if (!isUndefined(error.details) && error.code === 'JDC0005' && this._getDatabaseListReconnectCount <= 5) {
this.webSocketCheck(() => {
this.getDatabase(pageNum, isSearch);
});
} else {
this.commonExceptionHandler(error);
}
});
} // function - getDatabase


private _getDatabaseList(connectionId: string, page: Page, searchText: string): Promise<any> {
return new Promise((resolve, reject) => {
this.dataconnectionService.getDatabases(connectionId, page, searchText.toLowerCase())
.then((result) => {
resolve(result);
})
.catch((error) => {
reject(error);
});
})
private _getDatabaseList(connectionId: string, page: Page, searchText: string): void {
// 호출 횟수 증가
this._getDatabaseListReconnectCount++;
this.dataconnectionService.getDatabaseListInConnection(connectionId, this._getParameterForDatabase(WorkbenchService.websocketId, page, searchText))
.then((result) => {
// 호출 횟수 초기화
this._getDatabaseListReconnectCount = 0;
this.databases = result.databases;
this.pageResult = result.page;
this.loadingHide();
})
.catch((error) => {
if (!isUndefined(error.details) && error.code === 'JDC0005' && this._getDatabaseListReconnectCount <= 5) {
this.webSocketCheck(() => {
this._getDatabaseList(connectionId, page, searchText);
});
} else {
this.commonExceptionHandler(error);
}
});
}




/**
* 데이터베이스 이름 클릭했을 때
*/
Expand Down Expand Up @@ -235,15 +264,7 @@ export class DetailWorkbenchDatabase extends AbstractWorkbenchComponent implemen
this.page.page = 0;
// TODO 데이터베이스 검색
this.loadingShow();
this._getDatabaseList(this.params.dataconnection.id, this.page, this.searchText.toLowerCase())
.then((result) => {
this.databases = result.databases;
this.pageResult = result.page;
this.loadingHide();
})
.catch((error) => {
this.commonExceptionHandler(error);
});
this._getDatabaseList(this.params.dataconnection.id, this.page, this.searchText.toLowerCase());
}

/**
Expand Down Expand Up @@ -328,4 +349,26 @@ export class DetailWorkbenchDatabase extends AbstractWorkbenchComponent implemen
| Private Method
|-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/

/**
* Get parameters for database list
* @param {string} webSocketId
* @param {Page} page
* @param {string} databaseName
* @returns {any}
* @private
*/
private _getParameterForDatabase(webSocketId: string, page?: Page, databaseName?: string): any {
const params = {
webSocketId: webSocketId
};
if (page) {
params['sort'] = page.sort;
params['page'] = page.page;
params['size'] = page.size;
}
if (StringUtil.isNotEmpty(databaseName)) {
params['databaseName'] = databaseName.trim();
}
return params;
}
}
Expand Up @@ -31,6 +31,7 @@ import { MetadataService } from '../../../../meta-data-management/metadata/servi
import * as _ from 'lodash';
import { isUndefined } from 'util';
import { AbstractWorkbenchComponent } from '../../abstract-workbench.component';
import { StringUtil } from '../../../../common/util/string.util';

@Component({
selector: 'detail-workbench-schema-browser',
Expand Down Expand Up @@ -77,6 +78,9 @@ export class DetailWorkbenchSchemaBrowserComponent extends AbstractWorkbenchComp
private _getMetaDataReconnectCount: number = 0;
private _getSingleQueryReconnectCount: number = 0;
private _getTableDetailDataReconnectCount: number = 0;
private _getDatabaseListReconnectCount: number = 0;
private _getTableListReconnectCount: number = 0;

/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
| Protected Variables
|-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
Expand Down Expand Up @@ -244,17 +248,7 @@ export class DetailWorkbenchSchemaBrowserComponent extends AbstractWorkbenchComp
// 로딩 show
this.loadingShow();
// 테이블 목록 조회 요청
this._getSearchTablesForServer(this.dataConnection.id, this.selectedDatabaseName, page)
.then((result) => {
// table이 있는 경우
if (result['tables']) {
// 스키마 테이블 리스트 저장
this.schemaTableList = result['tables'];
// 테이블에 연결된 메타데이터 목록 조회
this._getTableMetaDataList(result['tables']);
}
})
.catch(error => this.commonExceptionHandler(error));
this._getSearchTablesForServer(this.dataConnection.id, this.selectedDatabaseName, page);
}

/**
Expand Down Expand Up @@ -526,12 +520,16 @@ export class DetailWorkbenchSchemaBrowserComponent extends AbstractWorkbenchComp
* @private
*/
private _getDatabaseList(searchFl: boolean = false): void {
// 호출 횟수 증가
this._getDatabaseListReconnectCount++;
// 로딩 show
this.loadingShow();
// 데이터베이스 조회
this.connectionService.getDatabases(this.dataConnection.id, this.page, this.searchDatabaseText)
this.connectionService.getDatabaseListInConnection(this.dataConnection.id, this._getParameterForDatabase(WorkbenchService.websocketId, this.page, this.searchDatabaseText))
.then((data) => {
if (data) {
// 호출 횟수 초기화
this._getDatabaseListReconnectCount = 0;
// 데이터베이스 리스트
this.databaseList = this.databaseList.concat(data.databases);
// 페이지 객체
Expand All @@ -542,7 +540,13 @@ export class DetailWorkbenchSchemaBrowserComponent extends AbstractWorkbenchComp
searchFl ? this.loadingHide() : this.getTableList();
})
.catch((error) => {
this.commonExceptionHandler(error);
if (!isUndefined(error.details) && error.code === 'JDC0005' && this._getDatabaseListReconnectCount <= 5) {
this.webSocketCheck(() => {
this._getDatabaseList(searchFl);
});
} else {
this.commonExceptionHandler(error);
}
});
}

Expand All @@ -552,25 +556,36 @@ export class DetailWorkbenchSchemaBrowserComponent extends AbstractWorkbenchComp
* @param {string} databaseName
* @param {Page} page
* @param {string} tableName
* @returns {Promise<any>}
* @private
*/
private _getSearchTablesForServer(connectionId: string, databaseName: string, page:Page, tableName: string = ''): Promise<any> {
return new Promise((resolve, reject) => {
// 로딩 show
this.loadingShow();
this.connectionService.getSearchTables(connectionId, databaseName, tableName, page)
.then((result) => {
// 로딩 hide
this.loadingHide();
resolve(result);
})
.catch((error) => {
// 로딩 hide
this.loadingHide();
reject(error);
});
});
private _getSearchTablesForServer(connectionId: string, databaseName: string, page:Page, tableName: string = ''): void {
// 호출 횟수 증가
this._getTableListReconnectCount++;
// 로딩 show
this.loadingShow();
this.connectionService.getTableListInConnection(connectionId, databaseName, this._getParameterForTable(WorkbenchService.websocketId, page, tableName))
.then((result) => {
// 호출 횟수 초기화
this._getTableListReconnectCount = 0;
// 로딩 hide
this.loadingHide();
// table이 있는 경우
if (result['tables']) {
// 스키마 테이블 리스트 저장
this.schemaTableList = result['tables'];
// 테이블에 연결된 메타데이터 목록 조회
this._getTableMetaDataList(result['tables']);
}
})
.catch((error) => {
if (!isUndefined(error.details) && error.code === 'JDC0005' && this._getTableListReconnectCount <= 5) {
this.webSocketCheck(() => {
this._getSearchTablesForServer(connectionId, databaseName, page, tableName);
});
} else {
this.commonExceptionHandler(error);
}
});
}

/**
Expand Down Expand Up @@ -1032,4 +1047,51 @@ export class DetailWorkbenchSchemaBrowserComponent extends AbstractWorkbenchComp
private _searchGridComponent(gridComponent: GridComponent, searchText: string): void {
gridComponent.search(searchText);
}

/**
* Get parameters for database list
* @param {string} webSocketId
* @param {Page} page
* @param {string} databaseName
* @returns {any}
* @private
*/
private _getParameterForDatabase(webSocketId: string, page?: Page, databaseName?: string): any {
const params = {
webSocketId: webSocketId
};
if (page) {
params['sort'] = page.sort;
params['page'] = page.page;
params['size'] = page.size;
}
if (StringUtil.isNotEmpty(databaseName)) {
params['databaseName'] = databaseName.trim();
}
return params;
}

/**
* Get parameter for table
* @param {string} webSocketId
* @param {Page} page
* @param {string} tableName
* @returns {any}
* @private
*/
private _getParameterForTable(webSocketId: string, page?: Page, tableName?: string): any {
const params = {
webSocketId: webSocketId
};
if (page) {
params['sort'] = page.sort;
params['page'] = page.page;
params['size'] = page.size;
}
if (StringUtil.isNotEmpty(tableName)) {
params['tableName'] = tableName.trim();
}
return params;
}

}

0 comments on commit 723596d

Please sign in to comment.