DbFilePath (insert and update functionality). getDataObjectFromModel and
authorMikko Keinänen <mikko.keinanen@gmail.com>
Thu, 3 Jun 2010 22:14:28 +0000 (01:14 +0300)
committerMikko Keinänen <mikko.keinanen@gmail.com>
Thu, 3 Jun 2010 22:14:28 +0000 (01:14 +0300)
getDataObject abstracted to base class.

src/db/databasemanager.cpp
src/db/databasemanager.h
src/db/dbfilepath.cpp
src/db/dbfilepath.h
src/db/dbmediatype.cpp
src/db/dbmediatype.h
src/db/dbplatform.cpp
src/db/dbplatform.h

index b3103af..33cdbba 100644 (file)
@@ -23,6 +23,7 @@
 #include <QSqlTableModel>
 #include <QSqlError>
 #include <QSqlQuery>
+#include <QSqlRecord>
 #include <QFile>
 #include <QDir>
 #include <QVariant>
@@ -81,3 +82,22 @@ int DatabaseManager::countRows(QString tableName, QString columnName, int id) co
         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);
+}
index 77ad360..94ef8ba 100644 (file)
@@ -36,7 +36,8 @@ public:
        ~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;
@@ -52,6 +53,7 @@ public:
 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;
index ae29386..cfd89f0 100644 (file)
 // 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();
 }
 
@@ -31,19 +36,61 @@ QSqlTableModel* DbFilePath::getDataModel()
     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
index da58583..225f9a4 100644 (file)
 
 #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,
index f06f7bd..bc77ca6 100644 (file)
@@ -35,13 +35,11 @@ QSqlTableModel* DbMediaType::getDataModel()
     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);
 }
 
@@ -71,8 +69,8 @@ bool DbMediaType::insertDataObjectToModel(const EmuFrontObject *ob)
     // 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();
 }
 
index 72ab9a9..430bf4b 100644 (file)
@@ -27,7 +27,6 @@ class DbMediaType : public DatabaseManager
 public:
     DbMediaType(QObject *);
     virtual QSqlTableModel* getDataModel();
-    virtual EmuFrontObject* getDataObjectFromModel(QModelIndex*);
     virtual bool updateDataObjectToModel(const EmuFrontObject*);
     virtual bool insertDataObjectToModel(const EmuFrontObject*);
     virtual bool deleteDataObjectFromModel(QModelIndex*);
@@ -37,6 +36,9 @@ public:
         MediaType_Name = 1,
         MediaType_Filename = 2 };
 
+protected:
+    virtual EmuFrontObject* recordToDataObject(const QSqlRecord* ) const;
+
 private:
       virtual QSqlTableModel* getData();
 
index bd7ae54..62ef6ed 100644 (file)
@@ -34,12 +34,11 @@ QSqlTableModel* DbPlatform::getDataModel()
     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);
 }
index 5d50db0..6b57646 100644 (file)
@@ -30,7 +30,6 @@ class DbPlatform : public DatabaseManager
 public:
     DbPlatform(QObject *);
     virtual QSqlTableModel* getDataModel();
-    virtual EmuFrontObject* getDataObjectFromModel(QModelIndex*);
     virtual bool updateDataObjectToModel(const EmuFrontObject*);
     bool insertDataObjectToModel(const EmuFrontObject*);
     bool deleteDataObjectFromModel(QModelIndex*);
@@ -40,6 +39,9 @@ public:
         Platform_Name = 1,
         Platform_Filename = 2 };
 
+protected:
+    virtual EmuFrontObject* recordToDataObject(const QSqlRecord* ) const;
+
 private:
     virtual QSqlTableModel* getData();
 };