Skip to main content

Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Lyo/LyoOSLC4J"

< Lyo
(New page: = Lyo OSLC4J = == What is OSLC4J == OSLC4J is a Java toolkit for building Open Services for Lifecycle Collaboration providers and consumers. It includes: * annotations to decorate Java...)
 
Line 6: Line 6:
  
 
* annotations to decorate Java objects with OSLC attributes
 
* annotations to decorate Java objects with OSLC attributes
 +
* annotations to assist with resource preview UIs (compact rendering)
 
* built-in support for service provider and resource shape documents
 
* built-in support for service provider and resource shape documents
 
* libraries to simplify service provider and consumer development
 
* libraries to simplify service provider and consumer development
Line 19: Line 20:
  
 
The Apache Jena and Apache Wink components are the built-in providers for RDF, RDF XML, JSON and JAX-RS.  Additional providers could be implemented using technologies such as OpenRDF and Jersey.
 
The Apache Jena and Apache Wink components are the built-in providers for RDF, RDF XML, JSON and JAX-RS.  Additional providers could be implemented using technologies such as OpenRDF and Jersey.
 +
 +
== Sample code ==
 +
 +
=== Annotation sample ===
 +
<verbatim>
 +
    //sample simple string attribute (dcterms:description)
 +
 +
    @OslcDescription("Descriptive text (reference: Dublin Core) about resource represented as rich text in XHTML content.")
 +
    @OslcPropertyDefinition(OslcConstants.DCTERMS_NAMESPACE + "description")
 +
    @OslcTitle("Description")
 +
    @OslcValueType(ValueType.XMLLiteral)
 +
    public String getDescription()
 +
    {
 +
        return description;
 +
    } 
 +
 +
    //sample relationship attribute (oslc_cm:affectsTestResult)
 +
 +
    @OslcDescription("Associated QM resource that is affected by this Change Request.")
 +
    @OslcName("affectsTestResult")
 +
    @OslcPropertyDefinition(Constants.CHANGE_MANAGEMENT_NAMESPACE + "affectsTestResult")
 +
    @OslcRange(Constants.TYPE_TEST_RESULT)
 +
    @OslcReadOnly(false)
 +
    @OslcTitle("Affects Test Results")
 +
    public URI[] getAffectsTestResults()
 +
    {
 +
        return affectsTestResults.toArray(new URI[affectsTestResults.size()]);
 +
    }
 +
</verbatim>
 +
 +
=== JAX-RS method sample ===
 +
<verbatim>
 +
 +
    //support GET for a specific OSLC ChangeRequest
 +
 +
    @GET
 +
    @Path("{changeRequestId}")
 +
    @Produces({OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON})
 +
    public ChangeRequest getChangeRequest(@Context                      final HttpServletResponse httpServletResponse,
 +
                                          @PathParam("changeRequestId") final String              changeRequestId)
 +
    {
 +
        final ChangeRequest changeRequest = Persistence.getChangeRequest(changeRequestId);
 +
 +
        if (changeRequest != null)
 +
        {
 +
            changeRequest.setServiceProvider(ServiceProviderSingleton.getServiceProviderURI());
 +
 +
            setETagHeader(getETagFromChangeRequest(changeRequest), httpServletResponse);
 +
 +
            return changeRequest;
 +
        }
 +
 +
        throw new WebApplicationException(Status.NOT_FOUND);
 +
    }
 +
 +
    //support POST to create a new ChangeRequest
 +
 +
    @POST
 +
    @Consumes({OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON})
 +
    @Produces({OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON})
 +
    public Response addChangeRequest(@Context final HttpServletRequest  httpServletRequest,
 +
                            @Context final HttpServletResponse httpServletResponse,
 +
                                              final ChangeRequest      changeRequest)
 +
          throws URISyntaxException
 +
    {
 +
        final long identifier = Persistence.getNextIdentifier();
 +
 +
        final URI about = new URI(httpServletRequest.getScheme(),
 +
                                  null,
 +
                                  httpServletRequest.getServerName(),
 +
                                  httpServletRequest.getServerPort(),
 +
                                  httpServletRequest.getContextPath() + "/changeRequests/" + identifier,
 +
                                  null,
 +
                                  null);
 +
 +
        changeRequest.setAbout(about);
 +
        changeRequest.setIdentifier(String.valueOf(identifier));
 +
        changeRequest.setServiceProvider(ServiceProviderSingleton.getServiceProviderURI());
 +
 +
        final Date date = new Date();
 +
 +
        changeRequest.setCreated(date);
 +
        changeRequest.setModified(date);
 +
 +
        Persistence.addChangeRequest(changeRequest);
 +
        setETagHeader(getETagFromChangeRequest(changeRequest), httpServletResponse);
 +
 +
        return Response.created(about).entity(changeRequest).build();
 +
    }
 +
</verbatim>
 +
 +
== Getting started with OSLC4J ==
 +
 +
* The Lyo OSLC4J project is currently provided as source code.  We're working on getting jars built by the Eclipse build infrastructure
 +
* See [Lyo/BuildingOSLC4J Setting up OSLC4J] for information on setting up a development environment.

Revision as of 09:16, 15 February 2012

Lyo OSLC4J

What is OSLC4J

OSLC4J is a Java toolkit for building Open Services for Lifecycle Collaboration providers and consumers. It includes:

  • annotations to decorate Java objects with OSLC attributes
  • annotations to assist with resource preview UIs (compact rendering)
  • built-in support for service provider and resource shape documents
  • libraries to simplify service provider and consumer development
  • sample applications, including an OSLC Registry (catalog) application and a Change Management provider implementation
  • Tests for the sample applications to complement the [Lyo/LyoTestSuite Lyo OSLC Test Suite]

Components

  • OSLC4J - The core component providing OSLC annotation and model support
  • Apache Jena Provider - A library to assist with serialization/de-serialization of OSLC-annotated Java objects to/from RDF XML.
  • Apache Wink Json4J Provider - A library to assist with serialization/de-serialization of OSLC-annotated Java objects to/from JSON.
  • Apache Wink JAX-RS Provider - Utility classes, including an OSLC REST Client, to facilitate development using the Apache Wink JAX-RS implementation.

The Apache Jena and Apache Wink components are the built-in providers for RDF, RDF XML, JSON and JAX-RS. Additional providers could be implemented using technologies such as OpenRDF and Jersey.

Sample code

Annotation sample

<verbatim>

   //sample simple string attribute (dcterms:description)
   @OslcDescription("Descriptive text (reference: Dublin Core) about resource represented as rich text in XHTML content.")
   @OslcPropertyDefinition(OslcConstants.DCTERMS_NAMESPACE + "description")
   @OslcTitle("Description")
   @OslcValueType(ValueType.XMLLiteral)
   public String getDescription()
   {
       return description;
   }  
   //sample relationship attribute (oslc_cm:affectsTestResult)
   @OslcDescription("Associated QM resource that is affected by this Change Request.")
   @OslcName("affectsTestResult")
   @OslcPropertyDefinition(Constants.CHANGE_MANAGEMENT_NAMESPACE + "affectsTestResult")
   @OslcRange(Constants.TYPE_TEST_RESULT)
   @OslcReadOnly(false)
   @OslcTitle("Affects Test Results")
   public URI[] getAffectsTestResults()
   {
       return affectsTestResults.toArray(new URI[affectsTestResults.size()]);
   }

</verbatim>

JAX-RS method sample

<verbatim>

   //support GET for a specific OSLC ChangeRequest
   @GET
   @Path("{changeRequestId}")
   @Produces({OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON})
   public ChangeRequest getChangeRequest(@Context                      final HttpServletResponse httpServletResponse,
                                         @PathParam("changeRequestId") final String              changeRequestId)
   {
       final ChangeRequest changeRequest = Persistence.getChangeRequest(changeRequestId);
       if (changeRequest != null)
       {
           changeRequest.setServiceProvider(ServiceProviderSingleton.getServiceProviderURI());
           setETagHeader(getETagFromChangeRequest(changeRequest), httpServletResponse);
           return changeRequest;
       }
       throw new WebApplicationException(Status.NOT_FOUND);
   }
   //support POST to create a new ChangeRequest
   @POST
   @Consumes({OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON})
   @Produces({OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON})
   public Response addChangeRequest(@Context final HttpServletRequest  httpServletRequest,
   		                         @Context final HttpServletResponse httpServletResponse,
                                             final ChangeRequest       changeRequest)
          throws URISyntaxException
   {
       final long identifier = Persistence.getNextIdentifier();
       final URI about = new URI(httpServletRequest.getScheme(),
                                 null,
                                 httpServletRequest.getServerName(),
                                 httpServletRequest.getServerPort(),
                                 httpServletRequest.getContextPath() + "/changeRequests/" + identifier,
                                 null,
                                 null);
       changeRequest.setAbout(about);
       changeRequest.setIdentifier(String.valueOf(identifier));
       changeRequest.setServiceProvider(ServiceProviderSingleton.getServiceProviderURI());
       final Date date = new Date();
       changeRequest.setCreated(date);
       changeRequest.setModified(date);
       Persistence.addChangeRequest(changeRequest);
       setETagHeader(getETagFromChangeRequest(changeRequest), httpServletResponse);
       return Response.created(about).entity(changeRequest).build();
   }

</verbatim>

Getting started with OSLC4J

  • The Lyo OSLC4J project is currently provided as source code. We're working on getting jars built by the Eclipse build infrastructure
  • See [Lyo/BuildingOSLC4J Setting up OSLC4J] for information on setting up a development environment.

Back to the top