Работа с хранилищем репозиториев

Требования к операционной системе: iOS 5.0 и выше.

Мобильное устройство: iPad.

Описание

В данном примере описываются некоторые приемы работы с хранилищем репозиториев. После запуска примера выполняются следующие операции:

Исходный код

Для выполнения примера необходимо разместить в теле метода executeExample класса ViewController (см. раздел «Отображение экспресс-отчёта») следующий код:

// Создаем общий пул хранилищ
SPPLMetabaseRepositoryWarehousePool pool = PPLMetabaseRepositoryWarehousePool::sharedWarehousePool();
// Получаем хранилище репозиториев по умолчанию
SPPLMetabaseRepositoryWarehouse defaultWarehouse = pool->defaultWarehouse();
// Получаем описание хранилища репозиториев
SNString description = defaultWarehouse->description();
// Выводим в консоль среды разработки описание хранилища репозиториев
printf("Описание хранилища репозиториев:\n%s\n", description->UTF8String());
// Получаем путь до хранилища репозиториев
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"/repositories"];
SNString path = NString::stringWithNSString(filePath);
// Получаем хранилище репозиториев по заданному пути
SPPLMetabaseRepositoryWarehouse sharedWarehouse = pool->sharedWarehouse(path);
// Синхронизируем хранилище с данными во внешней памяти
sharedWarehouse->flush();
// Выводим в консоль среды разработки результат сравнения хранилищ репозиториев, полученных разными способами
printf("Первое хранилище репозитория равно второму хранилищу? ");
defaultWarehouse->isEqual(sharedWarehouse)? printf("да\n"): printf("нет\n");
// Получаем список репозиториев
SNArray repositories = defaultWarehouse->repositoriesList();
// Получаем описание репозитория из списка репозиториев
SPPLMetabaseRepositoryDescriptor repoDescriptor = repositories->objectAtIndex<PPLMetabaseRepositoryDescriptor>(0);
// Получаем веб-адрес репозитория
SNString host = repoDescriptor->host();
// Получаем наименование веб-приложения репозитория
SNString webAppName = repoDescriptor->webAppName();
// Получаем наименование мобильного приложения репозитория
SNString mobileAppName = repoDescriptor->mobileAppName();
// Получаем описание репозитория с помощью веб-адреса, наименования мобильного приложения и наименования веб-приложения репозитория
SPPLMetabaseRepositoryDescriptor repoDescriptor2 = defaultWarehouse->getRepository(host, webAppName, mobileAppName);
// Выводим в консоль среды разработки результат сравнения первого и второго репозиториев
printf("Первый и второй репозитории равны? ");
repoDescriptor->isEqual(repoDescriptor2)? printf("да\n"): printf("нет\n");
// Выводим в консоль среды разработки количество репозиториев в хранилище
printf("Количество репозиториев в хранилище: %d\n",repositories->count());
// Удаляем репозиторий из хранилища
defaultWarehouse->removeRepository(repoDescriptor);
// Выводим в консоль среды разработки сообщение об удалении репозитория из хранилища
printf("Удаление репозитория из хранилища\n");
// Выводим в консоль среды разработки количество репозиториев в хранилище
printf("Количество репозиториев в хранилище: %d\n",repositories->count());
// Создаем новое хранилище репозиториев
SPPLMetabaseRepositoryWarehouse createdWarehouse = PPLMetabaseRepositoryWarehouse::warehouse(path);
// Создаем новое описание репозитория
SPPLMetabaseRepositoryDescriptor repoDescriptor3 = new PPLMetabaseRepositoryDescriptor();
// Задаем веб-адрес нового репозитория
repoDescriptor3->setHost(NStr("http://somehost"));
// Задаем наименование веб-приложения нового репозитория
repoDescriptor3->setWebAppName(webAppName);
// Задаем наименование мобильного приложения нового репозитория
repoDescriptor3->setMobileAppName(mobileAppName);
// Добавляем репозиторий в новое хранилище
createdWarehouse->putRepository(repoDescriptor3);
// Выводим в консоль среды разработки сообщение о добавлении репозитория в новое хранилище
printf("Добавление репозитория в новое хранилище\n");
// Выводим в консоль среды разработки количество репозиториев в новом хранилище
printf("Количество репозиториев в новом хранилище: %d\n",createdWarehouse->repositoriesList()->count());

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

Описание хранилища репозиториев:

Warehouse descriptor:

Path: /Users/vda/Library/Application Support/iPhone Simulator/7.0.3/Applications/68D12A40-29AD-48E0-9301-6183072D1A90/Documents/repositories

Repositories:

<NMutableArray:

Repository:

Hash NULL

Key: 82529

Version: 1

Object Id: MOB5

Source URL: http://krauler/PPMobile_App_v7.2/FilesMobile.axd?appName=MOB5&type=filesList

Local objects:

<NMutableArray:

Object:

Key: 528

Object Id: CUBE_WORLD

Name: World Development Indicators

Type: 3

Modified date: NDate: Thu 22 Dec 2011 18:21:01                                          

Data source ref id: NULL

Hidden NO

Size: 405360

Version: 1678039

Dependencies: 80744024dd8697aaa699504a21131f0e

 

Object:

Key: 82530

Object Id: OLAP_MOB

Name: OLAP

Type: 1

Modified date: NDate: Wed 26 Feb 2014 16:09:18                                          

Data source ref id: CUBE_WORLD

Hidden NO

Size: 920734

Version: 1678039

Dependencies: 08b1390d973e7516f4e3718334849ac9

 

Object:

Key: 84237

Object Id: OBJ84237

Name: ExpressReports

Type: 7

Modified date: NDate: Tue 11 Mar 2014 11:19:07                                          

Data source ref id: NULL

Hidden NO

Size: 0

Version: 0

Dependencies: NULL

 

>

 

Remote objects

<NMutableArray:

 

>

 

>

 

Первое хранилище репозитория равно второму хранилищу? да

Первый и второй репозитории равны? да

Количество репозиториев в хранилище: 1

Удаление репозитория из хранилища

Количество репозиториев в хранилище: 0

Добавление репозитория в новое хранилище

Количество репозиториев в новом хранилище: 1

См. также:

Примеры использования библиотеки pplib++