The exportToDatabase program creates a logger, opens a logger tape, and exports it to a MS Access database.
You must have a MS Access data source named "Logger MS Access ODBC" (or change the code accordingly). See the User Guide for instructions on how to set up the data source.
#include <vlutil/vlProcessControl.h>
#include <vlutil/vlPrint.h>
#include <vlutil/vlMiniDumper.h>
#include <cmdLine/cmdLine.h>
#if DtDIS
#include <vl/exerciseConnInitializerDIS.h>
#endif
#if DtHLA
#include <vl/exerciseConnInitializerHLA.h>
#endif
using namespace MAKLogger;
#ifdef DtHLA
#ifdef DtHLA_1516
#ifdef DtHLA_1516_EVOLVED
const char defaultFileName[] = "..\\logger_tapes\\makland2016-HLAe-RPR20.lgr";
#else // DtHLA_1516 && !DtHLA_1516_EVOLVED
const char defaultFileName[] = "..\\logger_tapes\\makland2016-HLA516-RPR20.lgr";
#endif // DtHLA_1516_EVOLVED
#else // !DtHLA_1516
const char defaultFileName[] = "..\\logger_tapes\\makland2016-HLA13-RPR20.lgr";
#endif // DtHLA_1516
#else // !DtHLA
const char defaultFileName[] = "..\\logger_tapes\\makland2016-DIS.lgr";
#endif // DtHLA
bool keyCheck(const char* keysToCheck)
{
if(DtKbHit())
{
char c = DtGetCh();
return strchr(keysToCheck,c) != 0;
}
return false;
}
#if DtDIS
#elif DtHLA
typedef DtLgrHlaSqlExporter TheExporter;
#endif
{
DtString fileFormat = TheExporter::theExportName();
DtString fileFilter = "";
bool offsetData = false;
bool generateData = false;
printer = TheExporter::create();
if(editorInterface)
{
editorInterface->
addExportType(fileFormat,fileFilter,offsetData,generateData,
exportType,std::auto_ptr<DtLgrPacketPrinter>(printer));
}
}
class DtExportSlots
{
public:
DtExportSlots()
: myExportComplete(false)
, myExportCanceled(false)
{}
~DtExportSlots() {}
void clearSignals()
{
myExportComplete = false;
myExportCanceled = false;
}
bool MyExportComplete() const { return myExportComplete; }
void MyExportComplete(bool val) { myExportComplete = val; }
bool MyExportCanceled() const { return myExportCanceled; }
void MyExportCanceled(bool val) { myExportCanceled = val; }
public:
void exportCompleted(const DtString& exportType)
{
myExportComplete = true;
}
void exportCanceled(const DtString& exportType)
{
myExportCanceled = true;
}
protected:
bool myExportComplete;
bool myExportCanceled;
};
int exportFile(int argc, char** argv)
{
DtCmdLine::CmdLine cmdLine(
"exportFileToDatabase",
"Example of how to export a logger file to a database.",
LOGGER_VERSION_STRING);
DtCmdLine::UnlabeledMultiArg<DtString> filenameArg("Filename","The name of the logger file to export.","string");
DtCmdLine::ValueArg<DtString> odbcDriverArg("d","odbcDriver","The name of the odbc driver.",false, "Microsoft Access Driver (*.mdb)", "string");
DtCmdLine::ValueArg<DtString> odbcDataSourceArg("s","odbcSource","The name of the odbc data source.",false, "Logger MS Access ODBC", "string");
DtCmdLine::ValueArg<DtString> odbcServerArg("r","odbcServer","The odbc server.",false, "localhost", "string");
DtCmdLine::ValueArg<DtString> odbcUserArg("u","odbcUser","The odbc user name.",false, "root", "string");
DtCmdLine::ValueArg<DtString> odbcPasswdArg("p","odbcPasswd","The odbc passwd.",false, "", "string");
cmdLine.add(&filenameArg);
cmdLine.add(&odbcDriverArg);
cmdLine.add(&odbcDataSourceArg);
cmdLine.add(&odbcServerArg);
cmdLine.add(&odbcUserArg);
cmdLine.add(&odbcPasswdArg);
cmdLine.parse(argc,argv);
std::vector<DtString> values = filenameArg.getValue();
if(values.size() == 0)
{
values.push_back(defaultFileName);
}
DtString filename(values.front());
try
{
DtExerciseConnInitializer exConnInit;
#if DtDIS
#else
DtHlaLogger* aLogger = DtHlaLogger::create(true);
#ifdef DtHLA_1516
#ifdef DtHLA_1516_EVOLVED
exConnInit.setFedFileName("VR-Link_evolved.xml");
#else // DtHLA_1516 && !DtHLA_1516_EVOLVED
exConnInit.setFedFileName("VR-Link.xml");
#endif // DtHLA_1516_EVOLVED
#else // !DtHLA_1516
exConnInit.setFedFileName("VR-Link.fed");
#endif // DtHLA_1516
#endif // DtDIS
aLogger->connect(exConnInit);
aLogger->tick();
{
DtInfo << "Unable to connect." << std::endl;
return 1;
}
delete simInterface;
if(!pbInterface)
{
DtInfo << "Error: Unable to create playback interface." << std::endl;
return 1;
}
aLogger->tick();
{
DtInfo << "Unable to open file: " << filename << "." << std::endl;
return 1;
}
mySettings.
setDriver(odbcDriverArg.getValue());
#ifdef DtHLA
#ifdef DtHLA_1516
#ifdef DtHLA_1516_EVOLVED
#else // DtHLA_1516 && !DtHLA_1516_EVOLVED
#endif // DtHLA_1516_EVOLVED
#else // !DtHLA_1516
#endif // DtHLA_1516
#endif // DtHLA
#ifdef DtHLA
DtLgrHlaFilterByClass* classFilter = DtLgrHlaFilterByClass::create();
#ifdef DtHLA_1516
classFilter->setFilterObjectClass("HLAobjectRoot.BaseEntity.PhysicalEntity.Platform.Aircraft", true);
#else // !DtHLA_1516
classFilter->setFilterObjectClass("ObjectRoot.BaseEntity.PhysicalEntity.Platform.Aircraft", true);
#endif // DtHLA_1516
#endif // DtHLA
if(!editorInterface)
{
DtInfo << "Error: Unable to create editor interface." << std::endl;
return 1;
}
addDatabaseExport(editorInterface);
DtExportSlots exportSlots;
editorInterface->
exportFile(
"Database",dest,
false,
false);
DtInfo << "Exporting file: " << filename << "." << std::endl;
DtInfo << "Wait ...\n";
aLogger->tick();
if (exportSlots.MyExportCanceled())
{
DtInfo << "Export was canceled." << std::endl;
}
else if(!exportSlots.MyExportComplete())
{
DtInfo << "Stopping export." << std::endl;
aLogger->tick();
}
DtInfo << "Finished exporting file." << std::endl;
DtRestoreKbHit();
delete pbInterface;
delete editorInterface;
delete aLogger;
}
{
DtInfo << output << std::endl;
return 0;
}
return 0;
}
int main(int argc, char** argv)
{
DtINIT_MINIDUMPER( "ExportFile" );
return exportFile(argc,argv);
}