code: @Override
      public boolean isMoveDoable(ScoreDirector<Solution_> scoreDirector) {
          if (subChain.getEntityList().contains(toPlanningValue)) {
              return false;
          }
          Object oldFirstValue = variableDescriptor.getValue(subChain.getFirstEntity());
          return !Objects.equals(oldFirstValue, toPlanningValue);
      }
docs: ************************************************************************