Config class refactored; config merge policy changed (only top level entries merged...
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 8 Apr 2014 11:56:41 +0000 (14:56 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 8 Apr 2014 11:56:41 +0000 (14:56 +0300)
12 files changed:
include/nms_util.h
include/nxconfig.h
src/agent/core/policy.cpp
src/agent/subagents/java/ConfigHelper.cpp
src/libnetxms/array.cpp
src/libnetxms/config.cpp
src/server/core/dcitem.cpp
src/server/core/dctable.cpp
src/server/core/dctthreshold.cpp
src/server/core/epp.cpp
src/server/core/import.cpp
src/server/core/template.cpp

index 70cb8e2..97b8a89 100644 (file)
@@ -435,6 +435,7 @@ public:
        void unlink(int index) { internalRemove(index, false); }
        void unlink(void *element) { internalRemove(indexOf(element), false); }
        void clear();
+   void sort(int (*cb)(const void *, const void *));
 
        int size() { return m_size; }
 
index 4b1eb65..d5ed340 100644 (file)
 #include <nms_util.h>
 #include <uuid.h>
 
-
-//
-// Config entry
-//
-
-class ConfigEntryList;
-
+/**
+ * Config entry
+ */
 class LIBNETXMS_EXPORTABLE ConfigEntry
 {
 private:
@@ -47,6 +43,7 @@ private:
        TCHAR *m_file;
        int m_line;
        int m_id;
+   StringMap m_attributes;
 
        void addEntry(ConfigEntry *entry);
        void linkEntry(ConfigEntry *entry) { entry->m_next = m_next; m_next = entry; }
@@ -79,6 +76,10 @@ public:
        bool getSubEntryValueBoolean(const TCHAR *name, int index = 0, bool defaultValue = false);
        bool getSubEntryValueUUID(const TCHAR *name, uuid_t uuid, int index = 0);
 
+   const TCHAR *getAttribute(const TCHAR *name) { return m_attributes.get(name); }
+   void setAttribute(const TCHAR *name, const TCHAR *value) { m_attributes.set(name, value); }
+   void setAttributePreallocated(TCHAR *name, TCHAR *value) { m_attributes.setPreallocated(name, value); }
+
        const TCHAR *getFile() { return m_file; }
        int getLine() { return m_line; }
 
@@ -89,33 +90,14 @@ public:
 
        ConfigEntry *createEntry(const TCHAR *name);
        ConfigEntry *findEntry(const TCHAR *name);
-       ConfigEntryList *getSubEntries(const TCHAR *mask);
-       ConfigEntryList *getOrderedSubEntries(const TCHAR *mask);
+       ObjectArray<ConfigEntry> *getSubEntries(const TCHAR *mask);
+       ObjectArray<ConfigEntry> *getOrderedSubEntries(const TCHAR *mask);
        void unlinkEntry(ConfigEntry *entry);
 
        void print(FILE *file, int level);
        void createXml(String &xml, int level = 0);
 };
 
-/**
- * List of config entries
- */
-class ConfigEntryList
-{
-private:
-       ConfigEntry **m_list;
-       int m_size;
-
-public:
-       ConfigEntryList(ConfigEntry **list, int size) { m_list = list; m_size = size; }
-       ~ConfigEntryList() { safe_free(m_list); }
-
-       int getSize() { return m_size; }
-       ConfigEntry *getEntry(int index) { return ((index >= 0) && (index < m_size)) ? m_list[index] : NULL; }
-
-       void sortById();
-};
-
 /**
  * Hierarchical config
  */
@@ -158,8 +140,8 @@ public:
        UINT64 getValueUInt64(const TCHAR *path, UINT64 defaultValue);
        bool getValueBoolean(const TCHAR *path, bool defaultValue);
        bool getValueUUID(const TCHAR *path, uuid_t uuid);
-       ConfigEntryList *getSubEntries(const TCHAR *path, const TCHAR *mask);
-       ConfigEntryList *getOrderedSubEntries(const TCHAR *path, const TCHAR *mask);
+       ObjectArray<ConfigEntry> *getSubEntries(const TCHAR *path, const TCHAR *mask);
+       ObjectArray<ConfigEntry> *getOrderedSubEntries(const TCHAR *path, const TCHAR *mask);
 
        bool setValue(const TCHAR *path, const TCHAR *value);
        bool setValue(const TCHAR *path, INT32 value);
index 9f0a4db..572984b 100644 (file)
@@ -254,14 +254,14 @@ UINT32 GetPolicyInventory(CommSession *session, CSCPMessage *msg)
 {
        Config *registry = OpenRegistry();
 
-       ConfigEntryList *list = registry->getSubEntries(_T("/policyRegistry"), NULL);
+       ObjectArray<ConfigEntry> *list = registry->getSubEntries(_T("/policyRegistry"), NULL);
        if (list != NULL)
        {
-               msg->SetVariable(VID_NUM_ELEMENTS, (UINT32)list->getSize());
+               msg->SetVariable(VID_NUM_ELEMENTS, (UINT32)list->size());
                UINT32 varId = VID_ELEMENT_LIST_BASE;
-               for(int i = 0; i < list->getSize(); i++, varId += 7)
+               for(int i = 0; i < list->size(); i++, varId += 7)
                {
-                       ConfigEntry *e = list->getEntry(i);
+                       ConfigEntry *e = list->get(i);
                        uuid_t guid;
 
                        if (MatchString(_T("policy-*"), e->getName(), TRUE))
index 758917b..1944c7a 100644 (file)
@@ -226,16 +226,20 @@ namespace org_netxms_agent
       {
          TCHAR *path = CStringFromJavaString(jenv, jpath);
          TCHAR *mask = CStringFromJavaString(jenv, jmask);
-         ConfigEntryList *configEntryList = config->getSubEntries(path, mask);
-         for (int i = 0; i < configEntryList->getSize(); i++)
+         ObjectArray<ConfigEntry> *configEntryList = config->getSubEntries(path, mask);
+         if (configEntryList != NULL)
          {
-            ConfigEntry *configEntry = configEntryList->getEntry(i);
-            jobject jconfigEntry = createConfigEntryInstance(jenv, configEntry);
-            if (i == 0)
+            for (int i = 0; i < configEntryList->size(); i++)
             {
-               jresult = jenv->NewObjectArray((jsize) configEntryList->getSize(), jenv->GetObjectClass(jconfigEntry), jconfigEntry);
+               ConfigEntry *configEntry = configEntryList->get(i);
+               jobject jconfigEntry = createConfigEntryInstance(jenv, configEntry);
+               if (i == 0)
+               {
+                  jresult = jenv->NewObjectArray((jsize)configEntryList->size(), jenv->GetObjectClass(jconfigEntry), jconfigEntry);
+               }
+               jenv->SetObjectArrayElement(jresult, (jsize) i, jconfigEntry);
             }
-            jenv->SetObjectArrayElement(jresult, (jsize) i, jconfigEntry);
+            delete configEntryList;
          }
          free(path);
          free(mask);
@@ -260,14 +264,14 @@ namespace org_netxms_agent
       {
          TCHAR *path = CStringFromJavaString(jenv, jpath);
          TCHAR *mask = CStringFromJavaString(jenv, jmask);
-         ConfigEntryList *configEntryList = config->getOrderedSubEntries(path, mask);
-         for (int i = 0; i < configEntryList->getSize(); i++)
+         ObjectArray<ConfigEntry> *configEntryList = config->getOrderedSubEntries(path, mask);
+         for (int i = 0; i < configEntryList->size(); i++)
          {
-            ConfigEntry *configEntry = configEntryList->getEntry(i);
+            ConfigEntry *configEntry = configEntryList->get(i);
             jobject jconfigEntry = createConfigEntryInstance(jenv, configEntry);
             if (i == 0)
             {
-               jresult = jenv->NewObjectArray((jsize) configEntryList->getSize(), jenv->GetObjectClass(jconfigEntry), jconfigEntry);
+               jresult = jenv->NewObjectArray((jsize) configEntryList->size(), jenv->GetObjectClass(jconfigEntry), jconfigEntry);
             }
             jenv->SetObjectArrayElement(jresult, (jsize) i, jconfigEntry);
          }
@@ -666,16 +670,20 @@ namespace org_netxms_agent
       if (jmask != NULL)
       {
          TCHAR *mask = CStringFromJavaString(jenv, jmask);
-         ConfigEntryList *configEntryList = configEntry->getSubEntries(mask);
-         for (int i = 0; i < configEntryList->getSize(); i++)
+         ObjectArray<ConfigEntry> *configEntryList = configEntry->getSubEntries(mask);
+         if (configEntryList != NULL)
          {
-            ConfigEntry *subConfigEntry = configEntryList->getEntry(i);
-            jobject jconfigEntry = createConfigEntryInstance(jenv, subConfigEntry);
-            if (i == 0)
+            for (int i = 0; i < configEntryList->size(); i++)
             {
-               jresult = jenv->NewObjectArray((jsize) configEntryList->getSize(), jenv->GetObjectClass(jconfigEntry), jconfigEntry);
+               ConfigEntry *subConfigEntry = configEntryList->get(i);
+               jobject jconfigEntry = createConfigEntryInstance(jenv, subConfigEntry);
+               if (i == 0)
+               {
+                  jresult = jenv->NewObjectArray((jsize) configEntryList->size(), jenv->GetObjectClass(jconfigEntry), jconfigEntry);
+               }
+               jenv->SetObjectArrayElement(jresult, (jsize) i, jconfigEntry);
             }
-            jenv->SetObjectArrayElement(jresult, (jsize) i, jconfigEntry);
+            delete configEntryList;
          }
          free(mask);
       }
@@ -698,16 +706,20 @@ namespace org_netxms_agent
       if (jmask != NULL)
       {
          TCHAR *mask = CStringFromJavaString(jenv, jmask);
-         ConfigEntryList *configEntryList = configEntry->getSubEntries(mask);
-         for(int i = 0; i < configEntryList->getSize(); i++)
+         ObjectArray<ConfigEntry> *configEntryList = configEntry->getSubEntries(mask);
+         if (configEntryList != NULL)
          {
-            ConfigEntry *subConfigEntry = configEntryList->getEntry(i);
-            jobject jconfigEntry = createConfigEntryInstance(jenv, subConfigEntry);
-            if (i == 0)
+            for(int i = 0; i < configEntryList->size(); i++)
             {
-               jresult = jenv->NewObjectArray((jsize) configEntryList->getSize(), jenv->GetObjectClass(jconfigEntry), jconfigEntry);
+               ConfigEntry *subConfigEntry = configEntryList->get(i);
+               jobject jconfigEntry = createConfigEntryInstance(jenv, subConfigEntry);
+               if (i == 0)
+               {
+                  jresult = jenv->NewObjectArray((jsize) configEntryList->size(), jenv->GetObjectClass(jconfigEntry), jconfigEntry);
+               }
+               jenv->SetObjectArrayElement(jresult, (jsize) i, jconfigEntry);
             }
-            jenv->SetObjectArrayElement(jresult, (jsize) i, jconfigEntry);
+            delete configEntryList;
          }
          free(mask);
       }
index edb6f0c..eb12b3c 100644 (file)
@@ -208,3 +208,11 @@ int Array::indexOf(void *element)
    }
    return -1;
 }
+
+/**
+ * Sort array elements
+ */
+void Array::sort(int (*cb)(const void *, const void *))
+{
+   qsort(m_data, m_size, m_elementSize, cb);
+}
index 201c604..0f67942 100644 (file)
@@ -145,38 +145,40 @@ void ConfigEntry::unlinkEntry(ConfigEntry *entry)
 /**
  * Get all subentries with names matched to mask
  */
-ConfigEntryList* ConfigEntry::getSubEntries(const TCHAR *mask)
+ObjectArray<ConfigEntry> *ConfigEntry::getSubEntries(const TCHAR *mask)
 {
-   ConfigEntry *e, **list = NULL;
-   int count = 0, allocated = 0;
-
-   for(e = m_first; e != NULL; e = e->getNext())
+   ObjectArray<ConfigEntry> *list = new ObjectArray<ConfigEntry>(16, 16, false);
+   for(ConfigEntry *e = m_first; e != NULL; e = e->getNext())
       if ((mask == NULL) || MatchString(mask, e->getName(), FALSE))
       {
-         if (count == allocated)
-         {
-            allocated += 10;
-            list = (ConfigEntry **) realloc(list, sizeof(ConfigEntry *) * allocated);
-         }
-         list[count++] = e;
+         list->add(e);
       }
-   return new ConfigEntryList(list, count);
+   return list;
+}
+
+/**
+ * Comparator for ConfigEntryList::sortById()
+ */
+static int CompareById(const void *p1, const void *p2)
+{
+   ConfigEntry *e1 = *((ConfigEntry **)p1);
+   ConfigEntry *e2 = *((ConfigEntry **)p2);
+   return e1->getId() - e2->getId();
 }
 
 /**
  * Get all subentries with names matched to mask ordered by id
  */
-ConfigEntryList* ConfigEntry::getOrderedSubEntries(const TCHAR *mask)
+ObjectArray<ConfigEntry> *ConfigEntry::getOrderedSubEntries(const TCHAR *mask)
 {
-   ConfigEntryList *list = getSubEntries(mask);
-   list->sortById();
+   ObjectArray<ConfigEntry> *list = getSubEntries(mask);
+   list->sort(CompareById);
    return list;
 }
 
-/*
- * Get value
+/**
+ * Get entry value
  */
-
 const TCHAR* ConfigEntry::getValue(int index)
 {
    if ((index < 0) || (index >= m_valueCount))
@@ -184,30 +186,46 @@ const TCHAR* ConfigEntry::getValue(int index)
    return m_values[index];
 }
 
+/**
+ * Get entry value as integer
+ */
 INT32 ConfigEntry::getValueInt(int index, INT32 defaultValue)
 {
    const TCHAR *value = getValue(index);
    return (value != NULL) ? _tcstol(value, NULL, 0) : defaultValue;
 }
 
+/**
+ * Get entry value as unsigned integer
+ */
 UINT32 ConfigEntry::getValueUInt(int index, UINT32 defaultValue)
 {
    const TCHAR *value = getValue(index);
    return (value != NULL) ? _tcstoul(value, NULL, 0) : defaultValue;
 }
 
+/**
+ * Get entry value as 64 bit integer
+ */
 INT64 ConfigEntry::getValueInt64(int index, INT64 defaultValue)
 {
    const TCHAR *value = getValue(index);
    return (value != NULL) ? _tcstol(value, NULL, 0) : defaultValue;
 }
 
+/**
+ * Get entry value as 64 bit unsigned integer
+ */
 UINT64 ConfigEntry::getValueUInt64(int index, UINT64 defaultValue)
 {
    const TCHAR *value = getValue(index);
    return (value != NULL) ? _tcstoul(value, NULL, 0) : defaultValue;
 }
 
+/**
+ * Get entry value as boolean
+ * (consider non-zero numerical value or strings "yes", "true", "on" as true)
+ */
 bool ConfigEntry::getValueBoolean(int index, bool defaultValue)
 {
    const TCHAR *value = getValue(index);
@@ -222,6 +240,9 @@ bool ConfigEntry::getValueBoolean(int index, bool defaultValue)
    }
 }
 
+/**
+ * Get entry value as GUID
+ */
 bool ConfigEntry::getValueUUID(int index, uuid_t uuid)
 {
    const TCHAR *value = getValue(index);
@@ -232,10 +253,9 @@ bool ConfigEntry::getValueUUID(int index, uuid_t uuid)
    return false;
 }
 
-/*
- * Set value
+/**
+ * Set value (replace all existing values)
  */
-
 void ConfigEntry::setValue(const TCHAR *value)
 {
    for(int i = 0; i < m_valueCount; i++)
@@ -245,10 +265,9 @@ void ConfigEntry::setValue(const TCHAR *value)
    m_values[0] = _tcsdup(value);
 }
 
-/*
- *  Add value
+/**
+ * Add value
  */
-
 void ConfigEntry::addValue(const TCHAR *value)
 {
    m_values = (TCHAR **) realloc(m_values, sizeof(TCHAR *) * (m_valueCount + 1));
@@ -256,10 +275,9 @@ void ConfigEntry::addValue(const TCHAR *value)
    m_valueCount++;
 }
 
-/*
+/**
  * Get summary length of all values as if they was concatenated with separator character
  */
-
 int ConfigEntry::getConcatenatedValuesLength()
 {
    int i, len;
@@ -364,9 +382,15 @@ void ConfigEntry::createXml(String &xml, int level)
       *ptr = 0;
 
    if (m_id == 0)
-      xml.addFormattedString(_T("%*s<%s>"), level * 4, _T(""), name);
+      xml.addFormattedString(_T("%*s<%s"), level * 4, _T(""), name);
    else
-      xml.addFormattedString(_T("%*s<%s id=\"%d\">"), level * 4, _T(""), name, m_id);
+      xml.addFormattedString(_T("%*s<%s id=\"%d\""), level * 4, _T(""), name, m_id);
+   for(UINT32 j = 0; j < m_attributes.getSize(); j++)
+   {
+      if (_tcscmp(m_attributes.getKeyByIndex(j), _T("id")))
+         xml.addFormattedString(_T(" %s=\"%s\""), m_attributes.getKeyByIndex(j), m_attributes.getValueByIndex(j));
+   }
+   xml += _T(">");
 
    if (m_first != NULL)
    {
@@ -393,24 +417,6 @@ void ConfigEntry::createXml(String &xml, int level)
    free(name);
 }
 
-/**
- * Comparator for ConfigEntryList::sortById()
- */
-static int CompareById(const void *p1, const void *p2)
-{
-   ConfigEntry *e1 = *((ConfigEntry **) p1);
-   ConfigEntry *e2 = *((ConfigEntry **) p2);
-   return e1->getId() - e2->getId();
-}
-
-/**
- *  Sort entry list
- */
-void ConfigEntryList::sortById()
-{
-   qsort(m_list, m_size, sizeof(ConfigEntry *), CompareById);
-}
-
 /**
  * Constructor for config
  */
@@ -557,7 +563,7 @@ bool Config::parseTemplate(const TCHAR *section, NX_CFG_TEMPLATE *cfgTemplate)
 /**
  * Get value
  */
-const TCHAR * Config::getValue(const TCHAR *path, const TCHAR *defaultValue)
+const TCHAR *Config::getValue(const TCHAR *path, const TCHAR *defaultValue)
 {
    const TCHAR *value;
    ConfigEntry *entry = getEntry(path);
@@ -612,6 +618,9 @@ bool Config::getValueBoolean(const TCHAR *path, bool defaultValue)
    }
 }
 
+/**
+ * Get value at given path as UUID
+ */
 bool Config::getValueUUID(const TCHAR *path, uuid_t uuid)
 {
    const TCHAR *value = getValue(path);
@@ -625,31 +634,28 @@ bool Config::getValueUUID(const TCHAR *path, uuid_t uuid)
    }
 }
 
-/*
+/**
  * Get subentries
  */
-
-ConfigEntryList * Config::getSubEntries(const TCHAR *path, const TCHAR *mask)
+ObjectArray<ConfigEntry> *Config::getSubEntries(const TCHAR *path, const TCHAR *mask)
 {
    ConfigEntry *entry = getEntry(path);
    return (entry != NULL) ? entry->getSubEntries(mask) : NULL;
 }
 
-/*
+/**
  * Get subentries ordered by id
  */
-
-ConfigEntryList * Config::getOrderedSubEntries(const TCHAR *path, const TCHAR *mask)
+ObjectArray<ConfigEntry> *Config::getOrderedSubEntries(const TCHAR *path, const TCHAR *mask)
 {
    ConfigEntry *entry = getEntry(path);
    return (entry != NULL) ? entry->getOrderedSubEntries(mask) : NULL;
 }
 
-/*
+/**
  * Get entry
  */
-
-ConfigEntry * Config::getEntry(const TCHAR *path)
+ConfigEntry *Config::getEntry(const TCHAR *path)
 {
    const TCHAR *curr, *end;
    TCHAR name[256];
@@ -984,10 +990,23 @@ static void StartElement(void *userData, const char *name, const char **attrs)
          else
             nx_strncpy(entryName, name, MAX_PATH);
 #endif
-         ps->stack[ps->level] = ps->stack[ps->level - 1]->findEntry(entryName);
+         // Only do merge on top level by default, otherwise add sub-entry with same name
+         bool merge = XMLGetAttrBoolean(attrs, "merge", (ps->level == 1));
+         ps->stack[ps->level] = merge ? ps->stack[ps->level - 1]->findEntry(entryName) : NULL;
          if (ps->stack[ps->level] == NULL)
-            ps->stack[ps->level] = new ConfigEntry(entryName, ps->stack[ps->level - 1], ps->file,
-               XML_GetCurrentLineNumber(ps->parser), (int) id);
+         {
+            ConfigEntry *e = new ConfigEntry(entryName, ps->stack[ps->level - 1], ps->file, XML_GetCurrentLineNumber(ps->parser), (int)id);
+            ps->stack[ps->level] = e;
+            // add all attributes to the entry
+            for(int i = 0; attrs[i] != NULL; i += 2)
+            {
+#ifdef UNICODE
+               e->setAttributePreallocated(WideStringFromMBString(attrs[i]), WideStringFromMBString(attrs[i + 1]));
+#else
+               e->setAttribute(attrs[i], attrs[i + 1]);
+#endif
+            }
+         }
          ps->charData[ps->level] = _T("");
          ps->trimValue[ps->level] = XMLGetAttrBoolean(attrs, "trim", true);
          ps->level++;
index 1be1173..9d64545 100644 (file)
@@ -217,11 +217,11 @@ DCItem::DCItem(ConfigEntry *config, Template *owner) : DCObject(config, owner)
        ConfigEntry *thresholdsRoot = config->findEntry(_T("thresholds"));
        if (thresholdsRoot != NULL)
        {
-               ConfigEntryList *thresholds = thresholdsRoot->getSubEntries(_T("threshold#*"));
-               m_thresholds = new ObjectArray<Threshold>(thresholds->getSize(), 8, true);
-               for(int i = 0; i < thresholds->getSize(); i++)
+               ObjectArray<ConfigEntry> *thresholds = thresholdsRoot->getSubEntries(_T("threshold#*"));
+               m_thresholds = new ObjectArray<Threshold>(thresholds->size(), 8, true);
+               for(int i = 0; i < thresholds->size(); i++)
                {
-                       m_thresholds->add(new Threshold(thresholds->getEntry(i), this));
+                       m_thresholds->add(new Threshold(thresholds->get(i), this));
                }
                delete thresholds;
        }
index 81aede7..3fc728f 100644 (file)
@@ -216,11 +216,11 @@ DCTable::DCTable(ConfigEntry *config, Template *owner) : DCObject(config, owner)
        ConfigEntry *columnsRoot = config->findEntry(_T("columns"));
        if (columnsRoot != NULL)
        {
-               ConfigEntryList *columns = columnsRoot->getSubEntries(_T("column#*"));
-               m_columns = new ObjectArray<DCTableColumn>(columns->getSize(), 8, true);
-               for(int i = 0; i < columns->getSize(); i++)
+               ObjectArray<ConfigEntry> *columns = columnsRoot->getSubEntries(_T("column#*"));
+               m_columns = new ObjectArray<DCTableColumn>(columns->size(), 8, true);
+               for(int i = 0; i < columns->size(); i++)
                {
-                       m_columns->add(new DCTableColumn(columns->getEntry(i)));
+                       m_columns->add(new DCTableColumn(columns->get(i)));
                }
                delete columns;
        }
@@ -232,11 +232,11 @@ DCTable::DCTable(ConfigEntry *config, Template *owner) : DCObject(config, owner)
        ConfigEntry *thresholdsRoot = config->findEntry(_T("thresholds"));
        if (thresholdsRoot != NULL)
        {
-               ConfigEntryList *thresholds = thresholdsRoot->getSubEntries(_T("threshold#*"));
-               m_thresholds = new ObjectArray<DCTableThreshold>(thresholds->getSize(), 8, true);
-               for(int i = 0; i < thresholds->getSize(); i++)
+               ObjectArray<ConfigEntry> *thresholds = thresholdsRoot->getSubEntries(_T("threshold#*"));
+               m_thresholds = new ObjectArray<DCTableThreshold>(thresholds->size(), 8, true);
+               for(int i = 0; i < thresholds->size(); i++)
                {
-                       m_thresholds->add(new DCTableThreshold(thresholds->getEntry(i)));
+                       m_thresholds->add(new DCTableThreshold(thresholds->get(i)));
                }
                delete thresholds;
        }
index 1205bd0..d6402e7 100644 (file)
@@ -246,11 +246,11 @@ DCTableConditionGroup::DCTableConditionGroup(ConfigEntry *e)
        ConfigEntry *root = e->findEntry(_T("conditions"));
        if (root != NULL)
        {
-               ConfigEntryList *conditions = root->getSubEntries(_T("condition#*"));
-      m_conditions = new ObjectArray<DCTableCondition>(conditions->getSize(), 4, true);
-               for(int i = 0; i < conditions->getSize(); i++)
+               ObjectArray<ConfigEntry> *conditions = root->getSubEntries(_T("condition#*"));
+      m_conditions = new ObjectArray<DCTableCondition>(conditions->size(), 4, true);
+               for(int i = 0; i < conditions->size(); i++)
                {
-         ConfigEntry *c = conditions->getEntry(i);
+         ConfigEntry *c = conditions->get(i);
          const TCHAR *column = c->getSubEntryValue(_T("column"), 0, _T(""));
          const TCHAR *value = c->getSubEntryValue(_T("value"), 0, _T(""));
          int op = c->getSubEntryValueInt(_T("operation"));
@@ -370,11 +370,11 @@ DCTableThreshold::DCTableThreshold(ConfigEntry *e)
        ConfigEntry *groupsRoot = e->findEntry(_T("groups"));
        if (groupsRoot != NULL)
        {
-               ConfigEntryList *groups = groupsRoot->getSubEntries(_T("group#*"));
-      m_groups = new ObjectArray<DCTableConditionGroup>(groups->getSize(), 4, true);
-               for(int i = 0; i < groups->getSize(); i++)
+               ObjectArray<ConfigEntry> *groups = groupsRoot->getSubEntries(_T("group#*"));
+      m_groups = new ObjectArray<DCTableConditionGroup>(groups->size(), 4, true);
+               for(int i = 0; i < groups->size(); i++)
                {
-                       m_groups->add(new DCTableConditionGroup(groups->getEntry(i)));
+                       m_groups->add(new DCTableConditionGroup(groups->get(i)));
                }
                delete groups;
        }
index 7229868..ed34ce1 100644 (file)
@@ -64,12 +64,12 @@ EPRule::EPRule(ConfigEntry *config)
        ConfigEntry *eventsRoot = config->findEntry(_T("events"));
    if (eventsRoot != NULL)
    {
-               ConfigEntryList *events = eventsRoot->getSubEntries(_T("event#*"));
+               ObjectArray<ConfigEntry> *events = eventsRoot->getSubEntries(_T("event#*"));
       m_dwNumEvents = 0;
-      m_pdwEventList = (UINT32 *)malloc(sizeof(UINT32) * events->getSize());
-      for(int i = 0; i < events->getSize(); i++)
+      m_pdwEventList = (UINT32 *)malloc(sizeof(UINT32) * events->size());
+      for(int i = 0; i < events->size(); i++)
       {
-         EVENT_TEMPLATE *e = FindEventTemplateByName(events->getEntry(i)->getSubEntryValue(_T("name"), 0, _T("<unknown>")));
+         EVENT_TEMPLATE *e = FindEventTemplateByName(events->get(i)->getSubEntryValue(_T("name"), 0, _T("<unknown>")));
          if (e != NULL)
          {
             m_pdwEventList[m_dwNumEvents++] = e->dwCode;
index 0129ae4..3a5dbb7 100644 (file)
@@ -33,10 +33,10 @@ static bool IsEventExist(const TCHAR *name, Config *config)
        ConfigEntry *eventsRoot = config->getEntry(_T("/events"));
        if (eventsRoot != NULL)
        {
-               ConfigEntryList *events = eventsRoot->getSubEntries(_T("event#*"));
-               for(int i = 0; i < events->getSize(); i++)
+               ObjectArray<ConfigEntry> *events = eventsRoot->getSubEntries(_T("event#*"));
+               for(int i = 0; i < events->size(); i++)
                {
-                       ConfigEntry *event = events->getEntry(i);
+                       ConfigEntry *event = events->get(i);
                        if (!_tcsicmp(event->getSubEntryValue(_T("name"), 0, _T("<unnamed>")), name))
          {
             delete events;
@@ -59,10 +59,10 @@ static bool ValidateDci(Config *config, ConfigEntry *dci, const TCHAR *templateN
                return true;
 
        bool success = true;
-       ConfigEntryList *thresholds = thresholdsRoot->getSubEntries(_T("threshold#*"));
-       for(int i = 0; i < thresholds->getSize(); i++)
+       ObjectArray<ConfigEntry> *thresholds = thresholdsRoot->getSubEntries(_T("threshold#*"));
+       for(int i = 0; i < thresholds->size(); i++)
        {
-               ConfigEntry *threshold = thresholds->getEntry(i);
+               ConfigEntry *threshold = thresholds->get(i);
                if (!IsEventExist(threshold->getSubEntryValue(_T("activationEvent")), config))
                {
                        _sntprintf(errorText, errorTextLen,
@@ -98,10 +98,10 @@ static bool ValidateTemplate(Config *config, ConfigEntry *root, TCHAR *errorText
        bool success = true;
        const TCHAR *name = root->getSubEntryValue(_T("name"), 0, _T("<unnamed>"));
 
-       ConfigEntryList *dcis = dcRoot->getSubEntries(_T("dci#*"));
-       for(int i = 0; i < dcis->getSize(); i++)
+       ObjectArray<ConfigEntry> *dcis = dcRoot->getSubEntries(_T("dci#*"));
+       for(int i = 0; i < dcis->size(); i++)
        {
-               if (!ValidateDci(config, dcis->getEntry(i), name, errorText, errorTextLen))
+               if (!ValidateDci(config, dcis->get(i), name, errorText, errorTextLen))
                {
                        success = false;
                        break;
@@ -111,10 +111,10 @@ static bool ValidateTemplate(Config *config, ConfigEntry *root, TCHAR *errorText
 
    if (success)
    {
-          ConfigEntryList *dctables = dcRoot->getSubEntries(_T("dctable#*"));
-          for(int i = 0; i < dctables->getSize(); i++)
+          ObjectArray<ConfigEntry> *dctables = dcRoot->getSubEntries(_T("dctable#*"));
+          for(int i = 0; i < dctables->size(); i++)
           {
-                  if (!ValidateDci(config, dctables->getEntry(i), name, errorText, errorTextLen))
+                  if (!ValidateDci(config, dctables->get(i), name, errorText, errorTextLen))
                   {
                           success = false;
                           break;
@@ -132,7 +132,7 @@ static bool ValidateTemplate(Config *config, ConfigEntry *root, TCHAR *errorText
 bool ValidateConfig(Config *config, UINT32 flags, TCHAR *errorText, int errorTextLen)
 {
    int i;
-       ConfigEntryList *events = NULL, *traps = NULL, *templates = NULL;
+       ObjectArray<ConfigEntry> *events = NULL, *traps = NULL, *templates = NULL;
        ConfigEntry *eventsRoot, *trapsRoot, *templatesRoot;
    bool success = false;
 
@@ -143,9 +143,9 @@ bool ValidateConfig(Config *config, UINT32 flags, TCHAR *errorText, int errorTex
        if (eventsRoot != NULL)
        {
                events = eventsRoot->getSubEntries(_T("event#*"));
-               for(i = 0; i < events->getSize(); i++)
+               for(i = 0; i < events->size(); i++)
                {
-                       ConfigEntry *event = events->getEntry(i);
+                       ConfigEntry *event = events->get(i);
                        DbgPrintf(6, _T("ValidateConfig(): validating event %s"), event->getSubEntryValue(_T("name"), 0, _T("<unnamed>")));
                
                        UINT32 code = event->getSubEntryValueUInt(_T("code"));
@@ -191,9 +191,9 @@ bool ValidateConfig(Config *config, UINT32 flags, TCHAR *errorText, int errorTex
        if (trapsRoot != NULL)
        {
                traps = trapsRoot->getSubEntries(_T("trap#*"));
-               for(i = 0; i < traps->getSize(); i++)
+               for(i = 0; i < traps->size(); i++)
                {
-                       ConfigEntry *trap = traps->getEntry(i);
+                       ConfigEntry *trap = traps->get(i);
                        DbgPrintf(6, _T("ValidateConfig(): validating trap \"%s\""), trap->getSubEntryValue(_T("description"), 0, _T("<unnamed>")));
                        if (!IsEventExist(trap->getSubEntryValue(_T("event")), config))
                        {
@@ -208,9 +208,9 @@ bool ValidateConfig(Config *config, UINT32 flags, TCHAR *errorText, int errorTex
        if (templatesRoot != NULL)
        {
                templates = templatesRoot->getSubEntries(_T("template#*"));
-               for(i = 0; i < templates->getSize(); i++)
+               for(i = 0; i < templates->size(); i++)
                {
-                       if (!ValidateTemplate(config, templates->getEntry(i), errorText, errorTextLen))
+                       if (!ValidateTemplate(config, templates->get(i), errorText, errorTextLen))
                                goto stop_processing;
                }
        }
@@ -294,14 +294,14 @@ static UINT32 ImportTrap(ConfigEntry *trap)
        ConfigEntry *parametersRoot = trap->findEntry(_T("parameters"));
        if (parametersRoot != NULL)
        {
-               ConfigEntryList *parameters = parametersRoot->getOrderedSubEntries(_T("parameter#*"));
-               if (parameters->getSize() > 0)
+               ObjectArray<ConfigEntry> *parameters = parametersRoot->getOrderedSubEntries(_T("parameter#*"));
+               if (parameters->size() > 0)
                {
-                       tc.dwNumMaps = parameters->getSize();
+                       tc.dwNumMaps = parameters->size();
                        tc.pMaps = (NXC_OID_MAP *)malloc(sizeof(NXC_OID_MAP) * tc.dwNumMaps);
-                       for(int i = 0; i < parameters->getSize(); i++)
+                       for(int i = 0; i < parameters->size(); i++)
                        {
-                               ConfigEntry *parameter = parameters->getEntry(i);
+                               ConfigEntry *parameter = parameters->get(i);
 
                                int position = parameter->getSubEntryValueInt(_T("position"), 0, -1);
                                if (position > 0)
@@ -338,7 +338,7 @@ static UINT32 ImportTrap(ConfigEntry *trap)
  */
 UINT32 ImportConfig(Config *config, UINT32 flags)
 {
-       ConfigEntryList *events = NULL, *traps = NULL, *templates = NULL, *rules = NULL;
+       ObjectArray<ConfigEntry> *events = NULL, *traps = NULL, *templates = NULL, *rules = NULL;
        ConfigEntry *eventsRoot, *trapsRoot, *templatesRoot, *rulesRoot;
        UINT32 rcc = RCC_SUCCESS;
        int i;
@@ -350,15 +350,15 @@ UINT32 ImportConfig(Config *config, UINT32 flags)
        if (eventsRoot != NULL)
        {
                events = eventsRoot->getSubEntries(_T("event#*"));
-               DbgPrintf(5, _T("ImportConfig(): %d events to import"), events->getSize());
-               for(i = 0; i < events->getSize(); i++)
+               DbgPrintf(5, _T("ImportConfig(): %d events to import"), events->size());
+               for(i = 0; i < events->size(); i++)
                {
-                       rcc = ImportEvent(events->getEntry(i));
+                       rcc = ImportEvent(events->get(i));
                        if (rcc != RCC_SUCCESS)
                                goto stop_processing;
                }
 
-               if (events->getSize() > 0)
+               if (events->size() > 0)
                {
                        ReloadEvents();
                        NotifyClientSessions(NX_NOTIFY_EVENTDB_CHANGED, 0);
@@ -371,10 +371,10 @@ UINT32 ImportConfig(Config *config, UINT32 flags)
        if (trapsRoot != NULL)
        {
                traps = trapsRoot->getSubEntries(_T("trap#*"));
-               DbgPrintf(5, _T("ImportConfig(): %d SNMP traps to import"), traps->getSize());
-               for(i = 0; i < traps->getSize(); i++)
+               DbgPrintf(5, _T("ImportConfig(): %d SNMP traps to import"), traps->size());
+               for(i = 0; i < traps->size(); i++)
                {
-                       rcc = ImportTrap(traps->getEntry(i));
+                       rcc = ImportTrap(traps->get(i));
                        if (rcc != RCC_SUCCESS)
                                goto stop_processing;
                }
@@ -386,9 +386,9 @@ UINT32 ImportConfig(Config *config, UINT32 flags)
        if (templatesRoot != NULL)
        {
                templates = templatesRoot->getSubEntries(_T("template#*"));
-               for(i = 0; i < templates->getSize(); i++)
+               for(i = 0; i < templates->size(); i++)
                {
-                       Template *object = new Template(templates->getEntry(i));
+                       Template *object = new Template(templates->get(i));
                        NetObjInsert(object, TRUE);
                        object->AddParent(g_pTemplateRoot);
                        g_pTemplateRoot->AddChild(object);
@@ -402,9 +402,9 @@ UINT32 ImportConfig(Config *config, UINT32 flags)
        if (rulesRoot != NULL)
        {
                rules = rulesRoot->getSubEntries(_T("rule#*"));
-               for(i = 0; i < rules->getSize(); i++)
+               for(i = 0; i < rules->size(); i++)
                {
-         EPRule *rule = new EPRule(rules->getEntry(i));
+         EPRule *rule = new EPRule(rules->get(i));
          g_pEventPolicy->importRule(rule);
                }
                DbgPrintf(5, _T("ImportConfig(): event processing policy rules imported"));
index f1a8153..358b9fb 100644 (file)
@@ -96,17 +96,17 @@ Template::Template(ConfigEntry *config) : NetObj()
        ConfigEntry *dcRoot = config->findEntry(_T("dataCollection"));
        if (dcRoot != NULL)
        {
-               ConfigEntryList *dcis = dcRoot->getSubEntries(_T("dci#*"));
-               for(int i = 0; i < dcis->getSize(); i++)
+               ObjectArray<ConfigEntry> *dcis = dcRoot->getSubEntries(_T("dci#*"));
+               for(int i = 0; i < dcis->size(); i++)
                {
-                       m_dcObjects->add(new DCItem(dcis->getEntry(i), this));
+                       m_dcObjects->add(new DCItem(dcis->get(i), this));
                }
                delete dcis;
 
-               ConfigEntryList *dctables = dcRoot->getSubEntries(_T("dctable#*"));
-               for(int i = 0; i < dctables->getSize(); i++)
+               ObjectArray<ConfigEntry> *dctables = dcRoot->getSubEntries(_T("dctable#*"));
+               for(int i = 0; i < dctables->size(); i++)
                {
-                       m_dcObjects->add(new DCTable(dctables->getEntry(i), this));
+                       m_dcObjects->add(new DCTable(dctables->get(i), this));
                }
                delete dctables;
    }