diff --git a/org.eclipse.lyo.oslc4j.adaptormodel/model/adaptorInterface.ecore b/org.eclipse.lyo.oslc4j.adaptormodel/model/adaptorInterface.ecore
index 827088c..e3b3104 100644
--- a/org.eclipse.lyo.oslc4j.adaptormodel/model/adaptorInterface.ecore
+++ b/org.eclipse.lyo.oslc4j.adaptormodel/model/adaptorInterface.ecore
@@ -151,6 +151,12 @@
+
+
+
diff --git a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateAdaptorManager.mtl b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateAdaptorManager.mtl
index e243cc6..c623c1b 100644
--- a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateAdaptorManager.mtl
+++ b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateAdaptorManager.mtl
@@ -153,16 +153,8 @@ public class [javaClassNameForAdaptorManager(anAdaptorInterface) /] {
// [/protected]
return newResource;
}
-
- public static String [creationETagMethodName(aCreationFactory)/](final [creationMethodResourceType(aCreationFactory)/] aResource)
- {
- String eTag = null;
- // TODO Implement code to return an ETag for a particular resource
- // [protected (creationETagMethodName(aCreationFactory))]
- // [/protected]
- return eTag;
- }
[/for]
+
[for (aCreationDialog: Dialog | aService.creationDialogs)]
[if (aService.creationFactories->select(f: CreationFactory | f.resourceTypes = aCreationDialog.resourceTypes)->isEmpty())]
public static [creationMethodResourceType(aCreationDialog)/] [creationMethodName(aCreationDialog)/](HttpServletRequest httpServletRequest, final [creationMethodResourceType(aCreationDialog)/] aResource[commaSeparate(dialogMethodSignature(aCreationDialog, false, false), true, false)/])
@@ -176,7 +168,9 @@ public class [javaClassNameForAdaptorManager(anAdaptorInterface) /] {
}
[/if]
[/for]
+
[for (aBasicCapability: BasicCapability | aService.basicCapabilities)]
+ [if (aBasicCapability.read)]
[for (aResource: Resource | aBasicCapability.resourceTypes)]
public static [getResourceMethodResourceType(aBasicCapability, aResource)/] [getResourceMethodName(aBasicCapability, aResource, true)/](HttpServletRequest httpServletRequest[commaSeparate(instanceMethodSignature(aResource, aBasicCapability, false), true, false)/])
{
@@ -188,7 +182,45 @@ public class [javaClassNameForAdaptorManager(anAdaptorInterface) /] {
return aResource;
}
[/for]
+ [/if]
+
+ [if (aBasicCapability.delete)]
+ [for (aResource: Resource | aBasicCapability.resourceTypes)]
+ public static Boolean [deleteResourceMethodName(aBasicCapability, aResource)/](HttpServletRequest httpServletRequest[commaSeparate(instanceMethodSignature(aResource, aBasicCapability, false), true, false)/])
+ {
+ Boolean deleted = false;
+ // TODO Implement code to delete a resource
+ // [protected (deleteResourceMethodName(aBasicCapability, aResource))]
+ // [/protected]
+ return deleted;
+ }
+ [/for]
+ [/if]
+
+ [if (aBasicCapability.update)]
+ [for (aResource: Resource | aBasicCapability.resourceTypes)]
+ public static [updateResourceMethodResourceType(aBasicCapability, aResource)/] [updateResourceMethodName(aBasicCapability, aResource)/](HttpServletRequest httpServletRequest, final [updateResourceMethodResourceType(aBasicCapability, aResource)/] aResource[commaSeparate(instanceMethodSignature(aResource, aBasicCapability, false), true, false)/]) {
+ [updateResourceMethodResourceType(aBasicCapability, aResource)/] updatedResource = null;
+ // TODO Implement code to update and return a resource
+ // [protected (updateResourceMethodName(aBasicCapability, aResource))]
+ // [/protected]
+ return updatedResource;
+ }
+ [/for]
+ [/if]
+ [/for]
+
[/for]
+
+ [for (aResource: Resource | servicedResources(anAdaptorInterface))]
+ public static String [getResourceETagMethodName(aResource)/](final [javaClassName(aResource)/] aResource)
+ {
+ String eTag = null;
+ // TODO Implement code to return an ETag for a particular resource
+ // [protected (getResourceETagMethodName(aResource))]
+ // [/protected]
+ return eTag;
+ }
[/for]
}
[/file]
diff --git a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateResourceService.mtl b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateResourceService.mtl
index 74ca163..3ac284d 100644
--- a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateResourceService.mtl
+++ b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateResourceService.mtl
@@ -73,6 +73,7 @@ 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;
@@ -332,7 +333,7 @@ public class [javaClassName(aService) /]
{
try {
[creationMethodResourceType(aCreationFactory)/] newResource = [javaClassNameForAdaptorManager(anAdaptorInterface) /].[creationMethodName(aCreationFactory)/](httpServletRequest, aResource[commaSeparate(creationMethodParameterList(aCreationFactory), true, false)/]);
- httpServletResponse.setHeader("ETag", [javaClassNameForAdaptorManager(anAdaptorInterface) /].[creationETagMethodName(aCreationFactory)/](newResource));
+ httpServletResponse.setHeader("ETag", [javaClassNameForAdaptorManager(anAdaptorInterface) /].[getResourceETagMethodName(aCreationFactory.resourceTypes)/](newResource));
return Response.created(newResource.getAbout()).entity(aResource).build();
} catch (Exception e) {
e.printStackTrace();
@@ -456,9 +457,10 @@ public class [javaClassName(aService) /]
}
}
[/for]
-
[for (aBasicCapability: BasicCapability | aService.basicCapabilities)]
+ [if (aBasicCapability.read)]
[for (aResource: Resource | aBasicCapability.resourceTypes)]
+
/**
* RDF/XML, XML and JSON representation of a single change request
*
@@ -524,6 +526,92 @@ public class [javaClassName(aService) /]
throw new WebApplicationException(Status.NOT_FOUND);
}
[/for]
+ [/if]
+ [if (aBasicCapability.delete)]
+ [for (aResource: Resource | aBasicCapability.resourceTypes)]
+ /**
+ * Delete a single change request
+ *
+ * @param productId
+ * @param changeRequestId
+ * @return
+ * @throws IOException
+ * @throws ServletException
+ * @throws URISyntaxException
+ */
+ @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().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)]
+ /**
+ * Update a single resource via RDF/XML, XML or JSON POST
+ * @param serviceProviderId
+ * @param resourceId
+ * @throws IOException
+ * @throws ServletException
+ */
+ @PUT
+ [JAXRSPathAnnotation(aResource.instanceURISegment(aBasicCapability))/]
+ @Consumes({OslcMediaType.APPLICATION_RDF_XML, OslcMediaType.APPLICATION_XML, OslcMediaType.APPLICATION_JSON})
+ 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().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]
diff --git a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/serviceServices.mtl b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/serviceServices.mtl
index 0fd6393..759fa2f 100644
--- a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/serviceServices.mtl
+++ b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/serviceServices.mtl
@@ -180,11 +180,15 @@ methodSignature(JAXRSPathParameters(aCreationFactory.URI()), forJAXRSMethod)
methodParameterList(JAXRSPathParameters(aCreationFactory.URI()))
/]
-[query public creationETagMethodName(aCreationFactory: CreationFactory) : String =
-concatenate(aCreationFactory.resourceTypes.javaName(true)->sep('getETagFrom', 'And', '').oclAsType(String))
+[query public getResourceETagMethodName(resources : Set(Resource)) : String =
+concatenate(resources.javaName(true)->sep('getETagFrom', 'And', '').oclAsType(String))
.concat('')
/]
+[query public getResourceETagMethodName(aResource: Resource) : String =
+getResourceETagMethodName(Set{aResource})
+/]
+
[comment Dialog /]
[query public URISegment (aDialog: Dialog, selectionDialog : Boolean) : String =
if (aDialog.dialogURI.oclIsUndefined())._or (aDialog.dialogURI.equalsIgnoreCase('')) then
@@ -269,6 +273,14 @@ JAXRSPathParameters(aResource.instanceURI(aBasicCapability))
.concat((if forRDF then '' else 'AsHtml' endif))
/]
+[query public deleteResourceMethodName(aBasicCapability: BasicCapability, aResource: Resource) : String =
+'delete'.concat(javaName(aResource, true))
+/]
+
+[query public updateResourceMethodName(aBasicCapability: BasicCapability, aResource: Resource) : String =
+'update'.concat(javaName(aResource, true))
+/]
+
[query public getResourceMethodResourceType(aBasicCapability: BasicCapability, aResource: Resource) : String =
javaClassName(aResource)
/]
@@ -281,6 +293,22 @@ else
endif
/]
+[query public updateResourceMethodResourceType(aBasicCapability: BasicCapability, aResource: Resource) : String =
+javaClassName(aResource)
+/]
+
+[query public updateResourceMethodReturnType(aBasicCapability: BasicCapability, aResource: Resource) : String =
+'Response'
+/]
+
+[query public deleteResourceMethodResourceType(aBasicCapability: BasicCapability, aResource: Resource) : String =
+javaClassName(aResource)
+/]
+
+[query public deleteResourceMethodReturnType(aBasicCapability: BasicCapability, aResource: Resource) : String =
+'Response'
+/]
+
[query public instanceMethodSignature(aResource: Resource, aBasicCapability: BasicCapability, forJAXRSMethod : Boolean) : String =
methodSignature(instanceCompositeID(aResource, aBasicCapability), forJAXRSMethod)
/]