전자정부 프레임워크에서 제공하는 기본 템플릿 외에도 사용자가 필요한 템플릿을 작성하여 추가할 수 있는 기능을 제공한다. 전자정부 프레임워크 템플릿 Code Gen. 은 플러그인 방식으로 개발되었기 때문에 사용자가 전자정부 프레임워크 템플릿 Code Gen 의 플러그인을 확장하여 다양한 템플릿을 작성할 수 있고, 프로젝트에서 이를 활용할 수 있다.
전자정부 프레임워크에서 제공하는 템플릿 Code Gen 은 기본적으로 Velocity Template Engine 을 사용한다. 사용자 정의 템플릿을 추가하기 위해서는 다음과 같은 구성요소가 필요하다.
~ Velocity Template 기본 작성방법은 다음 사이트를 참조한다.
- Wizard 는 XML 문법에 따라 작성하며 사용법은 다음과 같다.
사용자 정의 템플릿 마법사 페이지는 model-page 와 component-page 가 있으며, 하나 이상의 페이지를 생성 또는 추가할 수 있다.
<model-page type="table" required="true"> <!-- SelectSomeTable 테이블 선택 --> <description>Select some Table</description> </model-page>
<component-page> <description>Input resource information</description> <group label="" required="true"> <textfield name="author" label="Author :" required="true" value="" /> <container name="voPackage" label="VO Package: " required="true" type="package" /> </group> </component-page>
(설명)
group : 하나 이상의 UI 컴포넌트 를 그룹화한다.
<group name="" label="" checkbox="" > ... </group>
(설명)
Container : 패키지 또는 폴더를 선택하기 위한 것이다.
<container name="actionPackage" label="Package:" required="true" type="package|folder" value="" />
(type 설명)
textField : 텍스트 입력박스
<textfield name="" label="" required="true/false" extension="" />
checkbox :
<checkbox name="createValidation" label="Create the Action-validation.xml ?" value="false" />
radio :
<combo name="radio" label="View:" value="FreeMarker"> <elements> <option value="freemarker">FreeMarker</option> <option value="velocity">Velocity</option> <option value="dispatcher">JSP</option> <option value="xslt">XSLT</option> </elements> </combo>
combo :
<combo name="radio" label="View:" value="FreeMarker"> <elements> <option value="freemarker">FreeMarker</option> <option value="velocity">Velocity</option> <option value="dispatcher">JSP</option> <option value="xslt">XSLT</option> </elements> </combo>
- 코드 생성을 하기 위해서는 위저드에서 입력받은 내용을 어떤 템플릿 파일과 매핑시켜서 코드를 생성할 것인지 <output> 에 지정해주어야 한다.
<output> <template component="txtFileName" velocity="sequenceId.vm" extension="xml" container="txtPath"> </template> <condition variable="checkService" value="true" /> </output>
(설명)
~ 데이타베이스 테이블을 선택하여 코드를 생성할 때 해당 테이블 정보를 활용하는 방법은 다음과 같다.
~ 파일을 생성할 테이블 정보를 활용할 수 있고, 예시는 다음과 같다.
<output> <template component="dao" expression="${model.entity.pcName}DAO" velocity="java/pkg/service/impl/Sample2DAO.vm" extension="java" container="daoPackage"> <condition variable="checkDataAccess" value="true" /> </template> </output>
SELECT #set($i=0) #foreach($attribute in $model.attributes) #if($i == 0) ${attribute.name} #else , ${attribute.name} #end #set($i=$i+1) #end FROM ${model.entity.name} ORDER BY #set($i=0) #foreach($attribute in $model.primaryKeys) #if($i == 0) ${attribute.name} DESC #else , ${attribute.name} DESC #end #set($i=$i+1) #end
#set($vender="$model.vender") #if($vender == "HSQLDB") ..... #elseif($vender == "Oracle") ..... #end
Category 별로 작성한 wizard 목록을 기술하며, template 경로는 wizard 목록 xml 파일의 상대경로를 기술하면 된다.
예시
<?xml version="1.0" encoding="UTF-8"?> <templates> <category name="CRUD"> <wizards> <wizard-def description="CRUD Program" template="crud/wizard.xml"/> </wizards> </category> </templates>
1. 개발환경에서 플러그인 프로젝트를 생성하고, 위 설명을 참조하여 Template 과 Wizard, Wizard 목록 파일을 생성한다.
2. MANIFEST.MF 을 Plug-in Manifest Editor 로 열고, Extensions 탭을 클릭한다.
3. Add… 버튼을 클릭하고, egovframework.dev.imp.codegen.template.templateWizards 를 더블클릭하여 Extensions 에 추가한다.
4. Extensions 세부 항목을 입력한다. 임의의 ID와 이름, 마법사 목록 XML 경로를 입력한다.
<수정된 plugin.xml 의 내용>
<?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.4"?> <plugin> <extension point="egovframework.dev.imp.codegen.template.templateWizards"> <wizards id="CustomTemplates.wizards" name="Custom Templates" wizardsFile="templates/wizards.xml"> </wizards> </extension> </plugin>
5. Feature 와 update site 프로젝트를 만들고 제작한 템플릿 플러그인을 패키징한다.
6. 제작한 템플릿 플러그인을 개발환경에 업데이트한다. (Help>Software Updates>Add Site…>”업데이트 사이트 주소 또는 파일 선택”)
7. Template 목록 조회 : Window>Show View>eGovFrame Templates 를 선택한다.
8. 사용자 정의 템플릿이 추가되어 정상작동하는 것을 확인한다.
사용자 정의 템플릿 예제
- 아래 소스는 사용자 템플릿 예제 프로젝트입니다.
매뉴얼을 참조하셔서 원하는 템플릿을 추가 또는 수정하셔서 사용하시면 됩니다.
(파일 설명)
사용자 정의 샘플 프로젝트는 다음의 3개 프로젝트로 구성되어 있다.
실제 사용자정의 템플릿은 CustomTemplates 프로젝트 내에 있고, feature 프로젝트와 update site 프로젝트는 CustomTemplates 플러그인을 하나의 단위 플러그인으로 묶고 로딩하여 업데이트할 수 있도록 하기 위한 것이다.
(파일 설명)
위의 파일은 사용자정의 템플릿을 업데이트할 수 있도록 최종적으로 빌드한 업데이트 예제 파일이다. 사용법은 다음과 같다.
사용자 정의 템플릿을 추가하기를 원하지만, 플러그인 프로젝트에 익숙하지 않는 경우 다음과 같은 방법으로 사용자 정의 템플릿을 추가할 수 있다.