static void apply(List<Visit> state, ScoreDirector scoreDirector) { for (int i = state.size() - 1; i > 0; i--) { final ParcelVisit subject = (ParcelVisit) state.get(i); scoreDirector.beforeVariableChanged(subject, PREV_VISIT); final Visit target = state.get(i - 1); if (target == NullVisit.INSTANCE) { subject.setPreviousVisit(null); } else { subject.setPreviousVisit(target); } scoreDirector.afterVariableChanged(subject, PREV_VISIT); } }
static MovePair create(ParcelVisit pick, ParcelVisit delv, Visit pickToPrev, Visit delvToPrev) { final ImmutableList.Builder<Changeset> changesets = ImmutableList.builder(); if (delv.equals(pick.getNextVisit()) || pick.equals(delv.getNextVisit())) { // pickup and delivery are neighbors in originating vehicle if (pick.isBefore(delv)) { changesets.add( Changeset.create( nonNulls(pick.getPreviousVisit(), pick, delv, delv.getNextVisit()), nonNulls(pick.getPreviousVisit(), delv.getNextVisit()))); } else { changesets.add( Changeset.create( nonNulls(delv.getPreviousVisit(), delv, pick, pick.getNextVisit()), nonNulls(delv.getPreviousVisit(), pick.getNextVisit()))); } } else { // not neighbors in originating vehicle changesets.add( Changeset.create( nonNulls(pick.getPreviousVisit(), pick, pick.getNextVisit()), nonNulls(pick.getPreviousVisit(), pick.getNextVisit()))); changesets.add( Changeset.create( nonNulls(delv.getPreviousVisit(), delv, delv.getNextVisit()), nonNulls(delv.getPreviousVisit(), delv.getNextVisit()))); } if (pickToPrev.equals(delvToPrev) || delvToPrev.equals(pick)) { // targets are the same, meaning that they are neighbors changesets.add( Changeset.create( nonNulls(pickToPrev, pickToPrev.getNextVisit()), nonNulls(pickToPrev, pick, delv, pickToPrev.getNextVisit()))); } else { changesets.add( Changeset.create( nonNulls(pickToPrev, pickToPrev.getNextVisit()), nonNulls(pickToPrev, pick, pickToPrev.getNextVisit()))); changesets.add( Changeset.create( nonNulls(delvToPrev, delvToPrev.getNextVisit()), nonNulls(delvToPrev, delv, delvToPrev.getNextVisit()))); } return new MovePair(changesets.build(), false); }