diff -r ebc84c812384 -r 46218c8b8afa Symbian3/PDK/Source/GUID-B5CC77D2-5871-51D8-B359-77EFC081B423.dita --- a/Symbian3/PDK/Source/GUID-B5CC77D2-5871-51D8-B359-77EFC081B423.dita Thu Mar 11 15:24:26 2010 +0000 +++ b/Symbian3/PDK/Source/GUID-B5CC77D2-5871-51D8-B359-77EFC081B423.dita Thu Mar 11 18:02:22 2010 +0000 @@ -1,110 +1,110 @@ - - - - - -Files -Containing Multiple Content Objects -

Content Access Framework provides a generic mechanism for exploring files -that contain multiple content objects. These files are often referred to as -archive files. This can be .ZIP compression archive or -a DRM protected archive, such as an OMA .DCF file. An -application can explore the content objects inside a file using the ContentAccess::CContent class.

-
Structure of a file containing multiple content objects

An -archive file can have content objects and meta-data or information associated -with the content. This meta-data can include information, such as the MIME -type of the content, the encryption algorithm, the compressed size of the -content. This information can be retrieved from the attributes related to -a content object, see Content -Object Attributes.

The content and meta-data may also be arranged -in a hierachy with container objects grouping content objects together. A -typical archive can have a complex structure as the example shown below:

- -

In this scenario, the file itself can be considered as the top level -container. All other content, containers and meta-data are nested inside. -In an archive file, applications can quickly search for the content objects -they are interested in by using ContentAccess::CContent::Search(), -see Consumer API Tutorial.

-
Identifying -a content object within a file

Archive files containing several -content objects cannot be referred to using just the URI of the file. The -Content Access Framework uses a concept of virtual paths to identify content -objects within a file. The virtual path is a combination of the file URI and -a unique identifier supplied by the agent:

    -
  • URI: -the location of the file.

  • -
  • UniqueId: -the content object inside the file.

  • -

A content file is only handled by the agent that recognises it. The -unique identifier is not required to be decoded by anyone other than the agent -that generated it, so the format is left for the agent to implement as it -sees fit. For instance, an OMA DRM agent may put the Content ID (CID) in the UniqueId field.

The -only constraint is that the UniqueId must be unique within -the file. An application must be able to directly reference a content object -just using the UniqueId.

-
Objects used -to identify a content object within a file

Virtual path pointer -objects on the stack

The ContentAccess::TVirtualPathPtr is -used to point to two descriptors holding the URI of a file and the UniqueId of -a content object within the file. It can also be used to point to another TVirtualPathPtr. -Since it is only a pointer, the original descriptors used to initalise the TVirtualPathPtr must -not be destroyed or modified while the TVirtualPathPtr is -still in use.

Virtual path objects on the heap

The ContentAccess::CVirtualPath class -stores the file URI and content object UniqueId in its own -descriptors. There is a cast operator that allows the CVirtualPath to -be used as if it were a TVirtualPathPtr .

Examples

// Open a CContent object to browse the objects inside a file -CContent *c = CContent::NewL(_L("C:\file.dcf")); -CleanupStack::PushL(c); - -// Create an array to store the embedded objects -RStreamablePtrArray<CEmbeddedObject> myArray; - -// Get an array of the embedded objects within the current container in the file -c->GetEmbeddedObjects(myArray); - -// If necessary we can get a "mangled" version of the URI that -// references the particular object within the file -// i.e. "C:\file.dcf\\OBJECT1" - -CData* data = iContent->OpenContentL(EPlay,myArray[0]->UniqueId()); - -TFileName uri; -data->GetStringAttribute(EPreviewURI,uri); -. -. -. -// Now we can use our TPtrC later to create a TVirtualPath object from a URI -TVirtualPathPtr aPtr = aURI; - -// print the file URI "C:\file.dcf" -printf(aPtr.URI()); - -// print the content object's UniqueId "OBJECT1" -printf(aPtr.UniqueId()); - -// Create a copy of the virtual path on the heap so we don't have any ownership problems -CVirtualPath *myVirtualpath = CVirtualPath::NewL(aPtr) - -// Can now delete the CContent object without losing our VirtualPath -CleanupStack::PopAndDestroy(c);
-
Special cases for the UniqueId field

KNullDesC16() -- ""

A zero length UniqueId is used to refer -to the entire file. If a file is opened this way, no translation of the contents -is performed. The ability to open the file with no translation is required -for example to attach the file to an outgoing message. As with any other function -in CAF, access to the file is at the agent's discretion.

KDefaultContentObject() -- "DEFAULT"

Allows an application to refer to the default content -object within a file. In the case of an unprotected file handled by the F32Agent, -it is the entire file, the same as if the UniqueId "" was -used. Other agents, particularly those with a single content object embedded -within the file, use "DEFAULT" to refer to their only content -object.

Even though the DEFAULT content object is -supported, it is recommended that agents always use CContent to -enumerate the objects within the file.

+ + + + + +Files +Containing Multiple Content Objects +

Content Access Framework provides a generic mechanism for exploring files +that contain multiple content objects. These files are often referred to as +archive files. This can be .ZIP compression archive or +a DRM protected archive, such as an OMA .DCF file. An +application can explore the content objects inside a file using the ContentAccess::CContent class.

+
Structure of a file containing multiple content objects

An +archive file can have content objects and meta-data or information associated +with the content. This meta-data can include information, such as the MIME +type of the content, the encryption algorithm, the compressed size of the +content. This information can be retrieved from the attributes related to +a content object, see Content +Object Attributes.

The content and meta-data may also be arranged +in a hierachy with container objects grouping content objects together. A +typical archive can have a complex structure as the example shown below:

+ +

In this scenario, the file itself can be considered as the top level +container. All other content, containers and meta-data are nested inside. +In an archive file, applications can quickly search for the content objects +they are interested in by using ContentAccess::CContent::Search(), +see Consumer API Tutorial.

+
Identifying +a content object within a file

Archive files containing several +content objects cannot be referred to using just the URI of the file. The +Content Access Framework uses a concept of virtual paths to identify content +objects within a file. The virtual path is a combination of the file URI and +a unique identifier supplied by the agent:

    +
  • URI: +the location of the file.

  • +
  • UniqueId: +the content object inside the file.

  • +

A content file is only handled by the agent that recognises it. The +unique identifier is not required to be decoded by anyone other than the agent +that generated it, so the format is left for the agent to implement as it +sees fit. For instance, an OMA DRM agent may put the Content ID (CID) in the UniqueId field.

The +only constraint is that the UniqueId must be unique within +the file. An application must be able to directly reference a content object +just using the UniqueId.

+
Objects used +to identify a content object within a file

Virtual path pointer +objects on the stack

The ContentAccess::TVirtualPathPtr is +used to point to two descriptors holding the URI of a file and the UniqueId of +a content object within the file. It can also be used to point to another TVirtualPathPtr. +Since it is only a pointer, the original descriptors used to initalise the TVirtualPathPtr must +not be destroyed or modified while the TVirtualPathPtr is +still in use.

Virtual path objects on the heap

The ContentAccess::CVirtualPath class +stores the file URI and content object UniqueId in its own +descriptors. There is a cast operator that allows the CVirtualPath to +be used as if it were a TVirtualPathPtr .

Examples

// Open a CContent object to browse the objects inside a file +CContent *c = CContent::NewL(_L("C:\file.dcf")); +CleanupStack::PushL(c); + +// Create an array to store the embedded objects +RStreamablePtrArray<CEmbeddedObject> myArray; + +// Get an array of the embedded objects within the current container in the file +c->GetEmbeddedObjects(myArray); + +// If necessary we can get a "mangled" version of the URI that +// references the particular object within the file +// i.e. "C:\file.dcf\\OBJECT1" + +CData* data = iContent->OpenContentL(EPlay,myArray[0]->UniqueId()); + +TFileName uri; +data->GetStringAttribute(EPreviewURI,uri); +. +. +. +// Now we can use our TPtrC later to create a TVirtualPath object from a URI +TVirtualPathPtr aPtr = aURI; + +// print the file URI "C:\file.dcf" +printf(aPtr.URI()); + +// print the content object's UniqueId "OBJECT1" +printf(aPtr.UniqueId()); + +// Create a copy of the virtual path on the heap so we don't have any ownership problems +CVirtualPath *myVirtualpath = CVirtualPath::NewL(aPtr) + +// Can now delete the CContent object without losing our VirtualPath +CleanupStack::PopAndDestroy(c);
+
Special cases for the UniqueId field

KNullDesC16() +- ""

A zero length UniqueId is used to refer +to the entire file. If a file is opened this way, no translation of the contents +is performed. The ability to open the file with no translation is required +for example to attach the file to an outgoing message. As with any other function +in CAF, access to the file is at the agent's discretion.

KDefaultContentObject() +- "DEFAULT"

Allows an application to refer to the default content +object within a file. In the case of an unprotected file handled by the F32Agent, +it is the entire file, the same as if the UniqueId "" was +used. Other agents, particularly those with a single content object embedded +within the file, use "DEFAULT" to refer to their only content +object.

Even though the DEFAULT content object is +supported, it is recommended that agents always use CContent to +enumerate the objects within the file.

\ No newline at end of file