mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetformatcapabilities.cpp
changeset 25 d881023c13eb
parent 0 a2952bb97e68
child 34 e257e2b6459d
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetformatcapabilities.cpp	Fri Apr 16 15:28:14 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetformatcapabilities.cpp	Mon May 03 12:58:40 2010 +0300
@@ -11,23 +11,35 @@
 *
 * Contributors:
 *
-* Description:  
+* Description:
 *
 */
 
 #include <mtp/cmtptypeinterdependentpropdesc.h>
 #include <mtp/cmtptypeobjectpropdesc.h>
-#include <mtp/mtpprotocolconstants.h>
-#include <mtp/mmtpdataproviderframework.h>
-#include <mtp/cmtptypestring.h>
-
 
 #include "cgetformatcapabilities.h"
-#include "mmmtpdplogger.h"
+#include "cdescriptionutility.h"
 #include "mmmtpdpconfig.h"
-#include "tobjectdescription.h"
+#include "mmmtpdplogger.h"
 
-_LIT( KMtpObjDescObjFileName, "[a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~][a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~ ]{0, 7}\\.[[a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~][a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~ ]{0, 2}]?" );
+// -----------------------------------------------------------------------------
+// CGetFormatCapabilities::NewL
+// Constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C MMmRequestProcessor* CGetFormatCapabilities::NewL( MMTPDataProviderFramework& aFramework,
+    MMTPConnection& aConnection,
+    MMmMtpDpConfig& aDpConfig )
+    {
+    CGetFormatCapabilities* self = new ( ELeave ) CGetFormatCapabilities( aFramework, aConnection, aDpConfig );
+
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+
+    return self;
+    }
 
 // -----------------------------------------------------------------------------
 // CGetFormatCapabilities::CGetFormatCapabilities
@@ -35,26 +47,27 @@
 // -----------------------------------------------------------------------------
 //
 EXPORT_C CGetFormatCapabilities::CGetFormatCapabilities( MMTPDataProviderFramework& aFramework,
-        MMTPConnection& aConnection,
-        MMmMtpDpConfig& aDpConfig ) :
-    CRequestProcessor( aFramework, aConnection, 0, NULL ),
-    iDpConfig( aDpConfig )
+    MMTPConnection& aConnection,
+    MMmMtpDpConfig& aDpConfig ) :
+        CRequestProcessor( aFramework, aConnection, 0, NULL ),
+        iDpConfig( aDpConfig )
     {
     PRINT( _L( "Operation: CGetFormatCapabilities(0x930A)" ) );
     }
 
 // -----------------------------------------------------------------------------
 // CGetFormatCapabilities::ConstructL
-// Second phase constructor
+// The second phase constructor
 // -----------------------------------------------------------------------------
 //
 EXPORT_C void CGetFormatCapabilities::ConstructL()
     {
+    // Do nothing
     }
 
 // -----------------------------------------------------------------------------
 // CGetFormatCapabilities::~CGetFormatCapabilities
-// Second phase constructor
+// Destructor
 // -----------------------------------------------------------------------------
 //
 EXPORT_C CGetFormatCapabilities::~CGetFormatCapabilities()
@@ -91,7 +104,7 @@
             }
         }
 
-    PRINT1( _L( "MM MTP <= CGetFormatCapabilities::CheckRequestL, response = 0x%X" ), response );
+    PRINT1( _L( "MM MTP <= CGetFormatCapabilities::CheckRequestL, response = 0x%x" ), response );
     return response;
     }
 
@@ -108,7 +121,6 @@
     iCapabilityList = NULL;
 
     iCapabilityList = CMTPTypeFormatCapabilityList::NewL();
-    iFormatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 );
 
     if ( KMTPFormatsAll == iFormatCode )
         {
@@ -117,102 +129,55 @@
         for( TInt i = 0; i < count; i++ )
             {
             PRINT( _L( "MM MTP <> CGetFormatCapabilities::ServiceL, KMTPFormatsAll!!!" ) );
+
             iFormatCode = ( *formatArray )[i];
-            ServiceInterdepentPropDescL();
-            CMTPTypeFormatCapability* frmCap = CMTPTypeFormatCapability::NewL( iFormatCode, iInterdependentPropDesc );
-            const RArray<TUint>* propertiesArray = iDpConfig.GetSupportedPropertiesL( iFormatCode );
-            TInt num = propertiesArray->Count();
-            for( TInt j = 0;j < num; j++ )
-                {
-                CMTPTypeObjectPropDesc* propertyDesc = ServicePropDescL( (*propertiesArray)[j] );
-                if ( propertyDesc != NULL )
-                    {
-                    frmCap->AppendL( propertyDesc );
-                    }
-                }//end for j
-            iCapabilityList->AppendL( frmCap );
-            }//end for i
-        }//end if
+            ServiceOneFormatCapabilitiesL( iFormatCode );
+            }
+        }
     else
-        {
-        ServiceInterdepentPropDescL();
-        PRINT1( _L( "MM MTP <> CGetFormatCapabilities::ServiceL, ONLY one Format!!! formatCode = 0x%X" ), iFormatCode );
-
-        CMTPTypeFormatCapability* frmCap = CMTPTypeFormatCapability::NewL( iFormatCode, iInterdependentPropDesc );
-        const RArray<TUint>* propertiesArray = iDpConfig.GetSupportedPropertiesL( iFormatCode );
-        TInt num = propertiesArray->Count();
-        for( TInt j = 0;j < num; j++ )
-            {
-            CMTPTypeObjectPropDesc* propertyDesc = ServicePropDescL( ( *propertiesArray )[j] );
-            if ( propertyDesc != NULL )
-                {
-                frmCap->AppendL( propertyDesc );
-                }
-            }//end for j
-        iCapabilityList->AppendL( frmCap );
-        }
+        ServiceOneFormatCapabilitiesL( iFormatCode );
 
     SendDataL( *iCapabilityList );
     PRINT( _L( "MM MTP <= CGetFormatCapabilities::ServiceL" ) );
     }
 
+void CGetFormatCapabilities::ServiceOneFormatCapabilitiesL( TUint aFormatCode )
+    {
+    CMTPTypeInterdependentPropDesc* interdependentPropDesc = iDpConfig.DescriptionUtility()->NewInterdepentPropDescL( iDpConfig, aFormatCode );
+    CMTPTypeFormatCapability* frmCap = CMTPTypeFormatCapability::NewL( aFormatCode, interdependentPropDesc );
+
+    const RArray<TUint>* properties = iDpConfig.GetSupportedPropertiesL( aFormatCode );
+    TInt num = properties->Count();
+    for ( TInt i = 0; i < num; i++ )
+        {
+        CMTPTypeObjectPropDesc* propertyDesc = ServiceOnePropDescL( ( *properties )[i] );
+        if ( propertyDesc != NULL )
+            {
+            frmCap->AppendL( propertyDesc );
+            }
+        }
+    iCapabilityList->AppendL( frmCap );
+    }
+
 // -----------------------------------------------------------------------------
 // CGetFormatCapabilities::ServicePropDescL
 // Get MTPTypeObjectPropDesc according to property code
 // -----------------------------------------------------------------------------
 //
-CMTPTypeObjectPropDesc* CGetFormatCapabilities::ServicePropDescL( TUint16 aPropCode )
+CMTPTypeObjectPropDesc* CGetFormatCapabilities::ServiceOnePropDescL( TUint16 aPropCode )
     {
-    PRINT1( _L( "MM MTP => CGetFormatCapabilities::ServicePropDescL, aPropCode = 0x%X" ), aPropCode );
-    // implement just like what we did in CGetpropertyDescc::ServiceL
-    CMTPTypeObjectPropDesc* propertyDesc;
-    CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
-
-    /* Create new PropDesc object to return to device
-     m - signals only limited supported values - hence these requests require the expected form
-     variable to be passed into the NewL contstuctor as well */
-    switch( aPropCode )
-        {
-        case EMTPObjectPropCodeStorageID: // Storage ID
-        case EMTPObjectPropCodeObjectFormat: // Format Code
-        case EMTPObjectPropCodeObjectSize: // Object Size
-        case EMTPObjectPropCodeParentObject: // Parent Object
-        case EMTPObjectPropCodePersistentUniqueObjectIdentifier: // Unique Object Identifier
-        case EMTPObjectPropCodeName: // Name
-        case EMTPObjectPropCodeDateAdded: // Date Added
-            propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropCode );
-            break;
+    PRINT1( _L( "MM MTP => CGetFormatCapabilities::ServicePropDescL, aPropCode = 0x%x" ), aPropCode );
 
-            // Protection Status (m)
-        case EMTPObjectPropCodeProtectionStatus:
-            propertyDesc = ServiceProtectionStatusL();
-            break;
-
-            // FileName
-        case EMTPObjectPropCodeObjectFileName:
-            propertyDesc = ServiceFileNameL();
-            break;
+    // implement just like what we did in CGetpropertyDescc::ServiceL
+    CMTPTypeObjectPropDesc* propertyDesc =
+        iDpConfig.DescriptionUtility()->NewCommonObjectPropertyL( aPropCode );
 
-            // Consumable (m)
-        case EMTPObjectPropCodeNonConsumable:
-            propertyDesc = ServiceNonConsumableL();
-            break;
+    if ( propertyDesc == NULL )
+        propertyDesc = iDpConfig.DescriptionUtility()->NewSpecificPropDescL( iFormatCode, aPropCode );
 
-        case EMTPObjectPropCodeDateModified: // Date Modified
-        case EMTPObjectPropCodeDateCreated: // Date Created
-            propertyInfo.iDataType     = EMTPTypeString;
-            propertyInfo.iFormFlag     = CMTPTypeObjectPropDesc::EDateTimeForm;
-            propertyInfo.iGetSet       = CMTPTypeObjectPropDesc::EReadOnly;
-            propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropCode, propertyInfo, NULL);
-            break;
-
-        default:
-            propertyDesc = ServiceSpecificPropertyDescL( aPropCode );
-            break;
-        }
     if ( propertyDesc != NULL )
         {
-        TUint32 groupCode = GetGroupCode( aPropCode );
+        TUint32 groupCode = iDpConfig.DescriptionUtility()->GetGroupCode( aPropCode );
         propertyDesc->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode, groupCode );
         }
 
@@ -221,108 +186,4 @@
     return propertyDesc;
     }
 
-// -----------------------------------------------------------------------------
-// CGetFormatCapabilities::GetGroupCode
-// Get MTPTypeObjectPropDesc according to property code
-// -----------------------------------------------------------------------------
-//
-TUint32 CGetFormatCapabilities::GetGroupCode( TUint32 aPropCode )
-    {
-    TInt count = sizeof( KPropGroupMapTable );
-    // TODO: if need to refine the search approach to improve performance
-    for( TInt i = 0; i < count; i++ )
-        {
-        if ( aPropCode == KPropGroupMapTable[i].iPropCode )
-            return KPropGroupMapTable[i].iGroupCode;
-        }
-    return EGroupCodeNotDefined;
-    }
-
-// -----------------------------------------------------------------------------
-// CGetFormatCapabilities::ServiceProtectionStatusL
-// Get MTPTypeObjectPropDesc protection status
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CGetFormatCapabilities::ServiceProtectionStatusL()
-    {
-    PRINT( _L( "MM MTP => CGetFormatCapabilities::ServiceProtectionStatusL" ) );
-
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm
-
-    TUint16 values[] =
-        {
-        EMTPProtectionNoProtection,
-        EMTPProtectionReadOnly
-        };
-
-    TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ;
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint16 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    CMTPTypeObjectPropDesc* propertyDesc  = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeProtectionStatus, *expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-
-    PRINT( _L( "MM MTP <= CGetFormatCapabilities::ServiceProtectionStatusL" ) );
-    return propertyDesc;
-    }
-
-// -----------------------------------------------------------------------------
-// CGetFormatCapabilities::ServiceFileNameL
-// Get MTPTypeObjectPropDesc service file name
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CGetFormatCapabilities::ServiceFileNameL()
-    {
-    PRINT( _L( "MM MTP => CGetFormatCapabilities::ServiceFileNameL" ) );
-    CMTPTypeString* form = CMTPTypeString::NewLC( KMtpObjDescObjFileName ); // + form
-
-    CMTPTypeObjectPropDesc* ret = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeObjectFileName,
-        CMTPTypeObjectPropDesc::ERegularExpressionForm,
-        form );
-
-    CleanupStack::PopAndDestroy( form ); // - form
-    PRINT( _L( "MM MTP <= CGetFormatCapabilities::ServiceFileNameL" ) );
-    return ret;
-    }
-
-// -----------------------------------------------------------------------------
-// CGetFormatCapabilities::ServiceFileNameL
-// Get MTPTypeObjectPropDesc service file name
-// -----------------------------------------------------------------------------
-//
-CMTPTypeObjectPropDesc* CGetFormatCapabilities::ServiceNonConsumableL()
-    {
-    PRINT( _L( "MM MTP => CGetFormatCapabilities::ServiceNonConsumableL" ) );
-    CMTPTypeObjectPropDescEnumerationForm* expectedForm =
-        CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT8 ); // + expectedForm
-    TUint8 values[] =
-        {
-        EMTPConsumable,
-        EMTPNonConsumable
-        };
-
-    TInt numValues = sizeof ( values ) / sizeof ( values[0] );
-    for ( TInt i = 0; i < numValues; i++ )
-        {
-        TMTPTypeUint8 data( values[i] );
-        expectedForm->AppendSupportedValueL( data );
-        }
-
-    CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo;
-    propertyInfo.iDataType = EMTPTypeUINT8;
-    propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm;
-    propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadOnly;
-    CMTPTypeObjectPropDesc* ret = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeNonConsumable,
-        propertyInfo,
-        expectedForm );
-    CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm
-
-    PRINT( _L( "MM MTP <= CGetFormatCapabilities::ServiceNonConsumableL" ) );
-    return ret;
-    }
-
 // end of file