@Override
  public BulkObject createBulkObject(RowValues values) {
    String type = values.get(StringTable.Type);

    if (type.endsWith("Error")) {
      return new BulkError();
    }

    if (ADDITIONAL_OBJECT_MAP.containsKey(type)) {
      return ADDITIONAL_OBJECT_MAP.get(type).get();
    }

    if (!INDIVIDUAL_ENTITY_MAP.containsKey(type)) {
      return new UnknownBulkEntity();
    }

    EntityInfo info = INDIVIDUAL_ENTITY_MAP.get(type);

    if ("Deleted".equals(values.get(StringTable.Status))
        && !(info.getDeleteAllColumnName() == null || info.getDeleteAllColumnName().isEmpty())
        && (values.get(info.getDeleteAllColumnName()) == null
            || values.get(info.getDeleteAllColumnName()).isEmpty())) {
      return info.getIdentifierCreator().create();
    }

    return info.getCreator().create();
  }