omadm/omadmextensions/adapters/dcmodmadapter/src/dcmodmadapter.cpp
changeset 0 3ce708148e4d
child 3 ecc2fefbdf1d
equal deleted inserted replaced
-1:000000000000 0:3ce708148e4d
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  DCMO DM Adapter implementation
       
    15 *
       
    16 */
       
    17 
       
    18 // INCLUDE
       
    19 #include <implementationproxy.h>
       
    20 #include <smldmadapter.h>
       
    21 #include <data_caging_path_literals.hrh>
       
    22 #include <centralrepository.h>
       
    23 #include <e32base.h>
       
    24 #include <ecom.h>
       
    25 #include <utf.h>
       
    26 #include "nsmldebug.h"
       
    27 #include "dcmodmadapter.h"
       
    28 #include "dcmointerface.h"
       
    29 
       
    30 // CONSTANTS
       
    31 
       
    32 #define MAXBUFLEN 255
       
    33 
       
    34 _LIT8( KTextType,"text/plain" ); // Leaf inputs
       
    35 _LIT8( KDCMODMAdapterVersion, "1.0" ); // Adapter version
       
    36 _LIT8( KDCMORootNode, "DCMO" ); // root URI
       
    37 
       
    38 
       
    39 // ============================= MEMBER FUNCTIONS =============================
       
    40 
       
    41 // ----------------------------------------------------------------------------
       
    42 // CDcmoDMAdapter::NewL
       
    43 // Symbian 1st phase contructor
       
    44 // (static, may leave)
       
    45 // Status : Draft
       
    46 // ----------------------------------------------------------------------------
       
    47 //
       
    48 CDcmoDMAdapter* CDcmoDMAdapter::NewL( MSmlDmCallback* aCallback )
       
    49     {
       
    50     CDcmoDMAdapter* self = NewLC( aCallback );
       
    51     CleanupStack::Pop( self );
       
    52     return self;
       
    53     }
       
    54 
       
    55 // ----------------------------------------------------------------------------
       
    56 // CDcmoDMAdapter::NewLC
       
    57 // Symbian 1st phase contructor. Push object to cleanup-stack
       
    58 // (static, may leave)
       
    59 // Status : Draft
       
    60 // ----------------------------------------------------------------------------
       
    61 //
       
    62 CDcmoDMAdapter* CDcmoDMAdapter::NewLC( MSmlDmCallback* aCallback )
       
    63     {
       
    64     	_DBG_FILE( "CDcmoDMAdapter NewLC : begin"  );
       
    65     	CDcmoDMAdapter* self = new ( ELeave ) CDcmoDMAdapter( aCallback );
       
    66     	CleanupStack::PushL( self );
       
    67     	self->ConstructL();
       
    68     	_DBG_FILE( "CDcmoDMAdapter NewLC : end"  );
       
    69     	return self;
       
    70     }
       
    71 
       
    72 // ----------------------------------------------------------------------------
       
    73 // CDcmoDMAdapter::CDcmoDMAdapter()
       
    74 // C++ Constructor
       
    75 // Status : Draft
       
    76 // ----------------------------------------------------------------------------
       
    77 CDcmoDMAdapter::CDcmoDMAdapter( TAny* aEcomArguments )
       
    78     : CSmlDmAdapter::CSmlDmAdapter( aEcomArguments )
       
    79     {
       
    80     	_DBG_FILE( "CDcmoDMAdapter Constructor"  );
       
    81     }
       
    82 
       
    83 // ----------------------------------------------------------------------------
       
    84 // CDcmoDMAdapter::ConstructL
       
    85 // 2nd phase contructor
       
    86 // (may leave)
       
    87 // Status : Draft
       
    88 // ----------------------------------------------------------------------------
       
    89 //
       
    90 void CDcmoDMAdapter::ConstructL()
       
    91     {
       
    92     	_DBG_FILE( "CDcmoDMAdapter::ConstructL"  );
       
    93     	idcmoClient = RDCMOClient::NewL();
       
    94     	iExtOpNode = EFalse;	
       
    95     }
       
    96 
       
    97 // ----------------------------------------------------------------------------
       
    98 // CDcmoDMAdapter::~CDcmoDMAdapter()
       
    99 // C++ Destructor
       
   100 // Status : Draft
       
   101 // ----------------------------------------------------------------------------
       
   102 //
       
   103 CDcmoDMAdapter::~CDcmoDMAdapter()
       
   104     {
       
   105     	_DBG_FILE( "CDcmoDMAdapter Destructor"  );
       
   106     	idcmoClient->Close();
       
   107     	delete idcmoClient;
       
   108     	idcmoClient = NULL;
       
   109     }
       
   110 
       
   111 // ----------------------------------------------------------------------------
       
   112 // CDcmoDMAdapter::DDFVersionL
       
   113 // Return DM plug-in version
       
   114 // (may leave)
       
   115 // Status : Draft
       
   116 // ----------------------------------------------------------------------------
       
   117 //
       
   118 void CDcmoDMAdapter::DDFVersionL( CBufBase& aDDFVersion )
       
   119     {
       
   120     // Insert version information
       
   121     _DBG_FILE( "CDcmoDMAdapter::DDFVersionL" );
       
   122     aDDFVersion.InsertL( 0, KDCMODMAdapterVersion );
       
   123     }
       
   124 
       
   125 // ----------------------------------------------------------------------------
       
   126 // CDcmoDMAdapter::DDFStructureL
       
   127 // Return DM plug-in structure
       
   128 // (may leave)
       
   129 // Status : Draft
       
   130 // ----------------------------------------------------------------------------
       
   131 //
       
   132 void CDcmoDMAdapter::DDFStructureL( MSmlDmDDFObject& aDDF )
       
   133     {
       
   134     // Declare accesses
       
   135     _DBG_FILE( "CDcmoDMAdapter::DDFStructureL begin" );
       
   136     TSmlDmAccessTypes accessTypes;
       
   137     accessTypes.SetGet();    
       
   138     
       
   139     // Create root node 
       
   140     MSmlDmDDFObject& root = aDDF.AddChildObjectL( KDCMORootNode );
       
   141     FillNodeInfoL( root,
       
   142                    accessTypes,
       
   143                    MSmlDmDDFObject::EPermanent,
       
   144                    MSmlDmDDFObject::ENode,
       
   145                    MSmlDmDDFObject::EOne,
       
   146                    KNullDesC8(),
       
   147                    KTextType );
       
   148                    
       
   149    	root.SetDFTitleL( KNSmlDCMOAdapterTitle );
       
   150                    
       
   151    	DDFDCMOAdaptersL(root);
       
   152    	_DBG_FILE( "CDcmoDMAdapter::DDFStructureL end" );
       
   153 
       
   154     }
       
   155 
       
   156 // ----------------------------------------------------------------------------
       
   157 // CDcmoDMAdapter::StreamingSupport
       
   158 // Return streaming support status, set supported item size
       
   159 // Status : Draft
       
   160 // ----------------------------------------------------------------------------
       
   161 //
       
   162 TBool CDcmoDMAdapter::StreamingSupport( TInt& /* aItemSize */ )
       
   163     {
       
   164     // Not supported
       
   165     _DBG_FILE( "CDcmoDMAdapter::StreamingSupport"  );
       
   166     return EFalse;
       
   167     }
       
   168     
       
   169 // ----------------------------------------------------------------------------
       
   170 // CDcmoDMAdapter::StreamCommittedL
       
   171 // Commit stream buffer
       
   172 // (may leave)
       
   173 // Status : Draft
       
   174 // ----------------------------------------------------------------------------
       
   175 //
       
   176 void CDcmoDMAdapter::StreamCommittedL()
       
   177     {        
       
   178     _DBG_FILE("CDcmoDMAdapter::StreamCommitted"  );
       
   179     // Intentionally left empty 
       
   180     }
       
   181 
       
   182 // ----------------------------------------------------------------------------
       
   183 // CDcmoDMAdapter::CompleteOutstandingCmdsL
       
   184 // Complete outstanding commands
       
   185 // (may leave)
       
   186 // Status : Draft
       
   187 // ----------------------------------------------------------------------------
       
   188 //
       
   189 void CDcmoDMAdapter::CompleteOutstandingCmdsL()
       
   190     {
       
   191     _DBG_FILE( "CDcmoDMAdapter::CompleteOutstandingCmdsL"  );
       
   192     }
       
   193 
       
   194 // ----------------------------------------------------------------------------
       
   195 // CDcmoDMAdapter::FillNodeInfoL
       
   196 // Fill node info
       
   197 // (may leave)
       
   198 // Status : Draft
       
   199 // ----------------------------------------------------------------------------
       
   200 //
       
   201 void CDcmoDMAdapter::FillNodeInfoL( MSmlDmDDFObject& aDDFObject, 
       
   202                                      TSmlDmAccessTypes& aAccessTypes, 
       
   203                                      MSmlDmDDFObject::TScope aScope,
       
   204                                      MSmlDmDDFObject::TDFFormat aFormat, 
       
   205                                      MSmlDmDDFObject::TOccurence aOccurence,
       
   206                                      const TDesC8& aDescription,
       
   207                                      const TDesC8& aMIMEType )
       
   208     {
       
   209     _DBG_FILE( "CDcmoDMAdapter::FillNodeInfoL - begin"  );
       
   210     aDDFObject.SetAccessTypesL( aAccessTypes );
       
   211     aDDFObject.SetScopeL( aScope );
       
   212     aDDFObject.SetOccurenceL( aOccurence );
       
   213     aDDFObject.SetDFFormatL( aFormat );
       
   214     aDDFObject.SetDescriptionL( aDescription );
       
   215     if ( aFormat != MSmlDmDDFObject::ENode )
       
   216         {
       
   217         aDDFObject.AddDFTypeMimeTypeL( aMIMEType );
       
   218         }
       
   219     _DBG_FILE( "CDcmoDMAdapter::FillNodeInfoL - end"  );    
       
   220     }
       
   221 
       
   222 // ----------------------------------------------------------------------------
       
   223 // CDcmoDMAdapter::CopyCommandL
       
   224 // Copy object
       
   225 // (may leave)
       
   226 // Status : Draft
       
   227 // ----------------------------------------------------------------------------
       
   228 //
       
   229 void CDcmoDMAdapter::CopyCommandL( const TDesC8& /*aTargetURI*/, 
       
   230                                     const TDesC8& /*aTargetLUID*/,
       
   231                                     const TDesC8& /*aSourceURI*/, 
       
   232                                     const TDesC8& /*aSourceLUID*/,
       
   233                                     const TDesC8& /*aType*/, 
       
   234                                     TInt aStatusRef )
       
   235     {
       
   236     // Not supported
       
   237     _DBG_FILE( "CDcmoDMAdapter::CopyCommandL"  );
       
   238     Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
       
   239     }
       
   240 
       
   241 // ----------------------------------------------------------------------------
       
   242 // DeleteObjectL
       
   243 // Delete object
       
   244 // (may leave)
       
   245 // Status : Draft
       
   246 // ----------------------------------------------------------------------------
       
   247 //
       
   248 void CDcmoDMAdapter::DeleteObjectL( const TDesC8& /* aURI */, 
       
   249                                      const TDesC8& /* aLUID */,
       
   250                                      TInt aStatusRef )
       
   251 
       
   252     {
       
   253     // Not supported
       
   254     _DBG_FILE( "CDcmoDMAdapter::DeleteObjectL"  );
       
   255     Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
       
   256     }
       
   257     
       
   258 // ----------------------------------------------------------------------------
       
   259 // CDcmoDMAdapter::FetchLeafObjectL
       
   260 // Fetch leaf
       
   261 // (may leave)
       
   262 // Status : Draft
       
   263 // ----------------------------------------------------------------------------
       
   264 //
       
   265 void CDcmoDMAdapter::FetchLeafObjectL( const TDesC8& aURI, 
       
   266                                         const TDesC8& /* aLUID */,
       
   267 								        const TDesC8& aType, 
       
   268 								        TInt aResultsRef,
       
   269 								        TInt aStatusRef )
       
   270     {
       
   271     _DBG_FILE( "CDcmoDMAdapter::FetchLeafObjectL - begin"  );
       
   272     MSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk; 
       
   273 		TDCMOStatus err (EDcmoFail);
       
   274 		TBuf<MAXBUFLEN> iName;
       
   275 		
       
   276 		TPtrC8 category = GetCategoryFromUriL( aURI );
       
   277 		iName.Copy ( category );
       
   278 
       
   279 		CBufBase *lObject = CBufFlat::NewL( 128 );
       
   280     CleanupStack::PushL( lObject );
       
   281     lObject->Reset();
       
   282     TBool value;
       
   283     TInt group;
       
   284     	
       
   285 		if(aURI.Find(KNSmlDdfProperty)!= KErrNotFound)
       
   286 		{
       
   287 			 _DBG_FILE( "CDcmoDMAdapter::FetchLeafObjectL - In Property"  );
       
   288 			TBuf<KDCMOMaxStringSize> property;
       
   289 			err = idcmoClient->GetDCMOStrAttributeValue(iName, EProperty,property); 
       
   290 			lObject->Reset();
       
   291 			TBuf8<KDCMOMaxStringSize> tmp;
       
   292 			tmp.Copy(property);
       
   293 			lObject->InsertL(lObject->Size(),tmp);
       
   294 		}
       
   295 			
       
   296 		else if(aURI.Find(KNSmlDdfGroup)!= KErrNotFound)
       
   297 		{
       
   298 			 _DBG_FILE( "CDcmoDMAdapter::FetchLeafObjectL - In Group"  );
       
   299 			err = idcmoClient->GetDCMOIntAttributeValue(iName, EGroup, group); 
       
   300 			switch(group)
       
   301 			{
       
   302 				case EHardware			: 	lObject->InsertL(lObject->Size(),KNSmlHardware);
       
   303 										break;
       
   304 				case EIO						:	lObject->InsertL(lObject->Size(),KNSmlIO);
       
   305 										break;
       
   306 				case EConnectivity	:	lObject->InsertL(lObject->Size(),KNSmlConnectivity);
       
   307 										break;
       
   308 				case ESoftware			:	lObject->InsertL(lObject->Size(),KNSmlSoftware);
       
   309 										break;
       
   310 				case EService				:	lObject->InsertL(lObject->Size(),KNSmlService);
       
   311 										break;	
       
   312 				default : retValue = CSmlDmAdapter::ENotFound;
       
   313 									
       
   314 			}
       
   315 		}			
       
   316 		else if(aURI.Find(KNSmlDdfDescription)!= KErrNotFound)
       
   317 		{
       
   318 			 _DBG_FILE( "CDcmoDMAdapter::FetchLeafObjectL - In Description"  );
       
   319 			TBuf<KDCMOMaxStringSize> description;
       
   320 			err = idcmoClient->GetDCMOStrAttributeValue(iName, EDescription, description); 
       
   321 			lObject->Reset();
       
   322 			TBuf8<KDCMOMaxStringSize> tmp;
       
   323 			tmp.Copy(description);
       
   324 			lObject->InsertL(lObject->Size(),tmp);
       
   325 		}
       
   326 			
       
   327 		else if(aURI.Find(KNSmlDdfAttached)!= KErrNotFound)
       
   328 		{
       
   329 			 _DBG_FILE( "CDcmoDMAdapter::FetchLeafObjectL - In Attached"  );
       
   330 			err = idcmoClient->GetDCMOIntAttributeValue(iName, EAttached, value); 
       
   331 			if(value)
       
   332 				lObject->InsertL(lObject->Size(),KNSmlTrue);
       
   333 			else
       
   334 				lObject->InsertL(lObject->Size(),KNSmlFalse);
       
   335 		}
       
   336 		
       
   337 		else if(aURI.Find(KNSmlDdfEnabled)!= KErrNotFound) 
       
   338 		{
       
   339 			 _DBG_FILE( "CDcmoDMAdapter::FetchLeafObjectL - In Enabled"  );
       
   340 			err = idcmoClient->GetDCMOIntAttributeValue(iName, EEnabled, value); 
       
   341 			if(value)
       
   342 				lObject->InsertL(lObject->Size(),KNSmlTrue);
       
   343 			else
       
   344 				lObject->InsertL(lObject->Size(),KNSmlFalse);			
       
   345 		}
       
   346 			
       
   347 		else if(aURI.Find(KNSmlDdfDenyUserEnable)!= KErrNotFound)
       
   348 		{
       
   349 			 _DBG_FILE( "CDcmoDMAdapter::FetchLeafObjectL - In DenyUserEnable"  );
       
   350 			err = idcmoClient->GetDCMOIntAttributeValue(iName, EDenyUserEnable, value); 
       
   351 			if(value)
       
   352 				lObject->InsertL(lObject->Size(),KNSmlTrue);
       
   353 			else
       
   354 				lObject->InsertL(lObject->Size(),KNSmlFalse);
       
   355 		}
       
   356 			
       
   357 		else if(aURI.Find(KNSmlDdfNotifyUser)!= KErrNotFound)
       
   358 		{
       
   359 			 _DBG_FILE( "CDcmoDMAdapter::FetchLeafObjectL - In NotifyUser"  );
       
   360 			err = idcmoClient->GetDCMOIntAttributeValue(iName, ENotifyUser, value); 
       
   361 			if(value)
       
   362 				lObject->InsertL(lObject->Size(),KNSmlTrue);
       
   363 			else
       
   364 				lObject->InsertL(lObject->Size(),KNSmlFalse);
       
   365 		}
       
   366 		
       
   367 		else if(aURI.Find(KNSmlDdfExt)!= KErrNotFound)
       
   368 		{
       
   369 			_DBG_FILE( "CDcmoDMAdapter::FetchLeafObjectL - In Ext"  );
       
   370 			lObject->Reset();
       
   371 			lObject->InsertL(lObject->Size(), KNullDesC8);
       
   372 			err = EDcmoSuccess;
       
   373 		}
       
   374 			
       
   375 		else
       
   376 			retValue = CSmlDmAdapter::ENotFound;
       
   377 		
       
   378 		if(retValue == CSmlDmAdapter::EOk)
       
   379     {
       
   380 			switch(err)
       
   381 			{
       
   382 				case EDcmoSuccess 		:	Callback().SetResultsL( aResultsRef, *lObject, aType );
       
   383 											break;
       
   384 				case EDcmoNotSupported	:	retValue = CSmlDmAdapter::EError;
       
   385 											break;
       
   386 				case EDcmoAccessDenied	:	retValue = CSmlDmAdapter::ENotAllowed;
       
   387 											break;
       
   388 				default :
       
   389 											retValue = CSmlDmAdapter::EError;						
       
   390 			}
       
   391 				
       
   392   	}
       
   393     	
       
   394     CleanupStack::PopAndDestroy(); //lObject	
       
   395 
       
   396     // Respond
       
   397   Callback().SetStatusL( aStatusRef, retValue );
       
   398    _DBG_FILE( "CDcmoDMAdapter::FetchLeafObjectL - end"  );
       
   399     }    
       
   400     
       
   401 // ----------------------------------------------------------------------------
       
   402 // CDcmoDMAdapter::FetchLeafObjectSizeL
       
   403 // Calculate leaf object size
       
   404 // (may leave)
       
   405 // Status : Draft
       
   406 // ----------------------------------------------------------------------------
       
   407 //
       
   408 void CDcmoDMAdapter::FetchLeafObjectSizeL( const TDesC8& /* aURI */, 
       
   409                                             const TDesC8& /* aLUID */,
       
   410 									        const TDesC8& /* aType */, 
       
   411 									        TInt /* aResultsRef */,
       
   412 									        TInt aStatusRef )
       
   413     {
       
   414     _DBG_FILE( "CDcmoDMAdapter::FetchLeafObjectSizeL"  );
       
   415     MSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk;
       
   416     // Respond
       
   417     Callback().SetStatusL( aStatusRef, retValue );
       
   418     }    
       
   419 
       
   420 // ----------------------------------------------------------------------------
       
   421 // CDcmoDMAdapter::ChildURIListL
       
   422 // Create child URI list
       
   423 // (may leave)
       
   424 // Status : Draft
       
   425 // ----------------------------------------------------------------------------
       
   426 //
       
   427 void CDcmoDMAdapter::ChildURIListL( const TDesC8& aURI, 
       
   428                                      const TDesC8& /* aLUID */,
       
   429 					                 const CArrayFix<TSmlDmMappingInfo>& /* aPreviousURISegmentList */,
       
   430             					     TInt aResultsRef, 
       
   431             					     TInt aStatusRef )
       
   432     {
       
   433     _DBG_FILE( "CDcmoDMAdapter::ChildURIListL - begin"  );
       
   434     MSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk;
       
   435     CBufBase *currentURISegmentList = CBufFlat::NewL( 128 );
       
   436 		CleanupStack::PushL( currentURISegmentList );	
       
   437 
       
   438  		if(( aURI.Match( KDcmoMatch2 ) != KErrNotFound ) &&
       
   439 		 (aURI.Match( KDcmoMatch3 ) == KErrNotFound ))
       
   440 		{	
       
   441             currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmDcmo );
       
   442 			Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EOk );
       
   443 		    Callback().SetResultsL( aResultsRef, *currentURISegmentList, KNullDesC8 );
       
   444             CleanupStack::PopAndDestroy(  ); // currentURISegmentList
       
   445        		_DBG_FILE( "CDcmoDMAdapter::ChildURIListL(): end" );
       
   446 			return;
       
   447 		}
       
   448     else if(( aURI.Match( KDcmoMatch ) != KErrNotFound ) &&
       
   449               (aURI.Match( KDcmoMatch2 ) == KErrNotFound ))
       
   450         {
       
   451         //    
       
   452         }
       
   453     // DCMOConfig subtree
       
   454     else if( ( aURI.Match( KDcmoConfigMatch ) != KErrNotFound ))
       
   455         {
       
   456           currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmDcmoConfig );
       
   457         }
       
   458     // Operations    
       
   459     else if(( aURI.Match( KDcmoOperationsMatch ) != KErrNotFound ))
       
   460         {
       
   461           currentURISegmentList->InsertL( currentURISegmentList->Size(), KSegmDcmoOperations );
       
   462         } 
       
   463     // Ext    
       
   464     else if(( aURI.Match(KNSmlBluetooth) != KErrNotFound) && ( aURI.Match(KDcmoOperationsExtMatch)!= KErrNotFound ))
       
   465         {
       
   466           currentURISegmentList->InsertL( currentURISegmentList->Size(), KNSmlDdfOpExtSemiEnable );
       
   467         }        
       
   468     else
       
   469         {
       
   470         retValue = CSmlDmAdapter::ENotFound;
       
   471         }
       
   472 
       
   473     // Respond
       
   474     Callback().SetStatusL( aStatusRef, retValue );
       
   475     CleanupStack::PopAndDestroy(); // currentURISegmentList
       
   476     _DBG_FILE( "CDcmoDMAdapter::ChildURIListL - end"  );
       
   477     }    
       
   478 
       
   479 // ----------------------------------------------------------------------------
       
   480 // CDcmoDMAdapter::AddNodeObjectL
       
   481 // Add node
       
   482 // (may leave)
       
   483 // Status : Draft
       
   484 // ----------------------------------------------------------------------------
       
   485 //
       
   486 void CDcmoDMAdapter::AddNodeObjectL( const TDesC8& /* aURI */,
       
   487                                      const TDesC8& /* aParentLUID */,
       
   488 								     TInt aStatusRef )
       
   489     {
       
   490     // Not supported
       
   491     _DBG_FILE( "CDcmoDMAdapter::AddNodeObjectL - begin"  );
       
   492     Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
       
   493     _DBG_FILE( "CDcmoDMAdapter::AddNodeObjectL - end"  );
       
   494     }    
       
   495 
       
   496 // ----------------------------------------------------------------------------
       
   497 // CDcmoDMAdapter::ExecuteCommandL
       
   498 // Execute command
       
   499 // (may leave)
       
   500 // Status : Draft
       
   501 // ----------------------------------------------------------------------------
       
   502 //
       
   503 void CDcmoDMAdapter::ExecuteCommandL( const TDesC8&  aURI , 
       
   504                                       const TDesC8& /* aLUID */,
       
   505 							          const TDesC8& /* aArgument */, 
       
   506 							          const TDesC8& /* aType */,
       
   507 								      TInt aStatusRef )
       
   508     {
       
   509     _DBG_FILE( "CDcmoDMAdapter::ExecuteCommandL - begin"  );
       
   510    	MSmlDmAdapter::TError status = CSmlDmAdapter::EOk;
       
   511     TInt err (EDcmoFail);
       
   512 		TBuf<MAXBUFLEN> iName;
       
   513 		TPtrC8 category = GetCategoryFromUriL( aURI );
       
   514 		iName.Copy ( category );		
       
   515 		
       
   516 		if((category.Compare( KNSmlBluetooth ) == KErrNone ) && (aURI.Find( KNSmlDdfOpExtSemiEnable ) != KErrNotFound ))
       
   517 			err = idcmoClient->SetDCMOIntAttributeValue(iName, EEnable, 2); 
       
   518 		else if(aURI.Find( KNSmlDdfEnable ) != KErrNotFound ) 
       
   519 			err = idcmoClient->SetDCMOIntAttributeValue(iName, EEnable, 1); 
       
   520 		else if(aURI.Find( KNSmlDdfDisable ) != KErrNotFound ) 
       
   521 			err = idcmoClient->SetDCMOIntAttributeValue(iName, EEnable, 0); 		
       
   522 		else	
       
   523 			err = EDcmoNotFound;				
       
   524 			// map error	
       
   525 		status = MapErrorToStatus( err );
       
   526 								
       
   527     Callback().SetStatusL( aStatusRef, status );
       
   528     _DBG_FILE( "CDcmoDMAdapter::ExecuteCommandL - end"  );
       
   529     }    
       
   530 
       
   531 // ----------------------------------------------------------------------------
       
   532 // CDcmoDMAdapter::ExecuteCommandL
       
   533 // Execute command, streaming enabled
       
   534 // (may leave)
       
   535 // Status : Draft
       
   536 // ----------------------------------------------------------------------------
       
   537 //
       
   538 void CDcmoDMAdapter::ExecuteCommandL( const TDesC8& /* aURI */, 
       
   539                                       const TDesC8& /* aLUID */,
       
   540 								      RWriteStream*& /* aStream */,
       
   541 								      const TDesC8& /* aType */,
       
   542 								      TInt aStatusRef )
       
   543     {
       
   544     // Not supported
       
   545     Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
       
   546     }    
       
   547     
       
   548 // ----------------------------------------------------------------------------
       
   549 // CDcmoDMAdapter::UpdateLeafObjectL
       
   550 // Update leaf object
       
   551 // (may leave)
       
   552 // Status : Draft
       
   553 // ----------------------------------------------------------------------------
       
   554 //
       
   555 void CDcmoDMAdapter::UpdateLeafObjectL( const TDesC8& /* aURI */, 
       
   556                                         const TDesC8& /* aLUID */,
       
   557                                         const TDesC8& /* aObject */,
       
   558                                         const TDesC8& /* aType */,
       
   559                                         TInt aStatusRef )
       
   560     {
       
   561       _DBG_FILE( "CDcmoDMAdapter::UpdateLeafObjectL - begin"  );
       
   562  		// Not supported
       
   563     Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
       
   564    _DBG_FILE( "CDcmoDMAdapter::UpdateLeafObjectL - end"  );
       
   565     }
       
   566 
       
   567 // ----------------------------------------------------------------------------
       
   568 // CDcmoDMAdapter::UpdateLeafObjectL
       
   569 // Update leaf object, streaming enabled
       
   570 // (may leave)
       
   571 // Status : Draft
       
   572 // ----------------------------------------------------------------------------
       
   573 //
       
   574 void CDcmoDMAdapter::UpdateLeafObjectL( const TDesC8& /* aURI */, 
       
   575                                          const TDesC8& /* aLUID */,
       
   576 									     RWriteStream*& /* aStream */, 
       
   577 									     const TDesC8& /* aType */,
       
   578 		 							     TInt aStatusRef )
       
   579     {
       
   580     // Not supported
       
   581     Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError );
       
   582     }
       
   583     
       
   584 // ----------------------------------------------------------------------------
       
   585 // CDcmoDMAdapter::StartAtomicL
       
   586 // Start atomic
       
   587 // (may leave)
       
   588 // Status : Draft
       
   589 // ----------------------------------------------------------------------------
       
   590 //
       
   591 void CDcmoDMAdapter::StartAtomicL()
       
   592     {
       
   593     }
       
   594     
       
   595 // ----------------------------------------------------------------------------
       
   596 // CDcmoDMAdapter::CommitAtomicL
       
   597 // Commit atomic commands
       
   598 // (may leave)
       
   599 // Status : Draft
       
   600 // ----------------------------------------------------------------------------
       
   601 //
       
   602 void CDcmoDMAdapter::CommitAtomicL()
       
   603     {
       
   604     }
       
   605 
       
   606 // ----------------------------------------------------------------------------
       
   607 // CDcmoDMAdapter::RollbackAtomicL
       
   608 // Lose all modifications after 'StartAtomicL' command
       
   609 // (may leave)
       
   610 // Status : Draft
       
   611 // ----------------------------------------------------------------------------
       
   612 //
       
   613 void CDcmoDMAdapter::RollbackAtomicL()
       
   614     {
       
   615     }    
       
   616 
       
   617 // ---------------------------------------------------------------------------
       
   618 // CNSmlDmFotaAdapter::MapStatusToError()
       
   619 // Returns a status code corresponding to the system error code given 
       
   620 // as parameter.
       
   621 // ---------------------------------------------------------------------------
       
   622 //
       
   623 CSmlDmAdapter::TError CDcmoDMAdapter::MapErrorToStatus( TInt aError ) const
       
   624  {
       
   625     CSmlDmAdapter::TError err = CSmlDmAdapter::EError;
       
   626     
       
   627     switch( aError )
       
   628         {
       
   629         case EDcmoSuccess:
       
   630             err = CSmlDmAdapter::EExecSuccess;
       
   631             break;
       
   632         case EDcmoFail:
       
   633             err = CSmlDmAdapter::EExecClientError;
       
   634             break;    
       
   635         case EDcmoNotFound:
       
   636             err = CSmlDmAdapter::EExecDownloadFailed;
       
   637             break;
       
   638         case EDcmoNotSupported:
       
   639             err = CSmlDmAdapter::EExecClientError;
       
   640             break;
       
   641         case EDcmoAccessDenied:
       
   642             err = CSmlDmAdapter::EExecClientError;
       
   643             break;            
       
   644         default :
       
   645         		err = CSmlDmAdapter::EExecClientError;        
       
   646         }
       
   647     
       
   648     return err;
       
   649  }
       
   650       
       
   651 // ========================= OTHER EXPORTED FUNCTIONS =========================
       
   652 
       
   653 void CleanupEComArray(TAny* aArray)
       
   654 	{
       
   655 	(static_cast<RImplInfoPtrArray*> (aArray))->ResetAndDestroy();
       
   656 	(static_cast<RImplInfoPtrArray*> (aArray))->Close();
       
   657 	}
       
   658 
       
   659 // ----------------------------------------------------------------------------
       
   660 // CDcmoDMAdapter::DDFDCMOAdaptersL
       
   661 // This function loads all the DCMO plug-in adapters
       
   662 // ----------------------------------------------------------------------------
       
   663 //
       
   664 void CDcmoDMAdapter::DDFDCMOAdaptersL(MSmlDmDDFObject& rootdcmo)
       
   665 {
       
   666 		_DBG_FILE("CDcmoDMAdapter::DDFDCMOAdaptersL(): begin");	
       
   667 			TBuf8<MAXBUFLEN> buf;
       
   668       TSmlDmAccessTypes accessTypes;
       
   669     	accessTypes.SetGet();
       
   670     	
       
   671 			CRepository* centrep = NULL;
       
   672 			TInt err(KErrNone);
       
   673 			TRAP(err, centrep = CRepository::NewL( KCRUidDCMOServer ));
       
   674 			if(err == KErrNone)
       
   675 			{
       
   676 				TUint32 centrepKey = 0;
       
   677 				TInt count(0);
       
   678 				TInt reterr = centrep->Get( centrepKey, count );	
       
   679 				if(reterr == KErrNone)
       
   680 				{		
       
   681 					TBuf<MAXBUFLEN> buffer;
       
   682 					for(TInt i=0; i<count; i++)
       
   683 					{   
       
   684         		centrepKey = KDCMOKeyMaxNumber*i + KDCMOPropertyNumber ;
       
   685         		reterr = centrep->Get( centrepKey, buffer );
       
   686 	    			if( reterr== KErrNone )
       
   687         		{        			
       
   688         			buf.Copy ( buffer );
       
   689         			MSmlDmDDFObject& entityNode = rootdcmo.AddChildObjectL( buf );
       
   690     					FillNodeInfoL( entityNode,
       
   691                    accessTypes,
       
   692                    MSmlDmDDFObject::EDynamic,
       
   693                    MSmlDmDDFObject::ENode,
       
   694                    MSmlDmDDFObject::EZeroOrOne,                   
       
   695                    KDCMOCapabilityDescription,
       
   696                    KMimeType ); 
       
   697                                        
       
   698 							FillDCMODDFL(entityNode);
       
   699 							buf.Zero();
       
   700         		}
       
   701 					}
       
   702 				}	
       
   703 				delete centrep;
       
   704 				centrep = NULL;
       
   705 			}
       
   706 			
       
   707 			// Read info about all implementations into infoArray
       
   708 			RImplInfoPtrArray infoArray;
       
   709 			// Note that a special cleanup function is required to reset and destroy
       
   710 			// all items in the array, and then close it.
       
   711 			TCleanupItem cleanup(CleanupEComArray, &infoArray);
       
   712 			CleanupStack::PushL(cleanup);
       
   713 			REComSession::ListImplementationsL(KDCMOInterfaceUid, infoArray);
       
   714 
       
   715 			// Loop through each info for each implementation
       
   716 			// and create and use each in turn
       
   717 			CDCMOInterface* ex;			
       
   718 
       
   719 			for (TInt i=0; i< infoArray.Count(); i++)
       
   720 				{
       
   721 
       
   722 				TUid impluid = infoArray[i]->ImplementationUid();
       
   723 				// Create object of type and call its function
       
   724 				
       
   725 				buf = infoArray[i]->OpaqueData();
       
   726 				
       
   727 				CDCMOInterface::TDCMOInterfaceInitParams initParms;
       
   728 				initParms.uid = impluid;
       
   729 				TBuf<MAXBUFLEN> categoryName;
       
   730 				categoryName.Copy(buf);
       
   731 				initParms.descriptor = categoryName.AllocL(); 
       
   732 				ex = CDCMOInterface::NewL(initParms);
       
   733 				CleanupStack::PushL(ex);
       
   734 				if( buf.Compare(KNSmlBluetooth)== KErrNone )
       
   735 				{
       
   736 					iExtOpNode = ETrue;
       
   737 				}	
       
   738     			MSmlDmDDFObject& entityNode = rootdcmo.AddChildObjectL( buf );
       
   739     			FillNodeInfoL( entityNode,
       
   740                    accessTypes,
       
   741                    MSmlDmDDFObject::EDynamic,
       
   742                    MSmlDmDDFObject::ENode,
       
   743                    MSmlDmDDFObject::EZeroOrOne,                   
       
   744                    KDCMOCapabilityDescription,
       
   745                    KMimeType ); 
       
   746                                        
       
   747 				FillDCMODDFL(entityNode);
       
   748 				ex = NULL;
       
   749 				buf.Zero();
       
   750 				CleanupStack::PopAndDestroy(); //ex
       
   751 				}
       
   752 
       
   753 			// Clean up
       
   754 			CleanupStack::PopAndDestroy(); //infoArray, results in a call to CleanupEComArray
       
   755 	_DBG_FILE("CDcmoDMAdapter::DDFDCMOAdaptersL(): end");	
       
   756 }
       
   757 
       
   758 // ----------------------------------------------------------------------------
       
   759 // CDcmoDMAdapter::FillDCMODDFL
       
   760 // This function constructs the DDFnode with the details
       
   761 // ----------------------------------------------------------------------------
       
   762 //	
       
   763 void CDcmoDMAdapter::FillDCMODDFL(MSmlDmDDFObject& aDDF)
       
   764 {
       
   765 	_DBG_FILE("CDcmoDMAdapter::FillDCMPDDFL(): begin");
       
   766 		
       
   767 	  TSmlDmAccessTypes accessTypesG;
       
   768     accessTypesG.SetGet();
       
   769     
       
   770     MSmlDmDDFObject& nPropertyDDF = aDDF.AddChildObjectL( KNSmlDdfProperty );			// Property
       
   771     FillNodeInfoL( nPropertyDDF, accessTypesG,  
       
   772                     MSmlDmDDFObject::EPermanent, MSmlDmDDFObject::EChr, MSmlDmDDFObject::EOne,
       
   773                     KNSmlDdfPropertyDescription, KMimeType );
       
   774 
       
   775     //Group 
       
   776     MSmlDmDDFObject& nGroupDDF = aDDF.AddChildObjectL( KNSmlDdfGroup );					// Group
       
   777     FillNodeInfoL( nGroupDDF, accessTypesG,  
       
   778                     MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, MSmlDmDDFObject::EOne,
       
   779                     KNSmlDdfGroupDescription, KMimeType );           
       
   780                     
       
   781     // Description node 
       
   782     MSmlDmDDFObject& nDescriptionDDF = aDDF.AddChildObjectL( KNSmlDdfDescription );		// Description
       
   783     FillNodeInfoL( nDescriptionDDF, accessTypesG, 
       
   784                     MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, MSmlDmDDFObject::EOne, 
       
   785                     KNSmlDdfDescDescription, KMimeType );
       
   786 
       
   787     MSmlDmDDFObject& nAttachedDDF = aDDF.AddChildObjectL( KNSmlDdfAttached );			// Attached
       
   788     FillNodeInfoL( nAttachedDDF, accessTypesG, 
       
   789                     MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, MSmlDmDDFObject::EOne,
       
   790                     KNSmlDdfAttachedDescription, KMimeType );
       
   791 
       
   792 		MSmlDmDDFObject& nEnabledDDF = aDDF.AddChildObjectL( KNSmlDdfEnabled );			// Enabled
       
   793     FillNodeInfoL( nEnabledDDF, accessTypesG,  
       
   794                     MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, MSmlDmDDFObject::EOne,
       
   795                     KNSmlDdfEnabledDescription, KMimeType );
       
   796 
       
   797 		MSmlDmDDFObject& nDCMOConfigDDF = aDDF.AddChildObjectL( KNSmlDdfDCMOConfig );	// DCMOConfig
       
   798     FillNodeInfoL( nDCMOConfigDDF, accessTypesG,  
       
   799                     MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::ENode, MSmlDmDDFObject::EOne,
       
   800                     KNSmlDdfDCMOConfigDescription, KMimeType );
       
   801     
       
   802     MSmlDmDDFObject& nDenyUserEnableDDF = nDCMOConfigDDF.AddChildObjectL( KNSmlDdfDenyUserEnable );	// DenyUserEnable
       
   803     FillNodeInfoL( nDenyUserEnableDDF, accessTypesG,  
       
   804                     MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, MSmlDmDDFObject::EZeroOrOne,
       
   805                     KNSmlDdfDenyUserEnableDescription, KMimeType );
       
   806                     
       
   807 
       
   808     MSmlDmDDFObject& nNotifyUserDDF = nDCMOConfigDDF.AddChildObjectL( KNSmlDdfNotifyUser );	// NotifyUser
       
   809     FillNodeInfoL( nNotifyUserDDF, accessTypesG,  
       
   810                     MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, MSmlDmDDFObject::EOne,
       
   811                     KNSmlDdfNotifyUserDescription, KMimeType );                     
       
   812     //Operations 
       
   813    
       
   814   	MSmlDmDDFObject& nOperationsDDF = aDDF.AddChildObjectL( KNSmlDdfOperations );		// Operations
       
   815     FillNodeInfoL( nOperationsDDF, accessTypesG,  
       
   816                     MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::ENode, MSmlDmDDFObject::EOne,
       
   817                     KNSmlDdfOperationsDescription, KMimeType ); 
       
   818                     
       
   819    	
       
   820    	TSmlDmAccessTypes accessTypesE;   
       
   821     accessTypesE.SetExec();
       
   822     
       
   823    	MSmlDmDDFObject& nEnableDDF = nOperationsDDF.AddChildObjectL( KNSmlDdfEnable );		// Enable
       
   824     FillNodeInfoL( nEnableDDF, accessTypesE,  
       
   825                     MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, MSmlDmDDFObject::EOne,
       
   826                     KNSmlDdfEnableDescription, KMimeType );
       
   827                     
       
   828     
       
   829    	MSmlDmDDFObject& nDisableDDF = nOperationsDDF.AddChildObjectL( KNSmlDdfDisable );	// Disable
       
   830     FillNodeInfoL( nDisableDDF, accessTypesE,  
       
   831                     MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, MSmlDmDDFObject::EOne,
       
   832                     KNSmlDdfDisableDescription, KMimeType );
       
   833                     
       
   834 
       
   835    	MSmlDmDDFObject& nOpExtDDF = nOperationsDDF.AddChildObjectL( KNSmlDdfOpExt );		// Operations/Ext
       
   836     FillNodeInfoL( nOpExtDDF, accessTypesG,  
       
   837                     MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::ENode, MSmlDmDDFObject::EOne,
       
   838                     KNSmlDdfOpExtDescription, KMimeType );
       
   839     
       
   840     if( iExtOpNode )
       
   841     {	
       
   842     	MSmlDmDDFObject& nOpExtSemiEnableDDF = nOpExtDDF.AddChildObjectL( KNSmlDdfOpExtSemiEnable );		// Operations/Ext/SemiEnable
       
   843     	FillNodeInfoL( nOpExtSemiEnableDDF, accessTypesE,  
       
   844                     MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, MSmlDmDDFObject::EOne,
       
   845                     KNSmlDdfOpExtSemiEnableDescription, KMimeType );                    
       
   846     	iExtOpNode = EFalse;
       
   847   	}               
       
   848 
       
   849    	MSmlDmDDFObject& nExtDDF = aDDF.AddChildObjectL( KNSmlDdfExt );						// Ext
       
   850     FillNodeInfoL( nExtDDF, accessTypesG, 
       
   851                     MSmlDmDDFObject::EDynamic, MSmlDmDDFObject::EChr, MSmlDmDDFObject::EOne, 
       
   852                     KNSmlDdfExtDescription, KMimeType ); 
       
   853 
       
   854 
       
   855 	_DBG_FILE("CDcmoDMAdapter::FillDCMPDDFL(): end");
       
   856 }    
       
   857 
       
   858 // ----------------------------------------------------------------------------
       
   859 // CDcmoDMAdapter::GetCategoryFromUriL
       
   860 // This function returns the implementation UID if the plug-in
       
   861 // ----------------------------------------------------------------------------
       
   862 //	
       
   863 TPtrC8 CDcmoDMAdapter::GetCategoryFromUriL(const TDesC8& aURI )
       
   864 {
       
   865 	_DBG_FILE("CDcmoDMAdapter::GetDCMOAdapterUidL(): begin");
       
   866 	
       
   867 	TInt length = aURI.Length ();
       
   868 	TInt count = 0;
       
   869 	TInt flag = 0;
       
   870 	for (count=0; count<length; count++)
       
   871 		{
       
   872 		if ( aURI[count]=='/')
       
   873 			{
       
   874 				if ( flag )
       
   875 					break;
       
   876 				flag = count;			
       
   877 			}
       
   878 		}
       
   879 		
       
   880 	_DBG_FILE("CDcmoDMAdapter::GetDCMOAdapterUidL(): end");	
       
   881 	return ( aURI.Mid ( flag+1 , count-(flag+1) ));	
       
   882 
       
   883 
       
   884 }
       
   885 
       
   886 // End of File