diff -r 000000000000 -r b497e44ab2fc syncmlfw/common/wbxml/src/devinf/WBXMLDevInfGenerator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/syncmlfw/common/wbxml/src/devinf/WBXMLDevInfGenerator.cpp Thu Dec 17 09:07:52 2009 +0200 @@ -0,0 +1,391 @@ +/* +* Copyright (c) 2004 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: Device information document generator implementation. +* +*/ + + +// ------------------------------------------------------------------------------------------------ +// Include +// ------------------------------------------------------------------------------------------------ +#include "WBXMLDevInfGenerator.h" +#include "WBXMLGeneratorError.h" +#include "XMLWorkspace.h" + +#include "smlsyncmltags.h" +#include "smldevinftags.h" + +// ------------------------------------------------------------------------------------------------ +// CWBXMLDevInfGenerator +// ------------------------------------------------------------------------------------------------ +EXPORT_C void CWBXMLDevInfGenerator::CreateWorkspaceL() + { + CWBXMLGenerator::CreateDynamicWorkspaceL(); + } + +// ------------------------------------------------------------------------------------------------ +EXPORT_C Ret_t CWBXMLDevInfGenerator::smlDeviceInfo( SmlDevInfDevInfPtr_t aContent ) + { + Reset(); + Workspace()->BeginTransaction(); + TRAPD(result, AppendDeviceInfoL(aContent)); + return HandleResult(result); + } + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendPCDataL( TUint8 aElement, SmlPcdataPtr_t aContent ) + { + if( !aContent ) + { + return; + } + + if( aContent->contentType == SML_PCDATA_OPAQUE ) + { + AddElementL(aElement, TPtrC8((TUint8*)aContent->content, aContent->length)); + } + else + { + AddElementL(aElement, TPtrC8((TUint8*)aContent->content, aContent->length), EWBXMLContentFormatInlineString); + } + } + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendPCDataListL( TUint8 aElement, SmlPcdataListPtr_t aList ) + { + for( SmlPcdataListPtr_t p = aList; p && p->data; p = p->next ) + { + AppendPCDataL(aElement, p->data); + } + } + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendXmitL( TUint8 aTag, SmlDevInfXmitPtr_t aContent ) + { + BeginElementL(aTag, ETrue); + AppendPCDataL(EDevCTType, aContent->cttype); + AppendPCDataL(EDevVerCT, aContent->verct); + EndElementL(); // aTag + } + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendXmitListL( TUint8 aTag, SmlDevInfXmitListPtr_t aContent ) + { + + for( SmlDevInfXmitListPtr_t p = aContent; p && p->data; p = p->next ) + { + AppendXmitL(aTag, p->data); + } + } + + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendExtL( SmlDevInfExtPtr_t aContent ) + { + BeginElementL(EDevExt, ETrue); + AppendPCDataL(EDevXNam, aContent->xnam); + AppendPCDataListL(EDevXVal, aContent->xval); + EndElementL(); // EDevExt + } + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendExtListL( SmlDevInfExtListPtr_t aContent ) + { + for( SmlDevInfExtListPtr_t p = aContent; p && p->data; p = p->next ) + { + AppendExtL(p->data); + } + } + +// 1.2 CHANGES: new element FilterCap +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendFilterCapL( SmlDevInfFilterCapPtr_t aContent ) + { + BeginElementL(EDevFilterCap, ETrue); + AppendPCDataL(EDevCTType, aContent->cttype); + AppendPCDataL(EDevVerCT, aContent->verct); + AppendPCDataListL(EDevFilterKeyword, aContent->filterkeyword); + AppendPCDataListL(EDevPropName, aContent->propname); + EndElementL(); // EDevPropParam + } + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendFilterCapListL( SmlDevInfFilterCapListPtr_t aContent ) + { + if (aContent && aContent->data) + { + for( SmlDevInfFilterCapListPtr_t p = aContent; p && p->data; p = p->next ) + { + AppendFilterCapL(p->data); + } + } + } +// Changes end + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendSyncCapL( SmlDevInfSyncCapPtr_t aContent ) + { + BeginElementL(EDevSyncCap, ETrue); + AppendPCDataListL(EDevSyncType, aContent->synctype); + EndElementL(); // EDevSyncCap + } + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendDSMemL( SmlDevInfDSMemPtr_t aContent ) + { + if( !aContent ) + { + return; + } + BeginElementL(EDevDSMem, ETrue); + if (aContent->shared) + { + BeginElementL(EDevSharedMem); + } + AppendPCDataL(EDevMaxMem, aContent->maxmem); + AppendPCDataL(EDevMaxID, aContent->maxid); + EndElementL(); // EDevDSMem + } + +// 1.2 CHANGES: new elements PropParam and Property +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendPropParamL(SmlDevInfPropParamPtr_t aContent) + { + BeginElementL(EDevPropParam, ETrue); + AppendPCDataL(EDevParamName, aContent->paramname); + AppendPCDataL(EDevDataType, aContent->datatype); + AppendPCDataListL(EDevValEnum, aContent->valenum); + AppendPCDataL(EDevDisplayName, aContent->displayname); + EndElementL(); // EDevPropParam + } + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendPropParamListL(SmlDevInfPropParamListPtr_t aContent) + { + if (aContent && aContent->data) + { + for( SmlDevInfPropParamListPtr_t p = aContent; p && p->data; p = p->next ) + { + AppendPropParamL(p->data); + } + } + } + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendPropertyL( SmlDevInfPropertyPtr_t aContent) + { + BeginElementL(EDevProperty, ETrue); + AppendPCDataL(EDevPropName, aContent->propname); + AppendPCDataL(EDevDataType, aContent->datatype); + AppendPCDataL(EDevMaxOccur, aContent->maxoccur); + AppendPCDataL(EDevMaxSize, aContent->maxsize); + if (aContent->notruncate) + { + BeginElementL(EDevNoTruncate); + } + AppendPCDataListL(EDevValEnum, aContent->valenum); + AppendPCDataL(EDevDisplayName, aContent->displayname); + AppendPropParamListL(aContent->propparam); + EndElementL(); // EDevProperty + } + + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendPropertyListL( SmlDevInfPropertyListPtr_t aContent ) + { + for( SmlDevInfPropertyListPtr_t p = aContent; p && p->data; p = p->next ) + { + AppendPropertyL(p->data); + } + } +// Changes end + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendCTDataL( TUint8 aTag, SmlDevInfCTDataPtr_t aContent ) + { + AppendPCDataL(aTag, aContent->name); + if( aContent->valenum ) + { + AppendPCDataListL(EDevValEnum, aContent->valenum); + } + else + { + AppendPCDataL(EDevDataType, aContent->datatype); + AppendPCDataL(EDevMaxSize, aContent->size); //1.2 CHANGES: EDevSize -> EDevMaxSize + } + AppendPCDataL(EDevDisplayName, aContent->dname); + } + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendCTDataPropL( SmlDevInfCTDataPropPtr_t aContent ) + { + AppendCTDataL(EDevPropName, aContent->prop); + AppendCTDataListL(aContent->param); + } + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendCTDataListL( SmlDevInfCTDataListPtr_t aContent ) + { + for( SmlDevInfCTDataListPtr_t p = aContent; p && p->data; p = p->next ) + { + AppendCTDataL(EDevParamName, p->data); + } + } + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendCTDataPropListL( SmlDevInfCTDataPropListPtr_t aContent ) + { + for( SmlDevInfCTDataPropListPtr_t p = aContent; p && p->data; p = p->next ) + { + AppendCTDataPropL(p->data); + } + } + +// 1.2 CHANGES: version 1.1 and 1.2 support +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendCtCapL( SmlDevInfCtCapPtr_t aContent ) + { + if (iVerDtd == KDtDVersion12) + { + BeginElementL(EDevCTCap, ETrue); + AppendPCDataL(EDevCTType, aContent->cttype); + AppendPCDataL(EDevVerCT, aContent->verct); + if (aContent->fieldlevel) + { + BeginElementL(EDevFieldLevel); + } + AppendPropertyListL(aContent->property); + EndElementL(); // EDevCTCap + } + else + { + AppendPCDataL(EDevCTType, aContent->cttype); + AppendCTDataPropListL(aContent->prop); + } + } +// changes end + + +// 1.2 CHANGES: version 1.1 and 1.2 support +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendCtCapListL( SmlDevInfCtCapListPtr_t aContent ) + { + if (iVerDtd == KDtDVersion11) + { + BeginElementL(EDevCTCap, ETrue); + } + for( SmlDevInfCtCapListPtr_t p = aContent; p && p->data; p = p->next ) + { + AppendCtCapL(p->data); + } + if (iVerDtd == KDtDVersion11) + { + EndElementL(); // EDevCtCap + } + } +// changes end + +//1.2 CHANGES: version 1.1 and 1.2 support +// new elements supportHierarchicalSync, FilterRx and FilterCap in version 1.2 +// CtCap inside Datastore -element in version 1.2 +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendDatastoreL( SmlDevInfDatastorePtr_t aContent ) + { + BeginElementL(EDevDataStore, ETrue); + AppendPCDataL(EDevSourceRef, aContent->sourceref); + AppendPCDataL(EDevDisplayName, aContent->displayname); + AppendPCDataL(EDevMaxGUIDSize, aContent->maxguidsize); + AppendXmitL(EDevRxPref, aContent->rxpref); + AppendXmitListL(EDevRx, aContent->rx); + AppendXmitL(EDevTxPref, aContent->txpref); + AppendXmitListL(EDevTx, aContent->tx); + if ( iVerDtd == KDtDVersion12 ) + { + AppendCtCapListL(aContent->ctcap); + } + AppendDSMemL(aContent->dsmem); + if (( iVerDtd == KDtDVersion12 ) && ( aContent->supportHierarchicalSync )) + { + BeginElementL(EDevSupportHierarchicalSync); + } + AppendSyncCapL(aContent->synccap); + if ( iVerDtd == KDtDVersion12 ) + { + AppendXmitListL(EDevFilterRx, aContent->filterrx); + AppendFilterCapListL(aContent->filtercap); + } + EndElementL(); // EDevDataStore + } +// changes end + +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendDatastoreListL( SmlDevInfDatastoreListPtr_t aContent ) + { + for( SmlDevInfDatastoreListPtr_t p = aContent; p && p->data; p = p->next ) + { + AppendDatastoreL(p->data); + } + } + +//1.2 CHANGES: version 1.1 and 1.2 support +// in version 1.1. CtCap element inside DeviceInfo -element +// ------------------------------------------------------------------------------------------------ +void CWBXMLDevInfGenerator::AppendDeviceInfoL( SmlDevInfDevInfPtr_t aContent ) + { + + TPtrC8 ver; + ver.Set(aContent->verdtd->Data()); + + if ( ver.FindC(_L8("1.1")) == KErrNone ) + { + iVerDtd = KDtDVersion11; + BeginDocumentL(KNSmlDevInfVersion, KNSmlDevInfPublicId, KNSmlDevInfUTF8); + } + else + { + iVerDtd = KDtDVersion12; + BeginDocumentL(KNSmlDevInfVersion, KNSmlDevInfPublicId12, KNSmlDevInfUTF8); + } + + BeginElementL(EDevDevInf, ETrue); + AppendPCDataL(EDevVerDTD, aContent->verdtd); + AppendPCDataL(EDevMan, aContent->man); + AppendPCDataL(EDevMod, aContent->mod); + AppendPCDataL(EDevOEM, aContent->oem); + AppendPCDataL(EDevFwV, aContent->fwv); + AppendPCDataL(EDevSwV, aContent->swv); + AppendPCDataL(EDevHwV, aContent->hwv); + AppendPCDataL(EDevDevID, aContent->devid); + AppendPCDataL(EDevDevTyp, aContent->devtyp); + if( aContent->flags & SmlUTC_f ) + { + BeginElementL(EDevUTC); + } + if( aContent->flags & SmlSupportLargeObjects_f ) + { + BeginElementL(EDevSupportLargeObjs); + } + if( aContent->flags & SmlSupportNumberOfChanges_f ) + { + BeginElementL(EDevSupportNumberOfChanges); + } + AppendDatastoreListL(aContent->datastore); + if (iVerDtd == KDtDVersion11) + { + AppendCtCapListL(aContent->ctcap); + } + AppendExtListL(aContent->ext); + EndElementL(); // EDevDevInf + } +// changes end