It's all about the answers!

Ask a question

Get process configuration source via API


SUNIL KUURAM (6431923) | asked Apr 30 '13, 10:52 p.m.
Hello Everyone,

I was trying below to get the process configuration source -

 On the client:
1. Get the client library IProcessClientService.
ITeamRepository#getClientLibrary(IProcessClientService.class)
2. From this, get the client process for the project area in question.
IProcessClientService#getClientProcess(...)
3. Get the config data from the client process.
IClientProcess#getProjectConfigurationData(...)

Looks like the getProjectConfigurationData method requires a string ID. I tried "com.ibm.team.process". No luck. Any idea what it should be?

Thanks
Sunil

4 answers



permanent link
Lauren Hayward Schaefer (3.3k11527) | answered May 01 '13, 8:40 a.m.
JAZZ DEVELOPER
Hi Sunil,
This post might get you started: https://jazz.net/forum/questions/7229/modify-teamconfiguration-in-a-projectarea

Comments
SUNIL KUURAM commented May 01 '13, 11:35 a.m.

Many thanks for your responses.

How do I get string content from IContent? Please advise how the createStringFromContent method should be written.

String xmlSource = createStringFromContent(cnt);

Thanks
Sunil


sam detweiler commented May 01 '13, 11:44 a.m.

see the post below.. direct response area is too small


permanent link
sam detweiler (12.5k6194201) | answered May 01 '13, 10:37 a.m.
edited May 01 '13, 11:37 a.m.
the key string is
found by exported item

com.ibm.team.process.common.ProcessContentKeys.PROCESS_SPECIFICATION_KEY;
see
https://jazz.net/forum/questions/81132/why-is-iprojectareagetprocessdata-finding-multiple-process-xml-source-objects-for-a-project-area-v-40

permanent link
sam detweiler (12.5k6194201) | answered May 01 '13, 11:43 a.m.
get the icontent object, and then call save
<code>
                            IProjectArea parentProject = (IProjectArea) (repo
                                    .itemManager().fetchCompleteItem(iparenthandle,
                                    IItemManager.DEFAULT, sPm));
                            System.out.println("have parent project name = "
                                    + parentProject.getName());
                            // get the process data
                            @SuppressWarnings("unchecked")
                            Map<String, Object> pd = ip.getProcessData();
                            ////  here is the xml extract
                            // get the process config content object
                            IContent processSource = (IContent) pd.get(keyname);
                            if (processSource != null)
                            {
                                System.out.println("have xml source");
                                saveXMLSource(ip, processSource, icm, sPm);
                            }   
</code>
then save the source
<code>
    // save the process source for the project
    private static void saveXMLSource(IProjectArea ip, IContent ic,
            IContentManager icm, SysoutProgressMonitor sPm)
    {
        // make an output stream for the content manager
        OutputStream os = new ByteArrayOutputStream();
        // get the content of the content object.
        try
        {
            icm.retrieveContent(ic, os, sPm);

            // write xml content to file
            // project name + data name
            FileOutputStream fo = new FileOutputStream(ip.getName() + "."
                    + keyname);
            // write
            fo.write(os.toString().getBytes(), 0, os.toString().length());
            // close
            fo.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
</code>

Comments
SUNIL KUURAM commented May 01 '13, 11:52 a.m.

Many thanks for this.

How do I populate IContentManager icm, SysoutProgressMonitor sPm ?

Appreciate your help.


permanent link
sam detweiler (12.5k6194201) | answered May 01 '13, 12:18 p.m.
edited May 01 '13, 12:18 p.m.
the Monitor part of the apis is a class object, I made my own to be able to control the output
<code>
import org.eclipse.core.runtime.*;

public class SysoutProgressMonitor implements IProgressMonitor {
}
</code>
then added all the required methods.

the Content Manager is accessible thru the repository object after logon
<code>
            // login &
            // get the repository object where we are connecting
            if ((repo=login(url, userid, password, sPm)) != null )
            {
                // get the content Manager
                IContentManager icm = repo.contentManager();
</code>

Your answer


Register or to post your answer.