void MainController::load(QString filename)
{
    LoadController zeus(filename);
    int athena = zeus.exec();
    switch(athena)
    {
    case -1:
        QMessageBox::warning(0, tr("Error"), tr("FILE: Unable to open ") + filename);
        break;
    case -2:
        QMessageBox::warning(0, tr("Error"), tr("XML: Document not well formed") + filename);
        break;
    case -3:
    {
        QMessageBox::information(0, tr("Connection error"), tr("Guest user connect"));
        UserSPointer hermes(new User);
        hermes->setUsername("Guest");
        hermes->setType(User::Viewer);
    }
    default:
        m_mw->setCategoryList(categories().keys());
        if(categories().keys().size() > 0)
            setCurrentTable(categories().keys().first());


        m_mw->setUserOk(UserController::currentUser()->type());
        m_currentFile = filename;
        userChange();
        break;
    }

}
/**
 * save record to database
 */
void IpfixDbWriter::processDataDataRecord(const IpfixRecord::SourceID& sourceID, 
		TemplateInfo& dataTemplateInfo, uint16_t length, 
		IpfixRecord::Data* data)
{
	string rowString;
	time_t flowStartSeconds;

	DPRINTF("Processing data record");

	if (dbError) {
		connectToDB();
		if (dbError) return;
	}

	/* get new insert */
	if(srcId.observationDomainId != 0) {
		// use default source id
		rowString = getInsertString(rowString, flowStartSeconds, srcId, dataTemplateInfo, length, data);
	} else {
		rowString = getInsertString(rowString, flowStartSeconds, sourceID, dataTemplateInfo, length, data);
	}

	// if current table is not ok, write to db and get new table name
	if(!(flowStartSeconds >= currentTable.startTime && flowStartSeconds <= currentTable.endTime)) {
		if(numberOfInserts > 0) {
			msg(MSG_DEBUG, "IpfixDbWriter: Writing buffered records to database");
			writeToDb();
			numberOfInserts = 0;
		}
		if (setCurrentTable(flowStartSeconds) != 0) {
			return;	
		}	
	}


	// start new insert statement if necessary
	if (numberOfInserts == 0) {
		// start insert statement
		insertStatement.str("");
		insertStatement.clear();
		insertStatement << "INSERT INTO " << currentTable.name << " (" << tableColumnsString << ") VALUES " << rowString;
		numberOfInserts = 1;
	} else {
		// append insert statement
		insertStatement << "," << rowString;
		numberOfInserts++;
	}

	// write to db if maxInserts is reached
	if(numberOfInserts == maxInserts) {
		msg(MSG_DEBUG, "IpfixDbWriter: Writing buffered records to database");
		writeToDb();
		numberOfInserts = 0;
	}
}
void MainController::newMedia(QString name)
{
    if(!medias().contains(qMakePair(m_mw->currentCategory(),name)))
    {
        MediaSPointer zeus(new Media);
        zeus->setName(name);
        zeus->setCategory(AbstractController::category(m_mw->currentCategory()).data());
        category(m_mw->currentCategory())->addAssociations(zeus);
        addMedia(zeus);
        setCurrentTable(m_mw->currentCategory());
        m_mw->setCurrentMedia(name);
    }
}
void MainController::removeMedia(QString category, QString name)
{
    AbstractController::removeMedia(category, name);
    setCurrentTable(category);
}