배치 작업 마법사

배치 작업 마법사에서는 커스터마이징 할 수 있는 영역을 제공합니다.

1. 제공되는 커스터마이징 목록(3)

배치 작업 마법사에서 제공되는 커스터마이징 영역 목록
기능 설명

bindBatchCodeExtension

배치 작업 마법사에서 생성되는 컴포넌트의 메소드 코드를 생성하는 모듈을 바인딩합니다.

bindBatchJobExtension

배치 작업 마법사에서 생성되는 Job XML 코드를 생성하는 모듈을 바인딩합니다.

bindBatchNamingDeterminator

배치 작업 마법사를 이용하여 생성되는 모든 자원에 대한 이름(패키지, 클래스, 변수, 메소드 등)을 결정하는 결정자를 바인딩합니다.

2. 상세

메소드의 기능을 확인하고 필요한 부분을 커스터마이징 할 수 있습니다.

2.1. bindBatchCodeExtension

배치 작업 마법사에서 생성되는 컴포넌트의 메소드 코드를 생성하는 모듈을 바인딩합니다.

1. 인터페이스 및 클래스

모듈이 반드시 구현 해야하는 인터페이스 또는 상속 해야하는 클래스입니다.

com.bankwareglobal.ide.bxframework.core.batch.generator.IBatchCodeExtension

2. 기본 구현 클래스

해당 기능을 위해 구현된 기본 클래스입니다. 인터페이스 및 클래스에서 필요한 기본 기능이 구현되어있으며 모듈을 확장할 경우 이 클래스를 상속 받아서 구현할 수 있습니다.

com.bankwareglobal.ide.bxframework.se.batch.generator.BxmBatchCodeExtension

3. 구현 예제

com.bankwareglobal.ide.bxframework.se.extensions.overriding.impl.ExtBatchCodeExtension

                package com.bankwareglobal.ide.bxframework.se.extensions.overriding.impl

                import com.bankwareglobal.ide.bxframework.core.batch.generator.IBatchCodeExtension
                import com.bankwareglobal.ide.bxframework.core.batch.model.BatchChunkTypeDeclarationModel
                import com.bankwareglobal.ide.bxframework.core.generator.ImportManager
                import com.bankwareglobal.ide.bxframework.core.batch.model.BatchMultiWriterTypeDeclarationModel
                import com.bankwareglobal.ide.commons.utils.JavaUtils

                /**
                 * 배치 작업 마법사에서 생성되는 컴포넌트의 메소드 코드를 생성하는 모듈
                 */
                class ExtBatchCodeExtension implements IBatchCodeExtension {

                    /**
                     * Database 유형의 ItemStream open 메소드 내용을 작성합니다.
                     */
                    override assembleDbItemStreamOpen(BatchChunkTypeDeclarationModel model, ImportManager importManager, String readerDbioVarName)'''
                        List<«model.readerDbioDtoClassName»> dbioOut= «readerDbioVarName».«model.readerDbioMethodName»();

                        if(dbioOut == null || dbioOut.isEmpty())
                        {
                            throw new ItemStreamException("Connected result is not prepared.");
                        }

                        iterator = dbioOut.iterator();
                    '''

                    /**
                     * Reader의 Source Fixed 유형의 ItemStream open 메소드 내용을 작성합니다.
                     */
                    override assembleReadSourceFixedItemStreamOpen(BatchChunkTypeDeclarationModel model, ImportManager importManager, String batchFileUtilClassName)'''
                        String readFileName= "";
                        reader= «JavaUtils.getClassName(batchFileUtilClassName)».getFixedFileReader(readFileName, «model.readerDtoClassName».class, "«model.readerFileEncoding»");
                        reader.open(executionContext);
                    '''

                    /**
                     * Reader의 Source Delimited 유형의 ItemStream open 메소드 내용을 작성합니다.
                     */
                    override assembleReadSourceDelimitItemStreamOpen(BatchChunkTypeDeclarationModel model, ImportManager importManager, String batchFileUtilClassName)'''
                        String readFileName= "";
                        reader= «JavaUtils.getClassName(batchFileUtilClassName)».getDelimitedFileReader(readFileName, «model.readerDtoClassName».class, "«model.readerDelimiter»", "«model.readerFileEncoding»");
                        reader.open(executionContext);
                    '''

                    /**
                     * Writer의 Source Fixed 유형의 ItemStream open 메소드 내용을 작성합니다.
                     */
                    override assembleWriteSourceFixedItemStreamOpen(BatchChunkTypeDeclarationModel model, ImportManager importManager, String batchFileUtilClassName)'''
                        String writeFileName= "";
                        writer= «JavaUtils.getClassName(batchFileUtilClassName)».getFixedFileWriter(writeFileName, «model.writerDtoClassName».class, "«model.writerFileEncoding»");
                        writer.open(executionContext);
                    '''

                    /**
                     * Writer의 Source Delimited 유형의 ItemStream open 메소드 내용을 작성합니다.
                     */
                    override assembleWriteSourceDelimitItemStreamOpen(BatchChunkTypeDeclarationModel model, ImportManager importManager, String batchFileUtilClassName)'''
                        String writeFileName= "";
                        writer= «JavaUtils.getClassName(batchFileUtilClassName)».getDelimitedFileWriter(writeFileName, «model.writerDtoClassName».class, "«model.writerDelimiter»");
                        writer.open(executionContext);
                    '''

                    /**
                     * Multi Writer의 Source Fixed 유형의 ItemStream open 메소드 내용을 작성합니다.
                     */
                    override assembleWriteSourceFixedItemStreamOpen(BatchMultiWriterTypeDeclarationModel model, ImportManager importManager, String batchFileUtilClassName)'''
                        String writeFileName= "";
                        writer= «JavaUtils.getClassName(batchFileUtilClassName)».getFixedFileWriter(writeFileName, «model.dtoClassName».class, "«model.fileEncoding»");
                        writer.open(executionContext);
                    '''

                    /**
                     * Multi Writer의 Source Delimited 유형의 ItemStream open 메소드 내용을 작성합니다.
                     */
                    override assembleWriteSourceDelimitItemStreamOpen(BatchMultiWriterTypeDeclarationModel model, ImportManager importManager, String batchFileUtilClassName)'''
                        String writeFileName= "";
                        writer= «JavaUtils.getClassName(batchFileUtilClassName)».getDelimitedFileWriter(writeFileName, «model.dtoClassName».class, "«model.delimiter»");
                        writer.open(executionContext);
                    '''

                    /**
                     * Reader의 Source Fixed 유형의 ItemStream update 메소드 내용을 작성합니다.
                     */
                    override assembleReadSourceFixedItemStreamUpdate(BatchChunkTypeDeclarationModel model, ImportManager importManager)'''
                        if(reader != null) reader.update(executionContext);
                    '''

                    /**
                     * Reader의 Source Delimited 유형의 ItemStream update 메소드 내용을 작성합니다.
                     */
                    override assembleReadSourceDelimitItemStreamUpdate(BatchChunkTypeDeclarationModel model, ImportManager importManager)'''
                        if(reader != null) reader.update(executionContext);
                    '''

                    /**
                     * Writer의 Source Fixed 유형의 ItemStream update 메소드 내용을 작성합니다.
                     */
                    override assembleWriteSourceFixedItemStreamUpdate(BatchChunkTypeDeclarationModel model, ImportManager importManager)'''
                        if(writer != null) writer.update(executionContext);
                    '''

                    /**
                     * Writer의 Source Delimited 유형의 ItemStream update 메소드 내용을 작성합니다.
                     */
                    override assembleWriteSourceDelimitItemStreamUpdate(BatchChunkTypeDeclarationModel model, ImportManager importManager)'''
                        if(writer != null) writer.update(executionContext);
                    '''

                    /**
                     * Multi Writer의 Source Fixed 유형의 ItemStream update 메소드 내용을 작성합니다.
                     */
                    override assembleWriteSourceFixedItemStreamUpdate(BatchMultiWriterTypeDeclarationModel model, ImportManager importManager
                    )'''
                        if(writer != null) writer.update(executionContext);
                    '''

                    /**
                     * Multi Writer의 Source Delimited 유형의 ItemStream update 메소드 내용을 작성합니다.
                     */
                    override assembleWriteSourceDelimitItemStreamUpdate(BatchMultiWriterTypeDeclarationModel model, ImportManager importManager)'''
                        if(writer != null) writer.update(executionContext);
                    '''

                    /**
                     * Database 유형의 ItemStream close 메소드 내용을 작성합니다.
                     */
                    override assembleDbItemStreamClose(BatchChunkTypeDeclarationModel model, ImportManager importManager)'''
                        «importManager.add("bxm.context.das.DasUtils")»
                        DasUtils.disconnectDasExecutor(iterator);
                    '''

                    /**
                     * Reader의 Source Fixed 유형의 ItemStream close 메소드 내용을 작성합니다.
                     */
                    override assembleReadSourceFixedItemStreamClose(BatchChunkTypeDeclarationModel model, ImportManager importManager)'''
                        if(reader != null) reader.close();
                    '''

                    /**
                     * Reader의 Source Delimited 유형의 ItemStream close 메소드 내용을 작성합니다.
                     */
                    override assembleReadSourceDelimitItemStreamClose(BatchChunkTypeDeclarationModel model, ImportManager importManager)'''
                        if(reader != null) reader.close();
                    '''

                    /**
                     * Writer의 Source Fixed 유형의 ItemStream close 메소드 내용을 작성합니다.
                     */
                    override assembleWriteSourceFixedItemStreamClose(BatchChunkTypeDeclarationModel model, ImportManager importManager)'''
                        if(writer != null) writer.close();
                    '''

                    /**
                     * Writer의 Source Delimited 유형의 ItemStream close 메소드 내용을 작성합니다.
                     */
                    override assembleWriteSourceDelimitItemStreamClose(BatchChunkTypeDeclarationModel model, ImportManager importManager)'''
                        if(writer != null) writer.close();
                    '''

                    /**
                     * Multi Writer의 Source Fixed 유형의 ItemStream close 메소드 내용을 작성합니다.
                     */
                    override assembleWriteSourceFixedItemStreamClose(BatchMultiWriterTypeDeclarationModel model, ImportManager importManager)'''
                        if(writer != null) writer.close();
                    '''

                    /**
                     * Multi Writer의 Source Delimited 유형의 ItemStream close 메소드 내용을 작성합니다.
                     */
                    override assembleWriteSourceDelimitItemStreamClose(BatchMultiWriterTypeDeclarationModel model, ImportManager importManager)'''
                        if(writer != null) writer.close();
                    '''

                    /**
                     * Reader의 Database 유형의 read 메소드 내용을 작성합니다.
                     */
                    override assembleDbReader(BatchChunkTypeDeclarationModel model, ImportManager importManager, String dtoMappingLogic)'''
                        «importManager.add(String.join(".", model.readerDbioDtoPackageName, model.readerDbioDtoClassName))»
                        «model.readerDtoClassName» in = null;

                        if(iterator.hasNext())
                        {
                            in = new «model.readerDtoClassName»();

                            «model.readerDbioDtoClassName» input = iterator.next();

                            «dtoMappingLogic»
                        }

                        return in;
                    '''

                    /**
                     * Reader의 Source Fixed 유형의 read 메소드 내용을 작성합니다.
                     */
                    override assembleFileReadSourceFixedReader(BatchChunkTypeDeclarationModel model, ImportManager importManager)'''
                        «model.readerDtoClassName» in= reader.read();

                        return in;
                    '''

                    /**
                     * Reader의 Source Delimited 유형의 read 메소드 내용을 작성합니다.
                     */
                    override assembleFileReadSourcedDelimitReader(BatchChunkTypeDeclarationModel model, ImportManager importManager)'''
                        «model.readerDtoClassName» in= reader.read();

                        return in;
                    '''

                    /**
                     * Processor의 process 메소드 내용을 작성합니다.
                     */
                    override assembleProcessor(BatchChunkTypeDeclarationModel model, ImportManager importManager)'''
                    '''

                    /**
                     * Processor의 Multi Fixed, Multi Delimited 유형의 process 메소드 내용을 작성합니다.
                     */
                    override assembleProcessorMultiTypeReader(BatchChunkTypeDeclarationModel model, ImportManager importManager, String subHeaderDtoQname, String subBodyDtoQname, String subFooterDtoQname)'''
                        «var subHeaderDtoClassName = JavaUtils.getClassName(subHeaderDtoQname)»
                        «var subBodyDtoClassName = JavaUtils.getClassName(subBodyDtoQname)»
                        «var subFooterDtoClassName = JavaUtils.getClassName(subFooterDtoQname)»
                        «subHeaderDtoClassName» readerHeader= null; // Reader Header DTO
                        «subBodyDtoClassName» readerBody= null;     // Reader Body DTO
                        «subFooterDtoClassName» readerFooter= null; // Reader Footer DTO

                        if(in instanceof «subHeaderDtoClassName»)
                        {
                            // Reader Header
                            readerHeader= («subHeaderDtoClassName») in;
                        }
                        else if(in instanceof «subBodyDtoClassName»)
                        {
                            // Reader Body
                            readerBody= («subBodyDtoClassName») in;
                        }
                        else if(in instanceof «subFooterDtoClassName»)
                        {
                            // Reader Footer
                            readerFooter= («subFooterDtoClassName») in;
                        }
                    '''

                    /**
                     * Writer의 Multi Fixed, Multi Delimited 유형의 process 메소드 내용을 작성합니다.
                     */
                    override assembleProcessorMultiTypeWriter(BatchChunkTypeDeclarationModel model, ImportManager importManager, String subHeaderDtoQname, String subBodyDtoQname, String subFooterDtoQname)'''
                        «var subHeaderDtoClassName = JavaUtils.getClassName(subHeaderDtoQname)»
                        «var subBodyDtoClassName = JavaUtils.getClassName(subBodyDtoQname)»
                        «var subFooterDtoClassName = JavaUtils.getClassName(subFooterDtoQname)»
                        «subHeaderDtoClassName» writerHeader= null; // Writer Header DTO
                        «subBodyDtoClassName» writerBody= null;     // Writer Body DTO
                        «subFooterDtoClassName» writerFooter= null; // Writer Footer DTO

                        out.setHeader(writerHeader);

                        out.setBody(writerBody);

                        out.setFooter(writerFooter);
                    '''

                    /**
                     * Writer의 Database 유형의 write 메소드 내용을 작성합니다.
                     */
                    override assembleDbWriter(BatchChunkTypeDeclarationModel model, ImportManager importManager, String writerDbioVarName, String dtoMappingLogic)'''
                        «importManager.add("java.util.ArrayList")»
                        «importManager.add(String.join(".", model.writerDbioDtoPackageName, model.writerDbioDtoClassName))»

                        List<«model.writerDbioDtoClassName»> inDtoList = new ArrayList<«model.writerDbioDtoClassName»>();
                        for(«model.writerDtoClassName» in : inList)
                        {
                            «model.writerDbioDtoClassName» inDto = new «model.writerDbioDtoClassName»();
                            «dtoMappingLogic»
                            inDtoList.add(inDto);
                        }

                        «writerDbioVarName».«model.writerDbioMethodName»(inDtoList);
                    '''

                    /**
                     * Writer의 Source Fixed 유형의 write 메소드 내용을 작성합니다.
                     */
                    override assembleFileWriterSourceFixedWriter(BatchChunkTypeDeclarationModel model, ImportManager importManager)'''
                        writer.write(inList);
                    '''

                    /**
                     * Writer의 Source Delimited 유형의 write 메소드 내용을 작성합니다.
                     */
                    override assembleFileWriterSourceDelimitWriter(BatchChunkTypeDeclarationModel model, ImportManager importManager)'''
                        writer.write(inList);
                    '''

                    /**
                     * Multi Writer의 Database 유형의 write 메소드 내용을 작성합니다.
                     */
                    override assembleDbWriter(BatchMultiWriterTypeDeclarationModel model, ImportManager importManager, String writerDbioVarName, String dtoMappingLogic)'''
                        «importManager.add("java.util.ArrayList")»
                        «importManager.add(String.join(".", model.dbioDtoPackageName, model.dbioDtoClassName))»

                        List<«model.dbioDtoClassName»> inDtoList = new ArrayList<«model.dbioDtoClassName»>();
                        for(«model.dtoClassName» in : inList)
                        {
                            «model.dbioDtoClassName» inDto = new «model.dbioDtoClassName»();
                            «dtoMappingLogic»
                            inDtoList.add(inDto);
                        }

                        «writerDbioVarName».«model.dbioMethodName»(inDtoList);
                    '''

                    /**
                     * Multi Writer의 Source Fixed 유형의 write 메소드 내용을 작성합니다.
                     */
                    override assembleFileWriterSourceFixedWriter(BatchMultiWriterTypeDeclarationModel model, ImportManager importManager)'''
                        writer.write(inList);
                    '''

                    /**
                     * Multi Writer의 Source Delimited 유형의 write 메소드 내용을 작성합니다.
                     */
                    override assembleFileWriterSourceDelimitWriter(BatchMultiWriterTypeDeclarationModel model, ImportManager importManager)'''
                        writer.write(inList);
                    '''

                }

4. 재구현된 메소드 목록(32)

재구현된 메소드 목록
메소드 이름 설명

assembleDbItemStreamOpen

Database 유형의 ItemStream open 메소드 내용을 작성합니다.

assembleReadSourceFixedItemStreamOpen

Reader의 Source Fixed 유형의 ItemStream open 메소드 내용을 작성합니다.

assembleReadSourceDelimitItemStreamOpen

Reader의 Source Delimited 유형의 ItemStream open 메소드 내용을 작성합니다.

assembleWriteSourceFixedItemStreamOpen

Writer의 Source Fixed 유형의 ItemStream open 메소드 내용을 작성합니다.

assembleWriteSourceDelimitItemStreamOpen

Writer의 Source Delimited 유형의 ItemStream open 메소드 내용을 작성합니다.

assembleWriteSourceFixedItemStreamOpen

Multi Writer의 Source Fixed 유형의 ItemStream open 메소드 내용을 작성합니다.

assembleWriteSourceDelimitItemStreamOpen

Multi Writer의 Source Delimited 유형의 ItemStream open 메소드 내용을 작성합니다.

assembleReadSourceFixedItemStreamUpdate

Reader의 Source Fixed 유형의 ItemStream update 메소드 내용을 작성합니다.

assembleReadSourceDelimitItemStreamUpdate

Reader의 Source Delimited 유형의 ItemStream update 메소드 내용을 작성합니다.

assembleWriteSourceFixedItemStreamUpdate

Writer의 Source Fixed 유형의 ItemStream update 메소드 내용을 작성합니다.

assembleWriteSourceDelimitItemStreamUpdate

Writer의 Source Delimited 유형의 ItemStream update 메소드 내용을 작성합니다.

assembleWriteSourceFixedItemStreamUpdate

Multi Writer의 Source Fixed 유형의 ItemStream update 메소드 내용을 작성합니다.

assembleWriteSourceDelimitItemStreamUpdate

Multi Writer의 Source Delimited 유형의 ItemStream update 메소드 내용을 작성합니다.

assembleDbItemStreamClose

Database 유형의 ItemStream close 메소드 내용을 작성합니다.

assembleReadSourceFixedItemStreamClose

Reader의 Source Fixed 유형의 ItemStream close 메소드 내용을 작성합니다.

assembleReadSourceDelimitItemStreamClose

Reader의 Source Delimited 유형의 ItemStream close 메소드 내용을 작성합니다.

assembleWriteSourceFixedItemStreamClose

Writer의 Source Fixed 유형의 ItemStream close 메소드 내용을 작성합니다.

assembleWriteSourceDelimitItemStreamClose

Writer의 Source Delimited 유형의 ItemStream close 메소드 내용을 작성합니다.

assembleWriteSourceFixedItemStreamClose

Multi Writer의 Source Fixed 유형의 ItemStream close 메소드 내용을 작성합니다.

assembleWriteSourceDelimitItemStreamClose

Multi Writer의 Source Delimited 유형의 ItemStream close 메소드 내용을 작성합니다.

assembleDbReader

Reader의 Database 유형의 read 메소드 내용을 작성합니다.

assembleFileReadSourceFixedReader

Reader의 Source Fixed 유형의 read 메소드 내용을 작성합니다.

assembleFileReadSourcedDelimitReader

Reader의 Source Delimited 유형의 read 메소드 내용을 작성합니다.

assembleProcessor

Processor의 process 메소드 내용을 작성합니다.

assembleProcessorMultiTypeReader

Processor의 Multi Fixed, Multi Delimited 유형의 process 메소드 내용을 작성합니다.

assembleProcessorMultiTypeWriter

Writer의 Multi Fixed, Multi Delimited 유형의 process 메소드 내용을 작성합니다.

assembleDbWriter

Writer의 Database 유형의 write 메소드 내용을 작성합니다.

assembleFileWriterSourceFixedWriter

Writer의 Source Fixed 유형의 write 메소드 내용을 작성합니다.

assembleFileWriterSourceDelimitWriter

Writer의 Source Delimited 유형의 write 메소드 내용을 작성합니다.

assembleDbWriter

Multi Writer의 Database 유형의 write 메소드 내용을 작성합니다.

assembleFileWriterSourceFixedWriter

Multi Writer의 Source Fixed 유형의 write 메소드 내용을 작성합니다.

assembleFileWriterSourceDelimitWriter

Multi Writer의 Source Delimited 유형의 write 메소드 내용을 작성합니다.

2.2. bindBatchJobExtension

배치 작업 마법사에서 생성되는 Job XML 코드를 생성하는 모듈을 바인딩합니다.

1. 인터페이스 및 클래스

모듈이 반드시 구현 해야하는 인터페이스 또는 상속 해야하는 클래스입니다.

com.bankwareglobal.ide.bxframework.core.batch.generator.IBatchJobExtension

2. 기본 구현 클래스

해당 기능을 위해 구현된 기본 클래스입니다. 인터페이스 및 클래스에서 필요한 기본 기능이 구현되어있으며 모듈을 확장할 경우 이 클래스를 상속 받아서 구현할 수 있습니다.

com.bankwareglobal.ide.bxframework.se.batch.generator.BxmBatchJobExtension

3. 구현 예제

com.bankwareglobal.ide.bxframework.se.extensions.overriding.impl.ExtBatchJobExtension

                package com.bankwareglobal.ide.bxframework.se.extensions.overriding.impl

                import com.bankwareglobal.ide.bxframework.core.batch.generator.IBatchJobExtension
                import com.bankwareglobal.ide.bxframework.core.batch.model.BatchChunkTypeDeclarationModel
                import com.bankwareglobal.ide.bxframework.core.batch.model.BatchHelper
                import com.bankwareglobal.ide.bxframework.core.batch.model.BatchMultiWriterTypeDeclarationModel
                import com.bankwareglobal.ide.bxframework.core.batch.model.BatchTaskletTypeDeclarationModel
                import java.util.Map
                import com.bankwareglobal.ide.bxframework.core.batch.model.BatchType
                import com.bankwareglobal.ide.commons.utils.StringUtils

                /**
                 * 배치 작업 마법사에서 생성되는 Job XML 코드를 생성하는 모듈
                 */
                class ExtBatchJobExtension implements IBatchJobExtension {

                    /**
                     * Tasklet 유형의 Job XML 내용을 작성합니다.
                     */
                    override assembleTasklet(BatchTaskletTypeDeclarationModel model)'''
                        «IF model.usePartitioner»
                            <job id="«model.jobId»" xmlns="http://www.bankwareglobal.com/schema/batchex">
                                <author>«StringUtils.nvl(model.author)»</author>
                                <description>
                                </description>
                                <step id="«model.stepId»" parent="parentStep">
                                    <partition partitioner="«model.partitionerClassName»" step="«model.partitionerStepId»">
                                        <handler grid-size="«model.partitionerCount»"/>
                                    </partition>
                                </step>
                            </job>

                            <step id="«model.partitionerStepId»" parent="parentStep" xmlns="http://www.bankwareglobal.com/schema/batchex">
                                <tasklet ref="«model.className»"/>
                            </step>
                        «ELSE»
                            <job id="«model.jobId»" xmlns="http://www.bankwareglobal.com/schema/batchex">
                                <author>«StringUtils.nvl(model.author)»</author>
                                <description>
                                </description>
                                <step id="«model.stepId»" parent="parentStep">
                                    <tasklet ref="«model.className»"/>
                                </step>
                            </job>
                        «ENDIF»
                    '''

                    /**
                     * Reader의 Fixed 유형의 Job XML 내용을 작성합니다.
                     */
                    override assembleFixReader(BatchChunkTypeDeclarationModel model, String readerName)'''
                        <bean id="«readerName»" parent="RFix" scope="step">
                            <property name="resource" value=""/>
                            <property name="encoding" value="«model.readerFileEncoding»"/>
                            <property name="targetType" value="«String.join(".", model.readerDtoPackageName, model.readerDtoClassName)»"/>
                        </bean>
                    '''

                    /**
                     * Reader의 Delimited 유형의 Job XML 내용을 작성합니다.
                     */
                    override assembleDelimitReader(BatchChunkTypeDeclarationModel model, String readerName)'''
                        <bean id="«readerName»" parent="RDelimit" scope="step">
                            <property name="resource" value=""/>
                            <property name="encoding" value="«model.readerFileEncoding»"/>
                            <property name="delimiter" value="«model.readerDelimiter»"/>
                            <property name="targetType" value="«String.join(".", model.readerDtoPackageName, model.readerDtoClassName)»"/>
                        </bean>
                    '''

                    /**
                     * Reader의 Multi Fixed 유형의 Job XML 내용을 작성합니다.
                     */
                    override assembleMultiFixReader(BatchChunkTypeDeclarationModel model, String readerName, String subHeaderDtoQname, String subBodyDtoQname, String subFooterDtoQname)'''
                        <bean id="«readerName»" parent="RMultiTypeFix" scope="step">
                            <property name="resource" value=""/>
                            <property name="encoding" value="«model.readerFileEncoding»"/>
                            <property name="headerLine" value="1"/>
                            <property name="footerLine" value="1"/>
                            <property name="headerTargetType" value="«subHeaderDtoQname»"/>
                            <property name="bodyTargetType" value="«subBodyDtoQname»"/>
                            <property name="footerTargetType" value="«subFooterDtoQname»"/>
                        </bean>
                    '''

                    /**
                     * Reader의 Multi Delimited 유형의 Job XML 내용을 작성합니다.
                     */
                    override assembleMultiDelimitReader(BatchChunkTypeDeclarationModel model, String readerName, String subHeaderDtoQname, String subBodyDtoQname, String subFooterDtoQname)'''
                        <bean id="«readerName»" parent="RMultiTypeDelimit" scope="step">
                            <property name="resource" value=""/>
                            <property name="encoding" value="«model.readerFileEncoding»"/>
                            <property name="delimiter" value="«model.readerDelimiter»"/>
                            <property name="headerLine" value="1"/>
                            <property name="footerLine" value="1"/>
                            <property name="headerTargetType" value="«subHeaderDtoQname»"/>
                            <property name="bodyTargetType" value="«subBodyDtoQname»"/>
                            <property name="footerTargetType" value="«subFooterDtoQname»"/>
                        </bean>
                    '''

                    /**
                     * Reader의 Variable 유형의 Job XML 내용을 작성합니다.
                     */
                    override assembleVariableReader(BatchChunkTypeDeclarationModel model, String readerName)'''
                        <bean id="«readerName»" parent="RVariable" scope="step">
                            <property name="resource" value=""/>
                            <property name="encoding" value="«model.readerFileEncoding»"/>
                        </bean>
                    '''

                    /**
                     * Writer의 Fixed 유형의 Job XML 내용을 작성합니다.
                     */
                    override assembleFixWriter(BatchChunkTypeDeclarationModel model, String writerName)'''
                        <bean id="«writerName»" parent="WFix" scope="step">
                            <property name="resource" value=""/>
                            <property name="encoding" value="«model.writerFileEncoding»"/>
                            <property name="targetType" value="«String.join(".", model.writerDtoPackageName, model.writerDtoClassName)»"/>
                        </bean>
                    '''

                    /**
                     * Writer의 Delimited 유형의 Job XML 내용을 작성합니다.
                     */
                    override assembleDelimitWriter(BatchChunkTypeDeclarationModel model, String writerName)'''
                        <bean id="«writerName»" parent="WDelimit" scope="step">
                            <property name="resource" value=""/>
                            <property name="encoding" value="«model.writerFileEncoding»"/>
                            <property name="delimiter" value="«model.writerDelimiter»"/>
                            <property name="targetType" value="«String.join(".", model.writerDtoPackageName, model.writerDtoClassName)»"/>
                        </bean>
                    '''

                    /**
                     * Writer의 Multi Fixed 유형의 Job XML 내용을 작성합니다.
                     */
                    override assembleMultiFixWriter(BatchChunkTypeDeclarationModel model, String writerName)'''
                        <bean id="«writerName»" parent="WMultiTypeFix" scope="step">
                            <property name="resource" value=""/>
                            <property name="encoding" value="«model.writerFileEncoding»"/>
                            <property name="targetType" value="«String.join(".", model.writerDtoPackageName, model.writerDtoClassName)»"/>
                        </bean>
                    '''

                    /**
                     * Writer의 Multi Delimited 유형의 Job XML 내용을 작성합니다.
                     */
                    override assembleMultiDelimitWriter(BatchChunkTypeDeclarationModel model, String writerName)'''
                        <bean id="«writerName»" parent="WMultiTypeDelimit" scope="step">
                            <property name="resource" value=""/>
                            <property name="encoding" value="«model.writerFileEncoding»"/>
                            <property name="delimiter" value="«model.writerDelimiter»"/>
                            <property name="targetType" value="«String.join(".", model.writerDtoPackageName, model.writerDtoClassName)»"/>
                        </bean>
                    '''

                    /**
                     * Writer의 Variable 유형의 Job XML 내용을 작성합니다.
                     */
                    override assembleVariableWriter(BatchChunkTypeDeclarationModel model, String writerName)'''
                        <bean id="«writerName»" parent="WVariable" scope="step">
                            <property name="resource" value=""/>
                            <property name="encoding" value="«model.writerFileEncoding»"/>
                        </bean>
                    '''

                    /**
                     * Multi Writer의 Job XML 내용을 작성합니다.
                     */
                    override assembleMultiWriter(String writerName, Map<String, BatchMultiWriterTypeDeclarationModel> mainRef, Map<String, BatchMultiWriterTypeDeclarationModel> subEntry, Map<String, BatchMultiWriterTypeDeclarationModel> allBeans)'''
                        <bean id="«writerName»" parent="WMultiWriter">
                            <property name="main">
                                <list>
                                    «IF !mainRef.empty»
                                        «FOR String writerId : mainRef.keySet»
                                            <ref bean="«writerId»"/>
                                        «ENDFOR»
                                    «ENDIF»
                                </list>
                            </property>
                            <property name="sub">
                                <map>
                                    «IF !subEntry.empty»
                                        «FOR String writerId : subEntry.keySet»
                                            «var sub = subEntry.get(writerId)»
                                            <entry key="«writerId»" value="«sub.subFieldName»"/>
                                        «ENDFOR»
                                    «ENDIF»
                                </map>
                            </property>
                        </bean>

                        «FOR String writerId : allBeans.keySet»
                            «var bean = allBeans.get(writerId)»
                            «IF !BatchHelper.isTypeUseItemWriter(bean.type)»
                                «IF BatchType.FIXED.equals(bean.type)»
                                    <bean id="«writerId»" parent="WFix" scope="step">
                                        <property name="resource" value="" />
                                        <property name="encoding" value="«bean.fileEncoding»" />
                                        <property name="targetType" value="«String.join(".", bean.dtoPackageName, bean.dtoClassName)»" />
                                    </bean>
                                «ELSEIF BatchType.DELIMITED.equals(bean.type)»
                                    <bean id="«writerId»" parent="WDelimit" scope="step">
                                        <property name="resource" value="" />
                                        <property name="encoding" value="«bean.fileEncoding»" />
                                        <property name="delimiter" value="«bean.delimiter»" />
                                        <property name="targetType" value="«String.join(".", bean.dtoPackageName, bean.dtoClassName)»" />
                                    </bean>
                                «ELSEIF BatchType.VARIABLE.equals(bean.type)»
                                    <bean id="«writerId»" parent="WVariable" scope="step">
                                        <property name="resource" value="" />
                                        <property name="encoding" value="«bean.fileEncoding»" />
                                    </bean>
                                «ENDIF»
                            «ENDIF»
                        «ENDFOR»
                    '''

                }

4. 재구현된 메소드 목록(12)

재구현된 메소드 목록
메소드 이름 설명

assembleTasklet

Tasklet 유형의 Job XML 내용을 작성합니다.

assembleFixReader

Reader의 Fixed 유형의 Job XML 내용을 작성합니다.

assembleDelimitReader

Reader의 Delimited 유형의 Job XML 내용을 작성합니다.

assembleMultiFixReader

Reader의 Multi Fixed 유형의 Job XML 내용을 작성합니다.

assembleMultiDelimitReader

Reader의 Multi Delimited 유형의 Job XML 내용을 작성합니다.

assembleVariableReader

Reader의 Variable 유형의 Job XML 내용을 작성합니다.

assembleFixWriter

Writer의 Fixed 유형의 Job XML 내용을 작성합니다.

assembleDelimitWriter

Writer의 Delimited 유형의 Job XML 내용을 작성합니다.

assembleMultiFixWriter

Writer의 Multi Fixed 유형의 Job XML 내용을 작성합니다.

assembleMultiDelimitWriter

Writer의 Multi Delimited 유형의 Job XML 내용을 작성합니다.

assembleVariableWriter

Writer의 Variable 유형의 Job XML 내용을 작성합니다.

assembleMultiWriter

Multi Writer의 Job XML 내용을 작성합니다.

2.3. bindBatchNamingDeterminator

배치 작업 마법사를 이용하여 생성되는 모든 자원에 대한 이름(패키지, 클래스, 변수, 메소드 등)을 결정하는 결정자를 바인딩합니다.

1. 인터페이스 및 클래스

모듈이 반드시 구현 해야하는 인터페이스 또는 상속 해야하는 클래스입니다.

com.bankwareglobal.ide.bxframework.core.batch.generator.IBatchNamingDeterminator

2. 기본 구현 클래스

해당 기능을 위해 구현된 기본 클래스입니다. 인터페이스 및 클래스에서 필요한 기본 기능이 구현되어있으며 모듈을 확장할 경우 이 클래스를 상속 받아서 구현할 수 있습니다.

com.bankwareglobal.ide.bxframework.se.batch.generator.BxmBatchNamingDeterminator

3. 구현 예제

com.bankwareglobal.ide.bxframework.se.extensions.overriding.impl ExtBatchNamingDeterminator

                package com.bankwareglobal.ide.bxframework.se.extensions.overriding.impl;

                import java.util.regex.Matcher;
                import java.util.regex.Pattern;

                import org.eclipse.core.resources.IFolder;
                import org.eclipse.core.resources.IResource;
                import org.eclipse.core.runtime.IStatus;
                import org.eclipse.jdt.core.IJavaProject;

                import com.bankwareglobal.ide.bxframework.core.batch.configuration.BatchConfiguration;
                import com.bankwareglobal.ide.bxframework.core.batch.generator.IBatchNamingDeterminator;
                import com.bankwareglobal.ide.bxframework.core.batch.messages.Messages;
                import com.bankwareglobal.ide.bxframework.core.batch.model.BatchChunkTypeDeclarationModel;
                import com.bankwareglobal.ide.bxframework.core.batch.model.BatchMultiWriterTypeDeclarationModel;
                import com.bankwareglobal.ide.bxframework.core.batch.model.BatchTaskletTypeDeclarationModel;
                import com.bankwareglobal.ide.bxframework.core.batch.model.BatchTypeDeclarationModel;
                import com.bankwareglobal.ide.bxframework.core.messages.CommonWord;
                import com.bankwareglobal.ide.bxframework.core.validator.IValidator;
                import com.bankwareglobal.ide.commons.status.BXMStatus;
                import com.bankwareglobal.ide.commons.utils.JavaUtils;
                import com.bankwareglobal.ide.commons.utils.StringUtils;
                import com.bankwareglobal.ide.datatools.constants.SqlStatementType;
                import com.bankwareglobal.ide.datatools.database.DBColumn;
                import com.bankwareglobal.ide.datatools.database.DBTable;

                /**
                 * 배치 작업 마법사를 이용하여 생성되는 모든 자원에 대한 이름(패키지, 클래스, 변수, 메소드 등) 결정자
                 */
                public class ExtBatchNamingDeterminator
                implements IBatchNamingDeterminator {

                    public final static String LINE_SEPARATOR= System.getProperty("line.separator");

                    /**
                     * Tasklet 타입의 배치 빈(Bean)의 패키지 이름을 리턴합니다.
                     */
                    @Override
                    public String getTaskletPackageName(BatchTaskletTypeDeclarationModel model) {
                        return String.join(".", JavaUtils.getStandardPackPrefix(model.getProject().getElementName()), "bat", "bean");
                    }

                    /**
                     * Tasklet 타입의 배치 빈(Bean)의 클래스 이름을 리턴합니다.
                     */
                    @Override
                    public String getTaskletClassName(BatchTaskletTypeDeclarationModel model) {
                        return getBeanClassName(model.getJobId());
                    }

                    /**
                     * Tasklet 타입의 배치 빈(Bean)의 논리 이름을 리턴합니다.
                     */
                    @Override
                    public String getTaskletLogicalName(BatchTaskletTypeDeclarationModel model) {
                        return String.join(" ", getBeanClassName(model.getJobId()), "Tasklet", "Bean");
                    }

                    /**
                     * Chunked 타입의 Reader 패키지 이름을 리턴합니다.
                     */
                    @Override
                    public String getReaderPackageName(BatchChunkTypeDeclarationModel model) {
                        return String.join(".", JavaUtils.getStandardPackPrefix(model.getProject().getElementName()), "bat", "bean");
                    }

                    /**
                     * Chunked 타입의 Reader 클래스 이름을 리턴합니다.
                     */
                    @Override
                    public String getReaderClassName(BatchChunkTypeDeclarationModel model) {
                        return getBeanClassName(model.getJobId());
                    }

                    /**
                     * Chunked 타입의 Reader 논리 이름을 리턴합니다.
                     */
                    @Override
                    public String getReaderLogicalName(BatchChunkTypeDeclarationModel model) {
                        return String.join(" ", getBeanClassName(model.getJobId()), "Bean");
                    }

                    /**
                     * Chunked 타입의 Processor 패키지 이름을 리턴합니다.
                     */
                    @Override
                    public String getProcessorPackageName(BatchChunkTypeDeclarationModel model) {
                        return String.join(".", JavaUtils.getStandardPackPrefix(model.getProject().getElementName()), "bat", "bean");
                    }

                    /**
                     * Chunked 타입의 Processor 클래스 이름을 리턴합니다.
                     */
                    @Override
                    public String getProcessorClassName(BatchChunkTypeDeclarationModel model) {
                        return getBeanClassName(model.getJobId());
                    }

                    /**
                     * Chunked 타입의 Processor 논리 이름을 리턴합니다.
                     */
                    @Override
                    public String getProcessorLogicalName(BatchChunkTypeDeclarationModel model) {
                        return String.join(" ", getBeanClassName(model.getJobId()), "Processor", "Bean");
                    }

                    /**
                     * Chunked 타입의 Writer 패키지 이름을 리턴합니다.
                     */
                    @Override
                    public String getWriterPackageName(BatchChunkTypeDeclarationModel model) {
                        return String.join(".", JavaUtils.getStandardPackPrefix(model.getProject().getElementName()), "bat", "bean");
                    }

                    /**
                     * Chunked 타입의 Writer 클래스 이름을 리턴합니다.
                     */
                    @Override
                    public String getWriterClassName(BatchChunkTypeDeclarationModel model) {
                        return getBeanClassName(model.getJobId());
                    }

                    /**
                     * Chunked 타입의 Writer 논리 이름을 리턴합니다.
                     */
                    @Override
                    public String getWriterLogicalName(BatchChunkTypeDeclarationModel model) {
                        return String.join(" ", getBeanClassName(model.getJobId()), "Writer", "Bean");
                    }

                    /**
                     * Chunked 타입의 Multi Writer 패키지 이름을 리턴합니다.
                     */
                    @Override
                    public String getMultiWriterPackageName(BatchMultiWriterTypeDeclarationModel model) {
                        return String.join(".", JavaUtils.getStandardPackPrefix(model.getProject().getElementName()), "bat", "bean");
                    }

                    /**
                     * Chunked 타입의 Multi Writer 클래스 이름을 리턴합니다.
                     */
                    @Override
                    public String getMultiWriterClassName(BatchMultiWriterTypeDeclarationModel model) {
                        return getBeanClassName(model.getJobId());
                    }

                    /**
                     * Chunked 타입의 Multi Writer 논리 이름을 리턴합니다.
                     */
                    @Override
                    public String getMultiWriterLogicalName(BatchMultiWriterTypeDeclarationModel model) {
                        return String.join(" ", getBeanClassName(model.getJobId()), "MultiWriter", "Bean");
                    }

                    /**
                     * Chunked 타입의 Multi Writer 출력 DTO 패키지 이름을 리턴합니다.
                     */
                    @Override
                    public String getMultiWriterOutputDtoPackageName(BatchMultiWriterTypeDeclarationModel model) {
                        return String.join(".", JavaUtils.getStandardPackPrefix(model.getProject().getElementName()), "bat", "bean.dto");
                    }

                    /**
                     * Chunked 타입의 Multi Writer 출력 DTO 클래스 이름을 리턴합니다.
                     */
                    @Override
                    public String getMultiWriterOutputDtoClassName(BatchMultiWriterTypeDeclarationModel model) {
                        return StringUtils.capitalize(model.getJobId() + "00DtoSub");
                    }

                    /**
                     * Chunked 타입의 Multi Writer 출력 DTO 논리 이름을 리턴합니다.
                     */
                    @Override
                    public String getMultiWriterOutputDtoLogicalName(BatchMultiWriterTypeDeclarationModel model) {
                        return String.join(" ", getBeanClassName(model.getJobId()), CommonWord.OUTPUT_SUB, CommonWord.OUTPUT_IO);
                    }

                    /**
                     * Chunked 타입의 Multi Writer DBIO 입력 DTO 패키지 이름을 리턴합니다.
                     */
                    @Override
                    public String getMultiWriterInputDbioDtoPackageName(BatchMultiWriterTypeDeclarationModel model) {
                        return String.join(".", JavaUtils.getStandardPackPrefix(model.getProject().getElementName()), "bat", "dbio.dto");
                    }

                    /**
                     * Chunked 타입의 Multi Writer DBIO 입력 DTO 클래스 이름을 리턴합니다.
                     */
                    @Override
                    public String getMultiWriterInputDbioDtoClassName(BatchMultiWriterTypeDeclarationModel model) {
                        return model.isMain()?
                                StringUtils.capitalize(model.getJobId() + "00DtoMain")
                                :StringUtils.capitalize(model.getJobId() + "00DtoSub");
                    }

                    /**
                     * Chunked 타입의 Multi Writer DBIO 입력 DTO 논리 이름을 리턴합니다.
                     */
                    @Override
                    public String getMultiWriterInputDbioDtoLogicalName(BatchMultiWriterTypeDeclarationModel model) {
                        return model.isMain()?
                                String.join(" ", getBeanClassName(model.getJobId()), CommonWord.DBIO, CommonWord.INPUT_IO)
                                :String.join(" ", getBeanClassName(model.getJobId()), CommonWord.DBIO, CommonWord.INPUT_SUB, CommonWord.INPUT_IO);
                    }

                    /**
                     * Chunked 타입의 Reader 입력 DTO 패키지 이름을 리턴합니다.
                     */
                    @Override
                    public String getReaderInputDtoPackageName(BatchChunkTypeDeclarationModel model) {
                        return String.join(".", JavaUtils.getStandardPackPrefix(model.getProject().getElementName()), "bat", "bean.dto");
                    }

                    /**
                     * Chunked 타입의 Reader 입력 DTO 클래스 이름을 리턴합니다.
                     */
                    @Override
                    public String getReaderInputDtoClassName(BatchChunkTypeDeclarationModel model) {
                        return String.join("", getBeanClassName(model.getJobId()), "00", "Dto");
                    }

                    /**
                     * Chunked 타입의 Reader 입력 DTO 논리 이름을 리턴합니다.
                     */
                    @Override
                    public String getReaderInputDtoLogicalName(BatchChunkTypeDeclarationModel model) {
                        return String.join(" ", getBeanClassName(model.getJobId()), CommonWord.INPUT_IO);
                    }

                    /**
                     * Chunked 타입의 Reader DBIO 출력 DTO 패키지 이름을 리턴합니다.
                     */
                    @Override
                    public String getReaderOutputDbioDtoPackageName(BatchChunkTypeDeclarationModel model) {
                        return String.join(".", JavaUtils.getStandardPackPrefix(model.getProject().getElementName()), "bat", "dbio.dto");
                    }

                    /**
                     * Chunked 타입의 Reader DBIO 출력 DTO 클래스 이름을 리턴합니다.
                     */
                    @Override
                    public String getReaderOutputDbioDtoClassName(BatchChunkTypeDeclarationModel model) {
                        return String.join("", model.getReaderDbioClassName(), model.getReaderDbioMethodName(), "Dto");
                    }

                    /**
                     * Chunked 타입의 Reader DBIO 출력 DTO 논리 이름을 리턴합니다.
                     */
                    @Override
                    public String getReaderOutputDbioDtoLogicalName(BatchChunkTypeDeclarationModel model) {
                        return String.join(" ", getBeanClassName(model.getJobId()), CommonWord.DBIO, CommonWord.OUTPUT_IO);
                    }

                    /**
                     * Chunked 타입의 Writer 출력 DTO 패키지 이름을 리턴합니다.
                     */
                    @Override
                    public String getWriterOutputDtoPackageName(BatchChunkTypeDeclarationModel model) {
                        return String.join(".", JavaUtils.getStandardPackPrefix(model.getProject().getElementName()), "bat", "bean.dto");
                    }

                    /**
                     * Chunked 타입의 Writer 출력 DTO 클래스 이름을 리턴합니다.
                     */
                    @Override
                    public String getWriterOutputDtoClassName(BatchChunkTypeDeclarationModel model) {
                        return String.join("", getBeanClassName(model.getJobId()), "00", "Dto");
                    }

                    /**
                     * Chunked 타입의 Writer 출력 DTO 논리 이름을 리턴합니다.
                     */
                    @Override
                    public String getWriterOutputDtoLogicalName(BatchChunkTypeDeclarationModel model) {
                        return String.join(" ", getBeanClassName(model.getJobId()), CommonWord.OUTPUT_IO);
                    }

                    /**
                     * Chunked 타입의 Writer DBIO 입력 DTO 패키지 이름을 리턴합니다.
                     */
                    @Override
                    public String getWriterInputDbioDtoPackageName(BatchChunkTypeDeclarationModel model) {
                        return String.join(".", JavaUtils.getStandardPackPrefix(model.getProject().getElementName()), "bat", "dbio.dto");
                    }

                    /**
                     * Chunked 타입의 Writer DBIO 입력 DTO 클래스 이름을 리턴합니다.
                     */
                    @Override
                    public String getWriterInputDbioDtoClassName(BatchChunkTypeDeclarationModel model) {
                        return String.join("", model.getWriterDbioClassName(), model.getWriterDbioMethodName(), "Dto");
                    }

                    /**
                     * Chunked 타입의 Writer DBIO 입력 DTO 논리 이름을 리턴합니다.
                     */
                    @Override
                    public String getWriterInputDbioDtoLogicalName(BatchChunkTypeDeclarationModel model) {
                        return String.join(" ", getBeanClassName(model.getJobId()), CommonWord.DBIO, CommonWord.INPUT_IO);
                    }

                    /**
                     * DBIO 클래스 이름을 리턴합니다.
                     */
                    @Override
                    public String getDbioClassName(String tableName) {
                        return "D" + StringUtils.capitalize( StringUtils.toCamelCase(tableName.toLowerCase()) )+ "001";
                    }

                    /**
                     * DBIO 패키지 이름을 리턴합니다.
                     */
                    @Override
                    public String getDbioPackageName(String projectName, String tableName) {
                        return String.join(".", JavaUtils.getStandardPackPrefix(projectName), "bat", "dbio");
                    }

                    /**
                     * DBIO Fully-Qualified 이름을 리턴합니다.
                     */
                    @Override
                    public String getDbioQName(String projectName, String tableName) {
                        return String.join(".", JavaUtils.getStandardPackPrefix(projectName), "dbio", getDbioClassName(tableName));
                    }

                    /**
                     * DBIO 메소드 이름을 리턴합니다.
                     */
                    @Override
                    public String getDbioMethodName(SqlStatementType sqlType, DBTable table) {
                        String methodPrefix = "";

                        if(SqlStatementType.SELECT.equals(sqlType))
                            methodPrefix = sqlType.getDisplay().toLowerCase() + "List";
                        else
                            methodPrefix = sqlType.getDisplay().toLowerCase();

                        return methodPrefix + "00";
                    }

                    /**
                     * DBIO 메소드 논리 이름을 리턴합니다.
                     */
                    @Override
                    public String getDbioMethodLogicalName(SqlStatementType sqlType, DBTable table) {
                        return String.join(" ", table!=null?table.getComment():"", sqlType.getDisplay()).trim();
                    }

                    /**
                     * 입력 Sub Header DTO Fully-Qualified 이름을 리턴합니다.
                     */
                    @Override
                    public String getInputSubHeaderDtoQName(String beanPackage, String beanName) {
                        return String.join(".", beanPackage, beanName + "00DtoSubHeader");
                    }

                    /**
                     * 입력 Sub Body DTO Fully-Qualified 이름을 리턴합니다.
                     */
                    @Override
                    public String getInputSubBodyDtoQName(String beanPackage, String beanName) {
                        return String.join(".", beanPackage, beanName + "00DtoSubBody");
                    }

                    /**
                     * 입력 Sub Footer DTO Fully-Qualified 이름을 리턴합니다.
                     */
                    @Override
                    public String getInputSubFooterDtoQName(String beanPackage, String beanName) {
                        return String.join(".", beanPackage, beanName + "00DtoSubFooter");
                    }

                    /**
                     * 출력 Sub Header DTO Fully-Qualified 이름을 리턴합니다.
                     */
                    @Override
                    public String getOutputSubHeaderDtoQName(String beanPackage, String beanName) {
                        return String.join(".", beanPackage, beanName + "01DtoSubHeader");
                    }

                    /**
                     * 입력 Sub Body DTO Fully-Qualified 이름을 리턴합니다.
                     */
                    @Override
                    public String getOutputSubBodyDtoQName(String beanPackage, String beanName) {
                        return String.join(".", beanPackage, beanName + "01DtoSubBody");
                    }

                    /**
                     * 입력 Sub Footer DTO Fully-Qualified 이름을 리턴합니다.
                     */
                    @Override
                    public String getOutputSubFooterDtoQName(String beanPackage, String beanName) {
                        return String.join(".", beanPackage, beanName + "01DtoSubFooter");
                    }

                    /**
                     * Job XML 에 작성될 Reader 의 이름을 리턴합니다.
                     */
                    @Override
                    public String getBatchJobReaderName(BatchTypeDeclarationModel model) {
                        return "R" + model.getStepId();
                    }

                    /**
                     * Job XML 에 작성될 Writer 의 이름을 리턴합니다.
                     */
                    @Override
                    public String getBatchJobWriterName(BatchTypeDeclarationModel model) {
                        return "W" + model.getStepId();
                    }

                    /**
                     * Job XML 에 작성될 Multi Writer 의 이름을 리턴합니다.
                     */
                    @Override
                    public String getBatchMultiWriterName(BatchTypeDeclarationModel model) {
                        return "W" + model.getStepId();
                    }

                    /**
                     * Job XML 에 작성될 Multi Writer 의 이름을 index 를 포함하여 리턴합니다.
                     */
                    @Override
                    public String getBatchMultiWriterName(BatchTypeDeclarationModel model, boolean main, int idx) {
                        return "W" + model.getJobId() + String.valueOf(100+idx);
                    }

                    /**
                     * 파티셔너 클래스 이름을 리턴합니다.
                     */
                    @Override
                    public String getBatchPartitionerClassName(String beanName) {
                        return beanName+"Ptr";
                    }

                    /**
                     * 파티셔너 Fully-Qualified 이름을 리턴합니다.
                     */
                    @Override
                    public String getBatchPartitionerQName(String beanPackage, String beanName) {
                        return String.join(".", beanPackage, getBatchPartitionerClassName(beanName));
                    }

                    /**
                     * 테이블 이름으로 getter/setter 호출 로직을 작성하여 리턴합니다.
                     */
                    @Override
                    public String getSetterGetterName(DBTable table, String setter, String getter) {
                        StringBuilder logic = new StringBuilder();

                        for (DBColumn column : table.getColumnList()) {
                            if ("boolean".equals(column.getType())) {
                                logic.append(setter).append(".").append("set").append(getSetPrefix(column.getName()))
                                        .append("(").append(getter).append(".").append("is")
                                        .append(getSetPrefix(column.getName())).append("())").append(";")
                                        .append(LINE_SEPARATOR);
                            } else {
                                logic.append(setter).append(".").append("set").append(getSetPrefix(column.getName()))
                                        .append("(").append(getter).append(".").append("get")
                                        .append(getSetPrefix(column.getName())).append("())").append(";")
                                        .append(LINE_SEPARATOR);
                            }
                        }

                        return logic.toString();
                    }

                    /**
                     * 변수 이름을 리턴합니다.
                     */
                    @Override
                    public String getVariableName(String qualifiedName) {
                        qualifiedName = qualifiedName.replaceAll("\\.", "");

                        return StringUtils.uncapitalize(qualifiedName);
                    }

                    /**
                     * 클래스 필드(변수) 이름을 리턴합니다.
                     */
                    @Override
                    public String getClassFieldName(String qualifiedName, String variableName) {
                        return String.format("private %s %s", qualifiedName, variableName);
                    }

                    protected String getSetPrefix(String str) {
                        String prefix= StringUtils.toCamelCase(str);
                        return prefix.substring(0, 1).toUpperCase() + prefix.substring(1);
                    }

                    private String getBeanClassName(String jobId) {
                        String className = "";

                        jobId = StringUtils.capitalize(jobId);

                        if(jobId.startsWith("B")) {
                            className = "M"+jobId.substring(1)+"Btch";
                        } else {
                            className = "M"+jobId+"Btch";
                        }

                        return className;
                    }

                    /**
                     * Job ID 검증 룰을 리턴합니다.
                     */
                    @Override
                    public IValidator<String> createBatchJobIdValidator(IJavaProject project) {
                        return new IValidator<String>() {
                            private final String JOB_ID_PATTERN = "^([a-zA-Z]+(_*[a-zA-Z0-9]*_*)*)";

                            @Override
                            public IStatus doValidate(String jobId) {
                                if(StringUtils.isEmpty(jobId)) {
                                    return BXMStatus.createErrorStatus(Messages.BATCH_JOB_ID_EMSG01);

                                } else {
                                    Pattern p = Pattern.compile(JOB_ID_PATTERN);
                                    Matcher m = p.matcher(jobId);

                                    if(!m.matches()) {
                                        return BXMStatus.createErrorStatus(Messages.BATCH_JOB_ID_EMSG02);
                                    }

                                    String batchJobPath = BatchConfiguration.BatchJob.getBatchJobPath();

                                    if(project != null) {
                                        IFolder jobFolder= project.getProject().getFolder("META-INF/" + batchJobPath);

                                        if(jobFolder.exists()) {
                                            IResource resource= jobFolder.findMember(jobId + ".xml");

                                            if(resource != null) {
                                                return BXMStatus.createErrorStatus(Messages.BATCH_JOB_ID_EMSG03);
                                            }
                                        }
                                    }
                                }

                                return BXMStatus.createOkStatus();
                            }
                        };
                    }

                    /**
                     * Step ID 검증 룰을 리턴합니다.
                     */
                    @Override
                    public IValidator<String> createBatchStepIdValidator() {
                        return new IValidator<String>() {
                            private final String JOB_STEP_ID_PATTERN = "^([a-zA-Z]+(_*[a-zA-Z0-9]*_*)*)";

                            @Override
                            public IStatus doValidate(String stepId) {
                                if(StringUtils.isEmpty(stepId)) {
                                    return BXMStatus.createErrorStatus(Messages.BATCH_JOB_STEP_ID_EMSG01);

                                } else {
                                    Pattern p = Pattern.compile(JOB_STEP_ID_PATTERN);
                                    Matcher m = p.matcher(stepId);

                                    if(!m.matches()) {
                                        return BXMStatus.createErrorStatus(Messages.BATCH_JOB_STEP_ID_EMSG02);
                                    }
                                }

                                return BXMStatus.createOkStatus();
                            }
                        };
                    }

                    /**
                     * 파티셔너 Step ID 검증 룰을 리턴합니다.
                     */
                    @Override
                    public IValidator<String> createBatchPartitionerStepIdValidator(boolean usePartitioner) {
                        return new IValidator<String>() {
                            private final String JOB_STEP_ID_PATTERN = "^([a-zA-Z]+(_*[a-zA-Z0-9]*_*)*)";

                            @Override
                            public IStatus doValidate(String stepId) {
                                if(usePartitioner) {
                                    if(StringUtils.isEmpty(stepId)) {
                                        return BXMStatus.createErrorStatus(Messages.BATCH_JOB_STEP_ID_EMSG01);

                                    } else {
                                        Pattern p = Pattern.compile(JOB_STEP_ID_PATTERN);
                                        Matcher m = p.matcher(stepId);

                                        if(!m.matches()) {
                                            return BXMStatus.createErrorStatus(Messages.BATCH_JOB_STEP_ID_EMSG02);
                                        }
                                    }
                                }

                                return BXMStatus.createOkStatus();
                            }
                        };
                    }

                    /**
                     * Shell 이름 검증 룰을 리턴합니다.
                     */
                    @Override
                    public IValidator<String> createShellNameValidator(IJavaProject project) {
                        return new IValidator<String>() {
                            private final String SHELL_NAME_PATTERN = "^([a-zA-Z]+(_*[a-zA-Z0-9]*_*)*)";

                            @Override
                            public IStatus doValidate(String shellName) {
                                if(BatchConfiguration.BatchJob.isUseBatchShellScript()) {
                                    if(StringUtils.isEmpty(shellName)) {
                                        return BXMStatus.createErrorStatus(Messages.BATCH_WIZARD_SHELL_NAME_EMPTY_MSG);

                                    } else {
                                        Pattern p = Pattern.compile(SHELL_NAME_PATTERN);
                                        Matcher m = p.matcher(shellName);

                                        if(!m.matches()) {
                                            return BXMStatus.createErrorStatus(Messages.BATCH_WIZARD_SHELL_NAME_VALID_MSG);
                                        }

                                        String batchShellScriptPath = BatchConfiguration.BatchJob.getBatchShellScriptPath();
                                        if(project != null) {
                                            IFolder jobFolder= project.getProject().getFolder("META-INF/" + batchShellScriptPath);

                                            if(jobFolder.exists()) {
                                                IResource resource= jobFolder.findMember(shellName + ".sh");

                                                if(resource != null) {
                                                    return BXMStatus.createErrorStatus(Messages.BATCH_WIZARD_EXIST_SHELL_NAME_MSG);
                                                }
                                            }
                                        }
                                    }
                                }

                                return BXMStatus.createOkStatus();
                            }
                        };
                    }
                }

4. 재구현된 메소드 목록(63)

재구현된 메소드 목록
메소드 이름 설명

getTaskletPackageName

Tasklet 타입의 배치 빈(Bean)의 패키지 이름을 리턴합니다.

getTaskletClassName

Tasklet 타입의 배치 빈(Bean)의 클래스 이름을 리턴합니다.

getTaskletLogicalName

Tasklet 타입의 배치 빈(Bean)의 논리 이름을 리턴합니다.

getReaderPackageName

Chunked 타입의 Reader 패키지 이름을 리턴합니다.

getReaderClassName

Chunked 타입의 Reader 클래스 이름을 리턴합니다.

getReaderLogicalName

Chunked 타입의 Reader 논리 이름을 리턴합니다.

getProcessorPackageName

Chunked 타입의 Processor 패키지 이름을 리턴합니다.

getProcessorClassName

Chunked 타입의 Processor 클래스 이름을 리턴합니다.

getProcessorLogicalName

Chunked 타입의 Processor 논리 이름을 리턴합니다.

getWriterPackageName

Chunked 타입의 Writer 패키지 이름을 리턴합니다.

getWriterClassName

Chunked 타입의 Writer 클래스 이름을 리턴합니다.

getWriterLogicalName

Chunked 타입의 Writer 논리 이름을 리턴합니다.

getMultiWriterPackageName

Chunked 타입의 Multi Writer 패키지 이름을 리턴합니다.

getMultiWriterClassName

Chunked 타입의 Multi Writer 클래스 이름을 리턴합니다.

getMultiWriterLogicalName

Chunked 타입의 Multi Writer 논리 이름을 리턴합니다.

getMultiWriterOutputDtoPackageName

Chunked 타입의 Multi Writer 출력 DTO 패키지 이름을 리턴합니다.

getMultiWriterOutputDtoClassName

Chunked 타입의 Multi Writer 출력 DTO 클래스 이름을 리턴합니다.

getMultiWriterOutputDtoLogicalName

Chunked 타입의 Multi Writer 출력 DTO 논리 이름을 리턴합니다.

getMultiWriterInputDbioDtoPackageName

Chunked 타입의 Multi Writer DBIO 입력 DTO 패키지 이름을 리턴합니다.

getMultiWriterInputDbioDtoClassName

Chunked 타입의 Multi Writer DBIO 입력 DTO 클래스 이름을 리턴합니다.

getMultiWriterInputDbioDtoLogicalName

Chunked 타입의 Multi Writer DBIO 입력 DTO 논리 이름을 리턴합니다.

getReaderInputDtoPackageName

Chunked 타입의 Reader 입력 DTO 패키지 이름을 리턴합니다.

getReaderInputDtoClassName

Chunked 타입의 Reader 입력 DTO 클래스 이름을 리턴합니다.

getReaderInputDtoLogicalName

Chunked 타입의 Reader 입력 DTO 논리 이름을 리턴합니다.

getReaderOutputDbioDtoPackageName

Chunked 타입의 Reader DBIO 출력 DTO 패키지 이름을 리턴합니다.

getReaderOutputDbioDtoClassName

Chunked 타입의 Reader DBIO 출력 DTO 클래스 이름을 리턴합니다.

getReaderOutputDbioDtoLogicalName

Chunked 타입의 Reader DBIO 출력 DTO 논리 이름을 리턴합니다.

getWriterOutputDtoPackageName

Chunked 타입의 Writer 출력 DTO 패키지 이름을 리턴합니다.

getWriterOutputDtoClassName

Chunked 타입의 Writer 출력 DTO 클래스 이름을 리턴합니다.

getWriterOutputDtoLogicalName

Chunked 타입의 Writer 출력 DTO 논리 이름을 리턴합니다.

getWriterInputDbioDtoPackageName

Chunked 타입의 Writer DBIO 입력 DTO 패키지 이름을 리턴합니다.

getWriterInputDbioDtoClassName

Chunked 타입의 Writer DBIO 입력 DTO 클래스 이름을 리턴합니다.

getWriterInputDbioDtoLogicalName

Chunked 타입의 Writer DBIO 입력 DTO 논리 이름을 리턴합니다.

getDbioClassName

DBIO 클래스 이름을 리턴합니다.

getDbioPackageName

DBIO 패키지 이름을 리턴합니다.

getDbioQName

DBIO Fully-Qualified 이름을 리턴합니다.

getDbioMethodName

DBIO 메소드 이름을 리턴합니다.

getDbioMethodLogicalName

DBIO 메소드 논리 이름을 리턴합니다.

getInputSubHeaderDtoQName

입력 Sub Header DTO Fully-Qualified 이름을 리턴합니다.

getInputSubBodyDtoQName

입력 Sub Body DTO Fully-Qualified 이름을 리턴합니다.

getInputSubFooterDtoQName

입력 Sub Footer DTO Fully-Qualified 이름을 리턴합니다.

getOutputSubHeaderDtoQName

출력 Sub Header DTO Fully-Qualified 이름을 리턴합니다.

getOutputSubBodyDtoQName

입력 Sub Body DTO Fully-Qualified 이름을 리턴합니다.

getOutputSubFooterDtoQName

입력 Sub Footer DTO Fully-Qualified 이름을 리턴합니다.

getBatchJobReaderName

Job XML 에 작성될 Reader 의 이름을 리턴합니다.

getBatchJobWriterName

Job XML 에 작성될 Writer 의 이름을 리턴합니다.

getBatchMultiWriterName

Job XML 에 작성될 Multi Writer 의 이름을 리턴합니다.

getBatchMultiWriterName

Job XML 에 작성될 Multi Writer 의 이름을 index를 포함하여 리턴합니다.

getBatchPartitionerClassName

파티셔너 클래스 이름을 리턴합니다.

getBatchPartitionerQName

파티셔너 Fully-Qualified 이름을 리턴합니다.

getSetterGetterName

테이블 이름으로 getter/setter 호출 로직을 작성하여 리턴합니다.

getVariableName

변수 이름을 리턴합니다.

getClassFieldName

클래스 필드(변수) 이름을 리턴합니다.

getSetPrefix

getBeanClassName

createBatchJobIdValidator

Job ID 검증 룰을 리턴합니다.

doValidate

createBatchStepIdValidator

Step ID 검증 룰을 리턴합니다.

doValidate

createBatchPartitionerStepIdValidator

파티셔너 Step ID 검증 룰을 리턴합니다.

doValidate

createShellNameValidator

Shell 이름 검증 룰을 리턴합니다.

doValidate

Copyright© Bankwareglobal All Rights Reserved.