StoryCLM Java SDK позволяет легко интегрировать систему StoryCLM c Вашим приложением на Java. Данная библиотека сделана на базе REST API сервиса StoryCLM и максимально упращает работу с API.
Ниже будет рассказано как устаносить библиотеку, настроить проект для работы с ней и показана работа SDK на конкретных примерах.
Библиотека StoryCLM Java SDK доступна в центральном maven репозитории.
При использовании системы maven в вашем проекте в pom файле укажите
<dependency>
<groupId>com.storyclm</groupId>
<artifactId>storyclmsdk</artifactId>
<version>1.0.1</version>
<scope>compile</scope>
</dependency>
Если используется система grandle (например, в проектах для Android), необходимо сначала указать локальный maven репозиторий в качестве источника. Для этого в файле build.gradle добавьте в свойство repositories:
repositories {
mavenCentral()
}
Затем в dependencies добавьте ссылку на проект:
dependencies {
compile 'com.storyclm:storyclmsdk:1.0.1'
}
Подключение пространств имен
В файл, в котором Вы хотите использовать SDK, необходимо добавить следующий код:
import ru.breffi.storyclmsdk.*;
import ru.breffi.storyclmsdk.Exceptions.*;
Активация API и получение ключей доступа
Для того что бы получить доступ к API своего клиента нужно его активировать на панели администрирования и получить ключ доступа.
Что бы узнать как активировать API, получить ключи доступа и узнать подробную информацию о аутентификации и авторизации в системе нужно ознакомиться с документацией по REST API.
С помощью фасадного класса StoryCLMConnectorsGenerator для клиента в StoryCLM создается коннектор.
public static StoryCLMServiceConnector GetStoryCLMServiceConnector(String сlientId, String сlientSecret, String username, String password, GsonBuilder gbuilder);
Описание:
По аутентификационным данным создает коннектор для доступа к данным определенного клиента StoryCLM. При каждом запросе к StoryCLM автоматически проверяется наличие и актуальность токена и при необходимости запрашивается новый токен, либо продлевается старый.
Параметры:
- clientId - идентификатор клиента.
- clientSecret - ключ доступа к API.
- username - логин пользователя, под учеткой которого подключается приложение
- password - пароль пользователя.
- gbuilder - В SDK для сериализации/десериализации объектов используется библиотека GSON.В данном параметре передаются специфические настройки GsonBuilder.
В случае отсутствия username и password указывается null. При этом будет использоваться аутентификация типа Service. Для аутентификации приложений типа Application необходмио указать username и password отличными от нуля.
Возвращаемое значение:
коннектор для доступа к данным
Пример
StoryCLMServiceConnector clientConnector = GetStoryCLMServiceConnector("your_сlientId", "your_сlientSecret","user_login","user_password", null);
В данном примере дополнительная настройка конвертации GsonBuilder не требуется.
Коннектор используется для получения сервисов доступа к контенту (презентации, слайды, медиафайлы) и доступа к таблицам.
Коннектор предоставляет сервисы работы с системой StoryCLM, которые описаны ниже. Помимо этого он позволяет получить токен доступа для авторизации на ресурсах, использующих StoryCLM SSO (Single Sign-On). Для этого используется метод getAccessTokenManager() , возвращающий объект класса AccessTokenManager. Данный менеджер используется для аутентификации в StoryCLM. Его метод getAuthority() возвращает данные для авторизации, в том числе токен доступа. Перед возвращением токен проверяется на время жизни и при необходимости обновляется.
Пример
StoryCLMServiceConnector clientConnector = StoryCLMConnectorsGenerator.GetStoryCLMServiceConnector("your_сlientId", "your_сlientSecret", "login", "password", null);
AccessTokenManager accessTokenManager = clientConnector.getAccessTokenManager();
String access_token = accessTokenManager.checkAndReturnAuthEntityAsync().GetResult().access_token;
Коннектор, полученный при аутентификации на предыдущем шаге позволяет получить сервис доступа к контенту. Используется следующий метод:
public StoryCLMContentService GetContentService()
Описание: Метод получения сервиса доступа к контенту.
Параметры отсутствуют
Возвращаемое значение Сервис доступа к контенту StoryCLM. Данный сервис предоставляет ряд методов для получения информации о клиентах, презентациях, слайдах, медиафайлах и .д.
Пример
StoryCLMContentService contentService = clientConnector.GetContentService();
Методы доступа к контенту
Все методы сервисов доступа возвращают объект удовлетворяющий интерфейсу IAsyncResult, который позволяет получать данные в асинхронном режиме. Примеры использования в интеграционных тестах.
public interface IAsyncResult<T> {
/**
* Возвращает данные в синхронном режиме. Результат непосредственно необходимое значение
* @return
* @throws AsyncResultException - ошибка при получении данных
* @throws AuthFaliException - ошибка аутентификации
*/
public T GetResult() throws AsyncResultException, AuthFaliException;
/**
* Метод асинхронного доступа к данным. Не блокирует вызывающий поток.
* Результаты запроса передаются объекту callback
* @param callback
* Объект обратного вызова.
* При успешном получении данных вызывается метод OnSuccess(T result), куда передается полученный результат
* При ошибке вызывается метод OnFail(Throwable t) с информацией об ошибке.
*/
public void OnResult(OnResultCallback<T> callback);
}
Описание
Возвращает информацию о клиентах, которым принадлежит пользователь. Описание типа Client
Описание Возвращает информацию о клиенте с идентификатором clientId
Описание Возвращает информацию о презентации с идентификатором presentationid. Описание типа StoryPresentation
Описание Добавляет пользователей к презентации. Возвращает список пользователей, которым доступна презентация.
Метод IAsyncResult<PresentationUser[]> RemovePresentationUsers(int presentationId, String[] usersIds)
Описание Удаляет пользователей из презентации. Возвращает список пользователей, которым доступна презентация.
Описание Устанавливает пользователей для презентации. В результате презентация станет доступна тем и только тем пользователям, которые указаны в аргументе usersIds. Возвращает список пользователей, которым доступна презентация.
Описание Возвращает информацию о медиафайле с идентификатором mediafileId. Описание типа StoryMediafile
Описание Возвращает информацию о слайде с идентификатором slideId. Описание типа StorySlide
Описание Возвращает информацию о пакете презентации с идентификатором presentationId. Описание типа StoryContentPackage
Коннектор (класс StoryCLMServiceConnector), полученный при аутентификации позволяет получить сервис доступа к пользовательским данным. Используется следующий метод:
public StoryCLMUserService GetUserService()
Описание: Метод получения сервиса доступа к пользовательским данным.
Параметры отсутствуют
Возвращаемое значение Сервис доступа к пользователям StoryCLM. Данный сервис предоставляет ряд методов для получения информации о пользователях, и управления ими.
Пример
StoryCLMUserService userService = clientConnector.GetUserService();
Методы доступа к данным пользователя
Описание Создает пользователя в StoryCLM по модели user
Параметры CreateUser user - данные пользователя
Возвращаемое значение
Объект класса CreateUser, содержащий данные о созданном пользователе, включая полученный идентификатор (поле id)
Описание Обновляет данные пользователя в StoryCLM по модели user
Параметры User user - новые данные пользователя
Возвращаемое значение
Объект класса User, содержащий обновленные данные
Описание Возвращает список краткой информации о всех пользователях клиента
Параметры отсутствуют
Возвращаемое значение
Массив SimpleUser[], содержащий краткую информацию о пользователях
Описание Проверяет наличие пользователя в системе StoryCLM
Параметры String username - имя пользователя
Возвращаемое значение
Объект класса User, если пользователь существует и null в противном случае
Описание Возвращает пользователя с идентификатором userId
Параметры String userId - идентификатор пользователя
Возвращаемое значение
Объект класса User, содержащий данные пользователя
Описание Обновляет пароль пользователя с идентификатором userId
Параметры String userId - идентификатор пользователя, Password password - новый пароль
Возвращаемое значение
Void
Описание Добавляет пользователя к группе
Параметры String userId - идентификатор пользователя, Integer groupId - идентификатор группы
Возвращаемое значение
Void
Описание Удаляет пользователя из группы
Параметры String userId - идентификатор пользователя, Integer groupId - идентификатор группы
Возвращаемое значение
Void
Описание Добавляет пользователя к презентации
Параметры String userId - идентификатор пользователя, Integer presentationId - идентификатор презентации
Возвращаемое значение
Void
Описание Удаляет пользователя из презентации
Параметры String userId - идентификатор пользователя, Integer presentationId - идентификатор презентации
Возвращаемое значение
Void
Описание возвращает презентации, в которые добавлен пользователь
Параметры String userId - идентификатор пользователя
Возвращаемое значение
Массив презентаций Presentation[]
Описание Добавляет пользователя к списку презентаций.
Параметры String userId - идентификатор пользователя. Integer[] presentationsIds - список идентификаторов презентаций.
Возвращаемое значение
Идентификаторы презентаций, доступных пользователю
Описание Удаляет пользователя из списка презентаций.
Параметры String userId - идентификатор пользователя. Integer[] presentationsIds - список идентификаторов презентаций.
Возвращаемое значение
Идентификаторы презентаций, доступных пользователю.
Описание Устанавливает список доступных для пользователя презентаций. В результате пользователю будут доступны те и только те презентации, идентификаторы которых указаны в аргументе presentationsIds.
Параметры String userId - идентификатор пользователя. Integer[] presentationsIds - список идентификаторов презентаций.
Возвращаемое значение
Идентификаторы презентаций, доступных пользователю.
Описание возвращает группы, в которые добавлен пользователь
Параметры String userId - идентификатор пользователя
Возвращаемое значение
Массив групп Group[]
Метод GetTableService коннектора (класс StoryCLMServiceConnector), служит фабрикой для получения сервисов строготипизированного доступа к конкретным таблицам клиента. Сигнатура метода:
public <T> StoryCLMTableService<T> GetTableService(Type entityType, int tableId)
Описание:
Метод-фабрика сервиса строготипизированного доступа к табличным данным StoryCLM.
Параметры:
- entityType - тип данных соответствующий табличным данным.
- tableId - идентификатор таблицы
Возвращаемое значение:
Сервис строготипизированного доступа к табличным данным StoryCLM.
Пример (используется clientConnector, полученный в предыдущем примере):
StoryCLMTableService<StoryLog> slogService = clientConnector.GetTableService(StoryLog.class, tableId);
Примечание
Каждый сервис соответствует одной таблице, представляя ее данные как объекты указанного типа. В качестве типа можно использовать набор ключ/значение (Map<String,Object>). Для этого используется класс TypeToken библиотеки GSON. Создание сервиса выглядит следующим образом:
StoryCLMTableService<Map<String,Object>> dynamicTable = clientConnector.GetTableService(new TypeToken<Map<String,Object>>{}.getType(), tableId);
Таблицы - это реляционное хранилище данных.
Более подробная информация содержится в разделе "Таблицы" документации.
Для получения списка таблиц используется метод GetTables класса StoryCLMServiceConnector:
Описание:
Получает cписок таблиц клиента.
Параметры:
- clientId - Идентификатор клиента в базе данных.
Возвращаемое значение:
Список таблиц в виде массива объектов ApiTable.
Пример
StoryCLMServiceConnector clientConnector = GetStoryCLMServiceConnector("your_сlientId", "your_сlientSecret", "username","password", null);
ApiTable[] tables = clientConnector.GetTables(int 18);
Методы сервиса StoryCLMTableService
Методы сервиса соответствуют REST API StoryCLM и возвращают объект асинхронного вызова, реализующий интерфейс IAsyncResult. С помощью данного объекта можно получить ответ синхронно (метод GetResult), либо подписаться на получение ответа (метод OnResult). Обращаем ваше внимание на то, что методы не являются обобщенными (generic). Тип Т получает значение при создании объекта обобщенного класса StoryCLMTableService<T>
Описание:
Добавляет новый объект в таблицу. Объект должен соответствовать схеме таблицы.
Параметры:
- T - параметризованный тип (generic), описывающий сущность в таблице.
- record - Новый объект.
Возвращаемое значение:
Новый объект в таблице.
Пример:
предположим у нас имеется сервис, полученный из рассмотренных выше примеров:
StoryCLMServiceConnector clientConnector = GetStoryCLMServiceConnector("your_сlientId", "your_сlientSecret", null);
StoryCLMTableService<StoryLog> slogService = clientConnector.GetService(StoryLog.class, tableId);
Класс StoryLog выглядит следующим образом:
public class StoryLog {
public int Updated;
public int Inserted;
public int Deleted;
public String Errors;
}
Чтобы использовать данный класс в панели администрирования необходимо создать таблицы с соотвествующими полями.
StoryLog profile = slogService.InsertAsync(new StoryLog()).GetResult();
Описание:
Добавляет коллекцию новых объектов в таблицу. Каждая объект должен соответствовать схеме таблицы.
Параметры:
- T - параметризованный тип (generic), описывающий сущность в таблице.
- records - коллекция новых объектов
Возвращаемое значение:
Коллекция новых объектов.
Пример:
StoryLog[] logs = new StoryLog[2];
logs[0] = new StoryLog();
logs[1] = new StoryLog();
List<StoryLog> profiles = slogService.InsertMany(logs).GetResult();
Описание:
Обновляет объект в таблице. Идентификатор записи остается неизменным.
Параметры:
- T - параметризованный тип (generic), описывающий сущность в таблице.
- record - обновляемый объект.
Возвращаемое значение:
Обновленный объект.
Пример:
StoryLog log = slogService.Update(logs[0]).GetREsult();
Описание:
Обновляет коллекцию объектов в таблице. Идентификатор записи остается неизменным.
Параметры:
- T - параметризованный тип (generic), описывающий сущность в таблице.
- records - коллекция обновляемых объектов.
Возвращаемое значение:
Коллекция обновленных объектов.
Пример:
List<StoryLog> log = slogService.UpdateMany(logs);
Описание:
Удаляет объект таблицы по идентификатору.
Параметры:
- id - Идентификатор записи.
Возвращаемое значение:
Удаленный объект.
Пример:
ApiLog[] deleteResult = slogService.Delete(log._id).GetResult();
Описание:
Удаляет коллекцию объектов таблицы по поллекции идентификаторов.
Параметры:
- ids - массив идентификаторов.
Возвращаемое значение:
Коллекция удаленных объектов.
Пример:
String[] logids = new String[]{"id1","id2"};
ApiLog[] deleteResult = slogService.Delete(logids).GetResult();
Описание:
Получает колличество записей в таблице.
Параметры: Отсутствуют
Возвращаемое значение:
Колличество записей.
Пример:
Integer count = slogService.Count().GetResult();
Описание:
Получает колличество записей в таблице по запросу. Запрос должен быть в формате TablesQuery.
Параметры:
- query - запрос в формате TablesQuery
Возвращаемое значение:
Колличество записей.
Пример:
Integer count = slogService.CountByQuery("[age][gt][30]").GetResult();
Описание:
Получает колличество записей лога таблицы.
Параметры: Отсутствуют
Возвращаемое значение:
Колличество записей.
Пример:
Integer count = slogService.CountByLog().GetResult();
Описание:
Получает колличество записей лога после указанной даты.
Параметры:
- tableId - Идентификатор таблицы в базе данных.
- date - Дата, после которой будет произведена выборка.
Возвращаемое значение:
Колличество записей.
Пример:
Integer count = slogService.CountByLog(new Date(0)).GetResult();
Описание:
Получает записи лога.
Параметры:
- skip - Отступ в запросе. Сколько первых элементов нужно пропустить. По умолчанию - 0.
- take - Максимальное количество записей, которые будут получены. По умолчанию - 100, максимально 1000.
Возвращаемое значение:
Коллекция записей лога.
Пример:
ApiLog[] logs= slogService.Log(0,1000).GetResult();
Описание:
Получает записи лога, после указаной даты.
Параметры:
- date - Дата, после которой будет произведена выборка.
- skip - Отступ в запросе. Сколько первых элементов нужно пропустить. По умолчанию - 0.
- take - Максимальное количество записей, которые будут получены. По умолчанию - 100, максимально 1000.
Возвращаемое значение:
Коллекция записей лога.
Пример:
SCLM sclm = SCLM.Instance;
ApiLog[] logs = slogService.Log(new Date(0),0,1000).GetResult();
Описание:
Получает запись таблицы по идентификатору.
Параметры:
- T - параметризованный тип (generic), описывающий сущность в таблице.
Возвращаемое значение:
Объект в таблице.
Пример:
StoryLog slog = slogService.Find(id).GetResult();
Описание:
Получает коллекцию записей по списку идентификаторов.
Параметры:
- T - параметризованный тип (generic), описывающий сущность в таблице.
- ids - коллекция идентификаторов.
Возвращаемое значение:
Коллекция объектов.
Пример:
List<StoryLog> slog = slogService.Find(id).GetResult();
Описание:
Получает постранично все данные таблицы.
Параметры:
- T - параметризованный тип (generic), описывающий сущность в таблице.
- skip - Отступ в запросе. Сколько первых элементов нужно пропустить. По умолчанию - 0.
- take - Максимальное количество записей, которые будут получены. По умолчанию - 100, максимально 1000.
Возвращаемое значение:
Коллекция объектов.
Пример:
List<StoryLog> slog = slogService.Find(0,1000).GetResult();
Описание:
Получает постранично данные по запросу. Формат запроса - TablesQuery.
TablesQuery - это язык запросов, разработанного специально для StoryCLM. Запрос в данном формате легко транслируется в любы другие языки запросов.
Параметры из которых создается запрос могут быть двух типов: Comparison и Logical.
Параметры:
- T - параметризованный тип (generic), описывающий сущность в таблице.
- query - Запрос в формате TablesQuery.
- sortfield - Поле, по которому нужно произвести сортировку.
- sort - Тип сортировки.
- skip - Отступ в запросе. Сколько первых элементов нужно пропустить. По умолчанию - 0.
- take - Максимальное количество записей, которые будут получены. По умолчанию - 100, максимально 1000.
Возвращаемое значение:
Коллекция объектов.
Пример:
StoryCLMServiceConnector clientConnector= StoryCLMConnectorsGenerator.GetStoryCLMServiceConnector("****", "****",null);
StoryCLMTableService<Profile> StoryCLMProfileService = clientConnector.GetService(Profile.class, 23);
//возраст меньше или равен 30
List<Profile> profiles = StoryCLMProfileService.Find( "[age][lte][30]", "age", 1, 0, 100).GetResult();
//поле "name" начинается с символа "T"
profiles = StoryCLMProfileService.Find("[name][sw][\"T\"]", "age", 1, 0, 100).GetResult();
//поле "name" содержит строку "ad"
profiles = StoryCLMProfileService.Find("[Name][cn][\"ad\"]", "age", 1, 0, 100).GetResult();
//поиск имен из списка
profiles = StoryCLMProfileService.Find("[Name][in][\"Stanislav\",\"Tamerlan\"]", "age", 1, 0, 100).GetResult();
//Выбрать женщин, имя ("name") которых начинается со строки "V"
profiles = StoryCLMProfileService.Find("[gender][eq][false][and][Name][sw][\"V\"]", "age", 1, 0, 100).GetResult();
//Выбрать мужчин младше 30 и женщин старше 30
profiles =StoryCLMProfileService.Find("[gender][eq][true][and][age][lt][30][or][gender][eq][false][and][age][gt][30]", "age", 1, 0, 100).GetResult();
//поле "name" начинается с символов "T" или "S" при этом возраст должен быть равен 22
profiles = StoryCLMProfileService.Find("([name][sw][\"S\"][or][name][sw][\"T\"])[and][age][eq][22]", "age", 1, 0, 100).GetResult();
//Выбрать всех с возрастом НЕ в интервале [25,30] и с именами на "S" и "Т"
profiles = StoryCLMProfileService.Find( "([age][lt][22][or][age][gt][30])[and]([name][sw][\"S\"][or][name][sw][\"T\"])", "age", 1, 0, 100).GetResult();
Для облегчения работы с асинхронным результатом запросов существует несколько классов:
Класс для последовательного выполнения нескольких асинхронных вызовов. Каждый следующий вызов имеет доступ к результатам предыдущего
Пример:
StoryCLMUserService userService = clientConnector.GetUserService();
FluentCallResult
.AtFirst(userService.Exists("username"))
.Then(user->userService.UpdatePassword(user.id, "newpassword"))
.OnFail(throwable-> Toast.makeText(getBaseContext(), "Ошибка сети. Повторите операцию. ", Toast.LENGTH_LONG).show())
.OnSuccess((v)->finish());
В примере выше сначала асинхронно вызывается поиск пользователя по имени, по полученным данным обновляется пароль.
Класс используется для возвращения простого значения в асинхронном виде. Используется в купе с другими асинхронными классами для сохранения единообразного асинхронного интерфейса
Пример:
StoryCLMUserService userService = clientConnector.GetUserService();
if (someObject.userId==null)
return FluentCallResult
.AtFirst(userService.Exists("username"))
.ThenResult(user->someObject.userId = user.id);
else return new ValueAsyncResult(someObject.userId);