Задача [API65]: API для получения описания элемента хранилища, поиск в хранилище

Формулировка проблемы: для реализации задач мобильного клиента необходимо реализовать новый метод API для получения описания ноды хранилища, а также доработать существующий метод API поиска в хранилище.

Решение:

Поиск в хранилище

Необходимо доработать метод rest/api/storage/search, добавив в каждый выходной параметр результата поиска (json list) новые данные:

  • right - сумма чисел, определяющая набор прав на папку или файл:

    • READ = 1 (право на просмотр элемента);

    • ADD = 2 (право на добавление нового элемента);

    • DELETE = 4 (право на удаление элемента);

    • EDIT_FOLDER_VIEW = 8 (право на редактирование index страницы папки);

    • EDIT_DOCUMENT = 16 (право на редактирование документа);

    • ADD_COMMENT = 32 (право на добавление комментариев);

    • EDIT_COMMENT = 64 (право на редактирование комментариев);

    • DELETE_COMMENT = 128 (право на удаление комментариев);

    • READ_COMMENT = 256 (право на просмотр комментариев);

    • READ_VERSIONS = 512 (право на просмотр версий документа);

    • EDIT_VERSIONS = 1024 (право на восстановление версий документа);

    • EDIT_METADATA = 2048 (право на редактирование свойств документа);

    • READ_METADATA = 4096 (право на просмотр свойств документа);

    • EDIT_CATEGORIES = 8192 (право на редактирование классификатора документа);

    • READ_CATEGORIES = 16384 (право на просмотр классификатора документа);

    • ADD_DOCUMENT_REFERENCES = 32768 (право на добавление документа в список ссылок документа);

    • EDIT_DOCUMENT_REFERENCES = 65536 (право на редактирование списка ссылок документа);

    • DELETE_DOCUMENT_REFERENCES = 131072 (право на удаление ссылок документа);

    • READ_DOCUMENT_REFERENCES = 262144 (право на просмотр списка ссылок документа);

    • LOAD_DOCUMENT = 524288 (право на загрузку файла документа);

    • MOVE = 2097152 (право на перемещение / переименовывание элемента);

    • CHANGE_PERMISSION = 4194304 (право на назначение прав);

    Примечание. Наличие всех прав должно соответствовать максимальному значению переменной int в java, т.е. значению 2147483647. Отсутствие прав - значению 0.

  • icon_url - ссылка до иконки файла.

Пример возвращаемого массива

[
  {
    ...
    "right": 7,
    "icon_url": "rest/api/storage/icons/get?aiType=ai_text&fileName=Файл1.odt"
  },
  {
    ...
    "right": 2147483647,
    "icon_url": "rest/api/storage/icons/get?aiType=ai_htd&fileName=Файл2.htd"
  }
]
Получение описания ноды хранилища

Необходимо реализовать следующий метод:

URL: rest/api/storage/description.

Тип: GET.

Метод принимает следующие строковые параметры:

  • elementID - идентификатор папки или файла (обяз.);

  • locale - локаль пользователя, ru/en/kz (не обяз., по умолчанию ru).

В случае успешного выполнения возвращаемый json содержит следующие поля:

  • identifier - идентификатор папки или файла;

  • is_folder (true/false) - папка («true») или файл («false»);

  • size - размер файла в байтах (для папки значение = 0);

  • path - полный путь до папки или файла;

  • name - название папки или файла;

  • modified - дата и время последнего изменения папки или файла (в формате yyyy-mm-dd hh:mm:ss);

  • userName - ФИО пользователя, выполнившего последнее изменение папки или файла (в формате Фамилия Имя О.);

  • userID - идентификатор пользователя, выполнившего последнее изменение папки или файла;

  • right - сумма чисел, определяющая набор прав на папку или файл:

    • READ = 1 (право на просмотр элемента);

    • ADD = 2 (право на добавление нового элемента);

    • DELETE = 4 (право на удаление элемента);

    • EDIT_FOLDER_VIEW = 8 (право на редактирование index страницы папки);

    • EDIT_DOCUMENT = 16 (право на редактирование документа);

    • ADD_COMMENT = 32 (право на добавление комментариев);

    • EDIT_COMMENT = 64 (право на редактирование комментариев);

    • DELETE_COMMENT = 128 (право на удаление комментариев);

    • READ_COMMENT = 256 (право на просмотр комментариев);

    • READ_VERSIONS = 512 (право на просмотр версий документа);

    • EDIT_VERSIONS = 1024 (право на восстановление версий документа);

    • EDIT_METADATA = 2048 (право на редактирование свойств документа);

    • READ_METADATA = 4096 (право на просмотр свойств документа);

    • EDIT_CATEGORIES = 8192 (право на редактирование классификатора документа);

    • READ_CATEGORIES = 16384 (право на просмотр классификатора документа);

    • ADD_DOCUMENT_REFERENCES = 32768 (право на добавление документа в список ссылок документа);

    • EDIT_DOCUMENT_REFERENCES = 65536 (право на редактирование списка ссылок документа);

    • DELETE_DOCUMENT_REFERENCES = 131072 (право на удаление ссылок документа);

    • READ_DOCUMENT_REFERENCES = 262144 (право на просмотр списка ссылок документа);

    • LOAD_DOCUMENT = 524288 (право на загрузку файла документа);

    • MOVE = 2097152 (право на перемещение / переименовывание элемента);

    • CHANGE_PERMISSION = 4194304 (право на назначение прав);

    Примечание. Наличие всех прав должно соответствовать максимальному значению переменной int в java, т.е. значению 2147483647. Отсутствие прав - значению 0.

  • mime - mime тип файла (отображается только при значении is_folder = «false»);

  • icon - ссылка до иконки файла (отображается только при значении is_folder = «false»);

  • parents - массив идентификаторов родительских папок относительно дерева, начиная с самого корня;

  • ai_type - тип элемента хранилища, один из следующих вариантов:

    • ai_folder - папка;

    • ai_document - текстовый файл;

    • ai_image - файл изображения;

    • ai_audio - аудиофайл;

    • ai_video - видеофайл;

    • ai_application - прочие файлы.

Таким образом, набор параметров для папки и для файла выглядит следующим образом:

Папка Файл
  • identifier

  • identifier

  • is_folder

  • is_folder

  • size

  • size

  • path

  • path

  • name

  • name

  • modified

  • modified

  • userName

  • userName

  • userID

  • userID

  • right

  • right

  • mime

  • icon

  • parents

  • parents

  • ai_type

  • ai_type

В случае неуспешного выполнения вовзращается json с полями:

  • errorCode - код выполнения (число, отличное от 0);

  • errorMessage - сообщение об ошибке (см. ниже).

Альтернативные потоки событий.

  • Альтернативный поток №1. Параметр elementID не передан, либо он пустой. Сервер возвращает ошибку:

    Не передан параметр elementID

    действие не осуществляется;

  • Альтернативный поток №2. Передан некорректный (несуществующий) параметр elementID. Сервер возвращает ошибку:

    Передан некорректный параметр elementID

    действие не осуществляется;

Пример возвращаемого массива

{
    "identifier": "f5003070-3740-4920-a4c5-01f8bf440774",
    "is_folder": false,
    "size": "19644",
    "path": "/company_root/Проект/Файл1.odt",
    "name": "Файл1.odt",
    "modified": "2013-03-13 16:35:45",
    "userName": "Слепаков Иван И.",
    "userID": "ee71a4c6-888a-4f04-86de-44ab394f5749",
    "right": 7,
    "mime ": "application/vnd.oasis.opendocument.text",
    "icon": "rest/api/storage/icons/get?aiType=ai_text&fileName=Файл1.odt",
    "parents": ["d1f91787-ac5d-4650-a7c0-1cdfbdd12165", "5860da7f-0615-4f46-8264-d8605d97ef9e"],
    "ai_type": "ai_document"
}