Java 코드로 타임라인 구성

Java에서 각각의 타임라인 데이터는 curam.creole.value.Timeline 매개변수화된 클래스의 인스턴스입니다. 이 클래스의 전체 세부사항은 개발용으로 설치된 애플리케이션의 EJBServer/components/CREOLEInfrastructure/doc에서 사용 가능한 JavaDoc을 참조하십시오.

각 타임라인은 간격의 콜렉션을 보유합니다. 여기서 간격은 특정 시작 날짜부터 적용 가능한 입니다. 적절한 간격 콜렉션이 타임라인의 생성자에 전달되어야 합니다.

예를 들어, 다음 간격으로 Timeline<Number>를 작성해야 한다고 가정하십시오(타임라인은 먼 과거와 미래로 무한정 확장될 수 있음을 상기).

다음은 이와 같은 타임라인을 작성하는 샘플 Java 코드입니다.

package curam.creole.example;

import curam.creole.value.Interval;
import curam.creole.value.Timeline;
import curam.util.type.Date;

public class CreateTimeline {

  /**
   * 다음 간격 값으로 Number Timeline을 작성합니다.
   * <ul>
   * <li>2000년 12월 31일(포함)까지 0</li>
   * <li>2001년 1월 1일부터 2003년 11월 30일(포함)까지
   * 10,000</li>
   * <li>2004년 12월 1일부터 추후 통보될 때까지 12,000</li>
   * </ul>
   */
  public static Timeline<Number> createNumberTimeline() {

    return new Timeline<Number>(

    // 첫 번째 간격("시작 시간"부터의 애플리케이션)
        new Interval<Number>(null, 0),

        // 두 번째 간격
        new Interval<Number>(Date.fromISO8601("20010101"), 10000),

        // 마지막 간격(추후 통보 시까지)
        new Interval<Number>(Date.fromISO8601("20041201"), 12000)

    );

  }
}

다음은 또 다른 예제로 개인의 200번째 생일까지 개인의 나이에 대한 타임라인을 계산하기 위해 CER call 표현식을 호출할 수 있는 샘플 Java 코드입니다(타임라인에 한정된 수의 값 변경사항이 포함되도록 나이 타임라인을 인위적으로 제한해야 함).

package curam.creole.example;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;

import curam.creole.execution.session.Session;
import curam.creole.value.Interval;
import curam.creole.value.Timeline;
import curam.util.type.Date;

public class AgeTimeline {

  /**
   * 인위적으로 200번째 생일까지로 제한하여 개인의 나이에 대한
   * 타임라인을 작성합니다.
   * <p>
   * &lt;call&gt; 표현식을 통해 CER 규칙에서 호출할 수 있습니다.
   */
  public static Timeline<? extends Number> createAgeTimeline(
      final Session session, final Date dateOfBirth) {

    /**
     * 나이 타임라인에 한정된 수의 값 변경사항이 포함되도록 하는
     * 인위적인 제한입니다.
     */
    final int NUMBER_OF_BIRTHDAYS = 200;

    final Collection<Interval<Integer>> intervals =
        new ArrayList<Interval<Integer>>(NUMBER_OF_BIRTHDAYS + 2);

    /*
     * 생년월일 전의 나이는 여전히 0으로 기록됨 -
     * "시작 시간"부터의 시작 간격 애플리케이션을
     * 작성합니다.
     */
    final Interval<Integer> initialInterval =
        new Interval<Integer>(null, 0);
    intervals.add(initialInterval);

    /*
     * 한계에 도달할 때까지 각 생일을 식별합니다. 개인은
     * 생년월일 전부터 나이가 0으로 간주됩니다(위의 내용
     * 참조). 따라서 생년월일부터 첫 번째 생일까지의
     * 간격은 타임라인별 단일 간격으로 병합되며,
     * 이는 문제가 되지 않습니다(로직을 현상태 그대로
     * 유지하는 것이 보다 명확함).
     */

    for (int age = 0; age <= NUMBER_OF_BIRTHDAYS; age++) {

      // 생년월일 계산
      final Calendar birthdayCalendar = dateOfBirth.getCalendar();

      /*
       * NB 윤년에 대한 올바른 처리를 얻기 위해 .add가 아니라
       * .roll을 사용
       */
      birthdayCalendar.roll(Calendar.YEAR, age);
      final Date birthdayDate = new Date(birthdayCalendar);

      /*
       * 나이는 이 생일부터 다음 생일까지 적용됨
       */
      intervals.add(new Interval<Integer>(birthdayDate, age));
    }

    final Timeline<Integer> ageTimeline =
        new Timeline<Integer>(intervals);

    return ageTimeline;

  }
}
참고: 일반적으로 타임라인은 CER의 클라이언트가 규칙 외부에서 작성합니다.

특히 Cúram V6 적격성/자격 처리에는 Cúram Evidence를 타임라인 데이터로 변환하는 데 사용하는 로직이 포함되어 있습니다 .

자세한 정보는 Inside Cúram Eligibility and Entitlement Using Cúram Express Rules 안내서를 참조하십시오.