Получить поток из ProjectArea с помощью RTC API 4
Здравствуйте, я пытался получить имя потока с помощью projectArea. У меня есть следующий параметр: репозиторий IFileItem WorkItem и его ChangeSets
Возможно ли это получить?
Заранее спасибо.
Пожалуйста, не дайте мне ссылку на пример советника, так как я уже прочитал его, и я не смог сделать это.
В этом посте было упомянуто следующее: https://jazz.net/forum/questions/49910/how-to-get-an-iconfiguration-from-ichangeset
Существует подсказка, которая часто бывает полезной (но не всегда правильной), скрытой в ILink, которая служит связующим звеном между IChangeSetHandle (источник) и IWorkItemHandle (цель). IItemReference для исходной стороны имеет поле String extraInfo, которое можно получить с помощью IItemReference#getExtraInfo(). Эта строка будет иметь формат IWorkspace=, который указывает исходное рабочее пространство. Вы можете создать дескриптор пространства IWorkspace с помощью IWorkspace.ITEM_TYPE.createItemHandle(provideUUID, null).
public void testWorkspaceConnection(ITeamRepository repository, IWorkItem workItem) throws TeamRepositoryException, IOException{
List<ILink> changeSetLinks = (List<ILink>)linkCollection.getLinksById("com.ibm.team.filesystem.workitems.change_set");
List<IReference> changeSetReferences = new ArrayList<IReference>();
for (ILink link : changeSetLinks) {
changeSetReferences.add(link.getSourceRef());
}
List<IItemHandle> itemHandles = new ArrayList<IItemHandle>();
for (IReference reference : changeSetReferences) {
itemHandles.add((IItemHandle)reference.resolve());
}
if(itemHandles.isEmpty()){
return;
}
IItemHandle itemHandle = itemHandles.get(itemHandles.size() - 1);
IChangeSet changeSet = (IChangeSet)repository.itemManager().fetchCompleteItem(itemHandle, 0, monitor);
List changes = changeSet.changes();
IFileItem fileItem = getLogidiagFile(changeSet, repository);
// TILL HERE THAT WAS AN EXISTING CODE THAT WAS ALREADY THERE AND IT FETCHES THE REQUIRED FILE.
//NEXT IS WHAT |'VE ADDED TO BE ABLE TO DETERMINE THE FULL PATH
String uuid=changeSetReferences.get(changeSetReferences.size()-1).getExtraInfo(); //Here I need to get workspace uuid to be abble to create a connection over as the post said
IWorkspaceHandle workspaceHandle = (IWorkspaceHandle)IWorkspace.ITEM_TYPE.createItemHandle(UUID.valueOf(uuid), null);
IWorkspaceManager workspaceManager = SCMPlatform.getWorkspaceManager(repository);
IWorkspaceConnection workspaceConnection = workspaceManager.getWorkspaceConnection(workspaceHandle,monitor);
Исключение я получаю следующее:
Исключение в потоке "main" java.lang.IllegalArgumentException: недопустимый UUID [Workspace=_iibA0GlNEeKd76sMjPDLRA] в com.ibm.team.repository.common.UUID.valueOf(UUID.java:76)
Так что я иду по правильному курсу или есть лучший путь, через который вы можете мне помочь!
1 ответ
IWorkspaceManager workspaceManager = SCMPlatform.getWorkspaceManager(repository);
IWorkspaceSearchCriteria wsSearchCriteria = WorkspaceSearchCriteria.FACTORY.newInstance();
wsSearchCriteria.setKind(IWorkspaceSearchCriteria.STREAMS);
wsSearchCriteria.setPartialOwnerNameIgnoreCase(projectAreaName);
List <IWorkspaceHandle> workspaceHandles = workspaceManager.findWorkspaces(wsSearchCriteria, Integer.MAX_VALUE, Application.getMonitor());
IWorkspaceConnection workspaceConnection = workspaceManager.getWorkspaceConnection(workspaceHandles.get(0),Application.getMonitor());