[dss-commits] r8851 - dss/trunk/core

dss-commits at forum.digitalstrom.org dss-commits at forum.digitalstrom.org
Mon Oct 19 13:39:02 CEST 2009


Author: pstaehlin
Date: 2009-10-19 13:39:02 +0200 (Mon, 19 Oct 2009)
New Revision: 8851

Modified:
   dss/trunk/core/model.cpp
   dss/trunk/core/propertysystem.cpp
   dss/trunk/core/propertysystem.h
Log:
Yell abuse but don't crash when a device node is already there

Modified: dss/trunk/core/model.cpp
===================================================================
--- dss/trunk/core/model.cpp	2009-10-16 09:52:09 UTC (rev 8850)
+++ dss/trunk/core/model.cpp	2009-10-19 11:39:02 UTC (rev 8851)
@@ -238,7 +238,16 @@
       if((m_pPropertyNode != NULL) && (m_pApartment->getPropertyNode() != NULL)) {
         std::string basePath = "zones/zone" + intToString(m_ZoneID);
         if(m_pAliasNode == NULL) {
+          PropertyNodePtr node = m_pApartment->getPropertyNode()->getProperty(basePath + "/" + m_DSID.toString());
+          if(node != NULL) {
+            Logger::getInstance()->log("Device::setZoneID: Target node for device " + m_DSID.toString() + " already exists", lsError);
+            if(node->size() > 0) {
+              Logger::getInstance()->log("Device::setZoneID: Target node for device " + m_DSID.toString() + " has children", lsFatal);
+              return;
+            }
+          }
           m_pAliasNode = m_pApartment->getPropertyNode()->createProperty(basePath + "/" + m_DSID.toString());
+          
           m_pAliasNode->alias(m_pPropertyNode);
         } else {
           PropertyNodePtr base = m_pApartment->getPropertyNode()->getProperty(basePath);

Modified: dss/trunk/core/propertysystem.cpp
===================================================================
--- dss/trunk/core/propertysystem.cpp	2009-10-16 09:52:09 UTC (rev 8850)
+++ dss/trunk/core/propertysystem.cpp	2009-10-19 11:39:02 UTC (rev 8851)
@@ -467,6 +467,10 @@
       return result;
     }
   } // count
+  
+  int PropertyNode::size() const {
+    return m_ChildNodes.size();
+  } // size
 
   void PropertyNode::clearValue() {
     if(m_PropVal.valueType == vTypeString) {

Modified: dss/trunk/core/propertysystem.h
===================================================================
--- dss/trunk/core/propertysystem.h	2009-10-16 09:52:09 UTC (rev 8850)
+++ dss/trunk/core/propertysystem.h	2009-10-19 11:39:02 UTC (rev 8851)
@@ -367,6 +367,7 @@
      * @return The child or NULL if not found */
     PropertyNodePtr getProperty(const std::string& _propPath);
     int count(const std::string& _propertyName);
+    int size() const;
 
     /** Sets the value as string. */
     void setStringValue(const char* _value);



More information about the dss-commits mailing list