API для пользовательских стратегий

Пользовательские стратегии можно создавать с помощью нескольких API. Выбор API зависит от ресурсов, необходимых для работы, и планируемого способа применения этих ресурсов. Например, для обновления ресурса, обрабатываемого стратегией, и создания ресурса применяются разные API.

API для работы с текущим ресурсом

С помощью API клиента Java можно создавать стратегии.

Если обновляется только ресурс, обрабатываемый стратегией, то для создания сеанса и получения ресурса можно использовать методы контекста стратегии. Для создания RAMSession и извлечения текущего RAMAsset применяются следующие API:
RAMSession ramSession = getPolicyContext().getRAMSession();
RAMAsset ramAsset = getPolicyContext().getRAMAsset();

Текущий ресурс можно обновить с помощью нескольких классов API Java™ Rational Asset Manager. Например, можно добавить взаимосвязь или задать действие. Кроме того, с помощью классов API можно работать с ресурсами, атрибутами ресурсов и артефактами.

С помощью API Java можно изменять или создавать другие ресурсы помимо ресурса, обрабатываемого стратегией. Для повышения производительности API ram.client рекомендуется ограничить обновления ресурсов одним сеансом.

В коде пользовательской стратегии выполните следующие действия:
  1. Создайте сеанс с помощью метода getRAMSession. Такие сеансы не требуют выделения дополнительных лицензий.
  2. Получите ресурс с помощью метода getRAMAsset.
  3. Выполните операции над ресурсами с помощью API RAMSession и RAMAsset.
  4. Выполните фиксацию изменений в одной транзакции с помощью метода session.putAssets.
Пример:
RAMSession session = getPolicyContext().getRAMSession();  
RAMAsset currentAsset = this.getPolicyContext().getRAMAsset();  
  
// Внесение изменений в ресурс с помощью API клиента ...

// При необходимости можно создать или изменить другие ресурсы:
			RAMAsset asset = session.createAsset("1.0");
			asset.setName("Test Asset");
			asset.setCommunity(session.getCommunity("Sample Application Development"));
			asset.setAssetType(session.getAssetType("Business Solution"));
			asset.setShortDescription("Test asset");
			asset.setOwners(new RAMUser[] { session.getUser("admin") });
		 	
// Фиксация изменений в хранилище ресурсов для текущего ресурса:
			session.putAsset(currentAsset);  

// Методы queueAssetForPut и putAssets позволяют добавить в очередь и выполнить
// фиксацию всех ресурсов, измененных в сеансе, в одной транзакции:
			session.queueAssetForPut(currentAsset);  

// Фиксация изменений всех ресурсов, измененных в сеансе:
			session.putAssets(new NullProgressMonitor());  	

Для API клиента Java см. пакет клиента и пакет общих данных.

Дополнительные примеры приведены в подразделе Пример в этом разделе, а также в разделе Использование Java API Rational Asset Manager.

  • Получение ресурса:
    RAMAsset myAsset = getPolicyContext().getRAMAsset();
  • Примеры получения атрибутов ресурса:
    AssetAttribute myAttribute = myAsset.getAssetAttribute("Family Name");
    String[] myAttrValue = myAttribute.getValues();
    
    myAttribute = myAsset.getAssetAttribute("Work Item");
    myAttrValue = myAttribute.getValues();
    
    myAttribute = myAsset.getAssetAttribute("Requirement");
    myAttrValue = myAttribute.getValues();
  • Создание запроса на поиск ресурсов:
    SearchQuery query = session.createAssetQuery(queryParam);
    int offset = 0;
    int maxResults = 100;
    query.setResultsStartIndex(offset);
    query.setMaxResults(maxResults);
    SearchResult result = session.getAssets(query);
  • Создание ресурса:
    RAMAsset newAsset = session.createAsset("1.0");
    newAsset.setName("The new related asset");
    newAsset.setCommunity(session.getCommunity("Rational Asset Manager Development"));
    newAsset.setAssetType(session.getAssetType("Specification"));
    newAsset.setShortDescription("The Specification asset is required.");
  • Создание AssetID для нового ресурса:
    AssetID id = new AssetID();
    id.setGUID(newAsset.getId());
    id.setVersion(newAsset.getVersion());
  • Создание запроса, проверка набора результатов и изменение ресурсов:
    public Result test() {
    		try {
    			// Создание запроса 
    			String queryParam = null; 
       	RAMSession session = getPolicyContext().getRAMSession();
        SearchQuery query = session.createAssetQuery(queryParam);
    			int offset = 0;
    			int maxResults = 100;
    			query.setResultsStartIndex(offset);
    			query.setMaxResults(maxResults);
    			SearchResult result = session.getAssets(query); 
    			 
    			if (result != null && result.getAssetSearchResults() != null) {
    				AssetSearchResult[] assets = result.getAssetSearchResults();
    	
    				for (AssetSearchResult asset : assets) {
    					AssetInformation assetInformation = asset.getAsset();
    				// Изменение ресурса, например
    				// создание взаимосвязи "DependsOn" между ресурсами типов Release и Implementation
    				// и ресурсом типа Specification с тем же именем с помощью API клиента:
    				// Relationship theRelationships = session.getRelationships
    				// getRelationships().add(newItem);
    				}
    			}
    		}
     
    		// Обработка исключительных ситуаций...
    				Result result = new Result();
    		result.setMessage("Success");
    		return result;
    		 
    	}
  • Получение расположения папки с помощью API Java Rational Asset Manager, чтобы извлечь информацию об артефактах ресурса и загрузить артефакты:
     		// Получение ресурса
    		RAMAsset ramAsset = getRAMAsset(); 
                
    		 		// Получение расположение и содержимого артефактов
    		RAMFolderArtifact srcFolderArtifact = (RAMFolderArtifact)ramAsset.getArtifactsRoot();
    		Artifact[] srcArtifacts = srcFolderArtifact.computeArtifactsAsFlatList(new NullProgressMonitor());
    		 
    		for (Artifact artifact : srcArtifacts) {
            RAMArtifact ramArtifact = (RAMArtifact) artifact;
    					InputStream is = ramArtifact.downloadContents();
    					f = File.createTempFile("theArtifact", null, new File(ramSession.getLocalStorageLocation()));
    					UtilitiesCommon.copyStreams(is, new FileOutputStream(f), null, true, true);
             }

Комментарии