From 92c996dc98107f9849ea47f950e98a08b22d897c Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
Date: Wed, 7 Jul 2010 17:45:54 -0400
Subject: [PATCH] [#3649] Pass emitter as an argument for serialization

---
 sflphone-common/src/account.h              |  2 +-
 sflphone-common/src/config/serializable.h  |  3 ++-
 sflphone-common/src/config/yamlemitter.cpp | 26 +++++++++++++++++++++-
 sflphone-common/src/config/yamlemitter.h   |  2 +-
 sflphone-common/src/iax/iaxaccount.cpp     |  2 +-
 sflphone-common/src/iax/iaxaccount.h       |  2 +-
 sflphone-common/src/preferences.cpp        |  5 ++++-
 sflphone-common/src/preferences.h          |  2 +-
 sflphone-common/src/sip/sipaccount.cpp     |  4 ++--
 sflphone-common/src/sip/sipaccount.h       |  4 ++--
 10 files changed, 40 insertions(+), 12 deletions(-)

diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h
index e2113f2cb2..cf49c886c0 100644
--- a/sflphone-common/src/account.h
+++ b/sflphone-common/src/account.h
@@ -155,7 +155,7 @@ class Account : public Serializable{
          */
         virtual ~Account();
 
-	virtual void serialize(Engine *engine) = 0;
+	virtual void serialize(Conf::YamlEmitter *emitter) = 0;
 
 	virtual void unserialize(Conf::MappingNode *map) = 0;
 
diff --git a/sflphone-common/src/config/serializable.h b/sflphone-common/src/config/serializable.h
index 7b7cf657a4..e9b88cc84c 100755
--- a/sflphone-common/src/config/serializable.h
+++ b/sflphone-common/src/config/serializable.h
@@ -33,6 +33,7 @@
 
 
 #include "yamlparser.h"
+#include "yamlemitter.h"
 #include "yamlnode.h"
 
 class Engine;
@@ -42,7 +43,7 @@ class Serializable {
 
  public:
 
-  virtual void serialize(Engine *engine) = 0;
+  virtual void serialize(Conf::YamlEmitter *emitter) = 0;
 
   virtual void unserialize(Conf::MappingNode *map) = 0;
 
diff --git a/sflphone-common/src/config/yamlemitter.cpp b/sflphone-common/src/config/yamlemitter.cpp
index 3998e69670..7cd1eacba1 100755
--- a/sflphone-common/src/config/yamlemitter.cpp
+++ b/sflphone-common/src/config/yamlemitter.cpp
@@ -120,8 +120,30 @@ void YamlEmitter::writeAccount(MappingNode *map)
 
 }
 
+void YamlEmitter::writePreference(MappingNode *map)
+{
+  std::string preferencestr("preferences");
+
+  if(map->getType() == MAPPING)
+    throw YamlEmitterException("Node type is not a mapping while writing preferences");
+
+  int preferenceid = yaml_document_add_scalar(&document, NULL, (yaml_char_t *)preferencestr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE);
+  int preferencemapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE);
+
+  yaml_document_append_mapping_pair (&document, topLevelMapping, preferenceid, preferencemapping);
+
+  Mapping *internalmap = map->getMapping();
+  Mapping::iterator iter = internalmap->begin();
+
+  while(iter != internalmap->end()) {
+    addMappingItem(preferencemapping, iter->first, iter->second);
+    iter++;
+  }
+
+}
+
 
-  void YamlEmitter::addMappingItem(int mappingid, Key key, YamlNode *node) 
+void YamlEmitter::addMappingItem(int mappingid, Key key, YamlNode *node) 
 {
 
   if(node->getType() == SCALAR) {
@@ -148,6 +170,8 @@ void YamlEmitter::writeAccount(MappingNode *map)
       iter++;
     }
   }
+  else
+    throw YamlEmitterException("Unknown node type while adding mapping node");
 }
 
 
diff --git a/sflphone-common/src/config/yamlemitter.h b/sflphone-common/src/config/yamlemitter.h
index 2bd0c24d0c..47bce14a5f 100755
--- a/sflphone-common/src/config/yamlemitter.h
+++ b/sflphone-common/src/config/yamlemitter.h
@@ -77,7 +77,7 @@ class YamlEmitter {
 
   void writeAccount(MappingNode *map);
 
-  void writePreference();
+  void writePreference(MappingNode *map);
 
   void writeAddressbook();
 
diff --git a/sflphone-common/src/iax/iaxaccount.cpp b/sflphone-common/src/iax/iaxaccount.cpp
index b94ca59623..bbf2bf0289 100644
--- a/sflphone-common/src/iax/iaxaccount.cpp
+++ b/sflphone-common/src/iax/iaxaccount.cpp
@@ -47,7 +47,7 @@ IAXAccount::~IAXAccount()
     _link = NULL;
 }
 
-void IAXAccount::serialize(Engine *engine) 
+void IAXAccount::serialize(Conf::YamlEmitter *emitter) 
 {
   
 }
diff --git a/sflphone-common/src/iax/iaxaccount.h b/sflphone-common/src/iax/iaxaccount.h
index f6fb6414e3..fc78a70de3 100644
--- a/sflphone-common/src/iax/iaxaccount.h
+++ b/sflphone-common/src/iax/iaxaccount.h
@@ -44,7 +44,7 @@ class IAXAccount : public Account
 
         ~IAXAccount();
 
-	virtual void serialize(Engine *engine);
+	virtual void serialize(Conf::YamlEmitter *emitter);
 
 	virtual void unserialize(Conf::MappingNode *map);
 
diff --git a/sflphone-common/src/preferences.cpp b/sflphone-common/src/preferences.cpp
index 30181d3c2b..f3de3357fd 100644
--- a/sflphone-common/src/preferences.cpp
+++ b/sflphone-common/src/preferences.cpp
@@ -50,7 +50,7 @@ Preferences::Preferences() :  _accountOrder("")
 Preferences::~Preferences() {}
 
 
-void Preferences::serialize(Engine *engine) 
+void Preferences::serialize(Conf::YamlEmitter *emiter) 
 {
 
   Conf::MappingNode preferencemap(NULL);
@@ -86,6 +86,7 @@ void Preferences::serialize(Engine *engine)
   preferencemap.setKeyValue(zeroConfenableKey, &zeroConfenable);
   preferencemap.setKeyValue(md5HashKey, &md5Hash);
 
+  
 }
 
 void Preferences::unserialize(Conf::MappingNode *map)
@@ -118,4 +119,6 @@ void Preferences::unserialize(Conf::MappingNode *map)
   val = (Conf::ScalarNode *)(map->getValue(md5HashKey));
   if(val) { _md5Hash = (val->getValue().compare("true") == 0) ? true : false; val = NULL; }
 
+
+  
 }
diff --git a/sflphone-common/src/preferences.h b/sflphone-common/src/preferences.h
index 5ed97c0821..0b8330ae36 100755
--- a/sflphone-common/src/preferences.h
+++ b/sflphone-common/src/preferences.h
@@ -54,7 +54,7 @@ class Preferences : public Serializable {
 
   ~Preferences();
 
-  virtual void serialize(Engine *engine);
+  virtual void serialize(Conf::YamlEmitter *emitter);
 
   virtual void unserialize(Conf::MappingNode *map);
 
diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp
index e112421be2..699e21f2a6 100755
--- a/sflphone-common/src/sip/sipaccount.cpp
+++ b/sflphone-common/src/sip/sipaccount.cpp
@@ -40,7 +40,7 @@ Credentials::Credentials() : credentialCount(0) {}
 
 Credentials::~Credentials() {}
 
-void Credentials::serialize(Engine *engine)
+void Credentials::serialize(Conf::YamlEmitter *emitter)
 {
   
 }
@@ -132,7 +132,7 @@ SIPAccount::~SIPAccount()
     free (_tlsSetting);
 }
 
-void SIPAccount::serialize(Engine *engine) {
+void SIPAccount::serialize(Conf::YamlEmitter *emitter) {
 
 
   Conf::MappingNode accountmap(NULL);
diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h
index d499932970..b06c1e4bdd 100755
--- a/sflphone-common/src/sip/sipaccount.h
+++ b/sflphone-common/src/sip/sipaccount.h
@@ -134,7 +134,7 @@ class Credentials : public Serializable
 
   ~Credentials();
 
-  virtual void serialize(Engine *engine);
+  virtual void serialize(Conf::YamlEmitter *emitter);
 
   virtual void unserialize(Conf::MappingNode *map);
 
@@ -170,7 +170,7 @@ class SIPAccount : public Account
          */
         virtual ~SIPAccount();
 
-	virtual void serialize(Engine *engine);
+	virtual void serialize(Conf::YamlEmitter *emitter);
 
 	virtual void unserialize(Conf::MappingNode *map);
 
-- 
GitLab