@Override
  public boolean drop(final List<?> list, final Display<?> display) {
    if (dragAndDropService == null) return false;
    check(list, display);
    if (list == null) return true; // trivial case

    // dropping an empty list trivially succeeds
    if (list.size() == 0) return true;

    // use the drag-and-drop service to handle each item separately
    boolean success = false;
    for (final Object item : list) {
      if (dragAndDropService.supports(item, display)) {
        final boolean result = dragAndDropService.drop(item, display);
        if (result) success = true;
      }
    }
    return success;
  }
  @Override
  public boolean supports(final List<?> list, final Display<?> display) {
    if (dragAndDropService == null) return false;
    if (!super.supports(list, display)) return false;

    // empty lists are trivially compatible
    if (list.size() == 0) return true;

    // the list is deemed compatible if at least one item is compatible
    for (final Object item : list) {
      if (dragAndDropService.supports(item, display)) return true;
    }
    return false;
  }