// ************************************************************************
public ScoreDirectorFactory buildScoreDirectorFactory(EnvironmentMode environmentMode,
SolutionDescriptor solutionDescriptor) {
ScoreDefinition scoreDefinition = buildScoreDefinition();
AbstractScoreDirectorFactory scoreDirectorFactory;
// TODO this should fail-fast if multiple scoreDirectorFactory's are configured
scoreDirectorFactory = buildSimpleScoreDirectorFactory();
if (scoreDirectorFactory == null) {
scoreDirectorFactory = buildIncrementalScoreDirectorFactory();
}
if (scoreDirectorFactory == null) {
scoreDirectorFactory = buildDroolsScoreDirectorFactory();
}
scoreDirectorFactory.setSolutionDescriptor(solutionDescriptor);
scoreDirectorFactory.setScoreDefinition(scoreDefinition);
if (assertionScoreDirectorFactory != null) {
if (assertionScoreDirectorFactory.getAssertionScoreDirectorFactory() != null) {
throw new IllegalArgumentException("A assertionScoreDirectorFactory ("
+ assertionScoreDirectorFactory + ") cannot have a non-null assertionScoreDirectorFactory ("
+ assertionScoreDirectorFactory.getAssertionScoreDirectorFactory() + ").");
}
if (environmentMode.compareTo(EnvironmentMode.DEBUG) > 0) {
throw new IllegalArgumentException("A non-null assertionScoreDirectorFactory ("
+ assertionScoreDirectorFactory + ") requires an environmentMode ("
+ environmentMode + ") of " + EnvironmentMode.DEBUG + " or lower.");
}
scoreDirectorFactory.setAssertionScoreDirectorFactory(
assertionScoreDirectorFactory.buildScoreDirectorFactory(
EnvironmentMode.PRODUCTION, solutionDescriptor));
}
return scoreDirectorFactory;
}