Jazz Forum Welcome to the Jazz Community Forum Connect and collaborate with IBM Engineering experts and users

change the status of workitem using oslc

Hi Team

I am using RTC 4.0.1.
My requirement is to update the status of any workitem in RTC using either poster addon for firefox or from RTC java perspective.
I would appreciate if anyone could give me a step by step procedure (rather than pointing me to another post) or if they can modify the below sample code that I obtained from developerWorks to update the title of the workitem:

package com.ibm.olsc.tests;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CookieStore;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.cookie.Cookie;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;

public class Connect {

    /**
     * @param args
     * @throws IOException
     * @throws ClientProtocolException
     * @throws KeyManagementException
     * @throws NoSuchAlgorithmException
     */

    // Listing 1. Override the methods of the interface X509TrustManager

    public static void main(String[] args) throws ClientProtocolException, IOException,
            KeyManagementException, NoSuchAlgorithmException {
        TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }

            public void checkclientTrusted(X509Certificate[] certs, String authType) {
                // Leave blank to trust every client
            }

            public void checkServerTrusted(X509Certificate[] certs, String authType) {
                // Leave blank to trust every server
            }

            public void checkClientTrusted(X509Certificate[] arg0, String arg1)
                    throws CertificateException {
                // TODO Auto-generated method stub

            }
        } };

        SSLContext mySSLContext = SSLContext.getInstance("SSL");

        mySSLContext.init(null, trustAllCerts, new java.security.SecureRandom());

        HttpsURLConnection.setDefaultSSLSocketFactory(mySSLContext.getSocketFactory());

        // Authenticate credentials
        DefaultHttpClient httpclient = new DefaultHttpClient();
        CookieStore cookieStore = new BasicCookieStore();
        HttpContext localContext = new BasicHttpContext();

        localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

        HttpGet httpGetID = new HttpGet(
                "https://localhost:7443/ccm/authenticated/identity");

        httpclient.execute(httpGetID, localContext);
        httpGetID.abort();

        List<Cookie> cookies1 = cookieStore.getCookies();
        for (Cookie cookie : cookies1) {
            System.out.println("\t" + cookie.getName() + " : " + cookie.getValue());
        }
        //
        List<NameValuePair> authFormParams = new ArrayList<NameValuePair>();
        authFormParams.add(new BasicNameValuePair("j_username", "TestJazzAdmin1"));
        authFormParams.add(new BasicNameValuePair("j_password", "TestJazzAdmin1"));

        // Listing 2. Build an UrlEncodedFormEntity

        UrlEncodedFormEntity encodedentity = new UrlEncodedFormEntity(authFormParams,
                "UTF-8");
        HttpPost httpPostAuth = new HttpPost(
                "https://localhost:7443/ccm/authenticated/j_security_check");
        httpPostAuth.setEntity(encodedentity);

        httpclient.execute(httpPostAuth, localContext);

        List<Cookie> cookies2 = cookieStore.getCookies();
        for (Cookie cookie : cookies2) {
            System.out.println("\t" + cookie.getName() + " : " + cookie.getValue());
        }

        // Listing 3. Retrieve information about a work item

        // READ BY ID
        httpclient = new DefaultHttpClient();
        // // IMPORTANT STUFF
        httpclient.setCookieStore(cookieStore);
        HttpGet httpget = new HttpGet(
                "https://localhost:7443/ccm/resource/itemName/com.ibm.team.workitem.WorkItem/42");
        httpget.addHeader("Accept", "application/json");
        httpget.addHeader("OSLC-Core-Version", "2.0");
        HttpResponse response = httpclient.execute(httpget);
        Header[] ooo = response.getAllHeaders();
        for (Header header : ooo) {
            System.out.println(header.getName() + " - " + header.getValue());
        }

        HttpEntity entity = response.getEntity();
        if (entity != null) {
            entity.consumeContent();
        }

        // Create a response handler
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        String responseBody = httpclient.execute(httpget, responseHandler);

        System.out.println(responseBody);

        // When HttpClient instance is no longer needed,
        // shut down the connection manager to ensure
        // immediate deallocation of all system resources
        // httpclient.getConnectionManager().shutdown();
        //

        httpclient = new DefaultHttpClient();
        httpclient.setCookieStore(cookieStore);
        HttpPut httpput = new HttpPut(
                "https://localhost:7443/ccm/oslc/workitems/42.json");
        httpput.setHeader("Content-Type", "application/x-oslc-cm-change-request+json");

        HttpEntity myEntity = new StringEntity(
                "{\"dc:title\":{\"rdf:resource\":\"Title has changed\"}}");
        httpput.setEntity(myEntity);
        HttpResponse responsePut = httpclient.execute(httpput);
        HttpEntity entityPut = responsePut.getEntity();

        BufferedReader reader;
        try {
            reader = new BufferedReader(new InputStreamReader(entityPut.getContent()));
            String line = reader.readLine();
            while (line != null) {
                System.out.println(line);
                line = reader.readLine();
            }
            reader.close();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        httpclient = new DefaultHttpClient();
        httpclient.setCookieStore(cookieStore);
        httpput = new HttpPut(
                "https://localhost:7443/ccm/oslc/workitems/42.json?_action=com.ibm.team.workitem.workflow.condicao.action.a4");
        httpput.setHeader("Content-Type", "application/x-oslc-cm-change-request+json");

        myEntity = new StringEntity(
                "{\"rtc_cm:state\":{\"rdf:resource\":\"https://localhost:7443/ccm/oslc/workflows/_gl8nMDbaEeGq__0Ju8tMow/states/condicao.state.s2\"}}");
        httpput.setEntity(myEntity);
        responsePut = httpclient.execute(httpput);
        entityPut = responsePut.getEntity();

        try {
            reader = new BufferedReader(new InputStreamReader(entityPut.getContent()));
            String line = reader.readLine();
            while (line != null) {
                System.out.println(line);
                line = reader.readLine();
            }
            reader.close();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Best Regards
Rajat

0 votes



2 answers

Permanent link
Hi Rajat,

use discovery mechanism to reach to specific work item url and
perform a
  PUT on specific work item URL
with request having the following details
   a.  headers
        -  OSLC-Core-Version : 2.0
        -  Content-Type : application/rdf+xml (or JSON as per your business need)
        -  If-Match set to ETag value from the response header from a GET on the work item url
    b.   body containing
        -  all the mandatory fields along with
        -  rtc_cm:state

where
   rtc_cm:state
is set to appropriate
   state value
picked from the work item type's resource shape...

if you need more explanation to get through this, I would recommend going through this  :
     http://www.youtube.com/watch?v=eXVWtiuygr0
which has an excellent walk through for starters...

hope it helps...

1 vote


Permanent link
Hi Dinesh, Rajat

 Can I give the state of a workitem as "Inprogress" while creating a workitem in oslc?
I mean, I am trying to create a workitem via oslc 2.0 and trying to give the state as "In progress" in oslc body, but after creating, the state is new.

Thanks!
Sud

0 votes

Your answer

Register or log in 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.

Search context
Follow this question

By Email: 

Once you sign in you will be able to subscribe for any updates here.

By RSS:

Answers
Answers and Comments
Question details
× 10,935
× 7,494
× 382

Question asked: Mar 06 '14, 7:32 a.m.

Question was seen: 7,555 times

Last updated: Jun 03 '15, 1:11 a.m.

Confirmation Cancel Confirm