void ImportExportTests::importBenchmark()
{
    const QString filename = ":/importExportTest/Data/test-database-export.charmdatabaseexport";
    QBENCHMARK {
        importDatabase( filename );
    }
}
void ImportExportTests::importExportTest()
{
    const QString localFileName( "ImportExportTests-temp.charmdatabaseexport" );
    const QString filename = ":/importExportTest/Data/test-database-export.charmdatabaseexport";
    importDatabase( filename );

    QSharedPointer<CharmDataModel> databaseStep1( model()->clone() );

    QDomDocument exportDoc = controller()->exportDatabasetoXml();
    QFile outfile( localFileName );
    QVERIFY( outfile.open( QIODevice::ReadWrite ) );
    QTextStream stream( &outfile );
    exportDoc.save( stream, 4 ); // FIXME save does no kind of error reporting?

    importDatabase( filename );
    QCOMPARE( *databaseStep1.data(), *model() );


    // Code to load and anonymize a database:
//    QBENCHMARK {
//        Q_FOREACH( Task task, model()->getAllTasks() ) {
//            task.setName( QString::number( task.id() ) );
//            QVERIFY( controller()->modifyTask( task ) );
//        }

//        EventMap eventMap = model()->eventMap();
//        for( EventMap::const_iterator it = eventMap.begin(); it != eventMap.end(); ++it ) {
//            Event event = (*it).second;
//            event.setComment( QString::number( event.id() ));
//            QVERIFY( controller()->modifyEvent( event ) );
//        }

//        QDomDocument exportDoc = controller()->exportDatabasetoXml();
//        QFile outfile( "test-database-export.charmdatabaseexport" );
//        QVERIFY( outfile.open( QIODevice::ReadWrite ) );
//        QTextStream stream( &outfile );
//        exportDoc.save( stream, 4 );
//        qDebug() << outfile.fileName();
//    }
}
void ImportExportTests::exportBenchmark()
{
    const QString filename = ":/importExportTest/Data/test-database-export.charmdatabaseexport";
    const QString localFileName( "ImportExportTests-temp.charmdatabaseexport" );
    importDatabase( filename );
    QBENCHMARK {
        QDomDocument exportDoc = controller()->exportDatabasetoXml();
        QFile outfile( localFileName );
        QVERIFY( outfile.open( QIODevice::ReadWrite ) );
        QTextStream stream( &outfile );
        exportDoc.save( stream, 4 ); // FIXME save does no kind of error reporting?
    }
}
DatabaseEditorActions::DatabaseEditorActions(DatabaseEditorController *controller) :
    QObject(controller),
    m_controller(controller)
{
    connect(controller, SIGNAL(currentDatabaseChanged(::LBDatabase::Database*)), this, SLOT(updateActions()));
    connect(controller, SIGNAL(currentTableChanged(::LBDatabase::Table*)), this, SLOT(updateActions()));
    connect(controller, SIGNAL(currentContextChanged(::LBDatabase::Context*)), this, SLOT(updateActions()));

    m_openDatabaseAction = new Action(this);
    m_openDatabaseAction->setText(tr("&Open..."));
    m_openDatabaseAction->setShortcut(QKeySequence::Open);
    connect(m_openDatabaseAction, SIGNAL(triggered()), m_controller, SLOT(openFile()));

    m_importDatabaseAction = new Action(this);
    m_importDatabaseAction->setText(tr("&Import database..."));
    connect(m_importDatabaseAction, SIGNAL(triggered()), m_controller, SLOT(importDatabase()));

    m_closeDatabaseAction = new Action(this);
    m_closeDatabaseAction->setText(tr("C&lose database"));
    m_closeDatabaseAction->setShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_W);
    m_closeDatabaseAction->setEnabled(false);
    connect(m_closeDatabaseAction, SIGNAL(triggered()), m_controller, SLOT(closeDatabase()));

    m_saveDatabaseAction = new Action(this);
    m_saveDatabaseAction->setText(tr("&Save"));
    m_saveDatabaseAction->setShortcut(QKeySequence::Save);
    m_saveDatabaseAction->setEnabled(false);
    connect(m_saveDatabaseAction, SIGNAL(triggered()), m_controller, SLOT(saveDatabase()));

    m_insertRowAction = new Action(this);
    m_insertRowAction->setText(tr("&Insert Row..."));
    m_insertRowAction->setEnabled(false);
    connect(m_insertRowAction, SIGNAL(triggered()), m_controller, SLOT(appendRow()));

    m_deleteRowAction = new Action(this);
    m_deleteRowAction->setText(tr("&Delete Row..."));
    m_deleteRowAction->setEnabled(false);
    connect(m_deleteRowAction, SIGNAL(triggered()), m_controller, SLOT(deleteRow()));

    m_createTableAction = new Action(this);
    m_createTableAction->setText(tr("&Create Table..."));
    m_createTableAction->setEnabled(false);
    connect(m_createTableAction, SIGNAL(triggered()), m_controller, SLOT(createTable()));

    m_editTableAction = new Action(this);
    m_editTableAction->setText(tr("&Edit Table..."));
    m_editTableAction->setEnabled(false);
    connect(m_editTableAction, SIGNAL(triggered()), m_controller, SLOT(editTable()));

    m_createContextAction = new Action(this);
    m_createContextAction->setText(tr("&Create Context..."));
    m_createContextAction->setEnabled(false);
    connect(m_createContextAction, SIGNAL(triggered()), m_controller, SLOT(createContext()));

    m_addEntityTypeAction = new Action(this);
    m_addEntityTypeAction->setText(tr("&Add EntityType..."));
    m_addEntityTypeAction->setEnabled(false);
    connect(m_addEntityTypeAction, SIGNAL(triggered()), m_controller, SLOT(addEntityType()));

    m_editEntityTypesAction = new Action(this);
    m_editEntityTypesAction->setText(tr("&Edit EntityTypes..."));
    m_editEntityTypesAction->setEnabled(false);
    connect(m_editEntityTypesAction, SIGNAL(triggered()), m_controller, SLOT(editEntityTypes()));

    m_exportUmlGraphvizAction = new Action(this);
    m_exportUmlGraphvizAction->setText(tr("&UML Graphviz *.dot document..."));
    m_exportUmlGraphvizAction->setEnabled(true);
    connect(m_exportUmlGraphvizAction, SIGNAL(triggered()), m_controller, SLOT(exportGraphviz()));

    m_exportCppAction = new Action(this);
    m_exportCppAction->setText(tr("&C++ Entity Storage..."));
    m_exportCppAction->setEnabled(true);
    connect(m_exportCppAction, SIGNAL(triggered()), m_controller, SLOT(exportCpp()));
}