사용자 정의 XPath 함수 작성

보고서(RPTDESIGN 파일)에 특정 종류의 모델 정보를 추가하려면 먼저 사용자 정의 XPath 함수를 작성하여 대상 모델에서 정보를 추출해야 합니다.
시작하기 전에
전제조건: 이 타스크를 수행하려면 Eclipse Plug-in Development Environment에서 플러그인 개발 및 UML2 API에 익숙해야 합니다.
이 태스크 정보
사용자 정의 XPath 함수를 작성하려면 다음을 수행하십시오.
  1. 새 플러그인 프로젝트를 작성하십시오.
    1. 플러그인 개발 Perspective에서 파일 > 새로 작성 > 기타를 클릭하고 플러그인 개발을 펼친 다음 플러그인 프로젝트를 선택하고 다음을 클릭하십시오.
    2. 플러그인 ID(예: com.ibm.field.birt.xpath_extensions)를 입력한 다음 다음, 완료를 차례로 클릭하십시오. 플러그인이 패키지 탐색기 보기에 추가되며, 플러그인 정보가 개요 페이지의 플러그인 Manifest 편집기 보기에 표시됩니다.
  2. org.eclipse.jet.xpathFunctions 확장점을 확장하십시오.
    1. 개요 페이지에서 확장 탭을 클릭한 다음 추가를 클릭하십시오.
    2. 필수 플러그인의 확장점만 표시 선택란을 지우십시오.
    3. 확장점 필터 필드에 *.jet를 입력한 다음 확장 목록에서 org.eclipse.jet.xpathFunctions를 두 번 클릭하십시오.
    4. 플러그인 종속성 목록에 플러그인을 추가함을 확인하려면 를 클릭하십시오.
    5. MANIFEST.MF 탭을 클릭하고 Require_Bundle 목록에 org.eclipse.uml2.uml를 추가하여 플러그인이 UML API에 표시되도록 하십시오. 목록에 대한 코드는 다음과 같아야 합니다.
      Require_Bundle: org.eclipse.ui,
        org.eclipse.core.runtime,
        org.eclipse.uml2.uml,
        org.eclipse.jet
    6. plugin.xml 탭을 클릭하고 사용자 정의 함수를 정의하도록 <function> 정의를 수정하십시오. 예를 들어, 이름이 SlotValue이고, 두 개의 인수를 사용하며, com.ibm.field.birt.xpath_extensions.SlotValue 클래스에 구현되는 함수를 정의하는 경우 코드는 다음과 같습니다.
      <function
           implementation="com.ibm.field.birt.xpath_extensions.SlotValues"
           maxArgs="2"
           minArgs="2"
           name="slotValue">
      </function>
    7. 파일 > 저장을 클릭하십시오.
  3. 코드 쉘을 작성하고 플러그인에 링크하십시오.
    1. 패키지 탐색기 보기에서 새 플러그인 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 새로 작성 > 클래스를 클릭하십시오.
    2. 패키지 필드에서 플러그인 프로젝트의 이름을 지정하십시오.
    3. 이름 필드에 클래스 이름을 입력하십시오. 새 함수에 지정한 것과 동일한 이름을 사용하십시오. 예를 들어, 2단계에서 정의한 함수의 이름은 SlotValue입니다.
    4. 인터페이스를 추가하려면 추가를 클릭하십시오.
    5. 새 Java 클래스 대화 상자의 인터페이스 선택 필드에 XPathFunction을 입력한 다음 일치하는 항목 목록에서 XPathFunction - org.eclipse.jet.xpath를 선택하고 확인, 완료를 차례로 클릭하십시오.
  4. XPath 함수용 Java™ 파일에 코드를 추가하여 원하는 타스크를 완성하고 파일을 저장하십시오.

    예를 들어, SlotValue 함수가 첫 번째 인수(XPath 표현식)로 인해 생성된 노드를 반복하여 인스턴스 스펙을 발견하면 getStringValue 함수를 호출하여 slotname 인수에 지정된 슬롯의 값을 리턴하도록 하려는 경우, 다음과 같은 코드를 작성하십시오.

    package com.ibm.field.birt.xpath_extensions;
    
    import java.util.Iterator;
    import java.util.List;
    
    import org.eclipse.jet.xpath.NodeSet;
    import org.eclipse.jet.xpath.XPathFunction;
    import org.eclipse.uml2.uml.InstanceSpecification;
    import org.eclipse.uml2.uml.Slot;
    import org.eclipse.uml2.uml.ValueSpecification;
    
    public class SlotValue implements XPathFunction {
    	
    	public String getStringValue(InstanceSpecification ia, String slotname) {
    		List slots = ia.getSlots();
    		for (Iterator iterator = slots.iterator(); iterator.hasNext();) {
    			Slot slot = (Slot) iterator.next();
    			String definingFeatureName = slot.getDefiningFeature().getName();			
    			if (definingFeatureName.equals(slotname)) {
    				List values = slot.getValues();
    				for (Iterator iterator2 = values.iterator(); iterator2
    						.hasNext();) {
    					ValueSpecification value = (ValueSpecification) iterator2.next();
    					return value.stringValue();
    				}
    			}
    		}
    		return null;
    	}
    	
    	public Object evaluate(List args) {
    		Object obj = args.get(0);
    		String slotname = (String) args.get(1);
    		if (obj instanceof NodeSet) {
    			NodeSet ns = (NodeSet) obj;
    			for (Iterator iterator = ns.iterator(); iterator.hasNext();) {
    				Object item = (Object) iterator.next();
    				if (item instanceof InstanceSpecification){
    					InstanceSpecification ispec = (InstanceSpecification) item;
    					if ((slotname != null)&&(slotname.length()>0))
    						return getStringValue(ispec,slotname);
    				}
    			}
    		}
    		return null;
    	}
    }
  5. 기능 플러그인 프로젝트를 새로 작성하십시오.
    1. 파일 > 새로 작성 > 기타를 클릭하고 플러그인 개발을 펼친 다음 기능 프로젝트를 선택하고 다음을 클릭하십시오.
    2. 프로젝트 이름 필드에 프로젝트 이름을 입력하고 다음을 클릭하십시오. 플러그인 이름과 유사한 기능 이름을 지정하는 것이 좋습니다. 따라서 com.ibm.field.birt.xpath_extensions 플러그인의 경우 com.ibm.field.birt.xpath_extensions.feature를 선택할 수 있습니다.
    3. 플러그인을 기능과 함께 번들로 묶으려면 1단계에서 작성한 플러그인에 대한 선택란을 체크하고 완료를 클릭하십시오. 기능이 패키지 탐색기 보기에 추가되며, 기능 정보가 개요 페이지의 기능 Manifest 편집기 보기에 표시됩니다.
    4. 개요 페이지의 이름 필드에 기능 이름을 입력하십시오(예: XPath Extensions Feature).
    5. 개요 페이지에서 내보내기 마법사에 대한 링크를 클릭하십시오.
    6. 아카이브 파일을 선택하고, 파일의 위치와 이름(예: xpath_extensions.zip)을 지정한 다음 완료를 클릭하십시오.
    주: 이 기능 플러그인은 여러 사용자 정의 XPath 함수 프로젝트에 사용할 수 있습니다.
  6. 보고서를 디자인하려는 Eclipse 인스턴스로 새 플러그인을 가져오십시오.
    1. 아카이브 파일을 디렉토리(예: C:/temp/xpath_extensions)로 추출하십시오.
    2. Eclipse에서 도움말 > 소프트웨어 갱신 > 찾기 및 설치를 클릭하십시오.
    3. 설치/갱신 마법사에서 설치할 새로운 기능 검색을 클릭하고 다음을 클릭하십시오.
    4. 새 로컬 사이트를 클릭하고 기능과 플러그인이 포함되어 있는 폴더를 선택한 다음 확인, 완료를 차례로 클릭하십시오.
    5. 검색 결과 대화 상자에서 기능을 선택하고 다음을 클릭하십시오.
    6. 라이센스 계약 약관에 동의하면 라이센스 계약 약관에 동의함을 선택하고 다음, 완료를 차례로 클릭하십시오.
    7. 컴퓨터를 다시 시작하라는 메시지가 표시되면 를 클릭하십시오.
결과
이제 보고서 디자인에서 새 XPath 확장을 사용할 수 있습니다.
주: 보고서 디자인 사용자는 먼저 새 기능도 가져와야 사용자 정의 XPath 함수에 의존하는 보고서 디자인에서 보고서를 생성할 수 있습니다. "사용자 정의 XPath 함수 가져오기" 주제에서는 일반적인 정보를 제공하지만, RPTDESIGN 파일과 함께 제공되는, 기능을 얻을 수 있는 위치와 기능 사용법에 대해 설명하는 사용자 정의 사용자 문서를 제공할 수도 있습니다.

피드백