00001 /****************************************************************************** 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 00008 00009 #if DtHLA 00010 00011 #ifndef lgrHlaDatabasePrinter_H_ 00012 #define lgrHlaDatabasePrinter_H_ 00013 00014 #include "lgrDatabasePrinter.h" 00015 00016 #include <map> 00017 #include <set> 00018 #include <lgrHlaAttribute.h> 00019 00020 class DtDatabaseInterface; 00021 class DtDatatypeManager; 00022 class DtInteractionClassFedNode; 00023 class DtOMTTree; 00024 class DtObjectClassFedNode; 00025 class DtOutputStream; 00026 00027 namespace MAKLogger 00028 { 00029 class DtBaseFomDesc; 00030 class DtBaseInterClassDesc; 00031 class DtConstLgrHlaMessage; 00032 class DtLgrHlaCheckpointTableFactory; 00033 class DtLgrHlaInteractionTableFactory; 00034 class DtLgrHlaObjectTableFactory; 00035 class DtPacket; 00036 00038 class DT_DLL_SQLEXPORTER DtLgrHlaDatabasePrinter : public DtLgrDatabasePrinter 00039 { 00040 public: 00041 00043 DtLgrHlaDatabasePrinter(DtOutputStream& log, 00044 const MAKLogger::DtBaseFomDesc& fom, DtOMTTree* omtTree, 00045 DtDatabaseInterface& databaseInterface); 00046 00048 virtual ~DtLgrHlaDatabasePrinter(); 00049 00050 private: 00052 DtLgrHlaDatabasePrinter(const DtLgrHlaDatabasePrinter&); 00053 DtLgrHlaDatabasePrinter& operator=(const DtLgrHlaDatabasePrinter&); 00055 public: 00056 00058 virtual void setUseShortTableNames(bool shortNames); 00059 00061 virtual void setGenerateInstanceTable( bool generate); 00062 00064 virtual void setGenerateCheckpointTable( bool generate); 00065 00067 virtual void setGenerateLargeSubcomponentTables(bool generate); 00068 00071 virtual void setLargeSubcomponentThreshold(int threshold); 00072 00074 virtual void createDefaultTables(); 00075 00077 virtual void printInteraction(const MAKLogger::DtConstLgrHlaMessage& hlaMsg); 00078 00080 virtual void printUpdate(const MAKLogger::DtConstLgrHlaMessage& hlaMsg); 00081 00083 virtual void printCheckpoint(const MAKLogger::DtPacket& packet); 00084 00086 virtual void printRemoval(const MAKLogger::DtConstLgrHlaMessage& hlaMsg); 00087 00088 protected: 00089 00090 typedef std::set<MAKLogger::DtLgrHlaHandle> InstanceSet; 00091 00092 //Internal cache data structure. 00093 struct InterClassCache 00094 { 00095 const MAKLogger::DtBaseInterClassDesc* classDesc; 00096 DtInteractionClassFedNode* fedNode; 00097 DtLgrDatabasePrinter::TableList tables; 00098 }; 00099 00100 //Internal cache data structure. 00101 struct ObjClassCache 00102 { 00103 const MAKLogger::DtBaseObjClassDesc* classDesc; 00104 DtObjectClassFedNode* fedNode; 00105 DtLgrDatabasePrinter::TableList tables; 00106 }; 00107 00108 typedef std::map<MAKLogger::DtLgrHlaHandle,InterClassCache> 00109 InteractionLookupMap; 00110 00111 typedef std::map<MAKLogger::DtLgrHlaHandle,ObjClassCache> 00112 ObjectLookupMap; 00113 00116 void outputToDatabase(const MAKLogger::DtBaseObjClassDesc& hlaClass, 00117 const MAKLogger::DtConstLgrHlaMessage& hlaMsg); 00118 00120 InterClassCache& interCache( MAKLogger::DtLgrHlaHandle classHandle ); 00121 00123 ObjClassCache& objCache(MAKLogger::DtLgrHlaHandle classHandle ); 00124 00125 MAKLogger::DtBaseFomDesc* myPacketFom; 00126 DtOMTTree* myOMTTree; 00127 DtDatatypeManager* myDatatypeManager; 00128 InteractionLookupMap myInteractionLookupMap; 00129 InteractionLookupMap::iterator myLastInteractionIter; 00130 MAKLogger::DtLgrHlaHandle myLastInteractionHandle; 00131 DtLgrHlaInteractionTableFactory* myInteractionTableFac; 00132 ObjectLookupMap myObjectLookupMap; 00133 ObjectLookupMap::iterator myLastObjectIter; 00134 MAKLogger::DtLgrHlaHandle myLastObjectHandle; 00135 DtLgrHlaObjectTableFactory* myObjectTableFac; 00136 DtLgrHlaCheckpointTableFactory* myCheckpointTableFac; 00137 InstanceSet myObjectInstances; 00138 bool myGenerateInstanceTable; 00139 bool myGenerateCheckpointTable; 00140 }; 00141 00142 } 00143 00144 #endif 00145 #endif