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

RM OSLC - created links don't seem to persist

hi all
I'm developing my first RM OSLC app which at some point will create a link between two requirements.
The code I started with is from the OSLC workshop RM example 03. This is in a GC context, I should add.
I just don't see the links in the GUI, or if I inquire programmatically, although they appear to be present right after creation.And no error is thrown. (This is RM 6.0.6.1)

Here's some code:
I seem to have missed something.

    private void updateRequirement(OslcClient oslcClient, String sourceURL, String targetURL) throws Exception {
        Thread.sleep(3000); //wait for indexing
       
        //Get the document we just created
        ClientResponse sourceResponse = oslcClient.getResource(sourceURL, OSLCConstants.CT_RDF);
       
        if (sourceResponse.getStatusCode() != 200) {
            sourceResponse.consumeContent();
            throw new HttpResponseException(sourceResponse.getStatusCode(),
                    sourceResponse.getMessage());
        }   
        Requirement sourceReq = sourceResponse.getEntity(Requirement.class);
        List<String> etagValues = sourceResponse.getHeaders().get("etag");
        Link links[] = sourceReq.getSatisfies();
        for (Link link : links) {
            log.println("S LINK: " + link);
        }
       
        //Get the document we just created
        ClientResponse targetResponse = oslcClient.getResource(targetURL, OSLCConstants.CT_RDF);
       
       
        if (targetResponse.getStatusCode() != 200) {
            targetResponse.consumeContent();
            throw new HttpResponseException(targetResponse.getStatusCode(),
                    targetResponse.getMessage());
        }   
        Requirement targetReq = targetResponse.getEntity(Requirement.class);
        List<String> tetagValues = targetResponse.getHeaders().get("etag");
       
   
        Link satisfies = new Link(targetReq.getAbout());
        sourceReq.setSatisfies(new Link[] { satisfies });
       
        sourceResponse = etagValues != null ?
                oslcClient.updateResource(sourceURL, sourceReq, OSLCConstants.CT_RDF,
                                          OSLCConstants.CT_RDF,
                                          etagValues.get(etagValues.size() - 1)) :               
                oslcClient.updateResource(sourceURL, sourceReq, OSLCConstants.CT_RDF,
                                          OSLCConstants.CT_RDF);
               
        sourceResponse.consumeContent();
        if (sourceResponse.getStatusCode() != 200) {
            sourceResponse.consumeContent();
            throw new HttpResponseException(sourceResponse.getStatusCode(),
                    sourceResponse.getMessage());
        }       
        targetResponse = tetagValues != null ?
                oslcClient.updateResource(targetURL, targetReq, OSLCConstants.CT_RDF,
                                          OSLCConstants.CT_RDF,
                                          tetagValues.get(tetagValues.size() - 1)) :               
                oslcClient.updateResource(targetURL, targetReq, OSLCConstants.CT_RDF,
                                          OSLCConstants.CT_RDF);
               
        targetResponse.consumeContent();
       
       
        if (targetResponse.getStatusCode() != 200) {
            targetResponse.consumeContent();
            throw new HttpResponseException(targetResponse.getStatusCode(),
                    targetResponse.getMessage());
        }
       
        Link alinks[] = sourceReq.getSatisfies();
        for (Link link : alinks) {
            log.println("LINK: " + link);
        }
        log.println("Linked");
        //If we get here then our PUT succeeded and the requirement should have our link now
    }

0 votes



3 answers

Permanent link
Code seems to work if I use a "Specifies" or "Elaborates" link to another requirement.

It would appear that the problem is that the "Satisfies" link type isn't supported by OSLC, at least through the lyo app. When I look at a Satisfies link that I established via the RM gui, I see:

<ds:Link type="Link">
<rrm:title>Satisfies</rrm:title>

<ds:linkType>
https://myserver/rm/types/_HJ2MLNobEemsbO6NwH1NuA
</ds:linkType>
<ds:isParentLink>false</ds:isParentLink>
<ds:isChildLink>false</ds:isChildLink>
<rrm:relation>
https://myserver/rm/resources/MB_ace34e61a36346599ddc93be08259e86
</rrm:relation>
<rrm:alternative>
https://myserver/rm/resources/MB_ace34e61a36346599ddc93be08259e86
</rrm:alternative>
<rrm:identifier>328</rrm:identifier>
<ds:content>
<rrm:title>Actor 1</rrm:title>
<rrm:identifier>328</rrm:identifier>
<rrm:description/>
<rrm:format>Text</rrm:format>
<ds:artifactFormat>Actor</ds:artifactFormat>
</ds:content>
</ds:Link>

compare to the Specifies relationship:

<ds:Specifies type="Specifies">
<rrm:title>Specifies</rrm:title>

<ds:linkType>
https://myserver/rm/types/_TuEXEdoaEemsbO6NwH1NuA
</ds:linkType>
<rrm:relation>
https://myserver/rm/resources/MB_d33e8df4600f41a9a59b8c3ae658f9f2
</rrm:relation>
<rrm:alternative>
https://myserver/rm/resources/MB_d33e8df4600f41a9a59b8c3ae658f9f2
</rrm:alternative>
<rrm:identifier>331</rrm:identifier>
<ds:content>
<rrm:title>Do wacka do</rrm:title>
<rrm:identifier>331</rrm:identifier>
<rrm:description/>
<rrm:format>Text</rrm:format>
<ds:artifactFormat>Use Case Requirement</ds:artifactFormat>
</ds:content>
</ds:Specifies>

So - bottom line, can someone confirm whether the Satisfies link  can be created using OSLC?

0 votes


Permanent link
OK, So, here's what you need to do - instead of creating a link, work through the extendedProperties:
replace
Link satisfies = new Link(targetReq.getAbout());
sourceReq.setSatisfies(new Link[] { satisfies });


with:
Map<QName,Object> pmap = sourceReq.getExtendedProperties();
 // this is the Satisfies link type
QName key = new QName("https://myserver/rm/types/", "_HJ2MLNobEemsbO6NwH1NuA", "rm_property");
pmap.put(key, targetReq);
sourceReq.setExtendedProperties(pmap);

(thanks Scott!)

0 votes


Permanent link

Steve, please be aware that Eclipse Lyo is probably a better infrastructure. The Examples you started with are so old, that they precede the newer frameworks that can make life easier. https://rsjazz.wordpress.com/2019/03/07/type-system-manager-part-2/ and the related articles show how to get started with the older 2.4 version. See https://github.com/OSLC/lyo-samples/tree/master/oslc4j-client-samples/src/main/java/org/eclipse/lyo/oslc4j/client/samples . Especially https://github.com/OSLC/lyo-samples/blob/master/oslc4j-client-samples/src/main/java/org/eclipse/lyo/oslc4j/client/samples/RMSample.java

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,937

Question asked: Mar 31 '20, 5:16 p.m.

Question was seen: 1,911 times

Last updated: Apr 03 '20, 7:03 a.m.

Confirmation Cancel Confirm