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> * <call> 표현식을 통해 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; } }
특히 Cúram V6 적격성/자격 처리에는 Cúram Evidence를 타임라인 데이터로 변환하는 데 사용하는 로직이 포함되어 있습니다 .
자세한 정보는 Inside Cúram Eligibility and Entitlement Using Cúram Express Rules 안내서를 참조하십시오.