From 66dec0a2f9574f9526844c1f6e4158423278ce2d Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 22 Nov 2025 12:39:01 +0000 Subject: [PATCH 1/7] Migrate lyo-client-samples to use oslc-domains Updated lyo-client-samples to use domain classes from oslc-domains artifact instead of the legacy oslc-java-client-resources. Updated pom.xml to depend on oslc-domains. Modified samples to handle API changes: - Package changes for QM, CM, RM, Automation domains. - Set types handling (Set instead of arrays). - Added missing constants in IConstants.java. - Handled ParameterInstance type change in AutomationRequest (changed from array to Set). - Replaced getRdfTypes() with getTypes().iterator().next(). --- lyo-client-samples/pom.xml | 5 +- .../lyo/samples/client/jazz/ERMSample.java | 43 +++++++----- .../lyo/samples/client/jazz/ETMSample.java | 8 ++- .../lyo/samples/client/jazz/EWMSample.java | 38 ++++++++--- .../jazz/automation/ETMAutomationSample.java | 36 ++++++---- .../automation/impl/AutomationAdapter.java | 68 +++++++++++++------ .../AutomationRequestCanceledException.java | 2 +- .../impl/IAutomationRequestHandler.java | 4 +- .../jazz/automation/impl/IConstants.java | 9 +++ .../lyo/samples/client/oslc4j/CMSample.java | 4 +- .../lyo/samples/client/oslc4j/RMSample.java | 4 +- 11 files changed, 150 insertions(+), 71 deletions(-) diff --git a/lyo-client-samples/pom.xml b/lyo-client-samples/pom.xml index 68475ea..ce28a6c 100644 --- a/lyo-client-samples/pom.xml +++ b/lyo-client-samples/pom.xml @@ -242,9 +242,8 @@ httpclient - - org.eclipse.lyo.clients - oslc-java-client-resources + org.eclipse.lyo + oslc-domains ${v.lyo} diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/ERMSample.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/ERMSample.java index 8de4b2d..f9de5f2 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/ERMSample.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/ERMSample.java @@ -49,13 +49,12 @@ import org.eclipse.lyo.client.RootServicesHelper; import org.eclipse.lyo.client.exception.ResourceNotFoundException; import org.eclipse.lyo.client.exception.RootServicesException; -import org.eclipse.lyo.client.oslc.resources.Requirement; -import org.eclipse.lyo.client.oslc.resources.RequirementCollection; -import org.eclipse.lyo.client.oslc.resources.RmConstants; import org.eclipse.lyo.client.query.OslcQuery; import org.eclipse.lyo.client.query.OslcQueryParameters; import org.eclipse.lyo.client.query.OslcQueryResult; import org.eclipse.lyo.client.resources.RmUtil; +import org.eclipse.lyo.oslc.domains.rm.Requirement; +import org.eclipse.lyo.oslc.domains.rm.RequirementCollection; import org.eclipse.lyo.oslc4j.core.OSLC4JUtils; import org.eclipse.lyo.oslc4j.core.model.*; import org.glassfish.jersey.apache.connector.ApacheClientProperties; @@ -75,10 +74,21 @@ @Slf4j public class ERMSample { + // Constants not present in standard oslc-domains or need replacement + // RmConstants were in oslc-java-client-resources. + // JAZZ_RM_NAMESPACE = "http://jazz.net/xmlns/prod/jazz/rm/1.0/" + // PROPERTY_PRIMARY_TEXT = new QName(JAZZ_RM_NAMESPACE, "primaryText") + // PROPERTY_PARENT_FOLDER = new QName(JAZZ_RM_NAMESPACE, "parent") + // NAMESPACE_URI_XHTML = "http://www.w3.org/1999/xhtml" + + public static final String JAZZ_RM_NAMESPACE = "http://jazz.net/xmlns/prod/jazz/rm/1.0/"; + public static final QName PROPERTY_PRIMARY_TEXT = new QName(JAZZ_RM_NAMESPACE, "primaryText"); + public static final QName PROPERTY_PARENT_FOLDER = new QName(JAZZ_RM_NAMESPACE, "parent"); + public static final String NAMESPACE_URI_XHTML = "http://www.w3.org/1999/xhtml"; + // Following is a workaround for primaryText issue in DNG ( it is PrimaryText instead of // primaryText - private static final QName PROPERTY_PRIMARY_TEXT_WORKAROUND = - new QName(RmConstants.JAZZ_RM_NAMESPACE, "PrimaryText"); + private static final QName PROPERTY_PRIMARY_TEXT_WORKAROUND = new QName(JAZZ_RM_NAMESPACE, "PrimaryText"); /** * Login to the ERM server and perform some OSLC actions @@ -239,13 +249,13 @@ public static void main(String[] args) throws Exception { } else { // Create REQ01 requirement = new Requirement(); - requirement.setInstanceShape(featureInstanceShape.getAbout()); + requirement.setInstanceShape(Collections.singleton(new Link(featureInstanceShape.getAbout()))); requirement.setTitle("Req01"); // Decorate the PrimaryText primaryText = "My Primary Text"; org.w3c.dom.Element obj = convertStringToHTML(primaryText); - requirement.getExtendedProperties().put(RmConstants.PROPERTY_PRIMARY_TEXT, obj); + requirement.getExtendedProperties().put(PROPERTY_PRIMARY_TEXT, obj); requirement.setDescription("Created By EclipseLyo"); requirement.addImplementedBy(new Link(new URI("http://google.com"), "Link in REQ01")); @@ -263,7 +273,7 @@ public static void main(String[] args) throws Exception { // Create REQ02 requirement = new Requirement(); - requirement.setInstanceShape(featureInstanceShape.getAbout()); + requirement.setInstanceShape(Collections.singleton(new Link(featureInstanceShape.getAbout()))); requirement.setTitle("Req02"); requirement.setDescription("Created By EclipseLyo"); requirement.addValidatedBy(new Link(new URI("http://bancomer.com"), "Link in REQ02")); @@ -281,7 +291,7 @@ public static void main(String[] args) throws Exception { // Create REQ03 requirement = new Requirement(); - requirement.setInstanceShape(featureInstanceShape.getAbout()); + requirement.setInstanceShape(Collections.singleton(new Link(featureInstanceShape.getAbout()))); requirement.setTitle("Req03"); requirement.setDescription("Created By EclipseLyo"); requirement.addValidatedBy(new Link(new URI("http://outlook.com"), "Link in REQ03")); @@ -299,7 +309,7 @@ public static void main(String[] args) throws Exception { // Create REQ04 requirement = new Requirement(); - requirement.setInstanceShape(featureInstanceShape.getAbout()); + requirement.setInstanceShape(Collections.singleton(new Link(featureInstanceShape.getAbout()))); requirement.setTitle("Req04"); requirement.setDescription("Created By EclipseLyo"); @@ -319,11 +329,12 @@ public static void main(String[] args) throws Exception { // Create REQ04 collection = new RequirementCollection(); - collection.addUses(new URI(req03URL)); - collection.addUses(new URI(req04URL)); + collection.addUses(new Link(new URI(req03URL))); + collection.addUses(new Link(new URI(req04URL))); if (collectionInstanceShape != null) { - collection.setInstanceShape(collectionInstanceShape.getAbout()); + collection.setInstanceShape( + Collections.singleton(new Link(collectionInstanceShape.getAbout()))); } collection.setTitle("Collection01"); collection.setDescription("Created By EclipseLyo"); @@ -370,9 +381,9 @@ public static void main(String[] args) throws Exception { } // Save the URI of the root folder in order to used it easily - rootFolder = (URI) requirement.getExtendedProperties().get(RmConstants.PROPERTY_PARENT_FOLDER); + rootFolder = (URI) requirement.getExtendedProperties().get(PROPERTY_PARENT_FOLDER); Object changedPrimaryText = - (Object) requirement.getExtendedProperties().get(RmConstants.PROPERTY_PRIMARY_TEXT); + (Object) requirement.getExtendedProperties().get(PROPERTY_PRIMARY_TEXT); if (changedPrimaryText == null) { // Check with the workaround changedPrimaryText = @@ -521,7 +532,7 @@ private static Element convertStringToHTML(String primaryText) { try { Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); - Element divElement = document.createElementNS(RmConstants.NAMESPACE_URI_XHTML, "div"); + Element divElement = document.createElementNS(NAMESPACE_URI_XHTML, "div"); divElement.setTextContent(primaryText); return divElement; } catch (ParserConfigurationException e) { diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/ETMSample.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/ETMSample.java index f58068a..d2cef0c 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/ETMSample.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/ETMSample.java @@ -39,11 +39,11 @@ import org.eclipse.lyo.client.OslcClient; import org.eclipse.lyo.client.RootServicesHelper; import org.eclipse.lyo.client.exception.RootServicesException; -import org.eclipse.lyo.client.oslc.resources.TestCase; -import org.eclipse.lyo.client.oslc.resources.TestResult; import org.eclipse.lyo.client.query.OslcQuery; import org.eclipse.lyo.client.query.OslcQueryParameters; import org.eclipse.lyo.client.query.OslcQueryResult; +import org.eclipse.lyo.oslc.domains.qm.TestCase; +import org.eclipse.lyo.oslc.domains.qm.TestResult; import org.eclipse.lyo.oslc4j.core.model.Link; import org.eclipse.lyo.oslc4j.core.model.OslcMediaType; import org.glassfish.jersey.apache.connector.ApacheClientProperties; @@ -167,7 +167,9 @@ public static void main(String[] args) throws ParseException { new URI("http://cmprovider/changerequest/1"), "Implement accessibility in Pet Store application")); String testcaseCreation = client.lookupCreationFactory( - serviceProviderUrl, OSLCConstants.OSLC_QM_V2, testcase.getRdfTypes()[0].toString()); + serviceProviderUrl, + OSLCConstants.OSLC_QM_V2, + testcase.getTypes().iterator().next().toString()); Response creationResponse = client.createResource( testcaseCreation, testcase, OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_RDF_XML); String testcaseLocation = creationResponse.getStringHeaders().getFirst(HttpHeaders.LOCATION); diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java index db19d43..f33213b 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java @@ -47,13 +47,14 @@ import org.eclipse.lyo.client.OslcClient; import org.eclipse.lyo.client.RootServicesHelper; import org.eclipse.lyo.client.exception.RootServicesException; -import org.eclipse.lyo.client.oslc.resources.ChangeRequest; import org.eclipse.lyo.client.query.OslcQuery; import org.eclipse.lyo.client.query.OslcQueryParameters; import org.eclipse.lyo.client.query.OslcQueryResult; +import org.eclipse.lyo.oslc.domains.cm.ChangeRequest; import org.eclipse.lyo.oslc4j.core.model.AllowedValues; import org.eclipse.lyo.oslc4j.core.model.CreationFactory; import org.eclipse.lyo.oslc4j.core.model.Link; +import org.eclipse.lyo.oslc4j.core.model.OslcConstants; import org.eclipse.lyo.oslc4j.core.model.OslcMediaType; import org.eclipse.lyo.oslc4j.core.model.Property; import org.eclipse.lyo.oslc4j.core.model.ResourceShape; @@ -213,15 +214,31 @@ public static void main(String[] args) throws ParseException { task.setTitle("Implement accessibility in Pet Store application"); task.setDescription("Image elements must provide a description in the 'alt' attribute for" + " consumption by screen readers."); - task.addTestedByTestCase(new Link( - new URI("http://qmprovider/testcase/1"), "Accessibility verification using a screen reader")); - task.addDctermsType("task"); + // testedByTestCase is not part of standard OSLC CM 2.0 ChangeRequest, so we use extended properties. + // Note: In oslc-java-client-resources it was available, but in oslc-domains it is strict to spec. + // Jazz uses http://jazz.net/xmlns/prod/jazz/rtc/cm/1.0/testedByTestCase ? + // Actually, the original code used addTestedByTestCase(Link). + // We'll use the QName for it. + // However, the property name in Jazz might be "http://open-services.net/ns/cm#testedByTestCase" or similar + // if it was generated. + // The method name `addTestedByTestCase` suggests `testedByTestCase`. + // Let's assume it is in the oslc_cm namespace or rtc_cm namespace. + // Based on previous resources, it was often `oslc_cm:testedByTestCase`. + task.getExtendedProperties() + .put( + new QName(OSLCConstants.OSLC_CM_V2, "testedByTestCase"), + new Link( + new URI("http://qmprovider/testcase/1"), + "Accessibility verification using a screen reader")); + + // dcterms:type + task.getExtendedProperties().put(new QName(OslcConstants.DCTERMS_NAMESPACE, "type"), "task"); // Get the Creation Factory URL for task change requests so that we can create one CreationFactory taskCreation = client.lookupCreationFactoryResource( serviceProviderUrl, OSLCConstants.OSLC_CM_V2, - task.getRdfTypes()[0].toString(), + task.getTypes().iterator().next().toString(), OSLCConstants.OSLC_CM_V2 + "task"); String factoryUrl = taskCreation.getCreation().toString(); @@ -276,14 +293,19 @@ public static void main(String[] args) throws ParseException { defect.setTitle("Error logging in"); defect.setDescription( "An error occurred when I tried to log in with a user ID that contained the '@'" + " symbol."); - defect.addTestedByTestCase(new Link(new URI("http://qmprovider/testcase/3"), "Global Verifcation Test")); - defect.addDctermsType("defect"); + + defect.getExtendedProperties() + .put( + new QName(OSLCConstants.OSLC_CM_V2, "testedByTestCase"), + new Link(new URI("http://qmprovider/testcase/3"), "Global Verifcation Test")); + + defect.getExtendedProperties().put(new QName(OslcConstants.DCTERMS_NAMESPACE, "type"), "defect"); // Get the Creation Factory URL for change requests so that we can create one CreationFactory defectCreation = client.lookupCreationFactoryResource( serviceProviderUrl, OSLCConstants.OSLC_CM_V2, - defect.getRdfTypes()[0].toString(), + defect.getTypes().iterator().next().toString(), OSLCConstants.OSLC_CM_V2 + "defect"); factoryUrl = defectCreation.getCreation().toString(); diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/ETMAutomationSample.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/ETMAutomationSample.java index 71f0a0e..97bd430 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/ETMAutomationSample.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/ETMAutomationSample.java @@ -24,6 +24,7 @@ import java.net.URL; import java.util.Date; import java.util.Properties; +import java.util.Set; import javax.xml.namespace.QName; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -33,10 +34,9 @@ import org.apache.http.ssl.SSLContextBuilder; import org.eclipse.lyo.client.JEEFormAuthenticator; import org.eclipse.lyo.client.OslcClient; -import org.eclipse.lyo.client.oslc.resources.AutomationConstants; -import org.eclipse.lyo.client.oslc.resources.AutomationRequest; -import org.eclipse.lyo.client.oslc.resources.AutomationResult; -import org.eclipse.lyo.client.oslc.resources.ParameterInstance; +import org.eclipse.lyo.oslc.domains.auto.AutomationRequest; +import org.eclipse.lyo.oslc.domains.auto.AutomationResult; +import org.eclipse.lyo.oslc4j.core.model.Link; import org.eclipse.lyo.samples.client.jazz.automation.impl.AutomationAdapter; import org.eclipse.lyo.samples.client.jazz.automation.impl.AutomationException; import org.eclipse.lyo.samples.client.jazz.automation.impl.AutomationRequestCanceledException; @@ -191,7 +191,7 @@ public AutomationResult handleAutomationRequest(AutomationRequest request, Autom adapter.sendProgressForRequest(50, request); // execute the script with the parameters from the Automation Request - executeScript(script, request.getInputParameters(), adapter, request); + executeScript(script, request.getInputParameter(), adapter, request); // Upload an attachment for the result File attachment = getSampleFile(); @@ -202,11 +202,11 @@ public AutomationResult handleAutomationRequest(AutomationRequest request, Autom // Add some rich text to the result Element xhtmlTableElement = createXhtmlTable(); - QName contributionQname = new QName(AutomationConstants.AUTOMATION_DOMAIN, "contribution"); + QName contributionQname = new QName(AUTOMATION_DOMAIN, "contribution"); result.getExtendedProperties().put(contributionQname, xhtmlTableElement); // Set the verdict for the result - result.addVerdict(new URI(AutomationConstants.VERDICT_PASSED)); + result.addVerdict(new Link(new URI(VERDICT_PASSED))); // Save the end time in the result result.getExtendedProperties().put(PROPERTY_RQM_END_TIME, new Date(System.currentTimeMillis())); @@ -214,7 +214,10 @@ public AutomationResult handleAutomationRequest(AutomationRequest request, Autom // update progress indication adapter.sendProgressForRequest(99, request); - log.info("Returning a result with verdict {}", result.getVerdicts()[0]); + Link[] verdicts = result.getVerdict().toArray(new Link[0]); + if (verdicts.length > 0) { + log.info("Returning a result with verdict {}", verdicts[0]); + } } catch (AutomationRequestCanceledException e) { @@ -248,7 +251,7 @@ public AutomationResult handleAutomationRequest(AutomationRequest request, Autom * @throws IOException */ private void executeScript( - Document script, ParameterInstance[] inputParameters, AutomationAdapter adapter, AutomationRequest request) + Document script, Set inputParameters, AutomationAdapter adapter, AutomationRequest request) throws InterruptedException, AutomationException, IOException, URISyntaxException { String scriptTitle = script.getDocumentElement() @@ -259,9 +262,18 @@ private void executeScript( log.info("Running script named '{}'", scriptTitle); log.info("Input parameters:"); - for (ParameterInstance parameter : inputParameters) { - String paramStr = "\t" + parameter.getName() + ": " + parameter.getValue(); - log.info(paramStr); + if (inputParameters != null) { + for (Link parameterLink : inputParameters) { + // Note: The new oslc-domains AutomationRequest maps inputParameter to Set. + // If the parameter is an inline resource (as is common in Automation), the Link might + // not contain the detailed properties (name, value) unless we fetch it or parse the model manually. + // For now, we log the link. + String paramStr = "\tParameter Link: " + parameterLink.getValue(); + if (parameterLink.getLabel() != null) { + paramStr += " (" + parameterLink.getLabel() + ")"; + } + log.info(paramStr); + } } /* diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java index 4fd3302..40b25d3 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java @@ -45,11 +45,10 @@ import org.eclipse.lyo.client.RootServicesHelper; import org.eclipse.lyo.client.exception.ResourceNotFoundException; import org.eclipse.lyo.client.exception.RootServicesException; -import org.eclipse.lyo.client.oslc.resources.AutomationConstants; -import org.eclipse.lyo.client.oslc.resources.AutomationPlan; -import org.eclipse.lyo.client.oslc.resources.AutomationRequest; -import org.eclipse.lyo.client.oslc.resources.AutomationResult; -import org.eclipse.lyo.client.oslc.resources.TestScript; +import org.eclipse.lyo.oslc.domains.auto.AutomationPlan; +import org.eclipse.lyo.oslc.domains.auto.AutomationRequest; +import org.eclipse.lyo.oslc.domains.auto.AutomationResult; +import org.eclipse.lyo.oslc.domains.qm.TestScript; import org.eclipse.lyo.oslc4j.core.annotation.OslcDescription; import org.eclipse.lyo.oslc4j.core.annotation.OslcName; import org.eclipse.lyo.oslc4j.core.annotation.OslcNamespace; @@ -491,10 +490,8 @@ private void saveResult(AutomationResult result, AutomationRequest request) e.printStackTrace(); } - resultCreationFactoryUrl = client.lookupCreationFactory( - serviceProviderUrl, - AutomationConstants.AUTOMATION_DOMAIN, - AutomationConstants.TYPE_AUTOMATION_RESULT); + resultCreationFactoryUrl = + client.lookupCreationFactory(serviceProviderUrl, AUTOMATION_DOMAIN, TYPE_AUTOMATION_RESULT); } response = client.createResource(resultCreationFactoryUrl, result, OslcMediaType.APPLICATION_RDF_XML); @@ -526,7 +523,8 @@ private void completeRequest(AutomationRequest request) assertNotCanceled(request); - request.setStates(new URI[] {URI.create(AutomationConstants.STATE_COMPLETE)}); + // oslc-domains AutomationRequest.setState uses Set + request.setState(new java.util.HashSet<>(Arrays.asList(new Link(URI.create(STATE_COMPLETE))))); request.getExtendedProperties().remove(PROPERTY_RQM_PROGRESS); @@ -582,8 +580,7 @@ private String getNextAssignmentUrl() throws AutomationException, IOException, U model.read(is, assignedWorkUrl.toString()); } - StmtIterator stmtIter = - model.listStatements(null, RDF.type, model.createResource(AutomationConstants.TYPE_AUTOMATION_REQUEST)); + StmtIterator stmtIter = model.listStatements(null, RDF.type, model.createResource(TYPE_AUTOMATION_REQUEST)); if (stmtIter.hasNext()) { return stmtIter.next().getSubject().getURI(); @@ -614,7 +611,7 @@ private AutomationRequest takeAssignment(String requestUrl) request.getExtendedProperties().put(PROPERTY_RQM_TAKEN, Boolean.TRUE); - request.setStates(new URI[] {URI.create(AutomationConstants.STATE_IN_PROGRESS)}); + request.setState(new java.util.HashSet<>(Arrays.asList(new Link(URI.create(STATE_IN_PROGRESS))))); updateUri = appendOslcProperties(URI.create(requestUrl), "oslc_auto:state", "rqm_auto:taken"); @@ -674,8 +671,8 @@ public void register() throws AutomationException, IOException, URISyntaxExcepti e.printStackTrace(); } - adapterCreationFactoryUrl = client.lookupCreationFactory( - serviceProviderUrl, AutomationConstants.AUTOMATION_DOMAIN, TYPE_AUTOMATION_ADAPTER); + adapterCreationFactoryUrl = + client.lookupCreationFactory(serviceProviderUrl, AUTOMATION_DOMAIN, TYPE_AUTOMATION_ADAPTER); response = client.createResource(adapterCreationFactoryUrl, this, OslcMediaType.APPLICATION_RDF_XML); @@ -841,7 +838,29 @@ public Document getScriptDocument(AutomationRequest request) TestScript script = client.getResource(scriptURI.toString(), OslcMediaType.APPLICATION_RDF_XML) .readEntity(TestScript.class); - URI scriptUri = (URI) script.getExtendedProperties().get(PROPERTY_DC_RELATION); + // oslc-domains TestScript uses Link for dcterms:relation, likely extended property in old code? + // Actually in oslc-domains ILinkType has Set relation. + // But TestScript implements ITestScript. + // AbstractResource has extendedProperties. + // The old code used PROPERTY_DC_RELATION from extended properties if not in class. + // In oslc-domains, TestScript might not have relation getter. + // AbstractResource does not have relation. + + // PROPERTY_DC_RELATION is "http://purl.org/dc/terms/relation". + // Let's use extended properties as before. + + Object relationObj = script.getExtendedProperties().get(PROPERTY_DC_RELATION); + URI scriptUri = null; + if (relationObj instanceof URI) { + scriptUri = (URI) relationObj; + } else if (relationObj instanceof Link) { + scriptUri = ((Link) relationObj).getValue(); + } + + if (scriptUri == null) { + // Try to find if it's mapped to a field? No easy way. + throw new AutomationException("TestScript relation property not found."); + } is = client.getResource(scriptUri.toString(), OslcMediaType.APPLICATION_XML) .readEntity(InputStream.class); @@ -899,7 +918,8 @@ private void populateResultFromRequest(AutomationRequest request, AutomationResu Link automationPlan = request.getExecutesAutomationPlan(); - result.setInputParameters(request.getInputParameters()); + // oslc-domains AutomationResult uses Set for inputParameter + result.setInputParameter(request.getInputParameter()); Map requestExtProperties = request.getExtendedProperties(); @@ -1194,10 +1214,10 @@ public void cancel(AutomationRequest request) throws AutomationException { throw new AutomationException("The adapter has not logged into the server."); } - request.setDesiredState(URI.create(AutomationConstants.STATE_CANCELED)); + request.setDesiredState(new Link(URI.create(STATE_CANCELED))); // Some automation providers require the client to set the state to canceled - request.setStates(new URI[] {URI.create(AutomationConstants.STATE_CANCELED)}); + request.setState(new java.util.HashSet<>(Arrays.asList(new Link(URI.create(STATE_CANCELED))))); URI updateUri = appendOslcProperties(request.getAbout(), "oslc_auto:state"); @@ -1241,10 +1261,14 @@ private void assertNotCanceled(AutomationRequest request) .readEntity(AutomationRequest.class); } - // oslc_auto:state is defined as one-or-many in the specification - URI stateUri = requestAtServiceProvider.getStates()[0]; + // oslc_auto:state is defined as zero-or-many in oslc-domains (Set) + Set states = requestAtServiceProvider.getState(); + URI stateUri = null; + if (states != null && !states.isEmpty()) { + stateUri = states.iterator().next().getValue(); + } - if (URI.create(AutomationConstants.STATE_CANCELED).equals(stateUri)) { + if (URI.create(STATE_CANCELED).equals(stateUri)) { throw new AutomationRequestCanceledException(request); } diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationRequestCanceledException.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationRequestCanceledException.java index 92872f6..a5dd015 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationRequestCanceledException.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationRequestCanceledException.java @@ -16,7 +16,7 @@ package org.eclipse.lyo.samples.client.jazz.automation.impl; import java.io.Serial; -import org.eclipse.lyo.client.oslc.resources.AutomationRequest; +import org.eclipse.lyo.oslc.domains.auto.AutomationRequest; /** An exception thrown when an AutomationRequest has been canceled */ public class AutomationRequestCanceledException extends AutomationException { diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/IAutomationRequestHandler.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/IAutomationRequestHandler.java index b1654d7..98cdbd8 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/IAutomationRequestHandler.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/IAutomationRequestHandler.java @@ -15,8 +15,8 @@ */ package org.eclipse.lyo.samples.client.jazz.automation.impl; -import org.eclipse.lyo.client.oslc.resources.AutomationRequest; -import org.eclipse.lyo.client.oslc.resources.AutomationResult; +import org.eclipse.lyo.oslc.domains.auto.AutomationRequest; +import org.eclipse.lyo.oslc.domains.auto.AutomationResult; public interface IAutomationRequestHandler { diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/IConstants.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/IConstants.java index 12f1a83..1195f4e 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/IConstants.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/IConstants.java @@ -28,6 +28,15 @@ public interface IConstants { String TYPE_STATUS_RESPONSE = NAMESPACE_URI_JAZZ_AUTO_RQM + "StatusResponse"; String TYPE_MESSAGE = NAMESPACE_URI_JAZZ_AUTO_RQM + "Message"; + // OSLC Automation Constants + String AUTOMATION_DOMAIN = "http://open-services.net/ns/auto#"; + String TYPE_AUTOMATION_REQUEST = AUTOMATION_DOMAIN + "AutomationRequest"; + String TYPE_AUTOMATION_RESULT = AUTOMATION_DOMAIN + "AutomationResult"; + String STATE_COMPLETE = AUTOMATION_DOMAIN + "Complete"; + String STATE_IN_PROGRESS = AUTOMATION_DOMAIN + "InProgress"; + String STATE_CANCELED = AUTOMATION_DOMAIN + "Canceled"; + String VERDICT_PASSED = AUTOMATION_DOMAIN + "Passed"; + QName PROPERTY_DC_RELATION = new QName(OSLCConstants.DC, "relation"); QName PROPERTY_QM_REPORTS_ON_TEST_CASE = new QName(OSLCConstants.OSLC_QM_V2, "reportsOnTestCase"); diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/oslc4j/CMSample.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/oslc4j/CMSample.java index b40d90b..971222f 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/oslc4j/CMSample.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/oslc4j/CMSample.java @@ -33,10 +33,10 @@ import org.apache.http.ssl.SSLContextBuilder; import org.eclipse.lyo.client.OSLCConstants; import org.eclipse.lyo.client.OslcClient; -import org.eclipse.lyo.client.oslc.resources.ChangeRequest; import org.eclipse.lyo.client.query.OslcQuery; import org.eclipse.lyo.client.query.OslcQueryParameters; import org.eclipse.lyo.client.query.OslcQueryResult; +import org.eclipse.lyo.oslc.domains.cm.ChangeRequest; import org.glassfish.jersey.apache.connector.ApacheConnectorProvider; import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; @@ -157,7 +157,7 @@ public static void main(String[] args) throws ParseException { // SCENARIO C: ChangeRequest creation and update ChangeRequest newChangeRequest = new ChangeRequest(); newChangeRequest.setTitle("Update database schema"); - newChangeRequest.setTitle("Need to update the database schema to reflect the data model changes"); + newChangeRequest.setDescription("Need to update the database schema to reflect the data model changes"); rawResponse = client.createResource(creationFactory, newChangeRequest, OSLCConstants.CT_RDF); int statusCode = rawResponse.getStatus(); diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/oslc4j/RMSample.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/oslc4j/RMSample.java index 9ce41b3..5cffae6 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/oslc4j/RMSample.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/oslc4j/RMSample.java @@ -29,10 +29,10 @@ import org.apache.http.HttpStatus; import org.eclipse.lyo.client.OSLCConstants; import org.eclipse.lyo.client.OslcClient; -import org.eclipse.lyo.client.oslc.resources.Requirement; import org.eclipse.lyo.client.query.OslcQuery; import org.eclipse.lyo.client.query.OslcQueryParameters; import org.eclipse.lyo.client.query.OslcQueryResult; +import org.eclipse.lyo.oslc.domains.rm.Requirement; /** * Samples of accessing a generic Requirements Management provider and running OSLC operations. @@ -115,7 +115,7 @@ public static void main(String[] args) throws ParseException { // SCENARIO C: Requirement creation and update Requirement newRequirement = new Requirement(); newRequirement.setTitle("Database schema needs new attributes"); - newRequirement.setTitle("The data model needs to support new attributes"); + newRequirement.setDescription("The data model needs to support new attributes"); rawResponse = client.createResource(creationFactory, newRequirement, OSLCConstants.CT_RDF); int statusCode = rawResponse.getStatus(); From 078782d3d3df48c58dd23502793b785aebfe0c0a Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 22 Nov 2025 12:52:47 +0000 Subject: [PATCH 2/7] Migrate lyo-client-samples to use oslc-domains Updated lyo-client-samples to use domain classes from oslc-domains artifact instead of the legacy oslc-java-client-resources. Updated pom.xml to depend on oslc-domains. Modified samples to handle API changes: - Package changes for QM, CM, RM, Automation domains. - Set types handling (Set instead of arrays). - Added missing constants in IConstants.java. - Handled ParameterInstance type change in AutomationRequest (changed from array to Set). - Replaced getRdfTypes() with setting rdf:type via setTypes() and retrieving it via getTypes(). - Verified with mvn verify. --- .../java/org/eclipse/lyo/samples/client/jazz/ETMSample.java | 2 ++ .../java/org/eclipse/lyo/samples/client/jazz/EWMSample.java | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/ETMSample.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/ETMSample.java index d2cef0c..96573c4 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/ETMSample.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/ETMSample.java @@ -25,6 +25,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.net.URI; +import java.util.Collections; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.GnuParser; @@ -165,6 +166,7 @@ public static void main(String[] args) throws ParseException { + " content fully complies with accessibility standards"); testcase.addTestsChangeRequest(new Link( new URI("http://cmprovider/changerequest/1"), "Implement accessibility in Pet Store application")); + testcase.setTypes(Collections.singleton(URI.create(OSLCConstants.OSLC_QM_V2 + "TestCase"))); String testcaseCreation = client.lookupCreationFactory( serviceProviderUrl, diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java index f33213b..2296160 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java @@ -234,6 +234,9 @@ public static void main(String[] args) throws ParseException { // dcterms:type task.getExtendedProperties().put(new QName(OslcConstants.DCTERMS_NAMESPACE, "type"), "task"); + // Set rdf:type for Creation Factory lookup + task.setTypes(java.util.Collections.singleton(URI.create(OSLCConstants.OSLC_CM_V2 + "ChangeRequest"))); + // Get the Creation Factory URL for task change requests so that we can create one CreationFactory taskCreation = client.lookupCreationFactoryResource( serviceProviderUrl, @@ -301,6 +304,9 @@ public static void main(String[] args) throws ParseException { defect.getExtendedProperties().put(new QName(OslcConstants.DCTERMS_NAMESPACE, "type"), "defect"); + // Set rdf:type for Creation Factory lookup + defect.setTypes(java.util.Collections.singleton(URI.create(OSLCConstants.OSLC_CM_V2 + "ChangeRequest"))); + // Get the Creation Factory URL for change requests so that we can create one CreationFactory defectCreation = client.lookupCreationFactoryResource( serviceProviderUrl, From 85ae15dc2d447d035a11c9f48ac6419ff0e9bca2 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 22 Nov 2025 17:04:06 +0000 Subject: [PATCH 3/7] Migrate lyo-client-samples to use oslc-domains Updated lyo-client-samples to use domain classes from oslc-domains artifact instead of the legacy oslc-java-client-resources. Updated pom.xml to depend on oslc-domains. Refactored samples to: - Use oslc-domains classes (AutomationRequest, AutomationResult, etc.) - Use oslc-domains constants where available (Oslc_autoDomainConstants, Oslc_qmDomainConstants). - Handle API changes (e.g. Set for relationships). - Explicitly set rdf:type using setTypes() for CreationFactory lookups. - Ensure tests pass. --- .../jazz/automation/ETMAutomationSample.java | 3 +- .../jazz/automation/impl/IConstants.java | 33 ++++++++++++------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/ETMAutomationSample.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/ETMAutomationSample.java index 97bd430..84ce87b 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/ETMAutomationSample.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/ETMAutomationSample.java @@ -41,6 +41,7 @@ import org.eclipse.lyo.samples.client.jazz.automation.impl.AutomationException; import org.eclipse.lyo.samples.client.jazz.automation.impl.AutomationRequestCanceledException; import org.eclipse.lyo.samples.client.jazz.automation.impl.IAutomationRequestHandler; +import org.eclipse.lyo.oslc.domains.auto.Oslc_autoDomainConstants; import org.eclipse.lyo.samples.client.jazz.automation.impl.IConstants; import org.eclipse.lyo.samples.client.jazz.automation.impl.Message; import org.eclipse.lyo.samples.client.jazz.automation.impl.StatusResponse; @@ -202,7 +203,7 @@ public AutomationResult handleAutomationRequest(AutomationRequest request, Autom // Add some rich text to the result Element xhtmlTableElement = createXhtmlTable(); - QName contributionQname = new QName(AUTOMATION_DOMAIN, "contribution"); + QName contributionQname = new QName(Oslc_autoDomainConstants.AUTOMATION_NAMSPACE, "contribution"); result.getExtendedProperties().put(contributionQname, xhtmlTableElement); // Set the verdict for the result diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/IConstants.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/IConstants.java index 1195f4e..a3301c1 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/IConstants.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/IConstants.java @@ -17,6 +17,8 @@ import javax.xml.namespace.QName; import org.eclipse.lyo.client.OSLCConstants; +import org.eclipse.lyo.oslc.domains.auto.Oslc_autoDomainConstants; +import org.eclipse.lyo.oslc.domains.qm.Oslc_qmDomainConstants; public interface IConstants { @@ -29,21 +31,28 @@ public interface IConstants { String TYPE_MESSAGE = NAMESPACE_URI_JAZZ_AUTO_RQM + "Message"; // OSLC Automation Constants - String AUTOMATION_DOMAIN = "http://open-services.net/ns/auto#"; - String TYPE_AUTOMATION_REQUEST = AUTOMATION_DOMAIN + "AutomationRequest"; - String TYPE_AUTOMATION_RESULT = AUTOMATION_DOMAIN + "AutomationResult"; - String STATE_COMPLETE = AUTOMATION_DOMAIN + "Complete"; - String STATE_IN_PROGRESS = AUTOMATION_DOMAIN + "InProgress"; - String STATE_CANCELED = AUTOMATION_DOMAIN + "Canceled"; - String VERDICT_PASSED = AUTOMATION_DOMAIN + "Passed"; + String AUTOMATION_DOMAIN = Oslc_autoDomainConstants.AUTOMATION_DOMAIN; + String TYPE_AUTOMATION_REQUEST = Oslc_autoDomainConstants.AUTOMATIONREQUEST_TYPE; + String TYPE_AUTOMATION_RESULT = Oslc_autoDomainConstants.AUTOMATIONRESULT_TYPE; + // Constants for States and Verdicts are not in Oslc_autoDomainConstants, but defined in spec. + // We keep them here or use hardcoded strings if not available in domains library. + // The constants AUTOMATION_NAMSPACE is available. + String STATE_COMPLETE = Oslc_autoDomainConstants.AUTOMATION_NAMSPACE + "Complete"; + String STATE_IN_PROGRESS = Oslc_autoDomainConstants.AUTOMATION_NAMSPACE + "InProgress"; + String STATE_CANCELED = Oslc_autoDomainConstants.AUTOMATION_NAMSPACE + "Canceled"; + String VERDICT_PASSED = Oslc_autoDomainConstants.AUTOMATION_NAMSPACE + "Passed"; QName PROPERTY_DC_RELATION = new QName(OSLCConstants.DC, "relation"); - QName PROPERTY_QM_REPORTS_ON_TEST_CASE = new QName(OSLCConstants.OSLC_QM_V2, "reportsOnTestCase"); - QName PROPERTY_QM_RUNS_TEST_CASE = new QName(OSLCConstants.OSLC_QM_V2, "runsTestCase"); - QName PROPERTY_QM_EXECUTES_TEST_SCRIPT = new QName(OSLCConstants.OSLC_QM_V2, "executesTestScript"); - QName PROPERTY_QM_REPORTS_ON_TEST_PLAN = new QName(OSLCConstants.OSLC_QM_V2, "reportsOnTestPlan"); - QName PROPERTY_QM_PRODUCES_TEST_RESULT = new QName(OSLCConstants.OSLC_QM_V2, "producesTestResult"); + // OSLC QM constants from Oslc_qmDomainConstants where possible + // Oslc_qmDomainConstants.QUALITY_MANAGEMENT_NAMSPACE is http://open-services.net/ns/qm# + // OSLCConstants.OSLC_QM_V2 is http://open-services.net/ns/qm# + + QName PROPERTY_QM_REPORTS_ON_TEST_CASE = new QName(Oslc_qmDomainConstants.QUALITY_MANAGEMENT_NAMSPACE, "reportsOnTestCase"); + QName PROPERTY_QM_RUNS_TEST_CASE = new QName(Oslc_qmDomainConstants.QUALITY_MANAGEMENT_NAMSPACE, "runsTestCase"); + QName PROPERTY_QM_EXECUTES_TEST_SCRIPT = new QName(Oslc_qmDomainConstants.QUALITY_MANAGEMENT_NAMSPACE, "executesTestScript"); + QName PROPERTY_QM_REPORTS_ON_TEST_PLAN = new QName(Oslc_qmDomainConstants.QUALITY_MANAGEMENT_NAMSPACE, "reportsOnTestPlan"); + QName PROPERTY_QM_PRODUCES_TEST_RESULT = new QName(Oslc_qmDomainConstants.QUALITY_MANAGEMENT_NAMSPACE, "producesTestResult"); QName PROPERTY_RQM_TAKEN = new QName(IConstants.NAMESPACE_URI_JAZZ_AUTO_RQM, "taken"); QName PROPERTY_RQM_PROGRESS = new QName(IConstants.NAMESPACE_URI_JAZZ_AUTO_RQM, "progress"); From 7da4b0946f2279e48afbd4f5c6f13fd049c9b1f3 Mon Sep 17 00:00:00 2001 From: Andrew Berezovskyi Date: Fri, 30 Jan 2026 23:03:46 +0100 Subject: [PATCH 4/7] fix: ns Signed-off-by: Andrew Berezovskyi --- .../org/eclipse/lyo/samples/client/jazz/EWMSample.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java index 3d65d5a..709cfe6 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java @@ -248,7 +248,9 @@ public static Report run( task.getExtendedProperties() .put( PROPERTY_TESTED_BY_TEST_CASE, - new Link(new URI("http://qmprovider/testcase/1"), "Accessibility verification using a screen reader")); + new Link( + new URI("http://qmprovider/testcase/1"), + "Accessibility verification using a screen reader")); task.getExtendedProperties().put(PROPERTY_DCTERMS_TYPE, "task"); task.setTypes(Collections.singleton(URI.create(OSLCConstants.CM_CHANGE_REQUEST_TYPE))); @@ -333,7 +335,9 @@ public static Report run( "An error occurred when I tried to log in with a user ID that contained the '@'" + " symbol."); defect.getExtendedProperties() - .put(PROPERTY_TESTED_BY_TEST_CASE, new Link(new URI("http://qmprovider/testcase/3"), "Global Verifcation Test")); + .put( + PROPERTY_TESTED_BY_TEST_CASE, + new Link(new URI("http://qmprovider/testcase/3"), "Global Verifcation Test")); defect.getExtendedProperties().put(PROPERTY_DCTERMS_TYPE, "defect"); defect.setTypes(Collections.singleton(URI.create(OSLCConstants.CM_CHANGE_REQUEST_TYPE))); From d864f5008d8f21d556113e27c18cb6c927b2ab3d Mon Sep 17 00:00:00 2001 From: Andrew Berezovskyi Date: Fri, 30 Jan 2026 23:19:01 +0100 Subject: [PATCH 5/7] chore: format Signed-off-by: Andrew Berezovskyi --- .../client/jazz/automation/impl/AutomationAdapter.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java index e4d4598..6e495df 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java @@ -834,10 +834,10 @@ public Document getScriptDocument(AutomationRequest request) Object relationObj = script.getExtendedProperties().get(PROPERTY_DC_RELATION); URI scriptUri = null; - if (relationObj instanceof URI) { - scriptUri = (URI) relationObj; - } else if (relationObj instanceof Link) { - scriptUri = ((Link) relationObj).getValue(); + if (relationObj instanceof URI rI) { + scriptUri = rI; + } else if (relationObj instanceof Link link) { + scriptUri = link.getValue(); } if (scriptUri == null) { From 30df4a0cc85454e6d4eef041445a7bedc1ff8c0d Mon Sep 17 00:00:00 2001 From: Andrew Berezovskyi Date: Fri, 30 Jan 2026 23:29:13 +0100 Subject: [PATCH 6/7] Update lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../jazz/automation/impl/AutomationAdapter.java | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java index 6e495df..c497df1 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java @@ -821,17 +821,7 @@ public Document getScriptDocument(AutomationRequest request) TestScript script = client.getResource(scriptURI.toString(), OslcMediaType.APPLICATION_RDF_XML) .readEntity(TestScript.class); - // oslc-domains TestScript uses Link for dcterms:relation, likely extended property in old code? - // Actually in oslc-domains ILinkType has Set relation. - // But TestScript implements ITestScript. - // AbstractResource has extendedProperties. - // The old code used PROPERTY_DC_RELATION from extended properties if not in class. - // In oslc-domains, TestScript might not have relation getter. - // AbstractResource does not have relation. - - // PROPERTY_DC_RELATION is "http://purl.org/dc/terms/relation". - // Let's use extended properties as before. - + // Access dcterms:relation via extended properties because TestScript does not provide a direct getter for this property. Object relationObj = script.getExtendedProperties().get(PROPERTY_DC_RELATION); URI scriptUri = null; if (relationObj instanceof URI rI) { From 553c2225176cd4dad3bea5996d324c616a18f8a8 Mon Sep 17 00:00:00 2001 From: Andrew Berezovskyi Date: Fri, 30 Jan 2026 23:31:24 +0100 Subject: [PATCH 7/7] chore Signed-off-by: Andrew Berezovskyi --- .../java/org/eclipse/lyo/samples/client/jazz/EWMSample.java | 2 +- .../samples/client/jazz/automation/impl/AutomationAdapter.java | 3 ++- .../org/eclipse/lyo/samples/client/jazz/JazzSnapshotTest.ss | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java index 709cfe6..2ce3208 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/EWMSample.java @@ -337,7 +337,7 @@ public static Report run( defect.getExtendedProperties() .put( PROPERTY_TESTED_BY_TEST_CASE, - new Link(new URI("http://qmprovider/testcase/3"), "Global Verifcation Test")); + new Link(new URI("http://qmprovider/testcase/3"), "Global Verification Test")); defect.getExtendedProperties().put(PROPERTY_DCTERMS_TYPE, "defect"); defect.setTypes(Collections.singleton(URI.create(OSLCConstants.CM_CHANGE_REQUEST_TYPE))); diff --git a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java index c497df1..646b724 100644 --- a/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java +++ b/lyo-client-samples/src/main/java/org/eclipse/lyo/samples/client/jazz/automation/impl/AutomationAdapter.java @@ -821,7 +821,8 @@ public Document getScriptDocument(AutomationRequest request) TestScript script = client.getResource(scriptURI.toString(), OslcMediaType.APPLICATION_RDF_XML) .readEntity(TestScript.class); - // Access dcterms:relation via extended properties because TestScript does not provide a direct getter for this property. + // Access dcterms:relation via extended properties because TestScript does not provide a direct getter for + // this property. Object relationObj = script.getExtendedProperties().get(PROPERTY_DC_RELATION); URI scriptUri = null; if (relationObj instanceof URI rI) { diff --git a/lyo-client-samples/src/test/java/org/eclipse/lyo/samples/client/jazz/JazzSnapshotTest.ss b/lyo-client-samples/src/test/java/org/eclipse/lyo/samples/client/jazz/JazzSnapshotTest.ss index f3f9abc..28fd0ab 100644 --- a/lyo-client-samples/src/test/java/org/eclipse/lyo/samples/client/jazz/JazzSnapshotTest.ss +++ b/lyo-client-samples/src/test/java/org/eclipse/lyo/samples/client/jazz/JazzSnapshotTest.ss @@ -300,7 +300,7 @@ _:Bb1 "An error occurred when I tried to _:Bb1 "Error logging in"^^ . _:Bb1 "defect" . _:Bb1 . -_:Bb2 "Global Verifcation Test" . +_:Bb2 "Global Verification Test" . _:Bb2 . _:Bb2 . _:Bb2 _:Bb1 .