@Override
  public boolean checkNumberOfGroups(Grouping grouping, Shift shift) {
    Integer maximumGroupCapacity = grouping.getGroupMaximumNumber();

    if (shift != null && grouping.getDifferentiatedCapacity()) {
      maximumGroupCapacity = shift.getShiftGroupingProperties().getCapacity();
    } else if (maximumGroupCapacity == null) {
      return true;
    }

    int numberOfGroups = 0;
    if (shift != null) {
      numberOfGroups = grouping.readAllStudentGroupsBy(shift).size();
    } else {
      numberOfGroups = grouping.getStudentGroupsWithoutShift().size();
    }
    if (maximumGroupCapacity == null || numberOfGroups < maximumGroupCapacity) {
      return true;
    }
    return false;
  }