MAK Data Logger API Documentation for DIS
exportFileToDatabase Example

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.


The main application:

/*******************************************************************************
** Copyright (c) 1992-2011 VT MAK
** All rights reserved.
*******************************************************************************/
#include <absoluteTime.h>
#include <lgrPrint.h>
#include <vlutil/vlProcessControl.h>
#include <vlutil/vlPrint.h>
#include <cmdLine/cmdLine.h>
#include <lgrVersion.h>
#if DtDIS
#include <vl/dExConnInit.h>
#include <disLogger.h>
#endif
#if DtHLA
#include <vl/hExConnInit.h>
#include <hlaLogger.h>
#endif
using namespace MAKLogger;
// Hard coded paths for files. Relative to the bin directories.
#ifdef DtHLA
#ifdef DtHLA_1516
#ifdef DtHLA_1516_EVOLVED
const char defaultFileName[] = "..\\logger_tapes\\maklanddemoHLA1516e_vrlink_evolved_xml.lgr";
#else // DtHLA_1516 && !DtHLA_1516_EVOLVED
const char defaultFileName[] = "..\\logger_tapes\\maklanddemoHLA1516_vrlink_xml.lgr";
#endif // DtHLA_1516_EVOLVED
#else // !DtHLA_1516
const char defaultFileName[] = "..\\logger_tapes\\maklanddemoHLA13.lgr";
#endif // DtHLA_1516
#else // !DtHLA
const char defaultFileName[] = "..\\logger_tapes\\maklanddemoDIS.lgr";
#endif // DtHLA
bool keyCheck(const char* keysToCheck)
{
if(DtKbHit())
{
char c = DtGetCh();
return strchr(keysToCheck,c) != 0;
}
return false;
}
// Add the database export to the editor interface.
#if DtDIS
typedef DtLgrDisSqlExporter TheExporter;
#elif DtHLA
typedef DtLgrHlaSqlExporter TheExporter;
#endif
void addDatabaseExport(DtLgrEditorInterface* editorInterface)
{
DtString fileFormat = TheExporter::theExportName();
DtString fileFilter = "";
// Do not offset the times.
bool offsetData = false;
// Do not generate extra data.
bool generateData = false;
// Export both selection and whole file.
DtLgrPacketPrinter* printer(0);
printer = TheExporter::create();
if(editorInterface)
{
editorInterface->addExportType(fileFormat,fileFilter,offsetData,generateData,
exportType,std::auto_ptr<DtLgrPacketPrinter>(printer));
}
}
// Capture export signals
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");
cmdLine.add(&filenameArg);
cmdLine.parse(argc,argv);
std::vector<DtString> values = filenameArg.getValue();
if(values.size() == 0)
{
values.push_back(defaultFileName);
}
DtString filename(values.front());
try
{
// Create the logger based upon it's protocol. These helped sub classes
// automatically register the protocol and provide additional utility
// functions.
#if DtDIS
// Create a DIS logger
DtDisLogger* aLogger = DtDisLogger::create(true);
#endif
#if DtHLA
// Create a HLA logger
DtHlaLogger* aLogger = DtHlaLogger::create(true);
#endif
// Initialize logger with default settings.
DtExerciseConnInitializer exConnInit;
#ifdef DtHLA
#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 // DtHLA
aLogger->connect(exConnInit);
DtLgrSimInterface* simInterface = DtLgrSimInterface::create(*aLogger);
aLogger->tick();
simInterface->update();
if(!simInterface->isConnected())
{
DtInfo << "Unable to connect." << std::endl;
return 1;
}
delete simInterface;
// Create Playback interface to open file
if(!pbInterface)
{
DtInfo << "Error: Unable to create playback interface." << std::endl;
return 1;
}
// Tell the logger to open a file.
pbInterface->openFile(filename);
// Process Commands
aLogger->tick();
// Update interface
pbInterface->update();
// Check to see if file was loaded.
if(!pbInterface->isFileLoaded())
{
DtInfo << "Unable to open file: " << filename << "." << std::endl;
return 1;
}
// Configure export settings (these are for HLA 1.3 and export to Microsoft Access database)
DtSqlExportSettings mySettings;
mySettings.setDriver("Microsoft Access Driver (*.mdb)");
mySettings.setServerName("localhost");
mySettings.setUserName("root");
mySettings.setPassword("");
mySettings.setDataSource("Logger MS Access ODBC");
#ifdef DtHLA
#ifdef DtHLA_1516
#ifdef DtHLA_1516_EVOLVED
mySettings.setOmtFile("VR-Link_evolved.xml");
#else // DtHLA_1516 && !DtHLA_1516_EVOLVED
mySettings.setOmtFile("VR-Link.xml");
#endif // DtHLA_1516_EVOLVED
#else // !DtHLA_1516
mySettings.setOmtFile("VR-Link.omt");
#endif // DtHLA_1516
#endif // DtHLA
mySettings.setShortTableNames(1);
mySettings.setGenerateInstanceTable(1);
#ifdef DtHLA
// Add a class filter to remove updates of the specified class
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
mySettings.packetFilters().push_back(classFilter);
#endif // DtHLA
DtString dest = mySettings.encodeDestination();
// Create Editor interface for controlling export.
DtLgrEditorInterface* editorInterface = DtLgrEditorInterface::create(*aLogger);
if(!editorInterface)
{
DtInfo << "Error: Unable to create editor interface." << std::endl;
return 1;
}
// Add the database export
addDatabaseExport(editorInterface);
// Add slots to capture result of export operation
DtExportSlots exportSlots;
DtConnect(editorInterface->exportCompletedSignal, &exportSlots, &DtExportSlots::exportCompleted);
DtConnect(editorInterface->exportCanceledSignal, &exportSlots, &DtExportSlots::exportCanceled);
editorInterface->exportFile("Database",dest,false,false);
DtInfo << "Exporting file: " << filename << "." << std::endl;
DtInfo << "Wait ...\n";
// Export operation is processed within the single tick
// Tick logger
aLogger->tick();
// Update Interface
pbInterface->update();
editorInterface->update();
// Check to see if the logger is still completed the export.
if (exportSlots.MyExportCanceled())
{
DtInfo << "Export was canceled." << std::endl;
}
else if(!exportSlots.MyExportComplete())
{
DtInfo << "Stopping export." << std::endl;
editorInterface->cancelLongOperation();
// Make the logger stop.
aLogger->tick();
}
DtInfo << "Finished exporting file." << std::endl;
DtRestoreKbHit();
delete pbInterface;
delete editorInterface;
delete aLogger;
}
catch (DtException& ex)
{
DtString output = DtSerializeException(ex);
DtInfo << output << std::endl;
return 0;
}
return 0;
}
int main(int argc, char** argv)
{
return exportFile(argc,argv);
}

Document ID: Generated on Thu Apr 11 12:13:00 EDT 2013 from SVN revision 126011
Copyright © 2005-2012 VT MÄK. All Rights Reserved (www.mak.com)