blob: 0fa5988a35118a172f5e20f380a8aa7408c998ea [file] [log] [blame]
[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&amp;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]