Требования к операционной системе: 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
См. также: