public Collection<? extends Object> getPlanningValues() { List<Object> values = new ArrayList<Object>(variableDescriptors.size() * 2); for (PlanningVariableDescriptor planningVariableDescriptor : variableDescriptors) { values.add(planningVariableDescriptor.getValue(leftEntity)); values.add(planningVariableDescriptor.getValue(rightEntity)); } return values; }
public boolean isMoveDoable(ScoreDirector scoreDirector) { for (PlanningVariableDescriptor planningVariableDescriptor : variableDescriptors) { Object leftValue = planningVariableDescriptor.getValue(leftEntity); Object rightValue = planningVariableDescriptor.getValue(rightEntity); if (!ObjectUtils.equals(leftValue, rightValue)) { return true; } } return false; }
public void doMove(ScoreDirector scoreDirector) { for (PlanningVariableDescriptor planningVariableDescriptor : variableDescriptors) { Object oldLeftValue = planningVariableDescriptor.getValue(leftEntity); Object oldRightValue = planningVariableDescriptor.getValue(rightEntity); if (!ObjectUtils.equals(oldLeftValue, oldRightValue)) { scoreDirector.beforeVariableChanged( leftEntity, planningVariableDescriptor.getVariableName()); planningVariableDescriptor.setValue(leftEntity, oldRightValue); scoreDirector.afterVariableChanged( leftEntity, planningVariableDescriptor.getVariableName()); scoreDirector.beforeVariableChanged( rightEntity, planningVariableDescriptor.getVariableName()); planningVariableDescriptor.setValue(rightEntity, oldLeftValue); scoreDirector.afterVariableChanged( rightEntity, planningVariableDescriptor.getVariableName()); } } }