in core/optaplanner-core-impl/src/main/java/org/optaplanner/core/impl/domain/score/descriptor/ScoreDescriptor.java [123:208]
private static ScoreDefinition<?> buildScoreDefinition(
Class<?> solutionClass,
MemberAccessor scoreMemberAccessor,
Class<? extends Score<?>> scoreType,
PlanningScore annotation) {
Class<? extends ScoreDefinition> scoreDefinitionClass = annotation.scoreDefinitionClass();
int bendableHardLevelsSize = annotation.bendableHardLevelsSize();
int bendableSoftLevelsSize = annotation.bendableSoftLevelsSize();
if (scoreDefinitionClass != PlanningScore.NullScoreDefinition.class) {
if (bendableHardLevelsSize != PlanningScore.NO_LEVEL_SIZE
|| bendableSoftLevelsSize != PlanningScore.NO_LEVEL_SIZE) {
throw new IllegalArgumentException("The solutionClass (" + solutionClass
+ ") has a @" + PlanningScore.class.getSimpleName()
+ " annotated member (" + scoreMemberAccessor
+ ") that has a scoreDefinition (" + scoreDefinitionClass
+ ") that must not have a bendableHardLevelsSize (" + bendableHardLevelsSize
+ ") or a bendableSoftLevelsSize (" + bendableSoftLevelsSize + ").");
}
return ConfigUtils.newInstance(() -> scoreMemberAccessor + " with @" + PlanningScore.class.getSimpleName(),
"scoreDefinitionClass", scoreDefinitionClass);
}
if (!IBendableScore.class.isAssignableFrom(scoreType)) {
if (bendableHardLevelsSize != PlanningScore.NO_LEVEL_SIZE
|| bendableSoftLevelsSize != PlanningScore.NO_LEVEL_SIZE) {
throw new IllegalArgumentException("The solutionClass (" + solutionClass
+ ") has a @" + PlanningScore.class.getSimpleName()
+ " annotated member (" + scoreMemberAccessor
+ ") that returns a scoreType (" + scoreType
+ ") that must not have a bendableHardLevelsSize (" + bendableHardLevelsSize
+ ") or a bendableSoftLevelsSize (" + bendableSoftLevelsSize + ").");
}
if (scoreType.equals(SimpleScore.class)) {
return new SimpleScoreDefinition();
} else if (scoreType.equals(SimpleLongScore.class)) {
return new SimpleLongScoreDefinition();
} else if (scoreType.equals(SimpleBigDecimalScore.class)) {
return new SimpleBigDecimalScoreDefinition();
} else if (scoreType.equals(HardSoftScore.class)) {
return new HardSoftScoreDefinition();
} else if (scoreType.equals(HardSoftLongScore.class)) {
return new HardSoftLongScoreDefinition();
} else if (scoreType.equals(HardSoftBigDecimalScore.class)) {
return new HardSoftBigDecimalScoreDefinition();
} else if (scoreType.equals(HardMediumSoftScore.class)) {
return new HardMediumSoftScoreDefinition();
} else if (scoreType.equals(HardMediumSoftLongScore.class)) {
return new HardMediumSoftLongScoreDefinition();
} else if (scoreType.equals(HardMediumSoftBigDecimalScore.class)) {
return new HardMediumSoftBigDecimalScoreDefinition();
} else {
throw new IllegalArgumentException("The solutionClass (" + solutionClass
+ ") has a @" + PlanningScore.class.getSimpleName()
+ " annotated member (" + scoreMemberAccessor
+ ") that returns a scoreType (" + scoreType
+ ") that is not recognized as a default " + Score.class.getSimpleName() + " implementation.\n"
+ " If you intend to use a custom implementation,"
+ " maybe set a scoreDefinition in the @" + PlanningScore.class.getSimpleName()
+ " annotation.");
}
} else {
if (bendableHardLevelsSize == PlanningScore.NO_LEVEL_SIZE
|| bendableSoftLevelsSize == PlanningScore.NO_LEVEL_SIZE) {
throw new IllegalArgumentException("The solutionClass (" + solutionClass
+ ") has a @" + PlanningScore.class.getSimpleName()
+ " annotated member (" + scoreMemberAccessor
+ ") that returns a scoreType (" + scoreType
+ ") that must have a bendableHardLevelsSize (" + bendableHardLevelsSize
+ ") and a bendableSoftLevelsSize (" + bendableSoftLevelsSize + ").");
}
if (scoreType.equals(BendableScore.class)) {
return new BendableScoreDefinition(bendableHardLevelsSize, bendableSoftLevelsSize);
} else if (scoreType.equals(BendableLongScore.class)) {
return new BendableLongScoreDefinition(bendableHardLevelsSize, bendableSoftLevelsSize);
} else if (scoreType.equals(BendableBigDecimalScore.class)) {
return new BendableBigDecimalScoreDefinition(bendableHardLevelsSize, bendableSoftLevelsSize);
} else {
throw new IllegalArgumentException("The solutionClass (" + solutionClass
+ ") has a @" + PlanningScore.class.getSimpleName()
+ " annotated member (" + scoreMemberAccessor
+ ") that returns a bendable scoreType (" + scoreType
+ ") that is not recognized as a default " + Score.class.getSimpleName() + " implementation.\n"
+ " If you intend to use a custom implementation,"
+ " maybe set a scoreDefinition in the annotation.");
}
}
}