--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/ds/dsutils/dbcaps/src/nsmldbcaps.cpp Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,522 @@
+/*
+* Copyright (c) 2005 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: Sources
+*
+*/
+
+
+// ------------------------------------------------------------------------------------------------
+// Includes
+// ------------------------------------------------------------------------------------------------
+#include <badesca.h>
+
+#include <nsmldebug.h>
+#include "nsmldbcaps.h"
+#include "smldevinfdtd.h"
+#include "smlmetinfdtd.h"
+#include "smldevinftags.h"
+
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDbCaps
+// ------------------------------------------------------------------------------------------------
+EXPORT_C CNSmlDbCaps* CNSmlDbCaps::NewL()
+ {
+ //_DBG_FILE("CNSmlDbCaps::NewL(): begin");
+ CNSmlDbCaps* self = CNSmlDbCaps::NewLC();
+ CleanupStack::Pop(); // self
+ //_DBG_FILE("CNSmlDbCaps::NewL(): end");
+ return self;
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+EXPORT_C CNSmlDbCaps* CNSmlDbCaps::NewLC()
+ {
+ //_DBG_FILE("CNSmlDbCaps::NewLC(): begin");
+ CNSmlDbCaps* self = new (ELeave) CNSmlDbCaps();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ //_DBG_FILE("CNSmlDbCaps::NewLC(): end");
+ return self;
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+CNSmlDbCaps::CNSmlDbCaps()
+ {
+ //_DBG_FILE("CNSmlDbCaps::CNSmlDbCaps(): begin");
+ //_DBG_FILE("CNSmlDbCaps::CNSmlDbCaps(): end");
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+void CNSmlDbCaps::ConstructL()
+ {
+ //_DBG_FILE("CNSmlDbCaps::ConstructL(): begin");
+ iDatastore = new (ELeave) sml_devinf_datastore_s();
+ //_DBG_FILE("CNSmlDbCaps::ConstructL(): end");
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+EXPORT_C CNSmlDbCaps::~CNSmlDbCaps()
+ {
+ //_DBG_FILE("CNSmlDbCaps::~CNSmlDbCaps(): begin");
+ delete iDatastore;
+// delete iCtCaps;
+ delete iFilterCaps;
+ //_DBG_FILE("CNSmlDbCaps::~CNSmlDbCaps(): end");
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+EXPORT_C SmlDevInfDatastorePtr_t CNSmlDbCaps::DatastoreL() const
+ {
+ //_DBG_FILE("CNSmlDbCaps::Datastore(): begin");
+ //_DBG_FILE("CNSmlDbCaps::Datastore(): end");
+ SmlDevInfDatastorePtr_t temp = iDatastore;
+ iDatastore = new (ELeave) sml_devinf_datastore_s();
+ return temp;
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+EXPORT_C SmlDevInfCtCapListPtr_t CNSmlDbCaps::CtCaps() const
+ {
+ //_DBG_FILE("CNSmlDbCaps::CtCaps(): begin");
+ //_DBG_FILE("CNSmlDbCaps::CtCaps(): end");
+ SmlDevInfCtCapListPtr_t temp = iDatastore->ctcap;
+ iDatastore->ctcap = 0;
+ return temp;
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+EXPORT_C SmlDevInfFilterCapListPtr_t CNSmlDbCaps::FilterCaps() const
+ {
+ SmlDevInfFilterCapListPtr_t temp = iFilterCaps;
+ iFilterCaps = 0;
+ return temp;
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+EXPORT_C void CNSmlDbCaps::SetRxPrefL( const TDesC8& aCtType, const TDesC8& aVerCt )
+ {
+ //_DBG_FILE("CNSmlDbCaps::SetRxPrefL(): begin");
+ if( !iDatastore->rxpref )
+ {
+ iDatastore->rxpref = CreateXmitL(aCtType, aVerCt);
+ }
+ else
+ {
+ iDatastore->rxpref->cttype->SetDataL(aCtType);
+ iDatastore->rxpref->verct->SetDataL(aVerCt);
+ }
+ //_DBG_FILE("CNSmlDbCaps::SetRxPrefL(): end");
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+EXPORT_C void CNSmlDbCaps::AddRxL( const TDesC8& aCtType, const TDesC8& aVerCt )
+ {
+ //_DBG_FILE("CNSmlDbCaps::AddRxL(): begin");
+ SmlDevInfXmitListPtr_t node = new (ELeave) SmlDevInfXmitList_t();
+ CleanupStack::PushL(node);
+ node->data = CreateXmitL(aCtType, aVerCt);
+ GenericListAddL(&iDatastore->rx, node);
+ CleanupStack::Pop(); // node
+ //_DBG_FILE("CNSmlDbCaps::AddRxL(): end");
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+EXPORT_C void CNSmlDbCaps::SetTxPrefL( const TDesC8& aCtType, const TDesC8& aVerCt )
+ {
+ //_DBG_FILE("CNSmlDbCaps::SetTxPrefL(): begin");
+ if( !iDatastore->txpref )
+ {
+ iDatastore->txpref = CreateXmitL(aCtType, aVerCt);
+ }
+ else
+ {
+ iDatastore->txpref->cttype->SetDataL(aCtType);
+ iDatastore->txpref->verct->SetDataL(aVerCt);
+ }
+ //_DBG_FILE("CNSmlDbCaps::SetTxPrefL(): end");
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+EXPORT_C void CNSmlDbCaps::AddTxL( const TDesC8& aCtType, const TDesC8& aVerCt )
+ {
+ //_DBG_FILE("CNSmlDbCaps::AddTxL(): begin");
+ SmlDevInfXmitListPtr_t node = new (ELeave) SmlDevInfXmitList_t();
+ CleanupStack::PushL(node);
+ node->data = CreateXmitL(aCtType, aVerCt);
+ GenericListAddL(&iDatastore->tx, node);
+ CleanupStack::Pop(); // node
+ //_DBG_FILE("CNSmlDbCaps::AddTxL(): end");
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+EXPORT_C void CNSmlDbCaps::SetSyncType( ENSmlSyncTypes aType )
+ {
+ //_DBG_FILE("CNSmlDbCaps::SetSyncType(): begin");
+ if( aType == EAllTypes )
+ {
+ iSyncTypes = 0xffffffff;
+ }
+ else
+ {
+ iSyncTypes |= (1<<aType);
+ }
+ //_DBG_FILE("CNSmlDbCaps::SetSyncType(): end");
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+EXPORT_C TBool CNSmlDbCaps::SupportsSyncType( ENSmlSyncTypes aType ) const
+ {
+ //_DBG_FILE("CNSmlDbCaps::SupportsSyncType(): begin");
+ //_DBG_FILE("CNSmlDbCaps::SupportsSyncType(): end");
+ return (((1<<aType)&iSyncTypes) != 0);
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+EXPORT_C CNSmlCtCapsHandler* CNSmlDbCaps::CreateHandlerL() const
+ {
+ //_DBG_FILE("CNSmlDbCaps::CreateHandlerL(): begin");
+ //_DBG_FILE("CNSmlDbCaps::CreateHandlerL(): end");
+ return new (ELeave) CNSmlCtCapsHandler(iDatastore->ctcap);
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+
+EXPORT_C void CNSmlDbCaps::AddFilterRxL( const TDesC8& aCtType, const TDesC8& aVerCt )
+ {
+ SmlDevInfXmitListPtr_t filter = new (ELeave) SmlDevInfXmitList_t();
+ CleanupStack::PushL(filter);
+ filter->data = CreateXmitL(aCtType, aVerCt);
+ GenericListAddL(&iDatastore->filterrx, filter);
+ CleanupStack::Pop(); // filter
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+
+EXPORT_C CNSmlFilterCap* CNSmlDbCaps::AddFilterCapLC( const TDesC8& aCtType, const TDesC8& aVerCt )
+ {
+ SmlDevInfFilterCapListPtr_t filtercap = new (ELeave) SmlDevInfFilterCapList_t();
+ CleanupStack::PushL(filtercap);
+ GenericListAddL(&iFilterCaps, filtercap);
+ CleanupStack::Pop(); // filtercap
+
+ filtercap->data = new (ELeave) SmlDevInfFilterCap_t();
+ filtercap->data->cttype = new (ELeave) SmlPcdata_t();
+ filtercap->data->cttype->SetDataL(aCtType);
+ filtercap->data->verct = new (ELeave) SmlPcdata_t();
+ filtercap->data->verct->SetDataL(aVerCt);
+
+ CNSmlFilterCap* f = new (ELeave) CNSmlFilterCap(filtercap->data);
+ CleanupStack::PushL(f);
+ return f;
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+
+EXPORT_C void CNSmlDbCaps::SetSupportHierarchicalSyncL()
+ {
+ if ( !iDatastore->supportHierarchicalSync )
+ {
+ iDatastore->supportHierarchicalSync = new (ELeave) SmlPcdata_t();
+ }
+ iDatastore->supportHierarchicalSync->SetDataL(TPtrC8());
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+
+EXPORT_C void CNSmlDbCaps::SetSourceRefL( const TDesC8& aSourceRef )
+ {
+ if ( !iDatastore->sourceref )
+ {
+ iDatastore->sourceref = new (ELeave) SmlPcdata_t();
+ }
+ iDatastore->sourceref->SetDataL(aSourceRef);
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+
+EXPORT_C void CNSmlDbCaps::SetDisplayNameL( const TDesC8& aDispName )
+ {
+ if ( !iDatastore->displayname )
+ {
+ iDatastore->displayname = new (ELeave) SmlPcdata_t();
+ }
+ iDatastore->displayname->SetDataL(aDispName);
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+
+EXPORT_C void CNSmlDbCaps::SetMaxGuidSizeL( const TDesC8& aMaxGuid )
+ {
+ if ( !iDatastore->maxguidsize )
+ {
+ iDatastore->maxguidsize = new (ELeave) SmlPcdata_t();
+ }
+ iDatastore->maxguidsize->SetDataL(aMaxGuid);
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+EXPORT_C CNSmlCtCap* CNSmlDbCaps::AddCtCapLC()
+ {
+ //_DBG_FILE("CNSmlDbCaps::AddCtCapL(): begin");
+ SmlDevInfCtCapListPtr_t cpcapptr = new (ELeave) SmlDevInfCtCapList_t();
+ CleanupStack::PushL(cpcapptr);
+ GenericListAddL(&iDatastore->ctcap, cpcapptr);
+ CleanupStack::Pop(); // cpcapptr
+ cpcapptr->data = new (ELeave) SmlDevInfCtCap_t();
+ CNSmlCtCap* c = new (ELeave) CNSmlCtCap(cpcapptr->data);
+ CleanupStack::PushL(c);
+ //_DBG_FILE("CNSmlDbCaps::AddCtCapL(): end");
+ return c;
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+SmlPcdataPtr_t CNSmlDbCaps::CreatePcdataL( const TDesC8& aData )
+ {
+ //_DBG_FILE("CNSmlDbCaps::CreatePcdataL(): begin");
+ SmlPcdataPtr_t temp = new (ELeave) SmlPcdata_t();
+ CleanupStack::PushL(temp);
+ temp->SetDataL(aData);
+ CleanupStack::Pop(); // temp
+ //_DBG_FILE("CNSmlDbCaps::CreatePcdataL(): end");
+ return temp;
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+SmlDevInfXmitPtr_t CNSmlDbCaps::CreateXmitL( const TDesC8& aCtType, const TDesC8& aVerCt )
+ {
+ //_DBG_FILE("CNSmlDbCaps::CreateXmitL(): begin");
+ SmlDevInfXmitPtr_t temp = new (ELeave) SmlDevInfXmit_t();
+ CleanupStack::PushL(temp);
+ temp->cttype = CreatePcdataL(aCtType);
+ temp->verct = CreatePcdataL(aVerCt);
+ CleanupStack::Pop(); // temp
+ //_DBG_FILE("CNSmlDbCaps::CreateXmitL(): end");
+ return temp;
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+EXPORT_C TInt CNSmlDbCaps::ConvertDeviceInfoL( sml_devinf_devinf_s* aDeviceInfo)
+ {
+
+ SmlDevInfCtCapListPtr_t target = new (ELeave) SmlDevInfCtCapList_t();
+ CleanupStack::PushL(target);
+ target =0;
+
+ TPtrC8 ver;
+ ver.Set(aDeviceInfo->verdtd->Data());
+
+ if ( ver.FindC(_L8("1.2")) != KErrNone )
+ {
+ CleanupStack::PopAndDestroy(); // target
+ return KErrNotSupported;
+ }
+
+ aDeviceInfo->verdtd->SetDataL( _L8("1.1"));
+
+ for ( SmlDevInfDatastoreListPtr_t datastorePtr = aDeviceInfo->datastore; datastorePtr && datastorePtr->data; datastorePtr = datastorePtr->next )
+ {
+ for ( SmlDevInfCtCapListPtr_t ctcapPtr = datastorePtr->data->ctcap; ctcapPtr && ctcapPtr->data; ctcapPtr = ctcapPtr->next )
+ {
+ SmlDevInfCtCapListPtr_t ctcaps = new (ELeave) SmlDevInfCtCapList_t();
+ CleanupStack::PushL( ctcaps);
+ GenericListAddL(&target, ctcaps);
+ CleanupStack::Pop(); // ctcaps
+ ctcaps->data = new (ELeave) SmlDevInfCtCap_t();
+ ctcaps->data->cttype = new (ELeave) SmlPcdata_t();
+ ctcaps->data->cttype->SetDataL ( ctcapPtr->data->cttype->Data() );
+ for ( SmlDevInfPropertyListPtr_t propPtr = ctcapPtr->data->property; propPtr && propPtr->data; propPtr = propPtr->next)
+ {
+ SmlDevInfCTDataPropListPtr_t props = new (ELeave) SmlDevInfCTDataPropList_t();
+ CleanupStack::PushL( props );
+ GenericListAddL(&ctcaps->data->prop, props);
+ CleanupStack::Pop(); // props
+ props->data = new (ELeave) SmlDevInfCTDataProp_t();
+ props->data->prop = new (ELeave) SmlDevInfCTData_t();
+ props->data->prop->name = new (ELeave) SmlPcdata_t();
+ props->data->prop->name->SetDataL ( propPtr->data->propname->Data() );
+ if ( propPtr->data->datatype )
+ {
+ props->data->prop->datatype = new (ELeave) SmlPcdata_t();
+ props->data->prop->datatype->SetDataL ( propPtr->data->datatype->Data() );
+ }
+ if ( propPtr->data->displayname)
+ {
+ props->data->prop->dname = new (ELeave) SmlPcdata_t();
+ props->data->prop->dname->SetDataL ( propPtr->data->displayname->Data() );
+ }
+ if ( propPtr->data->maxsize)
+ {
+ props->data->prop->size = new (ELeave) SmlPcdata_t();
+ props->data->prop->size->SetDataL ( propPtr->data->maxsize->Data() );
+ }
+ for ( SmlPcdataListPtr_t valenumPtr = propPtr->data->valenum; valenumPtr && valenumPtr->data; valenumPtr = valenumPtr->next)
+ {
+ SmlPcdataListPtr_t valenum = new (ELeave) SmlPcdataList_t();
+ CleanupStack::PushL(valenum);
+ GenericListAddL(&props->data->prop->valenum, valenum);
+ CleanupStack::Pop(); // valenum
+ valenum->data=new (ELeave) SmlPcdata_t();
+ valenum->data->SetDataL ( valenumPtr->data->Data());
+ }
+ for ( SmlDevInfPropParamListPtr_t paramPtr = propPtr->data->propparam; paramPtr && paramPtr->data; paramPtr = paramPtr->next )
+ {
+ SmlDevInfCTDataListPtr_t param = new (ELeave) SmlDevInfCTDataList_t();
+ CleanupStack::PushL(param);
+ GenericListAddL(&props->data->param, param);
+ CleanupStack::Pop(); // param
+ param->data = new (ELeave) SmlDevInfCTData_t();
+ param->data->name = new (ELeave) SmlPcdata_t();
+ param->data->name->SetDataL (paramPtr->data->paramname->Data() );
+ if ( paramPtr->data->displayname )
+ {
+ param->data->dname = new (ELeave) SmlPcdata_t();
+ param->data->dname->SetDataL (paramPtr->data->displayname->Data() );
+ }
+ if ( paramPtr->data->datatype)
+ {
+ param->data->datatype = new (ELeave) SmlPcdata_t();
+ param->data->datatype->SetDataL ( paramPtr->data->datatype->Data() );
+ }
+ for (SmlPcdataListPtr_t valenumPtr = paramPtr->data->valenum; valenumPtr && valenumPtr->data; valenumPtr = valenumPtr->next )
+ {
+ SmlPcdataListPtr_t valenum = new (ELeave) SmlPcdataList_t();
+ CleanupStack::PushL(valenum);
+ GenericListAddL(¶m->data->valenum, valenum);
+ CleanupStack::Pop(); // valenum
+ valenum->data = new (ELeave) SmlPcdata_t();
+ valenum->data->SetDataL ( valenumPtr->data->Data() );
+ }
+ }
+ }
+ }
+ }
+ aDeviceInfo->ctcap = target;
+
+ CleanupStack::PopAndDestroy(); // target
+
+ return KErrNone;
+ };
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDbCaps::SetMaxItemsL
+// Sets maxitems element. Same as: iDatastore->dsmem->maxid
+// ------------------------------------------------------------------------------------------------
+void CNSmlDbCaps::SetMaxItemsL( const TDesC8& aMaxItems )
+ {
+ if ( !iDatastore->dsmem )
+ {
+ iDatastore->dsmem = new (ELeave) SmlDevInfDSMem_t();
+ }
+ if ( !iDatastore->dsmem->maxid )
+ {
+ iDatastore->dsmem->maxid = new (ELeave) SmlPcdata_t();
+ }
+ iDatastore->dsmem->maxid->SetDataL( aMaxItems );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDbCaps::SetMaxSizeL
+// sets maxsize element. Same as: iDatastore->dsmem->maxmem
+// ------------------------------------------------------------------------------------------------
+void CNSmlDbCaps::SetMaxSizeL( const TDesC8& aMaxSize )
+ {
+ if ( !iDatastore->dsmem )
+ {
+ iDatastore->dsmem = new (ELeave) SmlDevInfDSMem_t();
+ }
+ if ( !iDatastore->dsmem->maxmem )
+ {
+ iDatastore->dsmem->maxmem = new (ELeave) SmlPcdata_t();
+ }
+ iDatastore->dsmem->maxmem->SetDataL( aMaxSize );
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDbCaps::Datastore
+// Returns datastore structure.
+// ------------------------------------------------------------------------------------------------
+const sml_devinf_datastore_s* CNSmlDbCaps::Datastore() const
+ {
+ return iDatastore;
+ }
+
+// ------------------------------------------------------------------------------------------------
+// CNSmlDbCaps::FilterCapsList
+// Returns pointer to filtercap structure.
+// ------------------------------------------------------------------------------------------------
+const sml_devinf_filtercaplist_s* CNSmlDbCaps::FilterCapsList() const
+ {
+ return iFilterCaps;
+ }
+
+// ------------------------------------------------------------------------------------------------
+//
+// ------------------------------------------------------------------------------------------------
+EXPORT_C CNSmlFilterCapsHandler* CNSmlDbCaps::CreateFilterCapsHandlerL() const
+ {
+ //_DBG_FILE("CNSmlDbCaps::CreateHandlerL(): begin");
+ //_DBG_FILE("CNSmlDbCaps::CreateHandlerL(): end");
+ return new (ELeave) CNSmlFilterCapsHandler(iFilterCaps);
+ }
+
+// End of File