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.3k11727) | 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.5k6195201) | 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.5k6195201) | 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.5k6195201) | 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.


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.