getDataObject abstracted to base class.
#include <QSqlTableModel>
#include <QSqlError>
#include <QSqlQuery>
+#include <QSqlRecord>
#include <QFile>
#include <QDir>
#include <QVariant>
numEntries = query.value(0).toInt();
return numEntries;
}
+
+EmuFrontObject* DatabaseManager::getDataObject(int id) const
+{
+ sqlTableModel->setFilter(QString("id = %1").arg(id));
+ sqlTableModel->select();
+ EmuFrontObject *plf = 0;
+ if (sqlTableModel->rowCount() == 1)
+ {
+ QSqlRecord record = sqlTableModel->record(0);
+ plf = recordToDataObject(&record);
+ }
+ return plf;
+}
+
+EmuFrontObject* DatabaseManager::getDataObjectFromModel(QModelIndex *index)
+{
+ QSqlRecord record = sqlTableModel->record(index->row());
+ return recordToDataObject(&record);
+}
~DatabaseManager();
virtual QSqlTableModel* getDataModel() = 0;
- virtual EmuFrontObject* getDataObjectFromModel(QModelIndex*) = 0;
+ EmuFrontObject* getDataObjectFromModel(QModelIndex*);
+ EmuFrontObject* getDataObject(int id) const;
virtual bool updateDataObjectToModel(const EmuFrontObject*) = 0;
virtual bool insertDataObjectToModel(const EmuFrontObject*) = 0;
virtual bool deleteDataObjectFromModel(QModelIndex*) = 0;
protected:
QSqlTableModel* sqlTableModel;
//virtual QSqlTableModel* getDataModel() = 0;
+ virtual EmuFrontObject* recordToDataObject(const QSqlRecord* ) const = 0;
int countRows(QString tableName, QString columnName, int id) const;
static const QString DB_TABLE_NAME_FILEPATH;
static const QString DB_TABLE_NAME_MEDIATYPE;
// along with Foobar. If not, see <http://www.gnu.org/licenses/>.
#include <QSqlRelationalTableModel>
-#include "dbfilepath.h"
+#include <QSqlRecord>
#include "../dataobjects/filepathobject.h"
+#include "dbfilepath.h"
+#include "dbplatform.h"
+#include "dbmediatype.h"
DbFilePath::DbFilePath(QObject *parent) : DatabaseManager(parent)
{
+ dbPlatform = new DbPlatform(this);
+ dbMediaType = new DbMediaType(this);
sqlTableModel = getData();
}
return sqlTableModel;
}
-EmuFrontObject* DbFilePath::getDataObjectFromModel(QModelIndex *index)
+EmuFrontObject* DbFilePath::recordToDataObject(const QSqlRecord *rec) const
{
- return new FilePathObject;
+ int id = rec->value(FilePath_Id).toInt();
+ QString fpath = rec->value(FilePath_Name).toString();
+ int plfId = rec->value(FilePath_PlatformId).toInt();
+ int mtId = rec->value(FilePath_MediaTypeId).toInt();
+ int fileType = rec->value(FilePath_FileTypeId).toInt();
+ Platform *plf = dynamic_cast<Platform*>(dbPlatform->getDataObject(plfId));
+ MediaType *mt = dynamic_cast<MediaType*>(dbMediaType->getDataObject(mtId));
+ // TODO
+ //int lastScanned = 0;
+ return new FilePathObject(id, fpath, fpath, fileType, plf, mt);
}
bool DbFilePath::updateDataObjectToModel(const EmuFrontObject *ob)
{
- return false;
+ const FilePathObject *fpo = dynamic_cast<const FilePathObject*>(ob);
+ bool ret = false;
+ sqlTableModel->setFilter(QString("id = %1").arg(fpo->getId()));
+ sqlTableModel->select();
+ if (sqlTableModel->rowCount() == 1)
+ {
+ QSqlRecord rec = sqlTableModel->record(0);
+ rec.setValue("name", fpo->getName());
+ rec.setValue("filetypeid", fpo->getFiletype());
+
+ Platform *pl = fpo->getPlatform();
+ MediaType *mt = fpo->getMediaType();
+ if (pl) rec.setValue("platformid", pl->getId());
+ if (mt) rec.setValue("mediatypeid", mt->getId());
+
+ // TODO
+ //rec.setValue("lastscanned", 0);
+ }
+ return ret;
}
bool DbFilePath::insertDataObjectToModel(const EmuFrontObject *ob)
{
- return false;
+ const FilePathObject *fpo = dynamic_cast<const FilePathObject*>(ob);
+ int row = 0;
+ sqlTableModel->insertRows(row, 1);
+
+ Platform *pl = fpo->getPlatform();
+ MediaType *mt = fpo->getMediaType();
+
+ //sqlTableModel->setData(sqlTableModel->index(row, FilePath_Id), NULL);
+ sqlTableModel->setData(sqlTableModel->index(row, FilePath_Name), fpo->getName());
+ sqlTableModel->setData(sqlTableModel->index(row, FilePath_FileTypeId), fpo->getFiletype());
+ // not all the file path types have platform and/or media type
+ if (pl) sqlTableModel->setData(sqlTableModel->index(row, FilePath_PlatformId), pl->getId());
+ if (mt) sqlTableModel->setData(sqlTableModel->index(row, FilePath_MediaTypeId), mt->getId());
+ // TODO:
+ sqlTableModel->setData(sqlTableModel->index(row, FilePath_LastScanned), 0);
+ return sqlTableModel->submitAll();
}
int DbFilePath::countDataObjectRefs(int id) const
#include "databasemanager.h"
+class DbPlatform;
+class DbMediaType;
+
class DbFilePath : public DatabaseManager
{
public:
DbFilePath(QObject *);
virtual QSqlTableModel* getDataModel();
- virtual EmuFrontObject* getDataObjectFromModel(QModelIndex*);
virtual bool updateDataObjectToModel(const EmuFrontObject*);
bool insertDataObjectToModel(const EmuFrontObject*);
bool deleteDataObjectFromModel(QModelIndex*);
int countDataObjectRefs(int) const;
+protected:
+ virtual EmuFrontObject* recordToDataObject(const QSqlRecord* ) const;
+
private:
virtual QSqlTableModel* getData();
+ DbPlatform *dbPlatform;
+ DbMediaType *dbMediaType;
// TODO: add last scanned column
enum { FilePath_Id = 0,
FilePath_Name = 1,
return sqlTableModel;
}
-EmuFrontObject* DbMediaType::getDataObjectFromModel(QModelIndex *index)
+EmuFrontObject* DbMediaType::recordToDataObject(const QSqlRecord *record) const
{
- QSqlRecord record = sqlTableModel->record(index->row());
- int id = record.value(MediaType_Id).toInt();
- QString name = record.value(MediaType_Name).toString();
- QString fileName = record.value(MediaType_Filename).toString();
- //qDebug() << "Got platform Name " << name << " id " << id;
+ int id = record->value(MediaType_Id).toInt();
+ QString name = record->value(MediaType_Name).toString();
+ QString fileName = record->value(MediaType_Filename).toString();
return new MediaType(id, name, fileName);
}
// the null value for index will be set implicitily
// when we don't assign any value to cell 0 in the sql table model
//sqlTableModel->setData(sqlTableModel->index(row, 0), NULL);
- sqlTableModel->setData(sqlTableModel->index(row, 1), plf->getName());
- sqlTableModel->setData(sqlTableModel->index(row, 2), plf->getFilename());
+ sqlTableModel->setData(sqlTableModel->index(row, MediaType_Name), plf->getName());
+ sqlTableModel->setData(sqlTableModel->index(row, MediaType_Filename), plf->getFilename());
return sqlTableModel->submitAll();
}
public:
DbMediaType(QObject *);
virtual QSqlTableModel* getDataModel();
- virtual EmuFrontObject* getDataObjectFromModel(QModelIndex*);
virtual bool updateDataObjectToModel(const EmuFrontObject*);
virtual bool insertDataObjectToModel(const EmuFrontObject*);
virtual bool deleteDataObjectFromModel(QModelIndex*);
MediaType_Name = 1,
MediaType_Filename = 2 };
+protected:
+ virtual EmuFrontObject* recordToDataObject(const QSqlRecord* ) const;
+
private:
virtual QSqlTableModel* getData();
return sqlTableModel;
}
-EmuFrontObject* DbPlatform::getDataObjectFromModel(QModelIndex *index)
+EmuFrontObject* DbPlatform::recordToDataObject(const QSqlRecord *record) const
{
- QSqlRecord record = sqlTableModel->record(index->row());
- int id = record.value(Platform_Id).toInt();
- QString name = record.value(Platform_Name).toString();
- QString fileName = record.value(Platform_Filename).toString();
+ int id = record->value(Platform_Id).toInt();
+ QString name = record->value(Platform_Name).toString();
+ QString fileName = record->value(Platform_Filename).toString();
//qDebug() << "Got platform Name " << name << " id " << id;
return new Platform(id, name, fileName);
}
public:
DbPlatform(QObject *);
virtual QSqlTableModel* getDataModel();
- virtual EmuFrontObject* getDataObjectFromModel(QModelIndex*);
virtual bool updateDataObjectToModel(const EmuFrontObject*);
bool insertDataObjectToModel(const EmuFrontObject*);
bool deleteDataObjectFromModel(QModelIndex*);
Platform_Name = 1,
Platform_Filename = 2 };
+protected:
+ virtual EmuFrontObject* recordToDataObject(const QSqlRecord* ) const;
+
private:
virtual QSqlTableModel* getData();
};