메타 데이터
메타 데이터를 커스터마이징 할 수 있는 영역을 제공합니다.
1. 제공되는 커스터마이징 목록(4)
기능 | 설명 |
---|---|
bindMetaLocalReader |
로칼 저장소에 저장된 메타 데이터를 읽어오는 모듈을 바인딩합니다. |
bindMetaLocalWriter |
원격 저장소에서 읽어온 데이터를 로칼 저장소에 저장하는 모듈을 바인딩합니다. |
bindMetaRemoteReader |
원격 저장소의 메타 데이터를 읽어오는 모듈을 바인딩합니다. |
bindMetaViewerColumnProvider |
메타 뷰어의 컬럼 정보를 제공하는 모듈을 바인딩합니다. |
2. 상세
메소드의 기능을 확인하고 필요한 부분을 커스터마이징 할 수 있습니다.
2.1. bindMetaLocalReader
로칼 저장소에 저장된 메타 데이터를 읽어오는 모듈을 바인딩합니다.
1. 인터페이스 및 클래스
모듈이 반드시 구현 해야하는 인터페이스 또는 상속 해야하는 클래스입니다.
com.bankwareglobal.ide.bxframework.core.meta.data.reader.impl.MetaLocalReader
2. 기본 구현 클래스
해당 기능을 위해 구현된 기본 클래스입니다. 인터페이스 및 클래스에서 필요한 기본 기능이 구현되어있으며 모듈을 확장할 경우 이 클래스를 상속 받아서 구현할 수 있습니다.
com.bankwareglobal.ide.bxframework.se.meta.BxmMetaLocalReader
3. 구현 예제
com.bankwareglobal.ide.bxframework.se.extensions.overriding.impl.ExtMetaLocalReader
package com.bankwareglobal.ide.bxframework.se.extensions.overriding.impl;
import com.bankwareglobal.ide.bxframework.core.documentation.Documentation;
import com.bankwareglobal.ide.bxframework.core.meta.data.model.MetaData;
import com.bankwareglobal.ide.bxframework.core.meta.util.MetaUtil;
import com.bankwareglobal.ide.bxframework.se.extensions.meta.ExtMetaData;
import com.bankwareglobal.ide.bxframework.se.meta.BxmMetaLocalReader;
import com.bankwareglobal.ide.datatools.configuration.DatatoolsConfiguration;
/**
* 로칼 저장소에 저장된 메타 데이터를 읽어오는 모듈
*/
public class ExtMetaLocalReader extends BxmMetaLocalReader {
/**
* 메타 데이터 파일의 절대 경로를 반환합니다.
*/
@Override
protected String getTargetFilePath() {
return MetaUtil.getFilePath("/bxm/meta/ext_metadata.loc");
}
/**
* 메타 데이터 파일에서 읽어들인 정보로 MetaData 모델을 생성합니다.
*/
@Override
protected MetaData createFrom(boolean isNumber2BigDecimal, String[] s) throws Exception {
int len = Integer.parseInt(s[3]);
int decimal = Integer.parseInt(s[4]);
String encode = s[5] == "NONE" ? null : s[5];
String extension = s.length > 6 ? (s[6] == null ? null : s[6]) : "";
if (!isNumber2BigDecimal && "BigDecimal".equals(s[0])
&& len <= DatatoolsConfiguration.Database.getIntMaxLength() && decimal == 0) {
return new ExtMetaData("Integer", s[1], s[2], len, decimal, encode, extension);
} else {
return new ExtMetaData(s[0], s[1], s[2], len, decimal, encode, extension);
}
}
}
4. 재구현된 메소드 목록(2)
메소드 이름 | 설명 |
---|---|
getTargetFilePath |
메타 데이터 파일의 절대 경로를 반환합니다. |
createFrom |
메타 데이터 파일에서 읽어들인 정보로 MetaData 모델을 생성합니다. |
2.2. bindMetaLocalWriter
원격 저장소에서 읽어온 데이터를 로칼 저장소에 저장하는 모듈을 바인딩합니다.
1. 인터페이스 및 클래스
모듈이 반드시 구현 해야하는 인터페이스 또는 상속 해야하는 클래스입니다.
com.bankwareglobal.ide.bxframework.core.meta.data.writer.impl.MetaLocalWriter
2. 기본 구현 클래스
해당 기능을 위해 구현된 기본 클래스입니다. 인터페이스 및 클래스에서 필요한 기본 기능이 구현되어있으며 모듈을 확장할 경우 이 클래스를 상속 받아서 구현할 수 있습니다.
com.bankwareglobal.ide.bxframework.se.meta.BxmMetaLocalWriter
3. 구현 예제
com.bankwareglobal.ide.bxframework.se.extensions.overriding.impl.ExtMetaLocalWriter
package com.bankwareglobal.ide.bxframework.se.extensions.overriding.impl;
import com.bankwareglobal.ide.bxframework.core.meta.data.model.MetaData;
import com.bankwareglobal.ide.bxframework.core.meta.util.MetaUtil;
import com.bankwareglobal.ide.bxframework.se.extensions.meta.ExtMetaData;
import com.bankwareglobal.ide.bxframework.se.meta.BxmMetaLocalWriter;
import com.bankwareglobal.ide.commons.utils.StringUtils;
/**
* 원격 저장소에서 읽어온 데이터를 로칼 저장소에 저장하는 모듈
*/
public class ExtMetaLocalWriter extends BxmMetaLocalWriter {
/**
* 메타 데이터 파일의 절대 경로를 반환합니다.
*/
@Override
protected String getTargetFilePath() {
return MetaUtil.getFilePath("/bxm/meta/ext_metadata.loc");
}
/**
* 메타 데이터 파일에 저장하기 위해 MetaData 모델을 문자열 배열로 변환합니다.
*/
@Override
protected String[] createFrom(MetaData metaData) {
if ( metaData instanceof ExtMetaData ) {
ExtMetaData _metaData= (ExtMetaData)metaData;
return new String[] {
_metaData.getType()
, _metaData.getName()
, _metaData.getDescription()
, String.valueOf(_metaData.getLength())
, String.valueOf(_metaData.getDecimal())
, String.valueOf(_metaData.getEncode())
, StringUtils.nvl(_metaData.getExtension())
};
}
else {
return super.createFrom(metaData);
}
}
}
4. 재구현된 메소드 목록(2)
메소드 이름 | 설명 |
---|---|
getTargetFilePath |
메타 데이터 파일의 절대 경로를 반환합니다. |
createFrom |
메타 데이터 파일에 저장하기 위해 MetaData 모델을 문자열 배열로 변환합니다. |
2.3. bindMetaRemoteReader
원격 저장소의 메타 데이터를 읽어오는 모듈을 바인딩합니다.
1. 인터페이스 및 클래스
모듈이 반드시 구현 해야하는 인터페이스 또는 상속 해야하는 클래스입니다.
com.bankwareglobal.ide.bxframework.core.meta.data.reader.impl.MetaRemoteReader
2. 기본 구현 클래스
해당 기능을 위해 구현된 기본 클래스입니다. 인터페이스 및 클래스에서 필요한 기본 기능이 구현되어있으며 모듈을 확장할 경우 이 클래스를 상속 받아서 구현할 수 있습니다.
com.bankwareglobal.ide.bxframework.se.meta.BxmMetaRemoteReader
3. 구현 예제
com.bankwareglobal.ide.bxframework.se.extensions.overriding.impl.ExtMetaRemoteReader
package com.bankwareglobal.ide.bxframework.se.extensions.overriding.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.bankwareglobal.ide.bxframework.core.meta.data.model.MetaData;
import com.bankwareglobal.ide.bxframework.core.session.BxmUser;
import com.bankwareglobal.ide.bxframework.core.session.SessionManager;
import com.bankwareglobal.ide.bxframework.se.extensions.meta.ExtMetaData;
import com.bankwareglobal.ide.bxframework.se.meta.BxmMetaRemoteReader;
import com.bankwareglobal.ide.commons.utils.StringUtils;
import com.bankwareglobal.ide.datatools.configuration.DatatoolsConfiguration;
/**
* 원격 저장소의 메타 데이터를 읽어오는 모듈
*/
public class ExtMetaRemoteReader extends BxmMetaRemoteReader {
/**
* 원격 Reader의 ID를 반환합니다.
*/
@Override
public String getName() {
return "ext.meta.remoteReader";
}
/**
* 메타 테이블 정보를 조회하는 SQL을 실행하고 결과를 반환합니다.
*/
@Override
protected PreparedStatement prepareReadSql(Connection connection) throws Exception {
BxmUser bxmUser= SessionManager.instance().getUser();
String domainId= bxmUser.getDomainId(); // domain id 사용하지 않을 경우 "" 반환됨
String metaTableName= null;
String schemaName= DatatoolsConfiguration.Database.getFrameworkTableOwner();
if (StringUtils.isEmpty(schemaName)) {
metaTableName = "BXM_OMM_META";
} else {
metaTableName = schemaName + "." + "BXM_OMM_META";
}
PreparedStatement pstmt= null;
if ( StringUtils.isEmpty( domainId ) ){
pstmt= connection.prepareStatement("SELECT * FROM " + metaTableName + " WHERE USE_YN = 'Y'");
}
else{
pstmt= connection.prepareStatement("SELECT * FROM " + metaTableName + " WHERE USE_YN = 'Y' AND TENANT_ID= ?");
pstmt.setString(1, domainId);
}
return pstmt;
}
/**
* 메타 버전 정보를 조회하는 SQL을 실행하고 결과를 반환합니다.
*/
@Override
protected PreparedStatement prepareReadVersionSql(Connection connection) throws Exception {
BxmUser bxmUser= SessionManager.instance().getUser();
String domainId= bxmUser.getDomainId(); // domain id 사용하지 않을 경우 "" 반환됨
String metaVersionTableName= null;
String schemaName= DatatoolsConfiguration.Database.getFrameworkTableOwner();
if (StringUtils.isEmpty(schemaName)) {
metaVersionTableName = "BXM_OMM_META_VERSION";
} else {
metaVersionTableName = schemaName + "." + "BXM_OMM_META_VERSION";
}
PreparedStatement pstmt= null;
if ( StringUtils.isEmpty( domainId ) ){
pstmt= connection.prepareStatement("SELECT MAX(META_VERSION) AS META_VERSION FROM " + metaVersionTableName);
}
else{
pstmt= connection.prepareStatement("SELECT MAX(META_VERSION) AS META_VERSION FROM " + metaVersionTableName + " WHERE TENANT_ID= ?");
pstmt.setString(1, domainId);
}
return pstmt;
}
/**
* DB에서 가져온 결과를 MetaData 모델로 변환합니다.
*/
@Override
protected MetaData createFrom(ResultSet rs)
throws Exception
{
String type= rs.getString("META_DATA_TYPE_NM");
String name= rs.getString("META_NM");
String description= rs.getString("META_DESC");
int length= rs.getInt("META_LEN");
int decimal= rs.getInt("META_DECIMAL");
String encode= "";
String masking= null;
try {
masking= rs.getString("MASKING");
} catch (Exception e) {
logger.trace("Not support 'MASKING'");
}
ExtMetaData data= new ExtMetaData(
type
, name
, description
, length
, decimal
, encode
, StringUtils.nvl(masking)
);
return data;
}
}
4. 재구현된 메소드 목록(4)
메소드 이름 | 설명 |
---|---|
getName |
원격 Reader의 ID를 반환합니다. |
prepareReadSql |
메타 테이블 정보를 조회하는 SQL을 실행하고 결과를 반환합니다. |
prepareReadVersionSql |
메타 버전 정보를 조회하는 SQL을 실행하고 결과를 반환합니다. |
createFrom |
DB에서 가져온 결과를 MetaData 모델로 변환합니다. |
2.4. bindMetaViewerColumnProvider
메타 뷰어의 컬럼 정보를 제공하는 모듈을 바인딩합니다.
1. 인터페이스 및 클래스
모듈이 반드시 구현 해야하는 인터페이스 또는 상속 해야하는 클래스입니다.
com.bankwareglobal.ide.bxframework.core.meta.IMetaViewerColumnProvider
2. 기본 구현 클래스
해당 기능을 위해 구현된 기본 클래스입니다. 인터페이스 및 클래스에서 필요한 기본 기능이 구현되어있으며 모듈을 확장할 경우 이 클래스를 상속 받아서 구현할 수 있습니다.
com.bankwareglobal.ide.bxframework.core.meta.MetaViewerColumnProvider
3. 구현 예제
com.bankwareglobal.ide.bxframework.se.extensions.overriding.impl.ExtMetaViewerColumnProvider
package com.bankwareglobal.ide.bxframework.se.extensions.overriding.impl;
import java.util.List;
import org.eclipse.jface.viewers.ITableLabelProvider;
import com.bankwareglobal.ide.bxframework.core.meta.MetaViewerColumn;
import com.bankwareglobal.ide.bxframework.core.meta.MetaViewerColumnProvider;
import com.bankwareglobal.ide.bxframework.core.meta.data.model.MetaData;
import com.bankwareglobal.ide.bxframework.se.extensions.meta.ExtMetaData;
import com.bankwareglobal.ide.commons.controls.AbstractTableLabelProvider;
import com.bankwareglobal.ide.commons.messages.CommonWord;
import com.google.common.collect.Lists;
/**
* 메타 뷰어의 컬럼 정보 제공자
*/
public class ExtMetaViewerColumnProvider extends MetaViewerColumnProvider {
/**
* 메타 뷰어의 컬럼 목록을 반환합니다.
*/
@Override
public List<MetaViewerColumn> createColumns(){
List<MetaViewerColumn> columns= Lists.newArrayList();
columns.add(new MetaViewerColumn("physicalName", CommonWord.PHYSICAL_NAME, 200));
columns.add(new MetaViewerColumn("logicalName", CommonWord.LOGICAL_NAME, 200));
columns.add(new MetaViewerColumn("type", CommonWord.TYPE2, 150));
columns.add(new MetaViewerColumn("length", CommonWord.DATA_LENGTH, 100));
columns.add(new MetaViewerColumn("decimal", CommonWord.DECIMAL_POINT, 100));
columns.add(new MetaViewerColumn("encryption", CommonWord.ENCRYPTION, 100));
columns.add(new MetaViewerColumn("extesion", "확장", 100));
return columns;
}
/**
* 메타 뷰어의 라벨 제공자를 반환합니다.
*/
@Override
public ITableLabelProvider createLabelProvider() {
return new AbstractTableLabelProvider() {
@Override
public String getColumnText(Object element, int columnIndex) {
if (!(element instanceof MetaData))
return "";
ExtMetaData metaData = (ExtMetaData) element;
switch (columnIndex) {
case 0:
// 물리이름
return metaData.getName();
case 1:
// 논리이름
return metaData.getDescription();
case 2:
// 타입: String, Integer, BigDecimal 등
return metaData.getType();
case 3:
// 길이
return String.valueOf(metaData.getLength());
case 4:
// 유효자리
return String.valueOf(metaData.getDecimal());
case 5:
// 암호화
return String.valueOf(metaData.getEncode());
case 6:
// 확장
return metaData.getExtension();
default:
break;
}
return "";
}
};
}
}
4. 재구현된 메소드 목록(3)
메소드 이름 | 설명 |
---|---|
createColumns |
메타 뷰어의 컬럼 목록을 반환합니다. |
createLabelProvider |
메타 뷰어의 라벨 제공자를 반환합니다. |
getColumnText |