public Score getScore() {
return guiScoreDirector.calculateScore();
}
public void registerForBestSolutionChanges(final SolverAndPersistenceFrame solverAndPersistenceFrame) {
solver.addEventListener(new SolverEventListener() {
// Not called on the event thread
public void bestSolutionChanged(BestSolutionChangedEvent event) {
// Avoid ConcurrentModificationException when there is an unprocessed ProblemFactChange
// because the paint method uses the problem facts instances as the solver
// unlike the planning entities which are cloned