locationmanager/tagcreator/src/ctagcreator.cpp
author hgs
Wed, 14 Jul 2010 07:57:22 +0300
changeset 38 5210ffae7137
child 60 79f826a55db2
permissions -rw-r--r--
201027
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
38
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  A class for creating country and city tags for media files
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include "ctagcreator.h"
hgs
parents:
diff changeset
    19
#include "locationmanagerdebug.h"
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
#include "mdccommon.h"
hgs
parents:
diff changeset
    22
#include "mdeobjectdef.h"
hgs
parents:
diff changeset
    23
#include "mdepropertydef.h"
hgs
parents:
diff changeset
    24
#include "mderelation.h"
hgs
parents:
diff changeset
    25
#include "mdequery.h"
hgs
parents:
diff changeset
    26
#include "mdeconstants.h"
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
using namespace MdeConstants;
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
_LIT ( KCountry, "country:");   // country:finland
hgs
parents:
diff changeset
    31
_LIT ( KCity, "city:");         // city:helsinki|country:finland
hgs
parents:
diff changeset
    32
_LIT ( KSeparator, "|" );       // Separator for city tag. Separate city and country.
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    35
// CTagCreator::NewL
hgs
parents:
diff changeset
    36
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    37
//
hgs
parents:
diff changeset
    38
EXPORT_C CTagCreator* CTagCreator::NewL( )
hgs
parents:
diff changeset
    39
    {
hgs
parents:
diff changeset
    40
    LOG( "CTagCreator::NewL(), begin" );
hgs
parents:
diff changeset
    41
    CTagCreator* self = new (ELeave) CTagCreator( );
hgs
parents:
diff changeset
    42
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    43
    self->ConstructL();
hgs
parents:
diff changeset
    44
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    45
    LOG( "CTagCreator::NewL(), end" );
hgs
parents:
diff changeset
    46
    return self;
hgs
parents:
diff changeset
    47
    }
hgs
parents:
diff changeset
    48
        
hgs
parents:
diff changeset
    49
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    50
// CTagCreator::CTagCreator
hgs
parents:
diff changeset
    51
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    52
//  
hgs
parents:
diff changeset
    53
CTagCreator::CTagCreator(  ) 
hgs
parents:
diff changeset
    54
    {
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
    }
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    59
// CTagCreator::ConstructL
hgs
parents:
diff changeset
    60
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    61
//    
hgs
parents:
diff changeset
    62
void CTagCreator::ConstructL()
hgs
parents:
diff changeset
    63
    {
hgs
parents:
diff changeset
    64
    
hgs
parents:
diff changeset
    65
    }
hgs
parents:
diff changeset
    66
    
hgs
parents:
diff changeset
    67
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    68
// CTagCreator::~CTagCreator
hgs
parents:
diff changeset
    69
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    70
//    
hgs
parents:
diff changeset
    71
CTagCreator::~CTagCreator()
hgs
parents:
diff changeset
    72
    {
hgs
parents:
diff changeset
    73
  		
hgs
parents:
diff changeset
    74
    }
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    77
// CTagCreator::SetMdeSession()
hgs
parents:
diff changeset
    78
// --------------------------------------------------------------------------
hgs
parents:
diff changeset
    79
//
hgs
parents:
diff changeset
    80
EXPORT_C void CTagCreator::SetSession(CMdESession* aSession)
hgs
parents:
diff changeset
    81
    {
hgs
parents:
diff changeset
    82
    iMdeSession = aSession;
hgs
parents:
diff changeset
    83
    }
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    86
// CTagCreator::CreateTagForCountryL() 
hgs
parents:
diff changeset
    87
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    88
//
hgs
parents:
diff changeset
    89
void CTagCreator::CreateTagForCountryL( const TPtrC& aCountry, 
hgs
parents:
diff changeset
    90
                        TItemId& aCountryTagId )
hgs
parents:
diff changeset
    91
    {
hgs
parents:
diff changeset
    92
    LOG( "CTagCreator::CreateTagForCountryL - begin" );
hgs
parents:
diff changeset
    93
    
hgs
parents:
diff changeset
    94
    // Crete new string for uri, -> country:India.
hgs
parents:
diff changeset
    95
    TUint totalLength = ( aCountry.Length() + KCountry().Length() );
hgs
parents:
diff changeset
    96
    HBufC* buf = HBufC::NewLC( totalLength );
hgs
parents:
diff changeset
    97
    TPtr uriPtr = buf->Des();
hgs
parents:
diff changeset
    98
    _LIT(KCountryUriFormat, "%S%S");
hgs
parents:
diff changeset
    99
    uriPtr.Format(KCountryUriFormat, &(KCountry()), &aCountry); 
hgs
parents:
diff changeset
   100
    
hgs
parents:
diff changeset
   101
    // Check if there is allready tag for current country.
hgs
parents:
diff changeset
   102
    aCountryTagId = TagExistsL( uriPtr );
hgs
parents:
diff changeset
   103
       
hgs
parents:
diff changeset
   104
    if( !aCountryTagId )
hgs
parents:
diff changeset
   105
	   {
hgs
parents:
diff changeset
   106
	   // No tag, create tag for country.
hgs
parents:
diff changeset
   107
	   aCountryTagId = CreateTagL( aCountry, uriPtr, MdeConstants::Tag::ESystemDefineCountryTags);
hgs
parents:
diff changeset
   108
	   }  
hgs
parents:
diff changeset
   109
      
hgs
parents:
diff changeset
   110
    CleanupStack::PopAndDestroy( buf );
hgs
parents:
diff changeset
   111
    
hgs
parents:
diff changeset
   112
    LOG( "CTagCreator::CreateTagForCountryL - end" );
hgs
parents:
diff changeset
   113
    }
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   116
// CTagCreator::CreateTagForCityL() 
hgs
parents:
diff changeset
   117
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   118
//
hgs
parents:
diff changeset
   119
void CTagCreator::CreateTagForCityL( const TPtrC& aCountry, const TPtrC& aCity, TItemId& aCityTagId )
hgs
parents:
diff changeset
   120
    {
hgs
parents:
diff changeset
   121
    LOG( "CTagCreator::CreateTagForCityL - begin" );
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
    // Crete new string for uri, -> city:bangalore|country:india
hgs
parents:
diff changeset
   124
    TUint totalLength = ( aCity.Length() + KCity.iTypeLength +
hgs
parents:
diff changeset
   125
        aCountry.Length() + KCountry.iTypeLength + KSeparator.iTypeLength );
hgs
parents:
diff changeset
   126
    
hgs
parents:
diff changeset
   127
    HBufC* buf = HBufC::NewLC( totalLength );
hgs
parents:
diff changeset
   128
    TPtr uriPtr = buf->Des();
hgs
parents:
diff changeset
   129
    _LIT(KCityCountryUriFormat, "%S%S%S%S%S");
hgs
parents:
diff changeset
   130
    uriPtr.Format(KCityCountryUriFormat,
hgs
parents:
diff changeset
   131
                    &(KCity()),
hgs
parents:
diff changeset
   132
                    &aCity,
hgs
parents:
diff changeset
   133
                    &(KSeparator()),
hgs
parents:
diff changeset
   134
                    &(KCountry()),
hgs
parents:
diff changeset
   135
                    &aCountry);
hgs
parents:
diff changeset
   136
        
hgs
parents:
diff changeset
   137
    // Check if there is allready tag for current city.
hgs
parents:
diff changeset
   138
    aCityTagId = TagExistsL( uriPtr );
hgs
parents:
diff changeset
   139
	
hgs
parents:
diff changeset
   140
	if( !aCityTagId )
hgs
parents:
diff changeset
   141
		{
hgs
parents:
diff changeset
   142
		// No tag, create tag for city.
hgs
parents:
diff changeset
   143
		aCityTagId = CreateTagL( aCity, uriPtr, MdeConstants::Tag::ESystemDefineCityTags);
hgs
parents:
diff changeset
   144
		}
hgs
parents:
diff changeset
   145
    
hgs
parents:
diff changeset
   146
    CleanupStack::PopAndDestroy( buf );
hgs
parents:
diff changeset
   147
 
hgs
parents:
diff changeset
   148
    LOG( "CTagCreator::CreateTagForCityL - end" );
hgs
parents:
diff changeset
   149
    }
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   152
// CTagCreator::CreateTagL 
hgs
parents:
diff changeset
   153
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   154
//
hgs
parents:
diff changeset
   155
TUint32 CTagCreator::CreateTagL( const TPtrC& aTitle, 
hgs
parents:
diff changeset
   156
        const TPtrC& aUri,
hgs
parents:
diff changeset
   157
        MdeConstants::Tag::TTagType aTagType)
hgs
parents:
diff changeset
   158
    {
hgs
parents:
diff changeset
   159
    LOG( "CTagCreator::CreateTagL - begin" );
hgs
parents:
diff changeset
   160
hgs
parents:
diff changeset
   161
    CMdENamespaceDef& defaultNamespace = iMdeSession->GetDefaultNamespaceDefL();
hgs
parents:
diff changeset
   162
    // Create tag object.
hgs
parents:
diff changeset
   163
    CMdEObjectDef& tagObjectDef = defaultNamespace.GetObjectDefL( Tag::KTagObject );
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
	CMdEObject* tagObject = NULL;
hgs
parents:
diff changeset
   166
    tagObject = iMdeSession->NewObjectLC( tagObjectDef, aUri );
hgs
parents:
diff changeset
   167
	
hgs
parents:
diff changeset
   168
	// Type defs.
hgs
parents:
diff changeset
   169
	CMdEPropertyDef& creationDef = tagObjectDef.GetPropertyDefL(
hgs
parents:
diff changeset
   170
		Object::KCreationDateProperty );
hgs
parents:
diff changeset
   171
	CMdEPropertyDef& modifiedDef = tagObjectDef.GetPropertyDefL(
hgs
parents:
diff changeset
   172
		Object::KLastModifiedDateProperty );
hgs
parents:
diff changeset
   173
	CMdEPropertyDef& sizeDef = tagObjectDef.GetPropertyDefL(
hgs
parents:
diff changeset
   174
		Object::KSizeProperty );
hgs
parents:
diff changeset
   175
	CMdEPropertyDef& itemTypeDef = tagObjectDef.GetPropertyDefL(
hgs
parents:
diff changeset
   176
		Object::KItemTypeProperty );
hgs
parents:
diff changeset
   177
	CMdEPropertyDef& titleDef = tagObjectDef.GetPropertyDefL(
hgs
parents:
diff changeset
   178
		Object::KTitleProperty );
hgs
parents:
diff changeset
   179
	
hgs
parents:
diff changeset
   180
	// Set propertys.
hgs
parents:
diff changeset
   181
	TTime universalTime;
hgs
parents:
diff changeset
   182
    universalTime.UniversalTime(); 
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
    // Creation time.
hgs
parents:
diff changeset
   185
	tagObject->AddTimePropertyL( creationDef, universalTime );   
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
    // Modification time.
hgs
parents:
diff changeset
   188
	tagObject->AddTimePropertyL( modifiedDef, universalTime );
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
    // Size 
hgs
parents:
diff changeset
   191
	tagObject->AddUint32PropertyL( sizeDef, aTagType); 
hgs
parents:
diff changeset
   192
	
hgs
parents:
diff changeset
   193
	// ItemType.
hgs
parents:
diff changeset
   194
	tagObject->AddTextPropertyL( itemTypeDef, Tag::KTagItemType );
hgs
parents:
diff changeset
   195
	
hgs
parents:
diff changeset
   196
	// Title, for country.
hgs
parents:
diff changeset
   197
	if ( aTitle.Length() > 0 )
hgs
parents:
diff changeset
   198
	    {
hgs
parents:
diff changeset
   199
	    tagObject->AddTextPropertyL( titleDef, aTitle ); // Add title
hgs
parents:
diff changeset
   200
	    }
hgs
parents:
diff changeset
   201
	
hgs
parents:
diff changeset
   202
	// Finally add to database.
hgs
parents:
diff changeset
   203
	TItemId itemId = iMdeSession->AddObjectL( *tagObject );
hgs
parents:
diff changeset
   204
    
hgs
parents:
diff changeset
   205
    CleanupStack::PopAndDestroy( tagObject );
hgs
parents:
diff changeset
   206
    
hgs
parents:
diff changeset
   207
    LOG( "CTagCreator::CreateTagL - end" );
hgs
parents:
diff changeset
   208
    
hgs
parents:
diff changeset
   209
    return itemId;
hgs
parents:
diff changeset
   210
    }
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   213
// CTagCreator::TagExistsL 
hgs
parents:
diff changeset
   214
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   215
//
hgs
parents:
diff changeset
   216
TUint32 CTagCreator::TagExistsL( const TPtrC& aUri  )
hgs
parents:
diff changeset
   217
    {
hgs
parents:
diff changeset
   218
    LOG( "CTagCreator::TagExistsL - begin" );
hgs
parents:
diff changeset
   219
  
hgs
parents:
diff changeset
   220
    CMdEObject* mdeObject = NULL;
hgs
parents:
diff changeset
   221
    mdeObject = iMdeSession->GetObjectL( aUri ) ; // Just to find out if it exists.
hgs
parents:
diff changeset
   222
    
hgs
parents:
diff changeset
   223
    if( mdeObject )
hgs
parents:
diff changeset
   224
        {
hgs
parents:
diff changeset
   225
        LOG( "CTagCreator::TagExistsL - returning object id" );
hgs
parents:
diff changeset
   226
        return mdeObject->Id();
hgs
parents:
diff changeset
   227
        }
hgs
parents:
diff changeset
   228
    else
hgs
parents:
diff changeset
   229
        {
hgs
parents:
diff changeset
   230
        LOG( "CTagCreator::TagExistsL - No object, return 0" );
hgs
parents:
diff changeset
   231
        return 0;
hgs
parents:
diff changeset
   232
        } 
hgs
parents:
diff changeset
   233
    }
hgs
parents:
diff changeset
   234
    
hgs
parents:
diff changeset
   235
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   236
// CGeoTagger::AttachTagsL 
hgs
parents:
diff changeset
   237
// Create relationship to country and city tag
hgs
parents:
diff changeset
   238
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   239
//
hgs
parents:
diff changeset
   240
EXPORT_C void CTagCreator::AttachTagsL( const TUint32 aObjectId, const TItemId aCountryTagId, 
hgs
parents:
diff changeset
   241
                             const TItemId aCityTagId )
hgs
parents:
diff changeset
   242
    {
hgs
parents:
diff changeset
   243
    LOG( "CGeoTagger::AttachTagsL" );
hgs
parents:
diff changeset
   244
    CMdENamespaceDef& defaultNamespace = iMdeSession->GetDefaultNamespaceDefL();
hgs
parents:
diff changeset
   245
    // contains relation definition
hgs
parents:
diff changeset
   246
    CMdERelationDef& containsRelDef = defaultNamespace.GetRelationDefL(
hgs
parents:
diff changeset
   247
        Relations::KContains );
hgs
parents:
diff changeset
   248
    
hgs
parents:
diff changeset
   249
    // Create relation between country tag and media object (image/video).
hgs
parents:
diff changeset
   250
    CMdERelation* relationObject = NULL;
hgs
parents:
diff changeset
   251
    if ( aCountryTagId )
hgs
parents:
diff changeset
   252
        {
hgs
parents:
diff changeset
   253
        relationObject = iMdeSession->NewRelationLC ( containsRelDef,
hgs
parents:
diff changeset
   254
                aObjectId, aCountryTagId, 0 );
hgs
parents:
diff changeset
   255
        
hgs
parents:
diff changeset
   256
        if ( !relationObject )
hgs
parents:
diff changeset
   257
            {
hgs
parents:
diff changeset
   258
            LOG( "CGeoTagger::AttachTagsL - Couldn't create relation object!" );
hgs
parents:
diff changeset
   259
            User::Leave ( KErrBadHandle );
hgs
parents:
diff changeset
   260
            }
hgs
parents:
diff changeset
   261
        
hgs
parents:
diff changeset
   262
        iMdeSession->AddRelationL( *relationObject );
hgs
parents:
diff changeset
   263
            
hgs
parents:
diff changeset
   264
        CleanupStack::PopAndDestroy( relationObject );
hgs
parents:
diff changeset
   265
        } 
hgs
parents:
diff changeset
   266
    
hgs
parents:
diff changeset
   267
    // Create relation between city tag and media object (image/video). 
hgs
parents:
diff changeset
   268
    if ( aCityTagId )
hgs
parents:
diff changeset
   269
        {
hgs
parents:
diff changeset
   270
        relationObject = iMdeSession->NewRelationLC ( containsRelDef,
hgs
parents:
diff changeset
   271
                    aObjectId, aCityTagId, 0 );
hgs
parents:
diff changeset
   272
        
hgs
parents:
diff changeset
   273
        if ( !relationObject)
hgs
parents:
diff changeset
   274
            {
hgs
parents:
diff changeset
   275
            LOG( "CGeoTagger::AttachTagsL - Couldn't create relation object!" );
hgs
parents:
diff changeset
   276
            User::Leave ( KErrBadHandle );
hgs
parents:
diff changeset
   277
            }
hgs
parents:
diff changeset
   278
        
hgs
parents:
diff changeset
   279
        iMdeSession->AddRelationL( *relationObject );
hgs
parents:
diff changeset
   280
                
hgs
parents:
diff changeset
   281
        CleanupStack::PopAndDestroy( relationObject );
hgs
parents:
diff changeset
   282
        }      
hgs
parents:
diff changeset
   283
hgs
parents:
diff changeset
   284
    LOG( "CGeoTagger::AttachTagsL - end" );
hgs
parents:
diff changeset
   285
    }
hgs
parents:
diff changeset
   286
hgs
parents:
diff changeset
   287
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   288
// CGeoTagger::CreateLocationTagsL 
hgs
parents:
diff changeset
   289
// Create country and city tags
hgs
parents:
diff changeset
   290
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   291
//
hgs
parents:
diff changeset
   292
EXPORT_C void CTagCreator::CreateLocationTagsL( const TPtrC& aCountry, TItemId& aCountryTagId, 
hgs
parents:
diff changeset
   293
                                               const TPtrC& aCity, TItemId& aCityTagId)
hgs
parents:
diff changeset
   294
	{        
hgs
parents:
diff changeset
   295
	LOG( "CGeoTagger::CreateLocationTagsL" );
hgs
parents:
diff changeset
   296
    if( aCountry.Length() > 0 )
hgs
parents:
diff changeset
   297
        {
hgs
parents:
diff changeset
   298
        CreateTagForCountryL( aCountry, aCountryTagId );
hgs
parents:
diff changeset
   299
        } 
hgs
parents:
diff changeset
   300
                             
hgs
parents:
diff changeset
   301
    if( aCity.Length() > 0 )
hgs
parents:
diff changeset
   302
        {
hgs
parents:
diff changeset
   303
        CreateTagForCityL( aCountry, aCity, aCityTagId );
hgs
parents:
diff changeset
   304
        }
hgs
parents:
diff changeset
   305
	} 
hgs
parents:
diff changeset
   306
   
hgs
parents:
diff changeset
   307
// End of file