| [comment encoding = UTF-8 /] |
| [comment |
| /******************************************************************************* |
| * Copyright (c) 2012 IBM Corporation and others. |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * and Eclipse Distribution License v. 1.0 which accompanies this distribution. |
| * |
| * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html |
| * and the Eclipse Distribution License is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * Contributors: |
| * |
| * Michael Fiedler - initial API and implementation for Bugzilla adapter |
| * Jad El-khoury - initial implementation of code generator (https://bugs.eclipse.org/bugs/show_bug.cgi?id=422448) |
| * Jim Amsden - Support for UI Preview (494303) |
| * |
| *******************************************************************************/ |
| /] |
| |
| [module generateResourceService('http://org.eclipse.lyo/oslc4j/adaptorInterface')] |
| |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::services/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::jspServices/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::serviceServices/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::serviceProviderServices/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::resourceServices/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::resourcePropertyServices/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::adaptorInterfaceServices/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::serviceProviderCatalogServices/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::domainSpecificationServices/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::jsp::generateGetResourceJsp/] |
| |
| [template public generateResourceService(aService : Service)] |
| [file (javaClassFullFileName(aService), false, 'UTF-8')] |
| [let anAdaptorInterface: AdaptorInterface = containingAdaptorInterface(aService)] |
| // [protected ('Copyright')] |
| /******************************************************************************* |
| * Copyright (c) 2012 IBM Corporation and others. |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * and Eclipse Distribution License v. 1.0 which accompanies this distribution. |
| * |
| * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html |
| * and the Eclipse Distribution License is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * Contributors: |
| * |
| * Michael Fiedler - initial API and implementation for Bugzilla adapter |
| * Jad El-khoury - initial implementation of code generator (https://bugs.eclipse.org/bugs/show_bug.cgi?id=422448) |
| * Jim Amsden - Support for UI Preview (494303) |
| * |
| * This file is generated by org.eclipse.lyo.oslc4j.codegenerator |
| *******************************************************************************/ |
| // [/protected] |
| |
| package [javaClassPackageName(aService) /]; |
| |
| import java.io.IOException; |
| import java.io.PrintWriter; |
| import java.net.URI; |
| import java.net.URISyntaxException; |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.Date; |
| import java.text.SimpleDateFormat; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Set; |
| import java.util.TreeSet; |
| |
| import javax.servlet.RequestDispatcher; |
| import javax.servlet.ServletException; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| import javax.ws.rs.Consumes; |
| import javax.ws.rs.DELETE; |
| import javax.ws.rs.FormParam; |
| import javax.ws.rs.GET; |
| import javax.ws.rs.HeaderParam; |
| import javax.ws.rs.POST; |
| import javax.ws.rs.PUT; |
| import javax.ws.rs.Path; |
| import javax.ws.rs.PathParam; |
| import javax.ws.rs.Produces; |
| import javax.ws.rs.QueryParam; |
| import javax.ws.rs.WebApplicationException; |
| import javax.ws.rs.core.Context; |
| import javax.ws.rs.core.MediaType; |
| import javax.ws.rs.core.Response; |
| import javax.ws.rs.core.Response.Status; |
| import javax.ws.rs.core.UriInfo; |
| import javax.ws.rs.core.UriBuilder; |
| |
| import org.apache.wink.json4j.JSONObject; |
| import org.eclipse.lyo.oslc4j.provider.json4j.JsonHelper; |
| import org.eclipse.lyo.oslc4j.core.OSLC4JUtils; |
| import org.eclipse.lyo.oslc4j.core.annotation.OslcCreationFactory; |
| import org.eclipse.lyo.oslc4j.core.annotation.OslcDialog; |
| import org.eclipse.lyo.oslc4j.core.annotation.OslcDialogs; |
| import org.eclipse.lyo.oslc4j.core.annotation.OslcQueryCapability; |
| import org.eclipse.lyo.oslc4j.core.annotation.OslcService; |
| import org.eclipse.lyo.oslc4j.core.model.Compact; |
| import org.eclipse.lyo.oslc4j.core.model.OslcConstants; |
| import org.eclipse.lyo.oslc4j.core.model.OslcMediaType; |
| import org.eclipse.lyo.oslc4j.core.model.Preview; |
| import org.eclipse.lyo.oslc4j.core.model.ServiceProvider; |
| import org.eclipse.lyo.oslc4j.core.model.Link; |
| import org.eclipse.lyo.oslc4j.core.model.AbstractResource; |
| |
| import [javaClassFullNameForAdaptorManager(anAdaptorInterface) /]; |
| import [javaInterfaceFullNameForAdaptorConstants(anAdaptorInterface) /]; |
| [for (aDomainSpecification: DomainSpecification | (aService.servicedResources().definingDomainSpecification()->union(Set{aService.domainSpecification}))->sortedBy(name)) separator(lineSeparator())]import [javaInterfaceFullNameForConstants(aDomainSpecification, anAdaptorInterface, null) /];[/for] |
| import [javaClassFullNameForSingleton(anAdaptorInterface.serviceProviderCatalog) /]; |
| [for (aResource: Resource | aService.relevantResources()->sortedBy(name))] |
| import [javaClassFullName(aResource, anAdaptorInterface, null) /]; |
| [/for] |
| |
| // [protected ('imports')] |
| // [/protected] |
| |
| // [protected ('pre_class_code')] |
| // [/protected] |
| @OslcService([javaInterfaceNameForConstants(aService.domainSpecification)/].[domainSpecificationConstantName(aService.domainSpecification)/]) |
| [JAXRSPathAnnotation(aService.serviceBaseURI()) /] |
| public class [javaClassName(aService) /] |
| { |
| @Context private HttpServletRequest httpServletRequest; |
| @Context private HttpServletResponse httpServletResponse; |
| @Context private UriInfo uriInfo; |
| |
| // [protected ('class_attributes')] |
| // [/protected] |
| |
| // [protected ('class_methods')] |
| // [/protected] |
| |
| public [javaClassName(aService) /]() |
| { |
| super(); |
| } |
| |
| [for (aQueryCapability: QueryCapability | aService.queryCapabilities)] |
| @OslcQueryCapability |
| ( |
| title = "[aQueryCapability.title /]", |
| label = "[aQueryCapability.label /]", |
| resourceShape = OslcConstants.PATH_RESOURCE_SHAPES + "/" + [javaInterfaceNameForConstants(aQueryCapability.resourceTypes->first().definingDomainSpecification())/].[resourcePathConstantName(aQueryCapability.resourceTypes->first()) /], |
| resourceTypes = {[for (aResource: Resource | aQueryCapability.resourceTypes) separator(', ') ][javaInterfaceNameForConstants(aResource.definingDomainSpecification())/].[resourceTypeConstantName(aResource) /][/for]}, |
| usages = {[for (usage: String | aQueryCapability.usages) separator(', ') ]"[usage/]"[/for]} |
| ) |
| @GET |
| [JAXRSPathAnnotation(aQueryCapability.URISegment())/] |
| @Produces({OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON, OslcMediaType.TEXT_TURTLE}) |
| public [queryMethodReturnType(aQueryCapability, true)/] [queryMethodName(aQueryCapability, true)/]( |
| [commaSeparate(queryMethodSignature(aQueryCapability, true), false, true) /] |
| @QueryParam("oslc.where") final String where, |
| @QueryParam("page") final String pageString, |
| @QueryParam("limit") final String limitString) throws IOException, ServletException |
| { |
| int page=0; |
| int limit=20; |
| if (null != pageString) { |
| page = Integer.parseInt(pageString); |
| } |
| if (null != limitString) { |
| limit = Integer.parseInt(limitString); |
| } |
| |
| // [protected (queryMethodName(aQueryCapability, true))] |
| // Here additional logic can be implemented that complements main action taken in [javaClassNameForAdaptorManager(anAdaptorInterface) /] |
| // [/protected] |
| |
| final List<[queryMethodResourceType(aQueryCapability)/]> resources = [javaClassNameForAdaptorManager(anAdaptorInterface) /].[queryMethodName(aQueryCapability, true)/](httpServletRequest[commaSeparate(queryMethodParameterList(aQueryCapability), true, false)/], where, page, limit); |
| return resources.toArray(new [queryMethodResourceType(aQueryCapability) /] [ '[' /]resources.size()[ ']' /]); |
| } |
| |
| @GET |
| [JAXRSPathAnnotation(aQueryCapability.URISegment()) /] |
| @Produces({ MediaType.TEXT_HTML }) |
| public [queryMethodReturnType(aQueryCapability, false)/] [queryMethodName(aQueryCapability, false)/]( |
| [commaSeparate(queryMethodSignature(aQueryCapability, true), false, true)/] |
| @QueryParam("oslc.where") final String where, |
| @QueryParam("page") final String pageString, |
| @QueryParam("limit") final String limitString) throws ServletException, IOException |
| { |
| int page=0; |
| int limit=20; |
| if (null != pageString) { |
| page = Integer.parseInt(pageString); |
| } |
| if (null != limitString) { |
| limit = Integer.parseInt(limitString); |
| } |
| |
| // [protected (queryMethodName(aQueryCapability, false))] |
| // [/protected] |
| |
| final List<[queryMethodResourceType(aQueryCapability)/]> resources = [javaClassNameForAdaptorManager(anAdaptorInterface) /].[queryMethodName(aQueryCapability, true)/](httpServletRequest[commaSeparate(queryMethodParameterList(aQueryCapability), true, false)/], where, page, limit); |
| |
| if (resources!= null) { |
| httpServletRequest.setAttribute("resources", resources); |
| // [protected (queryMethodName(aQueryCapability, false).concat('_setAttributes'))] |
| // [/protected] |
| |
| httpServletRequest.setAttribute("queryUri", |
| uriInfo.getAbsolutePath().toString() + "?oslc.paging=true"); |
| if (resources.size() > limit) { |
| resources.remove(resources.size() - 1); |
| httpServletRequest.setAttribute("nextPageUri", |
| uriInfo.getAbsolutePath().toString() + "?oslc.paging=true&page=" + (page + 1)); |
| } |
| RequestDispatcher rd = httpServletRequest.getRequestDispatcher("[resourceCollectionJspRelativeFileName(aQueryCapability) /]"); |
| rd.forward(httpServletRequest,httpServletResponse); |
| } |
| |
| throw new WebApplicationException(Status.NOT_FOUND); |
| } |
| |
| [/for] |
| [for (aSelectionDialog: Dialog | aService.selectionDialogs)] |
| @OslcDialog |
| ( |
| title = "[aSelectionDialog.title/]", |
| label = "[aSelectionDialog.label/]", |
| uri = "[aSelectionDialog.URI(true)/]", |
| hintWidth = "[aSelectionDialog.hintWidth /]px", |
| hintHeight = "[aSelectionDialog.hintHeight /]px", |
| resourceTypes = {[for (aResource: Resource | aSelectionDialog.resourceTypes) separator(', ') ][javaInterfaceNameForConstants(aResource.definingDomainSpecification())/].[resourceTypeConstantName(aResource) /][/for]}, |
| usages = {[for (usage: String | aSelectionDialog.usages) separator(', ') ]"[usage/]"[/for]} |
| ) |
| @GET |
| [JAXRSPathAnnotation(aSelectionDialog.URISegment(true)) /] |
| @Consumes({ MediaType.TEXT_HTML, MediaType.WILDCARD }) |
| public [dialogMethodReturnType(aSelectionDialog, true)/] [dialogMethodName(aSelectionDialog, true)/]( |
| @QueryParam("terms") final String terms |
| [commaSeparate(dialogMethodSignature(aSelectionDialog, true, true), true, false)/] |
| ) throws ServletException, IOException |
| { |
| try { |
| // [protected (dialogMethodName(aSelectionDialog, true).concat('_init'))] |
| // [/protected] |
| |
| httpServletRequest.setAttribute("selectionUri",uriInfo.getAbsolutePath().toString()); |
| // [protected (dialogMethodName(aSelectionDialog, true).concat('_setAttributes'))] |
| // [/protected] |
| |
| if (terms != null ) { |
| httpServletRequest.setAttribute("terms", terms); |
| final List<[dialogMethodResourceType(aSelectionDialog)/]> resources = [javaClassNameForAdaptorManager(anAdaptorInterface) /].[dialogMethodName(aSelectionDialog, true)/](httpServletRequest[commaSeparate(dialogMethodParameterList(aSelectionDialog, true), true, false)/], terms); |
| if (resources!= null) { |
| httpServletRequest.setAttribute("resources", resources); |
| RequestDispatcher rd = httpServletRequest.getRequestDispatcher("[resourceSelectorResultsJspRelativeFileName(aSelectionDialog) /]"); |
| rd.forward(httpServletRequest, httpServletResponse); |
| } |
| //a empty search should return an empty list and not NULL! |
| throw new WebApplicationException(Status.NOT_FOUND); |
| |
| } else { |
| try { |
| RequestDispatcher rd = httpServletRequest.getRequestDispatcher("[resourceSelectorJspRelativeFileName(aSelectionDialog) /]"); |
| rd.forward(httpServletRequest, httpServletResponse); |
| } catch (Exception e) { |
| throw new ServletException(e); |
| } |
| } |
| } catch (Exception e) { |
| throw new WebApplicationException(e); |
| } |
| } |
| |
| [/for] |
| [for (aCreationFactory: CreationFactory | aService.creationFactories)] |
| /** |
| * Create a single [creationMethodResourceType(aCreationFactory)/] via RDF/XML, XML or JSON POST |
| * |
| * @throws IOException |
| * @throws ServletException |
| */ |
| @OslcCreationFactory |
| ( |
| title = "[aCreationFactory.title /]", |
| label = "[aCreationFactory.label /]", |
| resourceShapes = {[for (aResource: Resource | aCreationFactory.resourceTypes) separator(', ') ]OslcConstants.PATH_RESOURCE_SHAPES + "/" + [javaInterfaceNameForConstants(aResource.definingDomainSpecification())/].[resourcePathConstantName(aResource)/][/for]}, |
| resourceTypes = {[for (aResource: Resource | aCreationFactory.resourceTypes) separator(', ') ][javaInterfaceNameForConstants(aResource.definingDomainSpecification())/].[resourceTypeConstantName(aResource) /][/for]}, |
| usages = {[for (usage: String | aCreationFactory.usages) separator(', ') ]"[usage/]"[/for]} |
| ) |
| @POST |
| [JAXRSPathAnnotation(aCreationFactory.URISegment()) /] |
| @Consumes({OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON, OslcMediaType.TEXT_TURTLE}) |
| @Produces({OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON, OslcMediaType.TEXT_TURTLE}) |
| public [creationMethodReturnType(aCreationFactory)/] [creationMethodName(aCreationFactory)/]( |
| [commaSeparate(creationMethodSignature(aCreationFactory, true), false, true)/] |
| final [creationMethodResourceType(aCreationFactory)/] aResource |
| ) throws IOException, ServletException |
| { |
| try { |
| [creationMethodResourceType(aCreationFactory)/] newResource = [javaClassNameForAdaptorManager(anAdaptorInterface) /].[creationMethodName(aCreationFactory)/](httpServletRequest, aResource[commaSeparate(creationMethodParameterList(aCreationFactory), true, false)/]); |
| httpServletResponse.setHeader("ETag", [javaClassNameForAdaptorManager(anAdaptorInterface) /].[getResourceETagMethodName(aCreationFactory.resourceTypes)/](newResource)); |
| return Response.created(newResource.getAbout()).entity(newResource).header([javaInterfaceNameForAdaptorConstants(anAdaptorInterface)/].HDR_OSLC_VERSION, [javaInterfaceNameForAdaptorConstants(anAdaptorInterface)/].OSLC_VERSION_V2).build(); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| throw new WebApplicationException(e); |
| } |
| } |
| |
| [/for] |
| [for (aCreationDialog: Dialog | aService.creationDialogs)] |
| /** |
| * OSLC delegated creation dialog for a single resource |
| * |
| * @throws IOException |
| * @throws ServletException |
| */ |
| @GET |
| [JAXRSPathAnnotation(aCreationDialog.URISegment(false)) /] |
| @Consumes({MediaType.WILDCARD}) |
| public [dialogMethodReturnType (aCreationDialog, false)/] [dialogMethodName(aCreationDialog, false)/]( |
| [commaSeparate(dialogMethodSignature(aCreationDialog, false, true), false, false)/] |
| ) throws IOException, ServletException |
| { |
| // [protected (dialogMethodName(aCreationDialog, false))] |
| // [/protected] |
| |
| httpServletRequest.setAttribute("creatorUri", uriInfo.getAbsolutePath().toString()); |
| [for (aPathParameter: String | JAXRSPathParameters(aCreationDialog.URI(false)))] |
| httpServletRequest.setAttribute("[aPathParameter/]", [aPathParameter/]); |
| [/for] |
| |
| RequestDispatcher rd = httpServletRequest.getRequestDispatcher("[resourceCreatorJspRelativeFileName(aCreationDialog) /]"); |
| rd.forward(httpServletRequest, httpServletResponse); |
| } |
| |
| /** |
| * Backend creator for the OSLC delegated creation dialog. |
| * |
| * Accepts the input in FormParams and returns a small JSON response |
| */ |
| @OslcDialog |
| ( |
| title = "[aCreationDialog.title /]", |
| label = "[aCreationDialog.label /]", |
| uri = "[aCreationDialog.URI(false)/]", |
| hintWidth = "[aCreationDialog.hintWidth /]px", |
| hintHeight = "[aCreationDialog.hintHeight /]px", |
| resourceTypes = {[for (aResource: Resource | aCreationDialog.resourceTypes) separator(', ') ][javaInterfaceNameForConstants(aResource.definingDomainSpecification())/].[resourceTypeConstantName(aResource) /][/for]}, |
| usages = {[for (usage: String | aCreationDialog.usages) separator(', ') ]"[usage/]"[/for]} |
| ) |
| @POST |
| [JAXRSPathAnnotation(aCreationDialog.URISegment(false)) /] |
| @Consumes({ MediaType.APPLICATION_FORM_URLENCODED}) |
| public [creationMethodReturnType(aCreationDialog)/] [creationMethodName(aCreationDialog)/]( |
| [commaSeparate(dialogMethodSignature(aCreationDialog, false, true), false, false)/] |
| ) { |
| try { |
| [creationMethodResourceType(aCreationDialog)/] newResource = null; |
| |
| [if not (aCreationDialog.resourceTypes->size() = 1)] |
| // [protected (creationMethodName(aCreationDialog))] |
| // TODO Implement code to create the new resource. This method seems to be expected to handle more than a single type of resources. |
| // [/protected] |
| [else] |
| [let aResource : Resource = aCreationDialog.resourceTypes->first()] |
| [javaClassName(aResource) /] aResource = new [javaClassName(aResource) /](); |
| |
| String['[]'/] paramValues; |
| |
| [comment TODO: Check for valid parameters (1) that the oneOrMore, or oneOrMany are set. (2) things have right format. (3) Allow end_user to also add own checks |
| In the Resource class, automtiacally generate a "propertyValidValue" (similar to propertyAsHtmlForCreation) for each of the properties. |
| There you can add all automatic checks, as well as allow for end-user ones./] |
| [for (propertiesCollection: Collection(ResourceProperty) | Sequence{aResource.resourceProperties, inheritedProperties(aResource), interfaceProperties(aResource)})] |
| [for (aProperty: ResourceProperty | propertiesCollection)] |
| paramValues = httpServletRequest.getParameterValues("[javaName(aProperty, false)/]"); |
| if (paramValues != null) { |
| [if (Sequence{'zeroOrMany', 'oneOrMany'}->includes(aProperty.occurs.toString()))] |
| for(int i=0; i<paramValues.length; i++) { |
| aResource.add[javaAttributeName(aProperty, aResource).toUpperFirst()/]([javaAttributeBaseTypeCastFromString(aProperty, 'paramValues[i]') /]); |
| } |
| [else] |
| if (paramValues.length == 1) { |
| if (paramValues['[0]'/].length() != 0) |
| aResource.set[javaAttributeName(aProperty, aResource).toUpperFirst() /]([javaAttributeBaseTypeCastFromString(aProperty, 'paramValues[0]') /]); |
| // else, there is an empty value for that parameter, and hence ignore since the parameter is not actually set. |
| } |
| |
| [/if] |
| } |
| [/for] |
| [/for] |
| |
| newResource = [javaClassNameForAdaptorManager(anAdaptorInterface) /].[creationMethodName(aCreationDialog)/](httpServletRequest, aResource[commaSeparate(dialogMethodParameterList(aCreationDialog, false), true, false)/]); |
| [/let] |
| [/if] |
| |
| if (newResource != null) { |
| httpServletRequest.setAttribute("newResource", newResource); |
| httpServletRequest.setAttribute("newResourceUri", newResource.getAbout().toString()); |
| |
| // Send back to the form a small JSON response |
| httpServletResponse.setContentType("application/json"); |
| httpServletResponse.setStatus(Status.CREATED.getStatusCode()); |
| httpServletResponse.addHeader("Location", newResource.getAbout().toString()); |
| PrintWriter out = httpServletResponse.getWriter(); |
| |
| JSONObject oslcResponse = new JSONObject(); |
| JSONObject newResourceJson = new JSONObject(); |
| newResourceJson.put("rdf:resource", newResource.getAbout().toString()); |
| // [protected ('OSLC Resource Label')] |
| newResourceJson.put("oslc:label", newResource.toString()); |
| // [/protected] |
| oslcResponse.put("oslc:results", new Object['[]'/]{newResourceJson}); |
| |
| out.print(oslcResponse.toString()); |
| out.close(); |
| } |
| } catch (Exception e) { |
| e.printStackTrace(); |
| throw new WebApplicationException(e); |
| } |
| } |
| [/for] |
| [for (aBasicCapability: BasicCapability | aService.basicCapabilities)] |
| [if (aBasicCapability.read)] |
| [for (aResource: Resource | aBasicCapability.resourceTypes)] |
| @GET |
| [JAXRSPathAnnotation(aResource.instanceURISegment(aBasicCapability))/] |
| @Produces({OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON, OslcMediaType.TEXT_TURTLE}) |
| public [getResourceMethodReturnType(aBasicCapability, aResource, true)/] [getResourceMethodName(aBasicCapability, aResource, true)/]( |
| [commaSeparate(instanceMethodSignature(aResource, aBasicCapability, true), false, false)/] |
| ) throws IOException, ServletException, URISyntaxException |
| { |
| // [protected ('getResource_init')] |
| // [/protected] |
| |
| final [getResourceMethodResourceType(aBasicCapability, aResource)/] a[javaName(aResource, true)/] = [javaClassNameForAdaptorManager(anAdaptorInterface) /].[getResourceMethodName(aBasicCapability, aResource, true)/](httpServletRequest[commaSeparate(instanceMethodParameterList(aResource, aBasicCapability), true, false)/]); |
| |
| if (a[javaName(aResource, true)/] != null) { |
| // [protected (getResourceMethodName(aBasicCapability, aResource, true))] |
| // [/protected] |
| httpServletResponse.addHeader([javaInterfaceNameForAdaptorConstants(anAdaptorInterface)/].HDR_OSLC_VERSION, [javaInterfaceNameForAdaptorConstants(anAdaptorInterface)/].OSLC_VERSION_V2); |
| return a[javaName(aResource, true)/]; |
| } |
| |
| throw new WebApplicationException(Status.NOT_FOUND); |
| } |
| |
| @GET |
| [JAXRSPathAnnotation(aResource.instanceURISegment(aBasicCapability))/] |
| @Produces({ MediaType.TEXT_HTML }) |
| public [getResourceMethodReturnType(aBasicCapability, aResource, false)/] [getResourceMethodName(aBasicCapability, aResource, false)/]( |
| [commaSeparate(instanceMethodSignature(aResource, aBasicCapability, true), false, false)/] |
| ) throws ServletException, IOException, URISyntaxException |
| { |
| // [protected (getResourceMethodName(aBasicCapability, aResource, false).concat('_init'))] |
| // [/protected] |
| |
| final [getResourceMethodResourceType(aBasicCapability, aResource)/] a[javaName(aResource, true)/] = [javaClassNameForAdaptorManager(anAdaptorInterface) /].[getResourceMethodName(aBasicCapability, aResource, true)/](httpServletRequest[commaSeparate(instanceMethodParameterList(aResource, aBasicCapability), true, false)/]); |
| |
| if (a[javaName(aResource, true)/] != null) { |
| httpServletRequest.setAttribute("a[javaName(aResource, true)/]", a[javaName(aResource, true)/]); |
| // [protected (getResourceMethodName(aBasicCapability, aResource, false).concat('_setAttributes'))] |
| // [/protected] |
| |
| RequestDispatcher rd = httpServletRequest.getRequestDispatcher("[getResourceJspRelativeFileName(aResource, anAdaptorInterface) /]"); |
| rd.forward(httpServletRequest,httpServletResponse); |
| } |
| |
| throw new WebApplicationException(Status.NOT_FOUND); |
| } |
| |
| @GET |
| [JAXRSPathAnnotation(aResource.instanceURISegment(aBasicCapability))/] |
| @Produces({OslcMediaType.APPLICATION_X_OSLC_COMPACT_XML}) |
| public Compact [getResourceCompactMethodName(aBasicCapability, aResource)/]( |
| [commaSeparate(instanceMethodSignature(aResource, aBasicCapability, true), false, false)/] |
| ) throws ServletException, IOException, URISyntaxException |
| { |
| String iconUri = OSLC4JUtils.getPublicURI() + "/images/ui_preview_icon.gif"; |
| String smallPreviewHintHeight = "10em"; |
| String smallPreviewHintWidth = "45em"; |
| String largePreviewHintHeight = "20em"; |
| String largePreviewHintWidth = "45em"; |
| |
| // [protected (getResourceCompactMethodName(aBasicCapability, aResource).concat('_init'))] |
| //TODO: adjust the preview height & width values from the default values provided above. |
| // [/protected] |
| |
| final [getResourceMethodResourceType(aBasicCapability, aResource)/] a[javaName(aResource, true)/] = [javaClassNameForAdaptorManager(anAdaptorInterface) /].[getResourceMethodName(aBasicCapability, aResource, true)/](httpServletRequest[commaSeparate(instanceMethodParameterList(aResource, aBasicCapability), true, false)/]); |
| |
| if (a[javaName(aResource, true)/] != null) { |
| final Compact compact = new Compact(); |
| |
| compact.setAbout(a[javaName(aResource, true)/].getAbout()); |
| compact.setTitle(a[javaName(aResource, true)/].toString()); |
| |
| compact.setIcon(new URI(iconUri)); |
| |
| //Create and set attributes for OSLC preview resource |
| final Preview smallPreview = new Preview(); |
| smallPreview.setHintHeight(smallPreviewHintHeight); |
| smallPreview.setHintWidth(smallPreviewHintWidth); |
| smallPreview.setDocument(UriBuilder.fromUri(a[javaName(aResource, true)/].getAbout()).path("smallPreview").build()); |
| compact.setSmallPreview(smallPreview); |
| |
| //Use the HTML representation of a change request as the large preview as well |
| final Preview largePreview = new Preview(); |
| largePreview.setHintHeight(largePreviewHintHeight); |
| largePreview.setHintWidth(largePreviewHintWidth); |
| largePreview.setDocument(a[javaName(aResource, true)/].getAbout()); |
| compact.setLargePreview(largePreview); |
| httpServletResponse.addHeader([javaInterfaceNameForAdaptorConstants(anAdaptorInterface)/].HDR_OSLC_VERSION, [javaInterfaceNameForAdaptorConstants(anAdaptorInterface)/].OSLC_VERSION_V2); |
| return compact; |
| } |
| throw new WebApplicationException(Status.NOT_FOUND); |
| } |
| |
| @GET |
| [JAXRSPathAnnotation(JAXRSConcatURISegments(aResource.instanceURISegment(aBasicCapability), 'smallPreview'))/] |
| @Produces({ MediaType.TEXT_HTML }) |
| public void [getResourceSmallPreviewMethodName(aBasicCapability, aResource)/]( |
| [commaSeparate(instanceMethodSignature(aResource, aBasicCapability, true), false, false)/] |
| ) throws ServletException, IOException, URISyntaxException |
| { |
| // [protected (getResourceSmallPreviewMethodName(aBasicCapability, aResource).concat('_init'))] |
| // [/protected] |
| |
| final [getResourceMethodResourceType(aBasicCapability, aResource)/] a[javaName(aResource, true)/] = [javaClassNameForAdaptorManager(anAdaptorInterface) /].[getResourceMethodName(aBasicCapability, aResource, true)/](httpServletRequest[commaSeparate(instanceMethodParameterList(aResource, aBasicCapability), true, false)/]); |
| |
| if (a[javaName(aResource, true)/] != null) { |
| httpServletRequest.setAttribute("a[javaName(aResource, true)/]", a[javaName(aResource, true)/]); |
| // [protected (getResourceSmallPreviewMethodName(aBasicCapability, aResource).concat('_setAttributes'))] |
| // [/protected] |
| |
| RequestDispatcher rd = httpServletRequest.getRequestDispatcher("[getResourceSmallPreviewJspRelativeFileName(aResource, anAdaptorInterface) /]"); |
| httpServletResponse.addHeader([javaInterfaceNameForAdaptorConstants(anAdaptorInterface)/].HDR_OSLC_VERSION, [javaInterfaceNameForAdaptorConstants(anAdaptorInterface)/].OSLC_VERSION_V2); |
| rd.forward(httpServletRequest, httpServletResponse); |
| } |
| |
| throw new WebApplicationException(Status.NOT_FOUND); |
| } |
| [/for] |
| [/if] |
| [if (aBasicCapability.delete)] |
| [for (aResource: Resource | aBasicCapability.resourceTypes)] |
| @DELETE |
| [JAXRSPathAnnotation(aResource.instanceURISegment(aBasicCapability))/] |
| public [deleteResourceMethodReturnType(aBasicCapability, aResource)/] [deleteResourceMethodName(aBasicCapability, aResource)/]( |
| [commaSeparate(instanceMethodSignature(aResource, aBasicCapability, true), false, false)/] |
| ) throws IOException, ServletException, URISyntaxException |
| { |
| // [protected (deleteResourceMethodName(aBasicCapability, aResource).concat('_init'))] |
| // [/protected] |
| final [deleteResourceMethodResourceType(aBasicCapability, aResource)/] aResource = [javaClassNameForAdaptorManager(anAdaptorInterface) /].[getResourceMethodName(aBasicCapability, aResource, true)/](httpServletRequest[commaSeparate(instanceMethodParameterList(aResource, aBasicCapability), true, false)/]); |
| |
| if (aResource != null) { |
| // [protected (deleteResourceMethodName(aBasicCapability, aResource))] |
| // [/protected] |
| boolean deleted = [javaClassNameForAdaptorManager(anAdaptorInterface) /].[deleteResourceMethodName(aBasicCapability, aResource)/](httpServletRequest[commaSeparate(instanceMethodParameterList(aResource, aBasicCapability), true, false)/]); |
| if (deleted) |
| return Response.ok().header([javaInterfaceNameForAdaptorConstants(anAdaptorInterface)/].HDR_OSLC_VERSION, [javaInterfaceNameForAdaptorConstants(anAdaptorInterface)/].OSLC_VERSION_V2).build(); |
| else |
| throw new WebApplicationException(Status.INTERNAL_SERVER_ERROR); |
| } |
| throw new WebApplicationException(Status.NOT_FOUND); |
| } |
| |
| [/for] |
| [/if] |
| [if (aBasicCapability.update)] |
| [for (aResource: Resource | aBasicCapability.resourceTypes)] |
| @PUT |
| [JAXRSPathAnnotation(aResource.instanceURISegment(aBasicCapability))/] |
| @Consumes({OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON, OslcMediaType.TEXT_TURTLE}) |
| public [updateResourceMethodReturnType(aBasicCapability, aResource)/] [updateResourceMethodName(aBasicCapability, aResource)/]( |
| @HeaderParam("If-Match") final String eTagHeader, |
| [commaSeparate(instanceMethodSignature(aResource, aBasicCapability, true), false, true)/] |
| final [getResourceMethodResourceType(aBasicCapability, aResource)/] aResource |
| ) throws IOException, ServletException |
| { |
| // [protected (updateResourceMethodName(aBasicCapability, aResource).concat('_init'))] |
| // [/protected] |
| final [updateResourceMethodResourceType(aBasicCapability, aResource)/] originalResource = [javaClassNameForAdaptorManager(anAdaptorInterface) /].[getResourceMethodName(aBasicCapability, aResource, true)/](httpServletRequest[commaSeparate(instanceMethodParameterList(aResource, aBasicCapability), true, false)/]); |
| |
| if (originalResource != null) { |
| try { |
| final String originalETag = [javaClassNameForAdaptorManager(anAdaptorInterface) /].[getResourceETagMethodName(aResource)/](originalResource); |
| |
| if ((eTagHeader == null) || (originalETag.equals(eTagHeader))) { |
| // [protected (updateResourceMethodName(aBasicCapability, aResource))] |
| // [/protected] |
| final [updateResourceMethodResourceType(aBasicCapability, aResource)/] updatedResource = [javaClassNameForAdaptorManager(anAdaptorInterface) /].[updateResourceMethodName(aBasicCapability, aResource)/](httpServletRequest, aResource[commaSeparate(instanceMethodParameterList(aResource, aBasicCapability), true, false)/]); |
| httpServletResponse.setHeader("ETag", [javaClassNameForAdaptorManager(anAdaptorInterface) /].[getResourceETagMethodName(aResource)/](updatedResource)); |
| return Response.ok().header([javaInterfaceNameForAdaptorConstants(anAdaptorInterface)/].HDR_OSLC_VERSION, [javaInterfaceNameForAdaptorConstants(anAdaptorInterface)/].OSLC_VERSION_V2).build(); |
| } |
| else { |
| throw new WebApplicationException(Status.PRECONDITION_FAILED); |
| } |
| |
| } catch (Exception e) { |
| e.printStackTrace(); |
| throw new WebApplicationException(e); |
| } |
| |
| } |
| else { |
| throw new WebApplicationException(Status.NOT_FOUND); |
| } |
| } |
| |
| [/for] |
| [/if] |
| [/for] |
| } |
| [/let] |
| [/file] |
| [/template] |