변환에 대한 진행 표시줄 사용자 정의

변환이 해당 타스크를 완료하는 대로 진행상태 창에서 진행 표시줄을 갱신하도록 변환을 사용자 정의할 수 있습니다. 이 기능은 변환이 완료한 작업량에 대한 한층 정확한 정보를 변환 사용자에게 제공합니다.
시작하기 전에

변환 작성자는 변환 서비스에 변환을 등록해야 합니다.

이 주제에서 설명하는 특성에 대한 자세한 정보는 이 주제 끝에 있는 관련 참조 주제 링크를 참조하십시오.

이 태스크 정보
개념적으로, 진행 표시줄은 동일한 부분으로 나눠집니다. 각 부분은 하나의 작업 유닛에 해당됩니다. 기본적으로, 변환 코어는 진행 표시줄에 대해 x+1 작업 유닛을 정의합니다. 여기서 x는 변환이 호출하는 유틸리티 수에 변환 자체에 대한 하나의 작업 유닛을 더한 숫자를 나타냅니다. 다음 예제를 고려하십시오.
  • 변환이 유틸리티를 호출하지 않으면 변환 코어는 진행 표시줄에 대해 하나의 작업 유닛을 정의합니다. 진행 표시줄은 변환이 완료한 작업량을 표시합니다.
  • 변환이 두 개의 유틸리티를 호출하면 변환 코어는 진행 표시줄에 대해 세 개의 작업 유닛을 정의합니다. 유틸리티가 완료되면 변환 코어는 진행 표시줄의 한 부분을 갱신합니다. 변환이 해당 타스크를 완료하는 대로, 변환은 변환 작성자가 각 타스크에 대해 할당한 작업 유닛 수만큼 진행 표시줄을 갱신합니다.

변환에 할당된 진행 표시줄의 작업 유닛에 대해, 작업 유닛을 몇 개의 더 작은 작업 유닛으로 나눠서 진행 표시줄에 대한 갱신사항을 제어할 수 있습니다. 각각의 작은 작업 유닛은 변환이 완료하는 타스크를 나타냅니다.

일반적으로, 변환은 여러 개의 타스크를 완료합니다. 각 타스크는 규칙, 추출기 또는 변환과 같은 변환 요소별로 완료됩니다. 변환 작성자로서, 변환이 타스크를 완료하는 지점을 식별할 수 있습니다. 이 지점에서, 변환이 해당 타스크를 완료하는 대로 진행 표시줄을 갱신하는 코드를 추가할 수 있습니다.

변환의 구현 세부사항을 이해하면, 다음 방법 중 하나로 진행 표시줄을 갱신하는 코드를 추가할 수 있습니다.
  • IProgressMonitor 인터페이스에서 메소드를 호출하십시오. 다음 위치에서 메소드를 호출할 수 있습니다.
    • 규칙, 변환 또는 추출기에서
    • 루프 본문에서

      예를 들어, 루프의 각 반복이 대상 아티팩트를 생성하거나 소스 모델에서 요소를 처리하는 경우 루프의 본문은 진행 표시줄을 갱신할 적합한 위치가 될 수 있습니다.

    변환 소스 구문 분석과 출력(100개의 파일이 될 것으로 예측할 수 있는) 생성의 두 타스크를 완료하는 기본 변환을 고려하십시오. 이 예제의 경우 PROGRESS_MONITOR_WORK_UNITS 특성을 200으로 설정한다고 가정합니다. 다음 방식으로 진행 표시줄 작업 유닛을 할당할 수 있습니다.
    • 변환이 소스를 구문 분석한 후, PROGRESS_MONITOR_WORK_UNITS 특성에 지정된 유닛의 반만큼 진행 표시줄을 늘리십시오.
    • 변환이 출력을 생성할 때 변환이 생성하는 아티팩트마다 하나의 유닛만큼 진행 표시줄을 늘리십시오.
  • com.ibm.xtools.transform.core.UpdateProgressMonitorRule 규칙의 인스턴스를 실행하십시오.

    어쩌면 Class 추출기를 호출하여 소스 모델의 클래스를 처리하는 변환이 들어 있는 변환을 고려하십시오. 소스 모델에 따라, 이 변환은 UML 클래스나 코드 클래스를 처리할 수 있습니다. 소스 모델의 클래스마다 Class 변환이 실행됩니다. 변환이 클래스를 처리하면, 변환은 com.ibm.xtools.transform.core.UpdateProgressMonitorRule 규칙의 인스턴스를 실행하여 PROGRESS_MONITOR_INCREMENT 특성에 지정되는 유닛 수만큼 진행 표시줄을 갱신합니다.

    3 단계에 있는 표의 코드 단편은 클래스를 처리하고 com.ibm.xtools.transform.core.UpdateProgressMonitorRule 규칙의 인스턴스를 실행하는 변환의 스켈레톤을 보여 줍니다. 코드 단편의 주석은 변환이 완료하는 타스크와 변환이 타스크를 완료하는 순서를 설명합니다.

변환이 실행될 때 진행 표시줄의 정확도를 정제하려면 다음 단계를 완료하십시오.

  1. 변환을 포함하는 프로젝트의 plugin.xml 파일에 있는 <Transformation> 요소에서, 다음 예제와 같이 PROGRESS_MONITOR_WORK_UNITS 특성에 대한 <Property> 요소를 작성하십시오.
    <Transformation
    	groupPath="myExampleTransformation"
    	id="myExampleTransformation.transformation"
    	name="Transformation"
    	sourceModelType="UML2"
    	targetModelType="resource"
    	version="1.0.0"/>
    	<Property
    		id="PROGRESS_MONITOR_WORK_UNITS"
    		metatype="integer"
    		name="PROGRESS_MONITOR_WORK_UNITS"
    		readonly="true"
    		value="200"
    
    	/>
    </Transformation>
  2. 변환에 대한 소스 코드에서, 변환에 있는 변환의 특정 타스크 완료를 나타내는 변환 요소, 변환 또는 메소드를 판별하십시오.
  3. 2 단계에서 식별한 코드의 위치마다 코드를 삽입하여 진행 표시줄을 갱신하십시오. 각 위치에서, 진행 표시줄에 관련된 특성이 갱신할 수 있도록 변환 컨텍스트 변수의 인스턴스가 사용 가능해야 합니다. 다음 표는 진행 표시줄을 갱신하는 메소드를 호출할 방법의 예제를 보여 줍니다.
    진행 표시줄 갱신 방법 코드를 추가할 위치 추가할 코드의 예제
    IProgressMonitor 인터페이스에서 메소드 호출 추출기, 규칙 또는 변환과 같은 변환 요소 클래스에서 다음 예제는 변환이 10개 작업 유닛별 진행 표시줄을 갱신합니다.
    IProgressMonitor progressMonitor = getProgressMonitor(context);
    progressMonitor.worked(10);
    변환에 있는 다른 유형의 클래스에서 다음 예제는 변환이 10개 작업 유닛별 진행 표시줄을 갱신합니다.
    IProgressMonitor progressMonitor =
    	(IProgressMonitor) context.getPropertyValue(ITransformContext.PROGRESS_MONITOR);
    progressMonitor.worked(10);
    com.ibm.xtools.transform.core.UpdateProgressMonitorRule 규칙의 인스턴스 실행 일반적으로 변환의 끝에서 다음 코드 단편은 변환의 끝에서 UpdateProgressMonitor 규칙의 인스턴스를 실행하는 변환의 예제를 보여 줍니다. 코드 주석은 변환이 완료하는 기타 타스크에 대한 플레이스홀더입니다.
    private AbstractTransform createClassTransform(ITransformationDescriptor desc) {
    	Transform classTransform = new Transform(desc);
    	// Add the transform elements that read the source classes.
    	// One of these elements must set the following transform
    	// context variables by invoking the setPropertyValue method in the com.ibm.xtools.transform.core.ITransformContext interface:
    	// -PROGRESS_MONITOR_INCREMENT 
    	// -PROGRESS_MONITOR_TASK_NAME
    	
    	// Add the rule 이 파일을 갱신하거나 편집하려면 AMY LAIRD 또는 DAVID STEINMETZ에게 문의하십시오. the progress monitor.
    	classTransform.add(new UpdateProgressMonitorRule("myRuleId", "myRuleName"));
    	return classTransform;
    } 
결과
진행 표시줄에 대한 갱신사항을 테스트하려면 다음 단계를 완료하십시오.
  1. 런타임 Workbench를 시작하십시오.
  2. 런타임 Workbench에서, 실행할 변환에 대한 변환 구성을 작성하십시오.
  3. 변환을 실행하십시오.
변환이 실행될 때 진행 창의 진행 표시줄은 변환 코드가 진행 표시줄을 갱신하지 못한 경우보다 더 정확하게 갱신합니다.

피드백