//====== Copyright © 1996-2004, Valve Corporation, All rights reserved. ======= // // Purpose: // //============================================================================= #include "importkeyvaluebase.h" #include "dmserializers.h" #include "datamodel/idatamodel.h" #include "datamodel/dmelement.h" #include "datamodel/dmattributevar.h" #include "tier1/KeyValues.h" #include "tier1/UtlBuffer.h" #include "datamodel/dmattribute.h" //----------------------------------------------------------------------------- // Serialization class for Key Values //----------------------------------------------------------------------------- class CImportCommentary : public CImportKeyValueBase { public: virtual const char *GetName() const { return "commentary"; } virtual const char *GetDescription() const { return "Commentary File"; } virtual int GetCurrentVersion() const { return 0; } // doesn't store a version virtual const char *GetImportedFormat() const { return "commentary"; } virtual int GetImportedVersion() const { return 1; } virtual bool Serialize( CUtlBuffer &outBuf, CDmElement *pRoot ); virtual bool Unserialize( CUtlBuffer &buf, const char *pEncodingName, int nEncodingVersion, const char *pSourceFormatName, int nSourceFormatVersion, DmFileId_t fileid, DmConflictResolution_t idConflictResolution, CDmElement **ppRoot ); protected: // Main entry point for derived classes to implement unserialization virtual CDmElement* UnserializeFromKeyValues( KeyValues *pKeyValues ) { Assert( 0 ); return NULL; } }; //----------------------------------------------------------------------------- // Singleton instance //----------------------------------------------------------------------------- static CImportCommentary s_ImportCommentary; void InstallCommentaryImporter( IDataModel *pFactory ) { pFactory->AddSerializer( &s_ImportCommentary ); } bool CImportCommentary::Serialize( CUtlBuffer &buf, CDmElement *pRoot ) { IDmSerializer *pKVSerializer = g_pDataModel->FindSerializer( "keyvalues" ); if ( !pKVSerializer ) return false; return pKVSerializer->Serialize( buf, pRoot ); } //----------------------------------------------------------------------------- // Handles creation of the right element for a keyvalue //----------------------------------------------------------------------------- class CElementForKeyValueCallback : public IElementForKeyValueCallback { public: const char *GetElementForKeyValue( const char *pszKeyName, int iNestingLevel ) { if ( iNestingLevel == 1 && !Q_strncmp(pszKeyName, "entity", 6) ) return "DmeCommentaryNodeEntity"; return NULL; } }; bool CImportCommentary::Unserialize( CUtlBuffer &buf, const char *pEncodingName, int nEncodingVersion, const char *pSourceFormatName, int nSourceFormatVersion, DmFileId_t fileid, DmConflictResolution_t idConflictResolution, CDmElement **ppRoot ) { *ppRoot = NULL; IDmSerializer *pKVSerializer = g_pDataModel->FindSerializer( "keyvalues" ); if ( !pKVSerializer ) return false; CElementForKeyValueCallback KeyValuesCallback; g_pDataModel->SetKeyValuesElementCallback( &KeyValuesCallback ); bool bSuccess = pKVSerializer->Unserialize( buf, "keyvalues", nEncodingVersion, pSourceFormatName, nSourceFormatVersion, fileid, idConflictResolution, ppRoot ); g_pDataModel->SetKeyValuesElementCallback( NULL ); return bSuccess; }