diff -r 053c6c7c14f3 -r 0efa10d348c0 contentstorage/caclient/s60/src/caobjectadapter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentstorage/caclient/s60/src/caobjectadapter.cpp Tue Aug 31 15:30:51 2010 +0300 @@ -0,0 +1,390 @@ +/* + * Copyright (c)2008 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: ?Description + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cadef.h" +#include "caobjectadapter.h" +#include "cainnerentry.h" +#include "caentry_p.h" +#include "cainnerquery.h" +#include "caquery.h" + +#include "canotifierfilter.h" +#include "cainnernotifierfilter.h" +#include "caclient_defines.h" + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +void CaObjectAdapter::convertL(const CaEntry &fromEntry, + CCaInnerEntry &toEntry) +{ + toEntry.SetId(fromEntry.id()); + + toEntry.SetTextL( + XQConversions::qStringToS60Desc(fromEntry.text())->Des(), + fromEntry.isLocalized(NameLocalized)); + + toEntry.SetDescriptionL( + XQConversions::qStringToS60Desc(fromEntry.description())->Des(), + fromEntry.isLocalized(DescriptionLocalized)); + + toEntry.SetEntryTypeNameL( + XQConversions::qStringToS60Desc(fromEntry.entryTypeName())->Des()); + + toEntry.SetFlags(static_cast(fromEntry.flags())); + + toEntry.SetRole(static_cast(fromEntry.role())); + + const CaIconDescription fromIconDescription = + fromEntry.iconDescription(); + + toEntry.SetIconDataL( + XQConversions::qStringToS60Desc( + fromIconDescription.filename())->Des(), + XQConversions::qStringToS60Desc( + fromIconDescription.skinId())->Des(), + XQConversions::qStringToS60Desc( + fromIconDescription.applicationId())->Des()); + + const QMap attributesMap = fromEntry.attributes(); + + foreach(QString key, attributesMap.keys()) { + if (key == APPLICATION_UID_ATTRIBUTE_NAME) { + const TInt32 uid = attributesMap.value(key).toInt(); + toEntry.SetUid(uid); + } else { + toEntry.AddAttributeL( + XQConversions::qStringToS60Desc(key)->Des(), + XQConversions::qStringToS60Desc( + attributesMap.value(key))->Des()); + } + } +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- +void CaObjectAdapter::convertL(const CaQuery &fromQuery, + CCaInnerQuery &toQuery) +{ + toQuery.SetParentId(fromQuery.parentId()); + + toQuery.SetChildId(fromQuery.childId()); + + toQuery.SetFlagsOn(static_cast(fromQuery.flagsOn())); + + toQuery.SetFlagsOff(static_cast(fromQuery.flagsOff())); + + toQuery.SetRole(static_cast(fromQuery.entryRoles())); + + toQuery.SetCount(fromQuery.count()); + + const QStringList list = fromQuery.entryTypeNames(); + + CDesC16ArrayFlat *sourceList = + new(ELeave)CDesC16ArrayFlat(KDefaultGranularity); + CleanupStack::PushL(sourceList); + + foreach(const QString str, list) { + sourceList->AppendL(XQConversions::qStringToS60Desc(str)->Des()); + } + + toQuery.SetEntryTypeNames(sourceList); + + CleanupStack::Pop(sourceList); + + // mapping sort enums + SortAttribute sortAttr; + Qt::SortOrder sortOrder; + fromQuery.getSort(sortAttr, sortOrder); + toQuery.SetSort(CaObjectAdapter::getSortCode(sortAttr, sortOrder)); + + const QMap attributesMap = fromQuery.attributes(); + + foreach(QString key, attributesMap.keys()) { + if (key == APPLICATION_UID_ATTRIBUTE_NAME) { + const TInt32 uid = attributesMap.value(key).toInt(); + toQuery.SetUid(uid); + } + else { + toQuery.AddAttributeL( + XQConversions::qStringToS60Desc(key)->Des(), + XQConversions::qStringToS60Desc( + attributesMap.value(key))->Des()); + } + } +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- +void CaObjectAdapter::convert( + const CCaInnerEntry &fromEntry, CaEntry &toEntry) +{ + toEntry.setId(fromEntry.GetId()); + + toEntry.setText(XQConversions::s60DescToQString(fromEntry.GetText()), + fromEntry.isLocalized(CCaInnerEntry::ENameLocalized)); + + toEntry.setDescription( + XQConversions::s60DescToQString(fromEntry.GetDescription()), + fromEntry.isLocalized(CCaInnerEntry::EDescriptionLocalized)); + toEntry.setEntryTypeName( + XQConversions::s60DescToQString(fromEntry.GetEntryTypeName())); + + toEntry.setFlags(static_cast(fromEntry.GetFlags())); + + // take care of converting icon attributes + const CCaInnerIconDescription* innerIcon = fromEntry.Icon(); + CaIconDescription iconDescription; + + iconDescription.setId(innerIcon->Id()); + iconDescription.setFilename( + XQConversions::s60DescToQString(innerIcon->FileName())); + iconDescription.setSkinId( + XQConversions::s60DescToQString(innerIcon->SkinId())); + iconDescription.setApplicationId( + XQConversions::s60DescToQString(innerIcon->ApplicationId())); + + toEntry.setIconDescription(iconDescription); + + const RCaEntryAttrArray &attributesArray = fromEntry.GetAttributes(); + + if (toEntry.entryTypeName() == APPLICATION_ENTRY_TYPE_NAME + || toEntry.entryTypeName() == WIDGET_ENTRY_TYPE_NAME) { + toEntry.setAttribute(APPLICATION_UID_ATTRIBUTE_NAME, + QString::number(fromEntry.GetUid())); + } + + const int attributesArrayCount = attributesArray.Count(); + + for (int i = 0; i < attributesArrayCount; ++i) { + const CCaEntryAttribute *const attribute = attributesArray[i]; + toEntry.setAttribute( + XQConversions::s60DescToQString(attribute->Name()), + XQConversions::s60DescToQString(attribute->Value())); + } +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- +void CaObjectAdapter::convertL(const CaNotifierFilter ¬ifierFilter, + CCaInnerNotifierFilter &source) +{ + source.SetParentId(static_cast(notifierFilter.getParentId())); + + RArray idsList; + CleanupClosePushL(idsList); + CaObjectAdapter::convertL(notifierFilter.getIds(), idsList); + source.SetIdsL(idsList); + + CleanupStack::PopAndDestroy(&idsList); + + switch (notifierFilter.getEntryRole()) { + case static_cast(ItemEntryRole): + source.SetEntryRole(EItemEntryRole); + break; + case static_cast(GroupEntryRole): + source.SetEntryRole(EGroupEntryRole); + break; + default: + source.SetEntryRole(ENoneEntryRole); + break; + } + CDesC16ArrayFlat *typeNames = new(ELeave) CDesC16ArrayFlat( + KDefaultGranularity); + CleanupStack::PushL(typeNames); + + const QStringList stringList = notifierFilter.getTypeNames(); + + foreach(QString str, stringList) { + typeNames->AppendL(XQConversions::qStringToS60Desc(str)->Des()); + } + + source.SetTypeNames(typeNames); + + CleanupStack::Pop(typeNames); +} +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- +void CaObjectAdapter::convertL( + const RPointerArray &fromEntriesArray, + QList< QSharedPointer > &toEntryList) +{ + for (int i = 0; i < fromEntriesArray.Count(); ++i) { + const QSharedPointer toEntry (new CaEntry( + static_cast(fromEntriesArray[i]->GetRole()))); + + CaObjectAdapter::convert(*fromEntriesArray[i], *toEntry); + + toEntryList << toEntry; + } +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- +void CaObjectAdapter::convertL(const QList &entryIdList, + RArray &source) +{ + foreach(int id, entryIdList) { + source.AppendL(static_cast(id)); + } +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- +void CaObjectAdapter::convertL(const RArray &innerEntryIdList, + QList &idList) +{ + for (TInt i = 0; i < innerEntryIdList.Count(); ++i) { + idList.append(innerEntryIdList[i]); + } +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- +ErrorCode CaObjectAdapter::convertErrorCode(int internalErrorCode) +{ + ErrorCode error(NoErrorCode); + switch (internalErrorCode) { + case KErrNone: + error = NoErrorCode; + break; + case KErrNotFound: + error = NotFoundErrorCode; + break; + case KErrNoMemory: + error = OutOfMemoryErrorCode; + break; + case KErrArgument: + error = BadArgumentErrorCode; + break; + case KErrServerTerminated: + error = ServerTerminated; + break; + default: + error = UnknownErrorCode; + break; + } + return error; +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- +void CaObjectAdapter::convert( + CaNotifierPrivate::NotifierType src, + CCaInnerNotifierFilter::TNotifierType &dest) +{ + switch (src) { + case CaNotifierPrivate::EntryChangedWithIdNotifierType: + dest = CCaInnerNotifierFilter::EEntryChangedWithId; + break; + case CaNotifierPrivate::EntryChangedWithEntryNotifierType: + dest = CCaInnerNotifierFilter::EEntryChangedWithEntry; + break; + case CaNotifierPrivate::EntryTouchedNotifierType: + dest = CCaInnerNotifierFilter::EEntryTouched; + break; + case CaNotifierPrivate::GroupContentChangedNotifierType: + dest = CCaInnerNotifierFilter::EGroupContentChanged; + break; + } +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- +void CaObjectAdapter::convert( + TChangeType src, ChangeType &dest) +{ + switch (src) { + case EAddChangeType: + dest = AddChangeType; + break; + case ERemoveChangeType: + dest = RemoveChangeType; + break; + case EUpdateChangeType: + dest = UpdateChangeType; + break; + } +} + +CCaInnerQuery::TSortAttribute CaObjectAdapter::getSortCode( + SortAttribute sortAttribute, Qt::SortOrder sortOrder) +{ + CCaInnerQuery::TSortAttribute sortCode(CCaInnerQuery::Default); + + switch (sortAttribute) { + case NameSortAttribute: { + sortCode = (sortOrder == Qt::AscendingOrder) ? CCaInnerQuery::Name + : CCaInnerQuery::NameDesc; + break; + } + case CreatedTimestampSortAttribute: { + sortCode = (sortOrder == Qt::AscendingOrder) + ? CCaInnerQuery::CreatedTimestamp + : CCaInnerQuery::CreatedTimestampDesc; + break; + } + case MostUsedSortAttribute: { + sortCode = (sortOrder == Qt::AscendingOrder) + ? CCaInnerQuery::MostUsed : CCaInnerQuery::MostUsedDesc; + break; + } + case LastUsedSortAttribute: { + sortCode = (sortOrder == Qt::AscendingOrder) + ? CCaInnerQuery::LastUsed : CCaInnerQuery::LastUsedDesc; + break; + } + case DefaultSortAttribute: { + sortCode = (sortOrder == Qt::AscendingOrder) + ? CCaInnerQuery::Default : CCaInnerQuery::DefaultDesc; + break; + } + } + + return sortCode; +} + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- +void CaObjectAdapter::setId(CaEntry &entry, + int id) +{ + entry.setId(id); +}