Once the com.sodius.oslc.app.jazz.model.ProjectAreaAssociation
object has been obtained
through the com.sodius.oslc.server.process.ProjectAreaAssociationStore
class, you have the necessary information
to request the Service Provider of the remote application, and get its available Creation Factories.
Having the Jira project associations you can get the complete remote Service Provider this way:
Collection<ProjectAreaAssociation> projectAreaAssociations = ... // the project associations ProjectAreaAssociation remoteProjectArea = projectAreaAssociations.stream().filter(...).findFirst().get(); OslcClient client = OslcClients.basic(new UsernamePasswordCredentials(userName, password)).create(); ServiceProvider serviceProvider = new GetServiceProvider(client, remoteProjectArea.getServiceProvider().getAbout()).get();
Having the remote Service Provider this is the way to find a Creation Factory URL:
Service cmService = OslcCore.Finder.forServices(serviceProvider).domain(OslcCm.DOMAIN).findFirst(); Collection<CreationFactory> creationFactories = OslcCore.Finder.forCreationFactories(cmService).resourceType(OslcCm.TYPE_CHANGE_REQUEST).findAll(); // for Change Management factories URI creationFactoryURI = creationFactories.stream().filter(...).findFirst().get().getCreation();
In this example we will create a Change Request com.sodius.oslc.domain.cm.model.ChangeRequest
.
Some attributes, defined in the OSLC standard, can be manipulated with getters/setters:
ChangeRequest changeRequest = new ChangeRequest(); changeRequest.setTitle("Test Title"); [...]
Each OSLC application can also define its own attributes. If you know these attributes namespace and property name, you can set them using:
QName qname = new QName(CM_CUSTOM_NAMESPACE, "attributeName", CM_CUSTOM_NAMESPACE_PREFIX); changeRequest.getExtendedProperties().put(qname, attributeValue);
To get the list of known attributes for the object to create, it is possible to use a REST client with the URL of the resource shapes found on the creation factory:
creationFactory.getResourceShapes()
.
Once you have the artifact and the URL of the desired Creation Factory you can ask the remote application to save it:
PostResource<ChangeRequest, ChangeRequest> httpPost = new PostResource<>(client, creationFactoryURI, changeRequest, OslcMediaType.APPLICATION_RDF_XML_TYPE, ChangeRequest.class, OslcMediaType.APPLICATION_RDF_XML_TYPE); ResourceResponse<ChangeRequest> postResponse = httpPost.call();The URI of the created artifact can be found with
postResponse.getEntity().getAbout();
.