From c51b21e4eed2884f2c10db6cfa9baffd04903534 Mon Sep 17 00:00:00 2001
From: Miguel Angel Reina Ortega <miguelangel.reinaortega@etsi.org>
Date: Thu, 9 Jun 2016 17:15:00 +0200
Subject: [PATCH] Output from oneM2M Plugtests#2 (part 3) - Handling of
 generation of addresses depending on the address format + selection of
 originator

---
 OneM2M_Functions.ttcn  | 309 ++++++++++++++-------
 OneM2M_Pixits.ttcn     |   6 +-
 OneM2M_Templates.ttcn  |  69 +++--
 OneM2M_TestSystem.ttcn |   7 +-
 OneM2M_Testcases.ttcn  | 612 ++++++++++++-----------------------------
 OneM2M_Types.ttcn      |  19 +-
 6 files changed, 460 insertions(+), 562 deletions(-)

diff --git a/OneM2M_Functions.ttcn b/OneM2M_Functions.ttcn
index ac9e7ac..34b4f7e 100644
--- a/OneM2M_Functions.ttcn
+++ b/OneM2M_Functions.ttcn
@@ -7,7 +7,7 @@
  *  
  *  @author     ETSI
  *  @version    $URL: https://forge.etsi.org/svn/oneM2M/trunk/ttcn/OneM2M_Functions.ttcn $
- *              $Id: OneM2M_Functions.ttcn 98 2016-06-02 07:34:39Z reinaortega $
+ *              $Id: OneM2M_Functions.ttcn 99 2016-06-09 15:04:43Z reinaortega $
  *  @desc       Module containing functions for oneM2M
  *
  */
@@ -46,18 +46,25 @@ module OneM2M_Functions {
 	
 	group preambleFunctions {
 
-		function f_preamble_registerAe(in template (value) AccessControlOperations p_allowedOperations := int63) runs on M2M {//c_CRUDNDi
+		function f_preamble_registerAe(in template (value) AccessControlOperations p_allowedOperations := int63) runs on M2M return integer{//c_CRUDNDi
 		
 			var RequestPrimitive v_request;
 			var M2MResponsePrimitive v_response;
-			var XSD.ID v_acpId := "0";
+			var integer v_aeAuxIndex := -1;
+			var integer v_acpAuxIndex := -1;
 		
 			if(PX_ACP_SUPPORT){
-				v_acpId := f_createAccessControlPolicyAux(p_allowedOperations := p_allowedOperations);
+				v_acpAuxIndex := f_createAccessControlPolicyAux(p_allowedOperations := p_allowedOperations);
 			}
 			
-			if(v_acpId != "0") {
-				mcaPort.send(m_request(m_createAeAux({v_acpId})));
+			if(v_acpAuxIndex != -1) {
+				vc_resourcesIndexToBeDeleted := {v_acpAuxIndex};
+				v_request := valueof(m_createAeAux({f_getResourceId(vc_resourcesList[v_acpAuxIndex].resource)}));
+				
+				//TODO Test, to be removed
+				v_request.to_ := f_addPrefix(f_getResourceAddress());
+				
+    			mcaPort.send(m_request(v_request));
 				//mcaPort.send(m_request(m_createAeAux(p_name, {PX_URI_CSE & PX_CSE_NAME & "/" & c_acpAuxName})));
 			} else {
 				mcaPort.send(m_request(m_createAeAux()));
@@ -67,8 +74,12 @@ module OneM2M_Functions {
 				[] mcaPort.receive(mw_responseOK) -> value v_response {
 					tc_ac.stop;
 					log("Preamble: Application registered successfuly");
-					if(ischosen(v_response.responsePrimitive_.primitiveContent.any_1[0].AE)) {
-						vc_aeAux := v_response.responsePrimitive_.primitiveContent.any_1[0].AE;
+					if(ischosen(v_response.responsePrimitive_.primitiveContent.any_1[0].AE_optional)) {
+						vc_aeAux := v_response.responsePrimitive_.primitiveContent.any_1[0].AE_optional;
+						
+						v_aeAuxIndex := f_setResource(v_response.responsePrimitive_.primitiveContent);
+						vc_resourcesIndexToBeDeleted := vc_resourcesIndexToBeDeleted & {v_aeAuxIndex};
+						
 						if(ispresent(vc_aeAux.aE_ID)){
 							f_sendAcPrimitive("AE-ID_changed", oct2char(unichar2oct(vc_aeAux.aE_ID)));
 						} else {
@@ -91,6 +102,8 @@ module OneM2M_Functions {
 					stop;
 				}
 			}	
+			
+			return v_aeAuxIndex;
 		
 		}
 	
@@ -99,62 +112,45 @@ module OneM2M_Functions {
 	group postambleFunctions {
 
 		function f_postamble_deleteResources() runs on M2M {
-		
+			var integer i;
+			var XSD.ID v_resourceAddress;
 			var M2MResponsePrimitive v_response;
 			var RequestPrimitive v_request;
 			
 			if (PX_RUN_POSTAMBLE) {
-				if(PX_UNSTRUCTURED)
-				{
-					v_request := valueof(m_deleteAe("/" & vc_aeAux.aE_ID));
-					v_request.from_ := vc_aeAux.aE_ID;
-					mcaPort.send(m_request(v_request));
-				} else {
-					mcaPort.send(m_request(m_deleteAe(PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName)));
-				}
-				tc_ac.start;
-				alt {
-					[] mcaPort.receive(mw_responseOK) {
-						tc_ac.stop;
-						log("Postamble: AE Resource deleted");
-					}
-					[] mcaPort.receive(mw_responseKO) {
-						tc_ac.stop;
-						log("Postamble: Error while deleting resource");
+				
+				for(i := 0; i < lengthof(vc_resourcesIndexToBeDeleted); i := i + 1) {
+					
+					v_resourceAddress := f_getResourceAddress(lengthof(vc_resourcesIndexToBeDeleted)-1 - i);
+					
+					v_request := valueof(m_deleteRequest(v_resourceAddress));
+					
+					if(PX_FROM_IS_AE_ID){
+						if(ischosen(vc_resourcesList[i].resource.any_1[0].AccessControlPolicy_optional)) {
+							v_request.from_ := PX_AE_ID_STEM;
+						} else {
+							v_request.from_ := vc_aeAux.aE_ID;
+						}
 					}
-					[] tc_ac.timeout {
-						log("Postamble: No answer while deleting resource");
+					mcaPort.send(m_request(v_request));
+					
+					tc_ac.start;
+					alt {
+						[] mcaPort.receive(mw_responseOK) {
+							tc_ac.stop;
+							log("Postamble: AE Resource deleted");
+						}
+						[] mcaPort.receive(mw_responseKO) {
+							tc_ac.stop;
+							log("Postamble: Error while deleting resource");
+						}
+						[] tc_ac.timeout {
+							log("Postamble: No answer while deleting resource");
+						}	
 					}	
-				}	
-				
-				if(PX_ACP_SUPPORT){
-        		
-    				if(PX_UNSTRUCTURED)
-    				{
-    					v_request := valueof(m_deleteAcp("/" & vc_acpAux.resourceID));
-    					v_request.from_ := PX_AE_ID_STEM;
-    					mcaPort.send(m_request(v_request));
-    				} else {
-    					mcaPort.send(m_request(m_deleteAcp(PX_URI_CSE & PX_CSE_NAME & "/" & c_acpAuxName)));
-    				}
-    				tc_ac.start;
-    				alt {
-    					[] mcaPort.receive(mw_responseOK) {
-    						tc_ac.stop;
-    						log("Postamble: ACP Resource deleted");
-    					}
-    					[] mcaPort.receive(mw_responseKO) {
-    						tc_ac.stop;
-    						log("Postamble: Error while deleting resource");
-    					}
-    					[] tc_ac.timeout {
-    						log("Postamble: No answer while deleting resource");
-    					}	
-    				}
 				}
-
 			}
-		
+						
 			f_postamble_default();
 		}
 			
@@ -189,20 +185,19 @@ module OneM2M_Functions {
 	
 	group getSetFunctions {
 
-		function f_getCreateRequestPrimitive(in ResourceType p_resourceType, XSD.ID p_aeResourceAddress, in template (omit) AccessControlOperations p_allowedOperations, template RequestPrimitive p_request) runs on M2M return RequestPrimitive {
+		function f_getCreateRequestPrimitive(in ResourceType p_resourceType, in template (omit) AccessControlOperations p_allowedOperations, template RequestPrimitive p_request, integer p_parentIndex) runs on M2M return RequestPrimitive {
 		
-			p_request.to_ := p_aeResourceAddress;
-			//p_request.name := p_name;
+            p_request.from_ := f_getOriginator(p_parentIndex);
+            
+            p_request.to_ := f_addPrefix(f_getResourceAddress(p_parentIndex));
+            
+            //p_request.name := p_name;
 		
 			if (p_resourceType == int1) {//AccessControlPolicy
 			
 			} 
 			if (p_resourceType == int9) {//group
-				if(PX_UNSTRUCTURED) {
-					p_request.primitiveContent.any_1[0].Group_optional := m_contentCreateGroup (1, {"/" & vc_aeAux.resourceID}, omit);
-				} else {
-					p_request.primitiveContent.any_1[0].Group_optional.memberIDs := {PX_CSE_ID & "/" & PX_CSE_NAME & "/" & c_aeAuxName};//vc_aeAux.resourceID
-				}
+				p_request.primitiveContent.any_1[0].Group_optional.memberIDs := {f_getResourceAddress(p_parentIndex)};
 			}
 		
 			if (p_resourceType == int15) {//pollingChannel
@@ -210,7 +205,9 @@ module OneM2M_Functions {
 			} 
 			
 			if (p_resourceType == int23) {//subscription
-				if(PX_FROM_IS_AE_ID) {
+				p_request.primitiveContent.any_1[0].Subscription_optional.notificationURI := {f_getResourceAddress(p_parentIndex)};
+					
+				/*if(PX_FROM_IS_AE_ID) {
 					if(PX_UNSTRUCTURED){
 						p_request.primitiveContent.any_1[0].Subscription_optional.notificationURI := {vc_aeAux.aE_ID};
 					} else {
@@ -218,15 +215,18 @@ module OneM2M_Functions {
 					}
 				} else {
 					p_request.primitiveContent.any_1[0].Subscription_optional.notificationURI := {"/" & PX_CSE_NAME & "/" & c_aeAuxName};
-				}
+				}*/
 			}
 		
 			return valueof(p_request);
 		}
 	
-		function f_getUpdateRequestPrimitive(in ResourceType p_resourceType, XSD.ID p_resourceAddress, template RequestPrimitive p_request) runs on M2M return RequestPrimitive {
+		function f_getUpdateRequestPrimitive(in ResourceType p_resourceType, integer p_resourceIndex, template RequestPrimitive p_request) runs on M2M return RequestPrimitive {
 		
-			p_request.to_ := p_resourceAddress;
+			p_request.from_ := f_getOriginator(p_resourceIndex);
+            
+			p_request.to_ := f_addPrefix(f_getResourceAddress(p_resourceIndex));
+			
 			//p_request.name := p_name;
 		
 			if (p_resourceType == int3) {//Container
@@ -275,34 +275,150 @@ module OneM2M_Functions {
 			if(ischosen(p_contentResource.any_1[0].Group_optional)) {
 				return p_contentResource.any_1[0].Group_optional.resourceID;
 			}
+			if(ischosen(p_contentResource.any_1[0].AE_optional)) {
+				return p_contentResource.any_1[0].AE_optional.resourceID;
+			}
+			return "1";
+  
+		}
+		
+		function f_getResourceName(PrimitiveContent p_contentResource) return XSD.ID {
+				
+			if(ischosen(p_contentResource.any_1[0].AccessControlPolicy_optional)) {
+				return p_contentResource.any_1[0].AccessControlPolicy_optional.resourceName;
+			}
+			if(ischosen(p_contentResource.any_1[0].Container_optional)) {
+				return p_contentResource.any_1[0].Container_optional.resourceName;
+			}
+			if(ischosen(p_contentResource.any_1[0].Schedule_optional)) {
+				return p_contentResource.any_1[0].Schedule_optional.resourceName;
+			}
+			if(ischosen(p_contentResource.any_1[0].PollingChannel_optional)) {
+				return p_contentResource.any_1[0].PollingChannel_optional.resourceName;
+			}
+			if(ischosen(p_contentResource.any_1[0].Subscription_optional)) {
+				return p_contentResource.any_1[0].Subscription_optional.resourceName;
+			}
+			if(ischosen(p_contentResource.any_1[0].Group_optional)) {
+				return p_contentResource.any_1[0].Group_optional.resourceName;
+			}
+			if(ischosen(p_contentResource.any_1[0].AE_optional)) {
+				return p_contentResource.any_1[0].AE_optional.resourceName;
+			}
+			
 			return "1";
   
 		}
 		
-		function f_getAttribute(in MyAttributeList p_attributeList, in XSD.NCName p_attributeName) return Attribute {
+		function f_getOriginator(integer  p_targetResourceIndex := -1) runs on M2M return XSD.AnyURI {
+			
+			if(p_targetResourceIndex == -1) {
+				return PX_AE_ID_STEM;
+			}	
+			
+			if(PX_FROM_IS_AE_ID) {
+				if(ischosen(vc_resourcesList[p_targetResourceIndex].resource.any_1[0].AE_optional)) {
+					return vc_resourcesList[p_targetResourceIndex].resource.any_1[0].AE_optional.aE_ID;
+				} else {
+					return f_getOriginator(vc_resourcesList[p_targetResourceIndex].parentIndex);
+				}
+			} else {
+				return PX_AE_ID_STEM;
+			}
+		}
+		
+		function f_getAttribute(in AttributeList p_attributeList, in XSD.NCName p_attributeName) return integer {
 		var integer i;
 		var Attribute v_attribute := {-, -};
 		
 		for (i:=0; i < lengthof(p_attributeList); i := i + 1){
-			if(p_attributeList[i].name == p_attributeName){
+			if(p_attributeList[i] == p_attributeName){
+				return i;
 			}	
 		}
 			
-		return v_attribute;
+		return -1;
 		
 		}
+		
+		function f_getResourceAddress(integer  p_targetResourceIndex := -1) runs on M2M return XSD.ID {
+			var XSD.ID v_resourceAddress;
+		
+			if(PX_ADDRESSING_FORMAT == e_cseRelative) {
+				
+				if(PX_UNSTRUCTURED) {
+					if(p_targetResourceIndex == -1) {
+						return "";
+					} else {
+						return f_getResourceId(vc_resourcesList[p_targetResourceIndex].resource);
+					}
+				} else {
+					if(p_targetResourceIndex == -1) {
+						return PX_CSE_NAME;
+					} else {
+						v_resourceAddress := f_getResourceAddress(vc_resourcesList[p_targetResourceIndex].parentIndex) & "/" & f_getResourceName(vc_resourcesList[p_targetResourceIndex].resource);
+						return v_resourceAddress;
+					}	
+				}
+				
+			} else if (PX_ADDRESSING_FORMAT == e_spRelative) {
+				if(PX_UNSTRUCTURED) {
+					if(p_targetResourceIndex == -1) {
+						return "/" & PX_CSE_ID;
+					} else {
+						v_resourceAddress := f_getResourceAddress() & "/" & f_getResourceId(vc_resourcesList[p_targetResourceIndex].resource);
+						return v_resourceAddress;
+					}
+				} else {
+					if(p_targetResourceIndex == -1) {
+						return "/" & PX_CSE_ID & "/" & PX_CSE_NAME;
+					} else {
+						v_resourceAddress := f_getResourceAddress(vc_resourcesList[p_targetResourceIndex].parentIndex) & "/" & f_getResourceName(vc_resourcesList[p_targetResourceIndex].resource);
+						return v_resourceAddress;
+					}
+				}
+			} else if (PX_ADDRESSING_FORMAT ==  e_absolute) {
+				if(PX_UNSTRUCTURED) {
+					if(p_targetResourceIndex == -1) {
+						return "";
+					} else {
+						return "";
+					}
+				} else {
+					if(p_targetResourceIndex == -1) {
+						return "";
+					} else {
+						return "";
+					}	
+				}				
+			} else {
+				return "";
+			}
+			
+		}
+		function f_setResource(PrimitiveContent p_resource, integer  p_parentIndex := -1) runs on M2M return integer {
+			
+			if(isbound(vc_resourcesList)) {
+				vc_resourcesList[lengthof(vc_resourcesList)] := {p_parentIndex, p_resource};
+			} else {
+				vc_resourcesList[0] := {p_parentIndex, p_resource};
+			}
+			return lengthof(vc_resourcesList)-1;
+					
+		}
 				
 	}//end group getSetFunctions
 	
 	group helpingFunctions {
 
-		function f_createResource(in ResourceType p_resourceType, XSD.ID p_parentResourceAddress, template RequestPrimitive p_requestPrimitive) runs on M2M return RequestPrimitive {
+		function f_createResource(in ResourceType p_resourceType, template RequestPrimitive p_requestPrimitive, integer p_parentIndex := -1) runs on M2M return integer {
 		
 			var M2MResponsePrimitive v_response;
 			var RequestPrimitive v_request;
 			var XSD.ID v_resourceId;
+			var integer v_resourceIndex := -1;
 			
-			v_request := f_getCreateRequestPrimitive(p_resourceType,p_parentResourceAddress, omit, p_requestPrimitive);
+			v_request := f_getCreateRequestPrimitive(p_resourceType, omit, p_requestPrimitive, p_parentIndex);
 		
 			mcaPort.send(m_request(v_request));
 			tc_ac.start;
@@ -310,7 +426,7 @@ module OneM2M_Functions {
 				[] mcaPort.receive(mw_responseOK) -> value v_response {
 					tc_ac.stop;
 					setverdict(pass, "f_createResource: Resource type " & int2str(enum2int(p_resourceType)) & " created successfuly");
-					vc_resourceId := f_getResourceId(v_response.responsePrimitive_.primitiveContent);
+					v_resourceIndex := f_setResource(v_response.responsePrimitive_.primitiveContent, p_parentIndex);
 				}
 				[] mcaPort.receive(mw_responseKO) {
 					tc_ac.stop;
@@ -325,24 +441,27 @@ module OneM2M_Functions {
 				}
 			}	
 			
-			return v_request;
+			return v_resourceIndex;
 	
 		}
 	
-		function f_createAccessControlPolicyAux(in template (value) XSD.String p_acpName := "MyAcp", in template (value) AccessControlOperations p_allowedOperations := int63) runs on M2M return XSD.ID{
-		
+		function f_createAccessControlPolicyAux(in template (value) XSD.String p_acpName := "MyAcp", in template (value) AccessControlOperations p_allowedOperations := int63) runs on M2M return integer{
+			var RequestPrimitive v_request;
 			var M2MResponsePrimitive v_response;
-			var XSD.ID v_acpId;
-		
-			mcaPort.send(m_request(m_createAcpAux(p_acpName := p_acpName, p_allowedOperations := p_allowedOperations)));
+			var integer v_acpAuxIndex := -1;
+			
+			v_request := valueof(m_createAcpAux(p_acpName := p_acpName, p_allowedOperations := p_allowedOperations));
+			
+			v_request.to_ := f_addPrefix(f_getResourceAddress());
+			
+			mcaPort.send(m_request(v_request));
 			tc_ac.start;
 			alt {
 				[] mcaPort.receive(mw_responseOK) -> value v_response {
 					tc_ac.stop;
 					setverdict(pass, "f_createAccessControlPolicy: Resource type " & int2str(1) & " created successfuly");
-					v_acpId := f_getResourceId(v_response.responsePrimitive_.primitiveContent);
-					vc_acpAux := v_response.responsePrimitive_.primitiveContent.any_1[0].AccessControlPolicy_optional;
-					return v_acpId;
+					v_acpAuxIndex := f_setResource(v_response.responsePrimitive_.primitiveContent);
+					vc_acpAux := v_response.responsePrimitive_.primitiveContent.any_1[0].AccessControlPolicy_optional;//TODO To be removed
 				}
 				[] mcaPort.receive(mw_responseKO) {
 					tc_ac.stop;
@@ -357,26 +476,27 @@ module OneM2M_Functions {
 				}
 			}	
 		
-			return "0";
+			return v_acpAuxIndex;
 
 		}
 			
 			
-		function f_createContainerResourceAux (XSD.ID p_parentResourceAddress) runs on M2M return RequestPrimitive {
+		function f_createContainerResourceAux (XSD.ID p_parentResourceAddress, integer p_parentIndex := -1) runs on M2M return integer {
 		
 			var M2MResponsePrimitive v_response;
 			var RequestPrimitive v_request;
-			var XSD.ID v_acpId;
+			var integer v_acpAuxIndex := -1;
+			var integer v_containerResourceIndex := -1;
 			
-			v_acpId := f_createAccessControlPolicyAux(p_acpName := "MyAcp_2");
+			v_acpAuxIndex := f_createAccessControlPolicyAux(p_acpName := "MyAcp_2");
 			
 			v_request := valueof(m_createContainerBase);
-			v_request.primitiveContent.any_1[0].Container_optional.accessControlPolicyIDs := {v_acpId};
+			v_request.primitiveContent.any_1[0].Container_optional.accessControlPolicyIDs := {f_getResourceId(vc_resourcesList[v_acpAuxIndex].resource)};
 			v_request.primitiveContent.any_1[0].Container_optional.resourceName := "MyContainerAux";
 			
-			f_createResource(int3, p_parentResourceAddress, v_request );
+			v_containerResourceIndex := f_createResource(int3, v_request, p_parentIndex);
 			
-			return v_request;		
+			return v_containerResourceIndex;		
 	
 		}
 		
@@ -385,11 +505,11 @@ module OneM2M_Functions {
 			
 			v_request := valueof(m_updateAcpBase);
 			
-			v_request.to_ := p_acpAddress;
+			v_request.to_ := f_addPrefix(p_acpAddress);
 			v_request.primitiveContent.any_1[0].AccessControlPolicy_optional.privileges.accessControlRule_list := {
     			{
-    				accessControlOriginators := {"*"}, //{"admin:admin"}
-    				accessControlOperations := p_allowedOperations,
+    				accessControlOriginators := PX_ACOR, //{"admin:admin"}
+    				accessControlOperations := valueof(p_allowedOperations),
     				accessControlContexts_list := omit
     			}
     		};
@@ -417,7 +537,8 @@ module OneM2M_Functions {
 			acPort.send(AcRequestPrimitive:{event, {charstring := v_data}});
 			
 		}
-		
+
+
 	}//end group helpingFunctions	
 
 
diff --git a/OneM2M_Pixits.ttcn b/OneM2M_Pixits.ttcn
index 71223c5..ef37fc7 100644
--- a/OneM2M_Pixits.ttcn
+++ b/OneM2M_Pixits.ttcn
@@ -7,7 +7,7 @@
  *  
  *  @author     ETSI
  *  @version    $URL: https://forge.etsi.org/svn/oneM2M/trunk/ttcn/OneM2M_Pixits.ttcn $
- *              $Id: OneM2M_Pixits.ttcn 97 2016-06-01 15:38:10Z reinaortega $
+ *              $Id: OneM2M_Pixits.ttcn 99 2016-06-09 15:04:43Z reinaortega $
  *  @desc       Module containing Pixits for oneM2M
  *
  */
@@ -40,13 +40,15 @@ module OneM2M_Pixits {
 	
 	modulepar ListOfURIs PX_ACOR := {"*"};
 	
+	modulepar AddressingFormat PX_ADDRESSING_FORMAT := e_cseRelative;
+	
 	modulepar charstring PX_SERIALIZATION := "JSON";
 	
 	modulepar charstring PX_PROTOCOL_BINDING := "HTTP";
 	
 	modulepar boolean PX_ACP_SUPPORT := true;
 	
-	modulepar charstring PX_CSE_ID := "/in-cse";
+	modulepar charstring PX_CSE_ID := "in-cse";
 	
 	modulepar boolean PX_FROM_IS_AE_ID := false;
 	
diff --git a/OneM2M_Templates.ttcn b/OneM2M_Templates.ttcn
index 0c3d4d3..824f586 100644
--- a/OneM2M_Templates.ttcn
+++ b/OneM2M_Templates.ttcn
@@ -7,7 +7,7 @@
  *  
  *  @author     ETSI
  *  @version    $URL: https://forge.etsi.org/svn/oneM2M/trunk/ttcn/OneM2M_Templates.ttcn $
- *              $Id: OneM2M_Templates.ttcn 97 2016-06-01 15:38:10Z reinaortega $
+ *              $Id: OneM2M_Templates.ttcn 99 2016-06-09 15:04:43Z reinaortega $
  *  @desc       Module containing templates for oneM2M
  *
  */
@@ -19,6 +19,7 @@ module OneM2M_Templates {
 	import from OneM2M_TypesAndValues all;
 	//import from OneM2M_AdditionalTypes all;
 	import from OneM2M_Pixits all;
+	import from OneM2M_Functions all;
 
 		
 	function f_rnd(in integer p_lower, in integer p_upper) return charstring {
@@ -73,7 +74,7 @@ module OneM2M_Templates {
         	
 			template (value) RequestPrimitive m_retrieveResource(XSD.ID p_targetResourceAddress) := {
 				operation := int2,
-				to_ := p_targetResourceAddress,
+				to_ := f_addPrefix(p_targetResourceAddress),
 				from_ := PX_AE_ID_STEM,
 				requestIdentifier := "m_retrieveResource" & f_rnd(1, 1000000),
 				resourceType := omit,
@@ -95,7 +96,7 @@ module OneM2M_Templates {
         	
         	template (value) RequestPrimitive m_retrieveResourceAttributeToOption(XSD.ID p_targetResourceAddress) := {
         		operation := int2,
-        		to_ := p_targetResourceAddress,
+        		to_ := f_addPrefix(p_targetResourceAddress),
         		from_ := PX_AE_ID_STEM,
         		requestIdentifier := "m_retrieveResourceAttributeOptionTo" & f_rnd(1, 1000000),
         		resourceType := omit,
@@ -117,7 +118,7 @@ module OneM2M_Templates {
         	
 			template (value) RequestPrimitive m_retrieveResourceAttributeContentOption(XSD.ID p_targetResourceAddress, in template (value) AttributeList_1 p_attributeList) := {
 				operation := int2,
-				to_ := p_targetResourceAddress,
+				to_ := f_addPrefix(p_targetResourceAddress),
 				from_ := PX_AE_ID_STEM,
 				requestIdentifier := "m_retrieveResourceAttributeContentOption" & f_rnd(1, 1000000),
 				resourceType := omit,
@@ -191,7 +192,7 @@ module OneM2M_Templates {
         	
 			template (value) RequestPrimitive m_updateContainer(XSD.ID p_targetResourceAddress, in template (omit) XSD.String p_resourceName) := {
 				operation := int3,
-				to_ := p_targetResourceAddress,
+				to_ := f_addPrefix(p_targetResourceAddress),
 				from_ := PX_AE_ID_STEM,
 				requestIdentifier := "m_updateContainer" & f_rnd(1, 1000000),
 				resourceType := omit,
@@ -374,8 +375,8 @@ module OneM2M_Templates {
         	
         	template (value) RequestPrimitive m_createAeAux(template (omit) AcpType p_accessControlPolicyIDs := omit ) := {
         		operation := int1,
-        		to_ := PX_URI_CSE & PX_CSE_NAME,
-        		from_ := PX_AE_ID_STEM,//TODO We should use omit, "s", or "c"
+        		to_ := "Not Initialized",
+        		from_ := omit,//PX_AE_ID_STEM,//TODO We should use omit, "s", or "c"
         		requestIdentifier := "m_createAe" & f_rnd(1, 1000000),
         		resourceType := int2,
         		primitiveContent := {
@@ -424,7 +425,7 @@ module OneM2M_Templates {
 				
         	template (value) RequestPrimitive m_createAcp(XSD.ID p_parentResourceAddress, in template (omit)  XSD.String p_name := c_defaultResourceName, in template (value) ListOfURIs p_acor := PX_ACOR, in template (value) AccessControlOperations p_allowedOperations := int63) := {
         		operation := int1,
-        		to_ := p_parentResourceAddress,
+        		to_ := f_addPrefix(p_parentResourceAddress),
         		from_ := PX_AE_ID_STEM,
         		requestIdentifier := "m_createAcp" & f_rnd(1, 1000000),
         		resourceType := int1,
@@ -449,7 +450,7 @@ module OneM2M_Templates {
         	
         	template (value) RequestPrimitive m_createAcpAux(in template (value) XSD.String p_acpName := c_acpAuxName, in template (value) ListOfURIs p_acor := PX_ACOR, in template (value) AccessControlOperations p_allowedOperations := int63 ) := {
         		operation := int1,
-        		to_ := PX_URI_CSE & PX_CSE_NAME,
+        		to_ := "Not Initialized",
         		from_ := PX_AE_ID_STEM,
         		requestIdentifier := "m_createAcp" & f_rnd(1, 1000000),
         		resourceType := int1,
@@ -500,7 +501,7 @@ module OneM2M_Templates {
 	
     		template (value) RequestPrimitive m_createContainer(XSD.ID p_parentResourceAddress, in template (omit) XSD.String p_resourceName) := {
     			operation := int1,
-    			to_ := p_parentResourceAddress,
+    			to_ := f_addPrefix(p_parentResourceAddress),
     			from_ := PX_AE_ID_STEM,
     			requestIdentifier := "m_createContainer" & f_rnd(1, 1000000),
     			resourceType := int3,
@@ -525,7 +526,7 @@ module OneM2M_Templates {
         	
     		template (value) RequestPrimitive m_createContentInstance(XSD.ID p_parentResourceAddress, XSD.String p_primitiveContent) := {
     			operation := int1,
-    			to_ := p_parentResourceAddress,
+    			to_ := f_addPrefix(p_parentResourceAddress),
     			from_ := "admin:admin",
     			requestIdentifier := "m_createContentInstance" & f_rnd(1, 1000000),
     			resourceType := int4,
@@ -575,7 +576,7 @@ module OneM2M_Templates {
         	
         	template (value) RequestPrimitive m_createGroup(XSD.ID p_parentResourceAddress, in template (omit)  XSD.String p_name, in template (omit) AcpType p_accessControlPolicyIDs, in template (value) XSD.AnyURI p_memberId ) := {
         		operation := int1,
-        		to_ := p_parentResourceAddress,
+        		to_ := f_addPrefix(p_parentResourceAddress),
         		from_ := PX_AE_ID_STEM,
         		requestIdentifier := "m_createGroup" & f_rnd(1, 1000000),
         		resourceType := int9,
@@ -625,7 +626,7 @@ module OneM2M_Templates {
         	
         	template (value) RequestPrimitive m_createPollingChannel(XSD.ID p_parentResourceAddress, in template (value)XSD.ID p_originatorId, in template (omit) AcpType p_accessControlPolicyIDs ) := {
         		operation := int1,
-        		to_ := p_parentResourceAddress,
+        		to_ := f_addPrefix(p_parentResourceAddress),
         		from_ := p_originatorId,
         		requestIdentifier := "m_createPollingChannel" & f_rnd(1, 1000000),
         		resourceType := int15,
@@ -677,7 +678,7 @@ module OneM2M_Templates {
         	
         	template (value) RequestPrimitive m_createSchedule(XSD.ID p_parentResourceAddress, in template (omit)  XSD.String p_name, in template (value) ScheduleEntries p_scheduleElement ) := {
         		operation := int1,
-        		to_ := p_parentResourceAddress,
+        		to_ := f_addPrefix(p_parentResourceAddress),
         		from_ := PX_AE_ID_STEM,
         		requestIdentifier := "m_createSchedule" & f_rnd(1, 1000000),
         		resourceType := int18,
@@ -727,7 +728,7 @@ module OneM2M_Templates {
         	
         	template (value) RequestPrimitive m_createSubscription(XSD.ID p_parentResourceAddress, in template (omit)  XSD.String p_name, in template (value) ListOfURIs p_notificationURI ) := {
         		operation := int1,
-        		to_ := p_parentResourceAddress,
+        		to_ := f_addPrefix(p_parentResourceAddress),
         		from_ := PX_AE_ID_STEM,
         		requestIdentifier := "m_createSubscription" & f_rnd(1, 1000000),
         		resourceType := int23,
@@ -753,9 +754,9 @@ module OneM2M_Templates {
     	
     	group Delete {
     	
-        	template (value) RequestPrimitive m_deleteAe(XSD.ID p_aeResourceAddress) := {
+        	template (value) RequestPrimitive m_deleteRequest(XSD.ID p_resourceAddress) := {
         		operation := int4,
-        		to_ := p_aeResourceAddress,
+        		to_ := f_addPrefix(p_resourceAddress),
         		from_ := PX_AE_ID_STEM,
         		requestIdentifier := "m_deleteAe" & f_rnd(1, 1000000),
         		resourceType := omit,
@@ -776,13 +777,13 @@ module OneM2M_Templates {
 
         	};
         	
-        	template (value) RequestPrimitive m_deleteAcp(XSD.ID p_resourceId) := {
-        		operation := int4,
-        		to_ := p_resourceId,
-        		from_ := PX_AE_ID_STEM,
-        		requestIdentifier := "m_deleteAcp" & f_rnd(1, 1000000),
-        		resourceType := omit,
-        		primitiveContent := omit,
+			template (value) RequestPrimitive m_delete(XSD.ID p_resourceAddress) := {
+				operation := int4,
+				to_ := p_resourceAddress,
+				from_ := PX_AE_ID_STEM,
+				requestIdentifier := "m_deleteAe" & f_rnd(1, 1000000),
+				resourceType := omit,
+				primitiveContent := omit, 
 				role := omit,
 				originatingTimestamp := omit,
 				requestExpirationTimestamp := omit,
@@ -797,7 +798,8 @@ module OneM2M_Templates {
 				filterCriteria := omit,
 				discoveryResultType := omit	
 
-        	};
+			};
+        	
     	}//end group Delete
 	}//end group RequestPrimitives
 	
@@ -821,7 +823,7 @@ module OneM2M_Templates {
     		pointOfAccess := {"http://127.0.0.1:1400/monitor"},//O //{"http://192.168.1.92:18080/notifications/AE"}, // TODO: Check this => AE PoA
     		ontologyRef := omit,//O
     		nodeLink := omit,//NP
-    		requestReachability := false,//M
+    		requestReachability := true,//M
     		contentSerialization := omit,//O
     		choice := omit//NP
     	};	
@@ -1827,6 +1829,21 @@ module OneM2M_Templates {
     		}	
     	};
 	}//end group ResponsePrimitives	
+	
+	function f_addPrefix(XSD.ID v_address) return XSD.ID {
+		//TODO Test, to be removed
+		if(PX_ADDRESSING_FORMAT == e_cseRelative) {
+			v_address := "/" & v_address;
+        } else if (PX_ADDRESSING_FORMAT == e_spRelative) {
+			v_address := "/~" & v_address;
+        } else {
+			v_address := "/~" & v_address;
+        } 
+		
+		return v_address;
+	
+	}
+	
 
 
 }  // end of module
diff --git a/OneM2M_TestSystem.ttcn b/OneM2M_TestSystem.ttcn
index 236721b..e480aa5 100644
--- a/OneM2M_TestSystem.ttcn
+++ b/OneM2M_TestSystem.ttcn
@@ -7,7 +7,7 @@
  *  
  *  @author     ETSI
  *  @version    $URL: https://forge.etsi.org/svn/oneM2M/trunk/ttcn/OneM2M_TestSystem.ttcn $
- *              $Id: OneM2M_TestSystem.ttcn 97 2016-06-01 15:38:10Z reinaortega $
+ *              $Id: OneM2M_TestSystem.ttcn 99 2016-06-09 15:04:43Z reinaortega $
  *  @desc       Test System module for oneM2M
  *
  */
@@ -42,9 +42,10 @@ module OneM2M_TestSystem {
 		timer tc_ac := PX_TAC;
 		timer tc_wait;
 		//global variables
-		var AE vc_aeAux;
+		var AE_optional vc_aeAux;//TODO To be removed
 		var AccessControlPolicy_optional vc_acpAux;
-		var XSD.ID vc_resourceId := "0";//TODO Clean it, I put it here cause the function f_createResource was already returning another value
+		var MyResourcesList vc_resourcesList;
+		var IntegerList vc_resourcesIndexToBeDeleted;
 	}
 			
 	type component M2MSystem {
diff --git a/OneM2M_Testcases.ttcn b/OneM2M_Testcases.ttcn
index e844dd3..ce37639 100644
--- a/OneM2M_Testcases.ttcn
+++ b/OneM2M_Testcases.ttcn
@@ -7,7 +7,7 @@
  *  
  *  @author     ETSI
  *  @version    $URL: https://forge.etsi.org/svn/oneM2M/trunk/ttcn/OneM2M_Testcases.ttcn $
- *              $Id: OneM2M_Testcases.ttcn 98 2016-06-02 07:34:39Z reinaortega $
+ *              $Id: OneM2M_Testcases.ttcn 99 2016-06-09 15:04:43Z reinaortega $
  *  @desc       Module containing test cases for oneM2M
  *
  */
@@ -21,7 +21,6 @@ module OneM2M_Testcases {
 	import from OneM2M_TypesAndValues all;
 	import from OneM2M_Pixits all;
 	import from OneM2M_Functions all;
-//	import from OneM2M_AdditionalTypes all;
 	import from LibCommon_Time {modulepar all};
 	import from XSD all;
 	
@@ -35,7 +34,7 @@ module OneM2M_Testcases {
 				timer t_ac := 5.0;
 				map(self:mcaPort, system:mcaPort); 
 		
-				mcaPort.send(m_request(m_deleteAe(PX_URI_CSE & PX_CSE_NAME & "/" & PX_RESOURCE_TO_BE_DELETED)));
+				mcaPort.send(m_request(m_deleteRequest(PX_URI_CSE & PX_CSE_NAME & "/" & PX_RESOURCE_TO_BE_DELETED)));
 				t_ac.start;
 				alt {
 					[] mcaPort.receive(mw_responseOK) {
@@ -70,7 +69,7 @@ module OneM2M_Testcases {
 				map(self:mcaPort, system:mcaPort); 
 					
 				for (i:=0; i<lengthof(PX_RESOURCES_TO_BE_DELETED); i:= i+1) {  
-					mcaPort.send(m_request(m_deleteAe(PX_URI_CSE & PX_CSE_NAME & "/" & PX_RESOURCES_TO_BE_DELETED[i])));
+					mcaPort.send(m_request(m_delete(PX_URI_CSE & "/" & PX_CSE_NAME & "/" & PX_RESOURCES_TO_BE_DELETED[i])));
 					t_ac.start;
 					alt {
 						[] mcaPort.receive(mw_responseOK) {
@@ -152,7 +151,8 @@ module OneM2M_Testcases {
 					// Local variables
 					var M2MResponsePrimitive v_response;
 					var RequestPrimitive v_request;
-					var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
+					var integer v_aeIndex := -1;
+					var integer v_resourceIndex := -1;
     										   
 					// Test control
     				
@@ -162,22 +162,12 @@ module OneM2M_Testcases {
 					// Test adapter configuration
     				
 					// Preamble
-					f_preamble_registerAe();//c_CRUDNDi);
-					
-					//Unstructured 
-					if(PX_UNSTRUCTURED) {
-						v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-					}
-					    
-					// AE_ID
-					if(PX_FROM_IS_AE_ID == true) {
-						p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-					}	
-					
-					f_createResource(p_resourceType, v_aeResourceAddress, p_requestPrimitive); 				
+					v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
+					    					
+					v_resourceIndex := f_createResource(p_resourceType, p_requestPrimitive, v_aeIndex); 				
     									
 					// Test Body
-					v_request := valueof(m_retrieveResource(v_aeResourceAddress & "/" & c_defaultResourceName));
+					v_request := valueof(m_retrieveResource(f_getResourceAddress(v_resourceIndex)));
 					v_request.resultContent := int0;//Nothing
 					mcaPort.send(m_request(v_request));
 					tc_ac.start;
@@ -267,7 +257,9 @@ module OneM2M_Testcases {
 					// Local variables
 					var M2MResponsePrimitive v_response;
 					var RequestPrimitive v_request;
-					var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
+					
+					var integer v_aeIndex := -1;
+					var integer v_resourceIndex := -1;
     										   
 					// Test control
     				
@@ -277,22 +269,12 @@ module OneM2M_Testcases {
 					// Test adapter configuration
     				
 					// Preamble
-					f_preamble_registerAe();//c_CRUDNDi);
+					v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 					
-					//Unstructured 
-					if(PX_UNSTRUCTURED) {
-						v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-					}
-					    
-					// AE_ID
-					if(PX_FROM_IS_AE_ID == true) {
-						p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-					}	
-					
-					f_createResource(p_resourceType, v_aeResourceAddress, p_requestPrimitive); 				
+					v_resourceIndex := f_createResource(p_resourceType, p_requestPrimitive, v_aeIndex); 				
     									
 					// Test Body
-					v_request := valueof(m_retrieveResource(v_aeResourceAddress & "/" & c_defaultResourceName));
+					v_request := valueof(m_retrieveResource(f_getResourceAddress(v_resourceIndex)));
 					v_request.resultContent := int1;//Attributes
 					mcaPort.send(m_request(v_request));
 					tc_ac.start;
@@ -382,8 +364,10 @@ module OneM2M_Testcases {
 					// Local variables
 					var M2MResponsePrimitive v_response;
 					var RequestPrimitive v_request;
-					var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
-    										   
+					
+					var integer v_aeIndex := -1;
+					var integer v_resourceIndex := -1;
+ 						   
 					// Test control
     				
 					// Test component configuration
@@ -392,22 +376,12 @@ module OneM2M_Testcases {
 					// Test adapter configuration
     				
 					// Preamble
-					f_preamble_registerAe();//c_CRUDNDi);
-					
-					//Unstructured 
-					if(PX_UNSTRUCTURED) {
-						v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-					}
-					    
-					// AE_ID
-					if(PX_FROM_IS_AE_ID == true) {
-						p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-					}	
+					v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 					
-					f_createResource(p_resourceType, v_aeResourceAddress, p_requestPrimitive); 				
+					v_resourceIndex := f_createResource(p_resourceType, p_requestPrimitive, v_aeIndex); 				
     									
 					// Test Body
-					v_request := valueof(m_retrieveResource(v_aeResourceAddress & "/" & c_defaultResourceName));
+					v_request := valueof(m_retrieveResource(f_getResourceAddress(v_resourceIndex)));
 					v_request.resultContent := int2;//Attributes
 					mcaPort.send(m_request(v_request));
 					tc_ac.start;
@@ -497,8 +471,10 @@ module OneM2M_Testcases {
 					// Local variables
 					var M2MResponsePrimitive v_response;
 					var RequestPrimitive v_request;
-					var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
-    										   
+					
+					var integer v_aeIndex := -1;
+					var integer v_resourceIndex := -1;
+											   
 					// Test control
     				
 					// Test component configuration
@@ -507,22 +483,12 @@ module OneM2M_Testcases {
 					// Test adapter configuration
     				
 					// Preamble
-					f_preamble_registerAe();//c_CRUDNDi);
-					
-					//Unstructured 
-					if(PX_UNSTRUCTURED) {
-						v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-					}
-					    
-					// AE_ID
-					if(PX_FROM_IS_AE_ID == true) {
-						p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-					}	
+					v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 					
-					f_createResource(p_resourceType, v_aeResourceAddress, p_requestPrimitive); 				
+					v_resourceIndex := f_createResource(p_resourceType, p_requestPrimitive, v_aeIndex); 				
     									
 					// Test Body
-					v_request := valueof(m_retrieveResource(v_aeResourceAddress & "/" & c_defaultResourceName));
+					v_request := valueof(m_retrieveResource(f_getResourceAddress(v_resourceIndex)));
 					v_request.resultContent := int1;//Attributes
 					mcaPort.send(m_request(v_request));
 					tc_ac.start;
@@ -612,7 +578,9 @@ module OneM2M_Testcases {
 					// Local variables
 					var M2MResponsePrimitive v_response;
 					var RequestPrimitive v_request;
-					var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
+					
+					var integer v_aeIndex := -1;
+					var integer v_resourceIndex := -1;
     										   
 					// Test control
     				
@@ -622,22 +590,12 @@ module OneM2M_Testcases {
 					// Test adapter configuration
     				
 					// Preamble
-					f_preamble_registerAe();//c_CRUDNDi);
-					
-					//Unstructured 
-					if(PX_UNSTRUCTURED) {
-						v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-					}
-					    
-					// AE_ID
-					if(PX_FROM_IS_AE_ID == true) {
-						p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-					}	
+					v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 					
-					f_createResource(p_resourceType, v_aeResourceAddress, p_requestPrimitive); 				
+					v_resourceIndex := f_createResource(p_resourceType, p_requestPrimitive, v_aeIndex); 				
     									
 					// Test Body
-					v_request := valueof(m_retrieveResource(v_aeResourceAddress & "/" & c_defaultResourceName));
+					v_request := valueof(m_retrieveResource(f_getResourceAddress(v_resourceIndex)));
 					v_request.resultContent := int1;//Attributes
 					mcaPort.send(m_request(v_request));
 					tc_ac.start;
@@ -727,8 +685,10 @@ module OneM2M_Testcases {
 					// Local variables
 					var M2MResponsePrimitive v_response;
 					var RequestPrimitive v_request;
-					var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
-    										   
+					
+					var integer v_aeIndex := -1;
+					var integer v_resourceIndex := -1;
+     										   
 					// Test control
     				
 					// Test component configuration
@@ -737,22 +697,12 @@ module OneM2M_Testcases {
 					// Test adapter configuration
     				
 					// Preamble
-					f_preamble_registerAe();//c_CRUDNDi);
-					
-					//Unstructured 
-					if(PX_UNSTRUCTURED) {
-						v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-					}
-					    
-					// AE_ID
-					if(PX_FROM_IS_AE_ID == true) {
-						p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-					}	
+					v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 					
-					f_createResource(p_resourceType, v_aeResourceAddress, p_requestPrimitive); 				
+					v_resourceIndex := f_createResource(p_resourceType, p_requestPrimitive, v_aeIndex); 				
     									
 					// Test Body
-					v_request := valueof(m_retrieveResource(v_aeResourceAddress & "/" & c_defaultResourceName));
+					v_request := valueof(m_retrieveResource(f_getResourceAddress(v_resourceIndex)));
 					v_request.resultContent := int1;//Attributes
 					mcaPort.send(m_request(v_request));
 					tc_ac.start;
@@ -842,7 +792,9 @@ module OneM2M_Testcases {
 					// Local variables
 					var M2MResponsePrimitive v_response;
 					var RequestPrimitive v_request;
-					var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
+					
+					var integer v_aeIndex := -1;
+					var integer v_resourceIndex := -1;
     										   
 					// Test control
     				
@@ -852,22 +804,12 @@ module OneM2M_Testcases {
 					// Test adapter configuration
     				
 					// Preamble
-					f_preamble_registerAe();//c_CRUDNDi);
-					
-					//Unstructured 
-					if(PX_UNSTRUCTURED) {
-						v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-					}
-					    
-					// AE_ID
-					if(PX_FROM_IS_AE_ID == true) {
-						p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-					}	
+					v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 					
-					f_createResource(p_resourceType, v_aeResourceAddress, p_requestPrimitive); 				
+					v_resourceIndex := f_createResource(p_resourceType, p_requestPrimitive, v_aeIndex); 				
     									
 					// Test Body
-					v_request := valueof(m_retrieveResource(v_aeResourceAddress & "/" & c_defaultResourceName));
+					v_request := valueof(m_retrieveResource(f_getResourceAddress(v_resourceIndex)));
 					v_request.resultContent := int1;//Attributes
 					mcaPort.send(m_request(v_request));
 					tc_ac.start;
@@ -1003,7 +945,8 @@ module OneM2M_Testcases {
     					// Local variables
     					var M2MResponsePrimitive v_response;
     					var RequestPrimitive v_request;
-    					var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
+    					
+						var integer v_aeIndex := -1;
     										   
     					// Test control
     				
@@ -1013,21 +956,11 @@ module OneM2M_Testcases {
     					// Test adapter configuration
     				
     					// Preamble
-    					f_preamble_registerAe();//c_CRUDNDi); 
-    					
-						//Unstructured 
-					    if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-					    }
-					    
-					    // AE_ID
-					    if(PX_FROM_IS_AE_ID == true) {
-							p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-					    }				
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi); 			
     									
     					// Test Body
     					
-    					v_request := f_getCreateRequestPrimitive(p_resourceType, v_aeResourceAddress, omit, p_requestPrimitive);
+    					v_request := f_getCreateRequestPrimitive(p_resourceType, omit, p_requestPrimitive, v_aeIndex);
 						
     					mcaPort.send(m_request(v_request));
     					tc_ac.start;
@@ -1163,7 +1096,8 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
+						
+						var integer v_aeIndex := -1;
 										   
 						// Test control
 				
@@ -1173,21 +1107,10 @@ module OneM2M_Testcases {
 						// Test adapter configuration
 				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi); 
-						
-						//Unstructured 
-					    if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-					    }
-							
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-						}				
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi); 		
 									
 						// Test Body
-						v_request := f_getCreateRequestPrimitive(p_resourceType, v_aeResourceAddress, omit, p_requestPrimitive);
+						v_request := f_getCreateRequestPrimitive(p_resourceType, omit, p_requestPrimitive, v_aeIndex);
 						
 						mcaPort.send(m_request(v_request));
 						tc_ac.start;
@@ -1258,7 +1181,9 @@ module OneM2M_Testcases {
     					// Local variables
     					var M2MResponsePrimitive v_response;
     					var RequestPrimitive v_request;
-    					var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
+    					
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
     										   
     					// Test control
     				
@@ -1268,19 +1193,11 @@ module OneM2M_Testcases {
     					// Test adapter configuration
     				
     					// Preamble
-						f_preamble_registerAe();//c_CRUDNDi);
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-  					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-						}	
+						v_resourceIndex := f_createResource(p_resourceType, p_requestPrimitive, v_aeIndex); 	
 						
-    					v_request := f_createResource(p_resourceType, v_aeResourceAddress, p_requestPrimitive); 				
+						v_request := f_getCreateRequestPrimitive(p_resourceType, omit, p_requestPrimitive, v_aeIndex);			
   					    						    									
     					// Test Body
 						v_request.requestIdentifier := "Existing resource";
@@ -1355,8 +1272,9 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
-    										   
+						
+						var integer v_aeIndex := -1;
+											   
 						// Test control
     				
 						// Test component configuration
@@ -1366,26 +1284,16 @@ module OneM2M_Testcases {
     				
 						// Preamble
 						if (p_resourceType != int23) {
-							f_preamble_registerAe(int62);//c_RUDNDi);
+							v_aeIndex := f_preamble_registerAe(int62);//c_RUDNDi);
 						} else {
-							f_preamble_registerAe(int60);//c_UDNDi);
-						}	 				
-    								
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-						}	
+							v_aeIndex := f_preamble_registerAe(int60);//c_UDNDi);
+						}	 					
 							
 						// Test Body
 						if(p_resourceType == int15) {
-							v_request := valueof(m_createPollingChannel(v_aeResourceAddress, PX_AE_ID_STEM, omit));
+							v_request := valueof(m_createPollingChannel(f_getResourceAddress(v_aeIndex), PX_AE_ID_STEM, omit));
 						} else {
-							v_request := f_getCreateRequestPrimitive(p_resourceType,v_aeResourceAddress, omit, p_requestPrimitive);
+							v_request := f_getCreateRequestPrimitive(p_resourceType, omit, p_requestPrimitive, v_aeIndex);
 						}
 						
 						mcaPort.send(m_request(v_request));
@@ -1493,8 +1401,10 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
-    										   
+						
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
+						    										   
 						// Test control
     				
 						// Test component configuration
@@ -1503,26 +1413,13 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi);
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-						}	
-						
-						f_createResource(p_resourceType, v_aeResourceAddress, p_requestPrimitive); 				
+						v_resourceIndex := f_createResource(p_resourceType, p_requestPrimitive, v_aeIndex); 				
     									
 						// Test Body
-						if(PX_UNSTRUCTURED){
-							mcaPort.send(m_request(m_retrieveResource("/" & vc_resourceId)));
-						} else {
-							mcaPort.send(m_request(m_retrieveResource(v_aeResourceAddress & "/" & c_defaultResourceName)));
-						}
+						mcaPort.send(m_request(m_retrieveResource(f_getResourceAddress(v_resourceIndex))));
+
 						tc_ac.start;
 						alt {
 							[] mcaPort.receive(mw_responseOK(p_contentResponse)) -> value v_response {
@@ -1558,7 +1455,9 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
+						
+						var integer v_aeIndex := -1;
+						var XSD.ID v_resourceId := "NonExisting";
     										   
 						// Test control
     				
@@ -1568,19 +1467,15 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi); 		
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi); 		
 						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-  					   				
 						// Test Body
-						if(PX_UNSTRUCTURED){
-							mcaPort.send(m_request(m_retrieveResource("/" & vc_resourceId)));
+						if(PX_UNSTRUCTURED) {
+							mcaPort.send(m_request(m_retrieveResource(f_getResourceAddress(-2) & "/" & v_resourceId)));
 						} else {
-							mcaPort.send(m_request(m_retrieveResource(v_aeResourceAddress & "/" & c_defaultResourceName)));
+							mcaPort.send(m_request(m_retrieveResource(f_getResourceAddress(v_aeIndex) & "/" & v_resourceId)));
 						}
+
 						tc_ac.start;
 						alt {
 							[] mcaPort.receive(mw_response(int4004)) -> value v_response {
@@ -1653,10 +1548,16 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
+						
 						var XSD.ID v_acpId;
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
     										   
 						// Test control
+						if(not(PX_ACP_SUPPORT)) {
+							log(testcasename() & ":AccessControlPolicy support is required for executing this test case");
+							stop;
+						}
     				
 						// Test component configuration
 						f_cf01Up();
@@ -1664,31 +1565,15 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi;
-						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-						}	
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi;
 										
- 						f_createResource(p_resourceType, v_aeResourceAddress, p_requestPrimitive); 	
- 						if(PX_UNSTRUCTURED){
-							f_updateAcpAuxResource("/" & vc_acpAux.resourceID, int61); //c_CUDNDi
- 						} else {
- 							f_updateAcpAuxResource(PX_URI_CSE & PX_CSE_NAME & "/" & c_acpAuxName, int61); //c_CUDNDi
- 						}
+ 						v_resourceIndex := f_createResource(p_resourceType, p_requestPrimitive, v_aeIndex); 	
+
+						f_updateAcpAuxResource(f_getResourceAddress(0), int61); //c_CUDNDi
 								
 						// Test Body
-						if(PX_UNSTRUCTURED){
-							mcaPort.send(m_request(m_retrieveResource("/" & vc_resourceId)));
-						} else {
-							mcaPort.send(m_request(m_retrieveResource(v_aeResourceAddress & "/" & c_defaultResourceName)));
-						}
+						mcaPort.send(m_request(m_retrieveResource(f_getResourceAddress(v_resourceIndex))));
+
 						tc_ac.start;
 						alt {
 							[] mcaPort.receive(mw_response(int4103)) -> value v_response {
@@ -1783,8 +1668,10 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
+						
 						var XSD.String v_attribute := "#pi";//Attribute parentId to be retrieved
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
     										   
 						// Test control
     				
@@ -1794,26 +1681,13 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi);
-						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-						}	
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);	
 						
-						f_createResource(p_resourceType, v_aeResourceAddress, p_requestPrimitive); 				
+						v_resourceIndex := f_createResource(p_resourceType, p_requestPrimitive, v_aeIndex); 				
     									
 						// Test Body
-						if(PX_UNSTRUCTURED){
-							mcaPort.send(m_request(m_retrieveResourceAttributeToOption("/" & vc_resourceId & v_attribute)));
-						} else {
-							mcaPort.send(m_request(m_retrieveResourceAttributeToOption(v_aeResourceAddress & "/" & c_defaultResourceName & v_attribute)));
-						}
+						mcaPort.send(m_request(m_retrieveResourceAttributeToOption(f_getResourceAddress(v_resourceIndex) & v_attribute)));
+
 						tc_ac.start;
 						alt {
 							[] mcaPort.receive(mw_responseOK(p_contentResponse)) -> value v_response {
@@ -1909,8 +1783,10 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
+						
 						var XSD.String v_attribute := "#pi";//Attribute parentId to be retrieved
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
     										   
 						// Test control
     				
@@ -1920,26 +1796,13 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi);
-						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-						}	
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 						
-						f_createResource(p_resourceType, v_aeResourceAddress, p_requestPrimitive); 				
+						v_resourceIndex := f_createResource(p_resourceType, p_requestPrimitive, v_aeIndex); 				
     									
 						// Test Body
-						if(PX_UNSTRUCTURED){
-							mcaPort.send(m_request(m_retrieveResourceAttributeContentOption("/" & vc_resourceId,	{"pi"})));
-						} else {
-							mcaPort.send(m_request(m_retrieveResourceAttributeContentOption(v_aeResourceAddress & "/" & c_defaultResourceName,	{"pi"})));
-						}
+						mcaPort.send(m_request(m_retrieveResourceAttributeContentOption(f_getResourceAddress(v_resourceIndex) ,	{"pi"})));
+
 						tc_ac.start;
 						alt {
 							[] mcaPort.receive(mw_responseOK(p_contentResponse)) -> value v_response {
@@ -2041,7 +1904,9 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
+						
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
     										   
 						// Test control
     				
@@ -2051,27 +1916,14 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi);
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-						}	
-						
-						f_createResource(p_resourceType, v_aeResourceAddress, p_requestPrimitive); 				
+						v_resourceIndex := f_createResource(p_resourceType, p_requestPrimitive, v_aeIndex); 				
     									
 						// Test Body
-						if(PX_UNSTRUCTURED){
-							mcaPort.send(m_request(m_retrieveResourceAttributeContentOption("/" & vc_resourceId, {"parentID", "creationTime"})));
-						} else {
-							mcaPort.send(m_request(m_retrieveResourceAttributeContentOption(v_aeResourceAddress & "/" & c_defaultResourceName,
+						mcaPort.send(m_request(m_retrieveResourceAttributeContentOption(f_getResourceAddress(v_resourceIndex) ,
 																						{"parentID", "creationTime"})));
-						}
+
 						tc_ac.start;
 						alt {
 							[] mcaPort.receive(mw_responseOK(p_contentResponse)) -> value v_response {
@@ -2143,7 +1995,9 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
+						
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
 											   
 						// Test control
     				
@@ -2153,27 +2007,14 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi);
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-						}	
-						
-						f_createResource(p_resourceType, v_aeResourceAddress,  p_requestPrimitive); 				
+						v_resourceIndex := f_createResource(p_resourceType, p_requestPrimitive, v_aeIndex); 				
     									
 						// Test Body
-						if(PX_UNSTRUCTURED){
-							mcaPort.send(m_request(m_retrieveResourceAttributeContentOption("/" & vc_resourceId, {"lbl"})));
-						} else {
-							mcaPort.send(m_request(m_retrieveResourceAttributeContentOption(v_aeResourceAddress & "/" & c_defaultResourceName,
+						mcaPort.send(m_request(m_retrieveResourceAttributeContentOption(f_getResourceAddress(v_resourceIndex),
 																						{"lbl"})));
-						}
+
 						tc_ac.start;
 						alt {
 							[] mcaPort.receive(mw_response(int4004)) -> value v_response {
@@ -2244,7 +2085,9 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
+						
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
 											   
 						// Test control
     				
@@ -2254,27 +2097,14 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi);
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_requestPrimitive.from_ := vc_aeAux.aE_ID;
-						}	
-						
-						f_createResource(p_resourceType, v_aeResourceAddress, p_requestPrimitive); 				
+						v_resourceIndex := f_createResource(p_resourceType, p_requestPrimitive, v_aeIndex); 				
     									
 						// Test Body
-						if(PX_UNSTRUCTURED){
-							mcaPort.send(m_request(m_retrieveResourceAttributeContentOption("/" & vc_resourceId, {"labels", "announceTo"})));
-						} else {
-							mcaPort.send(m_request(m_retrieveResourceAttributeContentOption(v_aeResourceAddress & "/" & c_defaultResourceName,
+						mcaPort.send(m_request(m_retrieveResourceAttributeContentOption(f_getResourceAddress(v_resourceIndex),
 																						{"lbl", "at"})));
-						}
+
 						tc_ac.start;
 						alt {
 							[] mcaPort.receive(mw_response(int4004)) -> value v_response {
@@ -2465,8 +2295,9 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
-						var XSD.String v_targetResourceAddress := v_aeResourceAddress & "/" & c_defaultResourceName;
+						
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
     										   
 						// Test control
     				
@@ -2476,23 +2307,12 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi);
-						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_createRequestPrimitive.from_ := vc_aeAux.aE_ID;
-							p_updateRequestPrimitive.from_ := vc_aeAux.aE_ID;
-						}
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 						
-						f_createResource(p_resourceType, v_aeResourceAddress, p_createRequestPrimitive); 				
+						v_resourceIndex := f_createResource(p_resourceType, p_createRequestPrimitive, v_aeIndex); 				
     									
 						// Test Body
-						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_targetResourceAddress, p_updateRequestPrimitive);
+						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_resourceIndex, p_updateRequestPrimitive);
 						
 						mcaPort.send(m_request(v_request));
 						tc_ac.start;
@@ -2658,8 +2478,8 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
-    					var XSD.String v_targetResourceAddress := v_aeResourceAddress & "/" & c_defaultResourceName;
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
     										   
 						// Test control
     				
@@ -2669,23 +2489,12 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi);
-						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_createRequestPrimitive.from_ := vc_aeAux.aE_ID;
-							p_updateRequestPrimitive.from_ := vc_aeAux.aE_ID;
-						}
-						
-						f_createResource(p_resourceType, v_aeResourceAddress, p_createRequestPrimitive); 				
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
+											    
+						v_resourceIndex := f_createResource(p_resourceType, p_createRequestPrimitive, v_aeIndex); 				
     									
 						// Test Body
-						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_targetResourceAddress, p_updateRequestPrimitive);
+						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_resourceIndex, p_updateRequestPrimitive);
 						
 						mcaPort.send(m_request(v_request));
 						tc_ac.start;
@@ -2887,8 +2696,8 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName;
-						var XSD.String v_targetResourceAddress := v_aeResourceAddress & "/" & c_defaultResourceName;
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
     										   
 						// Test control
     				
@@ -2898,23 +2707,12 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi);
-						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_createRequestPrimitive.from_ := vc_aeAux.aE_ID;
-							p_updateRequestPrimitive.from_ := vc_aeAux.aE_ID;
-						}
-						
-						f_createResource(p_resourceType, v_aeResourceAddress, p_createRequestPrimitive); 				
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
+											    
+						v_resourceIndex := f_createResource(p_resourceType, p_createRequestPrimitive, v_aeIndex); 				
     									
 						// Test Body
-						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_targetResourceAddress, p_updateRequestPrimitive);
+						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_resourceIndex, p_updateRequestPrimitive);
 						
 						mcaPort.send(m_request(v_request, p_nullFields));
 						tc_ac.start;
@@ -3200,8 +2998,8 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName ;
-						var XSD.String v_targetResourceAddress := v_aeResourceAddress & "/" & c_defaultResourceName;
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
     										   
 						// Test control
     				
@@ -3211,23 +3009,12 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi);
-
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_createRequestPrimitive.from_ := vc_aeAux.aE_ID;
-							p_updateRequestPrimitive.from_ := vc_aeAux.aE_ID;
-						}
-						
-						f_createResource(p_resourceType, v_aeResourceAddress, p_createRequestPrimitive); 				
+						v_resourceIndex := f_createResource(p_resourceType, p_createRequestPrimitive, v_aeIndex); 				
     									
 						// Test Body
-						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_targetResourceAddress, p_updateRequestPrimitive);
+						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_resourceIndex, p_updateRequestPrimitive);
 						
 						mcaPort.send(m_request(v_request, p_nullFields));
 						tc_ac.start;
@@ -3333,9 +3120,8 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName ;
-						var XSD.String v_targetResourceAddress := v_aeResourceAddress & "/" & c_defaultResourceName;
-    										   
+						var integer v_aeIndex := -1;
+											   
 						// Test control
     				
 						// Test component configuration
@@ -3344,25 +3130,17 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi);
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_updateRequestPrimitive.from_ := vc_aeAux.aE_ID;
-						}	
-																
 						// Test Body
-						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_targetResourceAddress, p_updateRequestPrimitive);
+						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_aeIndex, p_updateRequestPrimitive);
+						
+						v_request.to_ := v_request.to_ & "/" & c_defaultResourceName;
 						
 						mcaPort.send(m_request(v_request));
 						tc_ac.start;
 						alt {
-							[] mcaPort.receive(mw_response(int4004)) -> value v_response {
+							[] mcaPort.receive(mw_response(int4005)) -> value v_response {
 								tc_ac.stop;
 								setverdict(pass, testcasename() & ": Resource " & c_defaultResourceName & " of type " & int2str(enum2int(p_resourceType)) & " not found");
 							}
@@ -3456,8 +3234,8 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName ;
-						var XSD.String v_targetResourceAddress := v_aeResourceAddress & "/" & c_defaultResourceName;
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
     										   
 						// Test control
     				
@@ -3467,23 +3245,13 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe(int59);//c_CRDNDi);
+						v_aeIndex := f_preamble_registerAe(int59);//c_CRDNDi);
 						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_createRequestPrimitive.from_ := vc_aeAux.aE_ID;
-							p_updateRequestPrimitive.from_ := vc_aeAux.aE_ID;
-						}
 						
-						f_createResource(p_resourceType, v_aeResourceAddress, p_createRequestPrimitive); 				
+						v_resourceIndex := f_createResource(p_resourceType, p_createRequestPrimitive, v_aeIndex); 				
 																
 						// Test Body
-						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_targetResourceAddress, p_updateRequestPrimitive);
+						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_resourceIndex, p_updateRequestPrimitive);
 						
 						mcaPort.send(m_request(v_request));
 						tc_ac.start;
@@ -3586,8 +3354,8 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName ;
-						var XSD.String v_targetResourceAddress := v_aeResourceAddress & "/" & c_defaultResourceName;
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
     										   
 						// Test control
     				
@@ -3597,23 +3365,12 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi);
-						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_createRequestPrimitive.from_ := vc_aeAux.aE_ID;
-							p_updateRequestPrimitive.from_ := vc_aeAux.aE_ID;
-						}
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 						
-						f_createResource(p_resourceType, v_aeResourceAddress, p_createRequestPrimitive); 				
+						v_resourceIndex := f_createResource(p_resourceType, p_createRequestPrimitive, v_aeIndex); 				
 																
 						// Test Body
-						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_targetResourceAddress, p_updateRequestPrimitive);
+						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_resourceIndex, p_updateRequestPrimitive);
 						
 						mcaPort.send(m_request(v_request));
 						tc_ac.start;
@@ -3727,8 +3484,8 @@ module OneM2M_Testcases {
 						// Local variables
 						var M2MResponsePrimitive v_response;
 						var RequestPrimitive v_request;
-						var XSD.String v_aeResourceAddress := PX_URI_CSE & PX_CSE_NAME & "/" & c_aeAuxName ;
-						var XSD.String v_targetResourceAddress := v_aeResourceAddress & "/" & c_defaultResourceName;
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
     										   
 						// Test control
     				
@@ -3738,23 +3495,12 @@ module OneM2M_Testcases {
 						// Test adapter configuration
     				
 						// Preamble
-						f_preamble_registerAe();//c_CRUDNDi);
-						
-						//Unstructured 
-						if(PX_UNSTRUCTURED) {
-							v_aeResourceAddress := "/" & vc_aeAux.aE_ID;							
-						}
-					    
-						// AE_ID
-						if(PX_FROM_IS_AE_ID == true) {
-							p_createRequestPrimitive.from_ := vc_aeAux.aE_ID;
-							p_updateRequestPrimitive.from_ := vc_aeAux.aE_ID;
-						}
+						v_aeIndex := f_preamble_registerAe();//c_CRUDNDi);
 						
-						f_createResource(p_resourceType, v_aeResourceAddress, p_createRequestPrimitive); 				
+						v_resourceIndex := f_createResource(p_resourceType, p_createRequestPrimitive, v_aeIndex); 				
 																
 						// Test Body
-						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_targetResourceAddress, p_updateRequestPrimitive);
+						v_request := f_getUpdateRequestPrimitive(p_resourceType, v_resourceIndex, p_updateRequestPrimitive);
 						
 						mcaPort.send(m_request(v_request,p_nullFields));
 						tc_ac.start;
diff --git a/OneM2M_Types.ttcn b/OneM2M_Types.ttcn
index 86ac647..a9c6461 100644
--- a/OneM2M_Types.ttcn
+++ b/OneM2M_Types.ttcn
@@ -7,7 +7,7 @@
  *  
  *  @author     ETSI
  *  @version    $URL: https://forge.etsi.org/svn/oneM2M/trunk/ttcn/OneM2M_Types.ttcn $
- *              $Id: OneM2M_Types.ttcn 98 2016-06-02 07:34:39Z reinaortega $
+ *              $Id: OneM2M_Types.ttcn 99 2016-06-09 15:04:43Z reinaortega $
  *  @desc       Test System module for oneM2M
  *
  */
@@ -4401,9 +4401,20 @@ group invalidTypes {
 		
     	type NhURI ParentID;
     	
-    	//FIXME Must match the type of the response content when retrieving specific attributes
-    	type record of Attribute MyAttributeList;
-
+		type record MyResource {
+			integer parentIndex,
+			PrimitiveContent resource
+		};
+		
+		type record of MyResource MyResourcesList;
+		
+		type record of integer IntegerList;
+		
+		type enumerated AddressingFormat {
+			e_cseRelative,
+			e_spRelative, 
+			e_absolute
+		}
 	}
 
 }
-- 
GitLab