From 3867325522f68e8a3e56eacf4e6ebd8cd968a5f7 Mon Sep 17 00:00:00 2001
From: ck <qt-info@nokia.com>
Date: Mon, 3 May 2010 15:50:15 +0200
Subject: [PATCH] Maemo: Serialize package contents.

Reviewed-by: kh1
---
 .../qt-maemo/maemopackagecontents.cpp         | 38 ++++++++++++++++++-
 .../qt-maemo/maemopackagecontents.h           |  6 ++-
 .../qt-maemo/maemopackagecreationfactory.cpp  |  8 +++-
 .../qt-maemo/maemopackagecreationstep.cpp     | 12 ++++++
 .../qt-maemo/maemopackagecreationstep.h       |  2 +
 5 files changed, 62 insertions(+), 4 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecontents.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecontents.cpp
index 99e4e4b6303..ccb8f868f70 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecontents.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecontents.cpp
@@ -31,13 +31,22 @@
 
 #include "maemopackagecreationstep.h"
 
+namespace {
+    const char * const MODIFIED_KEY =
+        "Qt4ProjectManager.BuildStep.MaemoPackage.Modified";
+    const char * const LOCAL_FILES_KEY
+        = "Qt4ProjectManager.BuildStep.MaemoPackage.LocalFiles";
+    const char * const REMOTE_FILES_KEY
+        = "Qt4ProjectManager.BuildStep.MaemoPackage.RemoteFiles";
+}
+
 namespace Qt4ProjectManager {
 namespace Internal {
 
 MaemoPackageContents::MaemoPackageContents(MaemoPackageCreationStep *packageStep)
     : QAbstractTableModel(packageStep),
       m_packageStep(packageStep),
-      m_modified(true) // TODO: Has to come from settings
+      m_modified(true)
 {
 }
 
@@ -99,5 +108,32 @@ QVariant MaemoPackageContents::headerData(int section,
     return section == 0 ? tr("Local File Path") : tr("Remote File Path");
 }
 
+QVariantMap MaemoPackageContents::toMap() const
+{
+    QVariantMap map;
+    map.insert(MODIFIED_KEY, m_modified);
+    QStringList localFiles;
+    QStringList remoteFiles;
+    foreach (const Deployable &p, m_deployables) {
+        localFiles << p.localFilePath;
+        remoteFiles << p.remoteFilePath;
+    }
+    map.insert(LOCAL_FILES_KEY, localFiles);
+    map.insert(REMOTE_FILES_KEY, remoteFiles);
+    return map;
+}
+
+void MaemoPackageContents::fromMap(const QVariantMap &map)
+{
+    m_modified = map.value(MODIFIED_KEY).toBool();
+    const QStringList localFiles = map.value(LOCAL_FILES_KEY).toStringList();
+    const QStringList remoteFiles = map.value(REMOTE_FILES_KEY).toStringList();
+    if (localFiles.count() != remoteFiles.count())
+        qWarning("%s: serialized data inconsistent", Q_FUNC_INFO);
+    const int count = qMin(localFiles.count(), remoteFiles.count());
+    for (int i = 0; i < count; ++i)
+        m_deployables << Deployable(localFiles.at(i), remoteFiles.at(i));
+}
+
 } // namespace Qt4ProjectManager
 } // namespace Internal
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecontents.h b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecontents.h
index 8dd0728e6ce..8708d3a8fd2 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecontents.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecontents.h
@@ -33,6 +33,7 @@
 #include <QtCore/QAbstractTableModel>
 #include <QtCore/QList>
 #include <QtCore/QString>
+#include <QtCore/QVariantMap>
 
 namespace Qt4ProjectManager {
 namespace Internal {
@@ -62,14 +63,15 @@ public:
 
     virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
 
+    QVariantMap toMap() const;
+    void fromMap(const QVariantMap &map);
+
     Deployable deployableAt(int row) const;
     bool addDeployable(const Deployable &deployable);
     void removeDeployableAt(int row);
     bool isModified() const { return m_modified; }
     void setUnModified() { m_modified = false; }
 
-    // TODO: to/from map
-
 private:
     virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
     virtual QVariant data(const QModelIndex &index,
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationfactory.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationfactory.cpp
index ab031f1b3f2..9969d79711d 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationfactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationfactory.cpp
@@ -94,7 +94,13 @@ BuildStep *MaemoPackageCreationFactory::restore(BuildConfiguration *parent,
                StepType type, const QVariantMap &map)
 {
     Q_ASSERT(canRestore(parent, type, map));
-    return new MaemoPackageCreationStep(parent);
+    MaemoPackageCreationStep * const step
+        = new MaemoPackageCreationStep(parent);
+    if (!step->fromMap(map)) {
+        delete step;
+        return 0;
+    }
+    return step;
 }
 
 bool MaemoPackageCreationFactory::canClone(BuildConfiguration *parent,
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp
index e99a708e644..9916b4d2c0c 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp
@@ -87,6 +87,18 @@ bool MaemoPackageCreationStep::init()
     return true;
 }
 
+QVariantMap MaemoPackageCreationStep::toMap() const
+{
+    QVariantMap map(ProjectExplorer::BuildStep::toMap());
+    return map.unite(m_packageContents->toMap());
+}
+
+bool MaemoPackageCreationStep::fromMap(const QVariantMap &map)
+{
+    m_packageContents->fromMap(map);
+    return ProjectExplorer::BuildStep::fromMap(map);
+}
+
 void MaemoPackageCreationStep::run(QFutureInterface<bool> &fi)
 {
     fi.reportResult(createPackage());
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.h b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.h
index 18b1cca983e..02f50c1a752 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.h
@@ -76,6 +76,8 @@ private:
     virtual void run(QFutureInterface<bool> &fi);
     virtual ProjectExplorer::BuildStepConfigWidget *createConfigWidget();
     virtual bool immutable() const { return true; }
+    virtual QVariantMap toMap() const;
+    virtual bool fromMap(const QVariantMap &map);
 
     bool createPackage();
     bool runCommand(QProcess &proc, const QString &command);
-- 
GitLab