Формулировка проблемы: для реализации задач мобильного клиента необходимо доработать API-метод, позволяющий получить содержимое папок хранилища.
Решение: необходимо доработать метод
rest/api/storage/list, добавив к его выходным
параметрам новые данные: иконку файла и права доступа на папки /
файлы. Опишем метод полностью.
URL метода: rest/api/storage/list.
Тип запроса: GET.
Метод принимает следующие строковые параметры:
parentID - идентификатор папки (не обяз.);
getOnlyFolder (true/false) - отображать ли
только папки (не обяз., по умолчанию значение false);
locale - локаль пользователя,
ru/en/kz (не обяз., по умолчанию
ru).
Если не передавать параметр parentID, то метод
должен возвращать папки хранилища первого уровня для авторизованного
пользователя.
Если не передавать параметр getOnlyFolder, то
метод должен возвращать все содержимое (и папки, и файлы) только тех
папок, на которые у пользователя есть хоть какой-нибудь набор прав.
Если же передавать параметр getOnlyFolder = true,
то метод должен возвращать только дочерние папки, включая те, на
которые у пользователя отсутствуют права.
Примечание: к последнему случаю относятся только те варианты настройки хранилища, при котором у родителя данной папки, в которой у пользователя отсутствуют права, права присутствуют.
В случае успешного выполнения возвращаемый json
содержит, в свою очередь, список 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»).
Таким образом, набор параметров для папки и для файла выглядит следующим образом:
| Папка | Файл |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
Порядок следования json'ов должен соответствовать
порядку следования папок и файлов в хранилище.
В случае неуспешного выполнения вовзращается json
с полями:
errorCode - код выполнения (число, отличное
от 0);
errorMessage - "Ошибка получения
содержимого папки".
Альтернативные потоки событий.
Альтернативный поток №1. Передан некорректный (несуществующий)
параметр parentID. Сервер возвращает ошибку:
Передан некорректный параметр parentID
действие не осуществляется;
Альтернативный поток №2. На папку из параметра
parentID отсутствует какой-либо набор прав.
Сервер возвращает ошибку:
Недостаточно прав для выполнения действия
действие не осуществляется.
Пример возвращаемого массива для папок
[
{
"identifier": "5719212b-97b9-4558-9e67-baa04d0adc62",
"is_folder": true,
"size": "0",
"path": "/aiservice/home/ee71a4c6-888a-4f04-86de-44ab394f5749",
"name": "Мои документы",
"modified": "0007-05-04 10:12:00",
"userName": "Слепаков Иван И.",
"userID": "ee71a4c6-888a-4f04-86de-44ab394f5749",
"right": 7,
},
{
"identifier": "91d1816a-b30e-47ea-988c-bd8864daa253",
"is_folder": true,
"size": "0",
"path": "/company_root",
"name": "company_root",
"modified": "2011-10-10 09:13:39",
"userName": " ",
"userID": "0000-0000-0000-0002",
"right": 7,
}
]
Пример возвращаемого массива для файлов
[
{
"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"
},
{
"identifier": "a8bb8fba-b418-4fcb-9b86-519c261c446f",
"is_folder": false,
"size": "850",
"path": "/company_root/Проект/Файл2.htd",
"name": "Файл2.htd",
"modified": "0016-05-03 03:15:00",
"userName": "Слепаков Иван И.",
"userID": "ee71a4c6-888a-4f04-86de-44ab394f5749",
"right": 7,
"mime ": "text/htd",
"icon": "rest/api/storage/icons/get?aiType=ai_htd&fileName=Файл2.htd"
},
{
"identifier": "15df7b65-67a6-4164-abfd-c68402e39e04",
"is_folder": false,
"size": "1057792",
"path": "/company_root/Проект/Файл3.doc",
"name": "Файл3.doc",
"modified": "0017-05-03 03:23:00",
"userName": "Слепаков Иван И.",
"userID": "ee71a4c6-888a-4f04-86de-44ab394f5749",
"right": 7,
"mime ": "application/msword",
"icon": "rest/api/storage/icons/get?aiType=ai_text&fileName=Файл3.doc"
},
{
"identifier": "5ed43228-ff3f-4701-8246-f63136cfc54f",
"is_folder": false,
"size": "2516096",
"path": "/company_root/Проект/Файл4.mp3",
"name": "Файл4.mp3",
"modified": "0017-05-03 03:44:00",
"userName": "Слепаков Иван И.",
"userID": "ee71a4c6-888a-4f04-86de-44ab394f5749",
"right": 7,
"mime ": "audio/mpeg",
"icon": "rest/api/storage/icons/get?aiType=ai_audio&fileName=Файл4.mp3"
},
{
"identifier": "7af4e948-e786-4c42-bfd1-c4976d82be03",
"is_folder": false,
"size": "16896",
"path": "/company_root/Проект/Файл5.xls",
"name": "Файл5.xls",
"modified": "0017-05-03 03:06:00",
"userName": "Васнецов Игорь И.",
"userID": "0fb16c6a-54b8-45e1-b544-654eaf5df2e5",
"right": 7,
"mime ": "application/vnd.ms-excel",
"icon": "rest/api/storage/icons/get?aiType=ai_text&fileName=Файл5.xls"
},
{
"identifier": "b5c9fc9b-e1e2-4dc6-a7e8-176389a2de3b",
"is_folder": false,
"size": "2831872",
"path": "/company_root/Проект/Файл6.ppt",
"name": "Файл6.ppt",
"modified": "0017-05-03 03:28:00",
"userName": "Слепаков Иван И.",
"userID": "ee71a4c6-888a-4f04-86de-44ab394f5749",
"right": 7,
"mime ": "application/vnd.ms-powerpoint",
"icon": "rest/api/storage/icons/get?aiType=ai_text&fileName=Файл6.ppt"
},
{
"identifier": "2f2ec453-9bae-42c8-8308-f9105b531867",
"is_folder": false,
"size": "325885",
"path": "/company_root/Проект/Файл7.pdf",
"name": "Файл7.pdf",
"modified": "0017-05-03 03:32:00",
"userName": "Бобров Степан Е.",
"userID": "0db332d4-9dc6-4323-ab3d-f6b782e5d585",
"right": 7,
"mime ": "application/pdf",
"icon": "rest/api/storage/icons/get?aiType=ai_text&fileName=Файл7.pdf"
},
]