Problems accesing files content in a server-side plugin
Hi there,
I'm trying to get the content from a file (line per line) in a server-side plugin, but a get the next error: java.lang.ClassCastException: com.ibm.team.filesystem.common.internal.impl.FileItemImpl incompatible with com.ibm.team.filesystem.common.IFileItem I made this in a client-side code and this worked succesfull ** IFileItem file = (IFileItem) versionable.getFullState(); IFileContent content = file.getContent(); IFileContentManager contentManager = FileSystemCore.getContentManager(repo); ** This is my server-side code ----------------------- IScmService scmService = getService(IScmService.class); while (changeSetIterator.hasNext()) { IChangeSet changeSet = (IChangeSet) changeSetIterator.next(); for (IChange change : (List<IChange>) changeSet.changes()) { IVersionableHandle versionableHandle = change.afterState(); IVersionable item = (IVersionable) scmService.fetchState(versionableHandle, null, null); IFilteItem file = (IFileItem)item; } } -------------------------- sorry for my english thanks in advance |
9 answers
You should check if it's a file or folder as sample code below.
Hi there, |
In fact, it is a test file that i made: consulta.sql
I don't have an IConfiguration object in a server side plugin....right??? You should check if it's a file or folder as sample code below. Hi there, |
In my server plugin I do (I am only reading the first 255 bytes of the file)
Sam |
ok, but then how can I get ITeamRepository and attachment ???
in my code I'm not available to get ITeamRepository. Instead of ITeamRepository I get IRepositoryItemService: IRepositoryItemService itemService = getService(IRepositoryItemService.class); Here is the code (I copied it) =========================================== public class DeliverParticipant extends AbstractService implements IOperationParticipant { @SuppressWarnings({ "unchecked", "null" }) public void run(AdvisableOperation arg0, IProcessConfigurationElement arg1, IParticipantInfoCollector arg2, IProgressMonitor arg3) throws TeamRepositoryException { Object operationData = arg0.getOperationData(); if (!(operationData instanceof DeliverOperationData)) { return; } IScmService scmService = getService(IScmService.class); IRepositoryItemService itemService = getService(IRepositoryItemService.class); DeliverOperationData deliverData = (DeliverOperationData) operationData; // Foundation baselines (when stream is created) System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++"); IWorkspace destWorkspace = deliverData.getDestWorkspace(); System.out.println("Stream Name: " + destWorkspace.getName()); ComponentEntry[] entries = scmService.getComponentEntries(destWorkspace, null); for (int i = 0; i < entries.length; i++) { ComponentEntry componentEntry = entries; IComponent c = (IComponent)itemService.fetchItem(componentEntry.getComponent(), null); IBaselineHandle baseline = componentEntry.getBasis(); IBaseline b = (IBaseline) itemService.fetchItem(baseline, null); System.out.println(c.getName() + " => " + b.getId() + " : " + b.getName()); } // The owner and creator (team area and process for the stream) if(destWorkspace.isStream()) { IAuditable owner = (IAuditable) itemService.fetchItem(destWorkspace.getOwner(), null); if(owner instanceof IProcessArea) { System.out.println("Owner: " + ((IProcessArea)owner).getName()); } } List<IChangeSetHandle> changeSetHandles = deliverData.getChangeSetHandles(); IItemServiceIterator changeSetIterator = ItemServiceIteratorFactory.INSTANCE.createFetchItemsIterator(itemService, changeSetHandles.toArray(new IItemHandle), IRepositoryItemService.COMPLETE); while (changeSetIterator.hasNext()) { IChangeSet changeSet = (IChangeSet) changeSetIterator.next(); if (changeSet == null) { // don't have read access to the change set continue; } for (IChange change : (List<IChange>) changeSet.changes()) { if (((change.kind() & IChange.MODIFY) == IChange.MODIFY)) { } } } } private void extractChangeInformation(IScmService scm, IRepositoryItemService repo, DeliverOperationData data, IChangeSet cs, IChange change) throws TeamRepositoryException { String comment = cs.getComment(); String creator = ((IContributor)repo.fetchItem(cs.getAuthor(), null)).getEmailAddress(); String date = cs.getLastChangeDate().toString(); IServerSideVersionedContentService contentService = getService(IServerSideVersionedContentService.class); ServiceConfigurationProvider cfgs = ServiceConfigurationProvider.FACTORY.create(data.getDestWorkspace(), cs.getComponent()); IVersionableHandle afterStateHandle = change.afterState(); IVersionable afterState = scm.fetchState(afterStateHandle, null, null); IVersionableHandle beforeStateHandle = change.beforeState(); IVersionable beforeState = scm.fetchState(beforeStateHandle, null, null); IFileItem file = (IFileItem) afterState; IAncestorReport[] reports = scm.configurationDetermineAncestorsInHistory(cfgs, new IVersionableHandle[] {file}, null, null); System.out.println("======================================================="); System.out.println(getPath(reports)); System.out.println(comment); System.out.println(creator); System.out.println(date); //System.err.println(Location.itemLocation(cs, getRepositoryURL()).toAbsoluteUri()); printContents("Before file", (IFileItemHandle) beforeState, ((IFileItem)beforeState).getContent(), contentService); printContents("After file", (IFileItemHandle) afterState, ((IFileItem)afterState).getContent(), contentService); }else if (afterState instanceof IFolder){ System.out.println("es carpeta"); }else if (afterState instanceof FileItemImpl){ System.out.println("es un FileItemImpl"); }else{ System.out.println("no es nada"); } } private String getPath(IAncestorReport report) { StringBuilder sb = new StringBuilder(); Iterator i = report.getNameItemPairs().iterator(); if (i.hasNext()) { i.next(); // discard the pair representing the root folder, since // it carries no name while (i.hasNext()) { INameItemPair pair = (INameItemPair) i.next(); sb.append("/"); //$NON-NLS-1$ sb.append(pair.getName()); } } return sb.toString(); } private void printContents(String prefix, IFileItemHandle file, IFileContent content, com.ibm.team.scm.service.IServerSideVersionedContentService contentService) throws TeamRepositoryException { System.err.println(prefix + ":"); ByteArrayOutputStream outputStream = null; try { outputStream = new ByteArrayOutputStream(); contentService.fetchContentTrusted(file, content.getHash(), System.err); } finally { if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { // Try to close the stream. If it fails, do nothing. } } } } ================================================= in extractChangeInformation() method, the line: "if (afterState instanceof IFileItem) " is false because afterState is an instance of FileItemImpl thanks |
In my server plugin I do (I am only reading the first 255 bytes of the file) |
the AuditableCommon object in the SaveParameters has a retrieveContent method
void retrieveContent(IContent content, OutputStream outStream, IProgressMonitor monitor) throws TeamRepositoryException; and I can retrieve that thru the OperationAdvisor parameters IAuditableCommon iac = ((ISaveParameter) data).getSaveOperationParameter().getAuditableCommon(); Sam |
Hi,
I am writing a server-side operation advisor on work item save.
On saving the Work Item I am trying to retrieve the list of file changed for the work item. I am able to get the list file names from the changeset. But I need to get the full path of the files.
In the above code
"ServiceConfigurationProvider cfgs = ServiceConfigurationProvider.FACTORY.create(data.getDestWorkspace(), cs.getComponent()); " the data object is an instance of DeliverOperationData.
Since I have the Work Item save operation, the data is an instance of ISaveParameter.
The question here is how do I get the data.getDestWorkspace() from Work Item or IsaveParameter. Or is there any other approach to get the ServiceConfigurationProvider instance.
public void run(AdvisableOperation operation,
IProcessConfigurationElement advisorConfiguration,
IAdvisorInfoCollector collector, IProgressMonitor monitor)
throws TeamRepositoryException {
Object data = operation.getOperationData();
if (data instanceof ISaveParameter) {
.......
....
while (changeSetIterator.hasNext()) {
IChangeSet changeSet = (IChangeSet) changeSetIterator.next();
for (Object obj : changeSet.changes()) {
IChange change = (IChange) obj;
if (change.kind() != IChange.DELETE) {
IVersionableHandle after = change.afterState();
/*ServiceConfigurationProvider configProvider = ServiceConfigurationProvider.FACTORY.create(
data.getDestWorkspace(), changeSet.getComponent());*/
IVersionable item = (IVersionable) scmService.fetchState(
after, null, null);
/*IAncestorReport reports[] = scmService.configurationLocateAncestors(
configProvider, new IVersionableHandle[] {after}, null, null*/);
changedFilesAndFolders.add(item.getName());
}
}
}
Please help.
Thanks
|
We are using DeliverOperationData to access changeset But the code is breaking.
if (data instanceof ISaveParameter) { DeliverOperationData data = (DeliverOperationData) operation.getOperationData(); } can you please suggest on this. |
Since I have the Work Item save operation, the data is an instance of ISaveParameter.
The question here is how do I get the data.getDestWorkspace() from Work Item or IsaveParameter. Or is there any other approach to get the ServiceConfigurationProvider instance. Is there any update on this question?? |
Your answer
Dashboards and work items are no longer publicly available, so some links may be invalid. We now provide similar information through other means. Learn more here.