public synchronized void newSolution(ThreadContext context) {
solutionSaver.setSolutionsCollection(solutions);
Fitness fitness = context.getLastFitness();
DesignSpaceManager dsm = context.getDesignSpaceManager();
Object id = dsm.getCurrentState();
IStateCoderFactory stateCoderFactory = context.getGlobalContext().getStateCoderFactory();
SolutionTrajectory solutionTrajectory = dsm.getTrajectoryInfo().createSolutionTrajectory(stateCoderFactory);
solutionTrajectory.setFitness(fitness);
if (acceptOnlyGoalSolutions && !fitness.isSatisifiesHardObjectives()) {
unsavedSolutionCallbacks(context, solutionTrajectory);
return;
}
boolean solutionSaved = solutionSaver.saveSolution(context, id, solutionTrajectory);
if (solutionSaved) {
enoughSolutions.solutionFound(context, solutionTrajectory);
savedSolutionCallbacks(context, solutionTrajectory);
if (enoughSolutions.enoughSolutions()) {
context.getGlobalContext().stopAllThreads();
}
} else {
unsavedSolutionCallbacks(context, solutionTrajectory);
}
}