Skip to content

Commit 73c8b3a

Browse files
feat: Make examination use declarative shadow variables (#61)
--------- Co-authored-by: Lukáš Petrovický <lukas@petrovicky.net>
1 parent e6ed2d3 commit 73c8b3a

4 files changed

Lines changed: 12 additions & 58 deletions

File tree

src/main/java/ai/timefold/solver/benchmarks/examples/examination/domain/FollowingExam.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package ai.timefold.solver.benchmarks.examples.examination.domain;
22

3-
import ai.timefold.solver.benchmarks.examples.examination.domain.solver.PeriodUpdatingVariableListener;
43
import ai.timefold.solver.core.api.domain.entity.PlanningEntity;
54
import ai.timefold.solver.core.api.domain.variable.ShadowVariable;
5+
import ai.timefold.solver.core.preview.api.domain.variable.declarative.ShadowSources;
66

77
@PlanningEntity
88
public class FollowingExam extends Exam {
@@ -21,9 +21,7 @@ public void setLeadingExam(LeadingExam leadingExam) {
2121
}
2222

2323
@Override
24-
@ShadowVariable(variableListenerClass = PeriodUpdatingVariableListener.class,
25-
sourceEntityClass = LeadingExam.class,
26-
sourceVariableName = "period")
24+
@ShadowVariable(supplierName = "periodSupplier")
2725
public Period getPeriod() {
2826
return period;
2927
}
@@ -32,6 +30,11 @@ public void setPeriod(Period period) {
3230
this.period = period;
3331
}
3432

33+
@ShadowSources("leadingExam.period")
34+
public Period periodSupplier() {
35+
return leadingExam.getPeriod();
36+
}
37+
3538
// ************************************************************************
3639
// With methods
3740
// ************************************************************************

src/main/java/ai/timefold/solver/benchmarks/examples/examination/domain/solver/PeriodUpdatingVariableListener.java

Lines changed: 0 additions & 51 deletions
This file was deleted.

src/main/java/ai/timefold/solver/benchmarks/micro/scoredirector/problems/ExaminationProblem.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package ai.timefold.solver.benchmarks.micro.scoredirector.problems;
22

3+
import java.util.EnumSet;
34
import java.util.Objects;
45

56
import ai.timefold.solver.benchmarks.examples.examination.domain.Exam;
@@ -11,6 +12,7 @@
1112
import ai.timefold.solver.benchmarks.micro.scoredirector.Example;
1213
import ai.timefold.solver.benchmarks.micro.scoredirector.ScoreDirectorType;
1314
import ai.timefold.solver.core.config.score.director.ScoreDirectorFactoryConfig;
15+
import ai.timefold.solver.core.config.solver.PreviewFeature;
1416
import ai.timefold.solver.core.impl.domain.solution.descriptor.SolutionDescriptor;
1517
import ai.timefold.solver.persistence.common.api.domain.solution.SolutionFileIO;
1618

@@ -33,8 +35,8 @@ protected ScoreDirectorFactoryConfig buildScoreDirectorFactoryConfig(ScoreDirect
3335

3436
@Override
3537
protected SolutionDescriptor<Examination> buildSolutionDescriptor() {
36-
return SolutionDescriptor.buildSolutionDescriptor(Examination.class, Exam.class, LeadingExam.class,
37-
FollowingExam.class);
38+
return SolutionDescriptor.buildSolutionDescriptor(EnumSet.of(PreviewFeature.DECLARATIVE_SHADOW_VARIABLES),
39+
Examination.class, Exam.class, LeadingExam.class, FollowingExam.class);
3840
}
3941

4042
@Override

src/main/resources/ai/timefold/solver/benchmarks/examples/examination/examinationSolverConfig.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<!--<environmentMode>FULL_ASSERT</environmentMode>-->
66
<!-- To solve faster by saturating multiple CPU cores -->
77
<!--<moveThreadCount>AUTO</moveThreadCount>-->
8-
8+
<enablePreviewFeature>DECLARATIVE_SHADOW_VARIABLES</enablePreviewFeature>
99
<solutionClass>ai.timefold.solver.benchmarks.examples.examination.domain.Examination</solutionClass>
1010
<entityClass>ai.timefold.solver.benchmarks.examples.examination.domain.Exam</entityClass>
1111
<entityClass>ai.timefold.solver.benchmarks.examples.examination.domain.LeadingExam</entityClass>

0 commit comments

Comments
 (0)