List<Object> planningEntityList = solutionDescriptor.getPlanningEntityList(solution);
for (ListIterator<Object> leftIt = planningEntityList.listIterator(); leftIt.hasNext();) {
Object leftPlanningEntity = leftIt.next();
FactHandle leftPlanningEntityFactHandle = solutionDirector.getWorkingMemory()
.getFactHandle(leftPlanningEntity);
PlanningEntityDescriptor leftPlanningEntityDescriptor = solutionDescriptor.getPlanningEntityDescriptor(
leftPlanningEntity.getClass());
Collection<PlanningVariableDescriptor> planningVariableDescriptors
= leftPlanningEntityDescriptor.getPlanningVariableDescriptors();
for (ListIterator<Object> rightIt = planningEntityList.listIterator(leftIt.nextIndex()); rightIt.hasNext();) {
Object rightPlanningEntity = rightIt.next();
PlanningEntityDescriptor rightPlanningEntityDescriptor = solutionDescriptor.getPlanningEntityDescriptor(
leftPlanningEntity.getClass());
if (leftPlanningEntityDescriptor.getPlanningEntityClass().equals(
rightPlanningEntityDescriptor.getPlanningEntityClass())) {
FactHandle rightPlanningEntityFactHandle = solutionDirector.getWorkingMemory()
.getFactHandle(rightPlanningEntity);
moveList.add(new GenericSwapMove(planningVariableDescriptors,
leftPlanningEntity, leftPlanningEntityFactHandle,
rightPlanningEntity, rightPlanningEntityFactHandle));