- Instance display name for DCIs created via instance discovery
authorVictor Kirhenshtein <victor@netxms.org>
Sun, 3 Aug 2014 19:48:29 +0000 (22:48 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Sun, 3 Aug 2014 19:48:29 +0000 (22:48 +0300)
- DCIs created via instance discovery can be combined by instance into one chart on performance tab
- collection classes refactored to have consistent method naming

99 files changed:
ChangeLog
include/netxmsdb.h
include/nms_cscp.h
include/nms_util.h
src/agent/core/epp.cpp
src/agent/core/exec.cpp
src/agent/core/master.cpp
src/agent/core/session.cpp
src/agent/subagents/filemgr/filemgr.cpp
src/agent/subagents/java/main.cpp
src/agent/subagents/sms/main.cpp
src/agent/subagents/winnt/procinfo.cpp
src/agent/tools/nxapush/nxapush.cpp
src/client/windows/nxcon/ObjectPropsCustomAttrs.cpp
src/client/windows/nxcon/RuleSituationDlg.cpp
src/java/netxms-base/src/main/java/org/netxms/base/NXCPCodes.java
src/java/netxms-base/src/main/java/org/netxms/base/NXCPMessage.java
src/java/netxms-client/src/main/java/org/netxms/client/NXCSession.java
src/java/netxms-client/src/test/java/org/netxms/client/DataCollectionTest.java
src/java/netxms-eclipse/DataCollection/META-INF/MANIFEST.MF
src/java/netxms-eclipse/DataCollection/src/org/netxms/ui/eclipse/datacollection/dialogs/SelectDciDialog.java
src/java/netxms-eclipse/DataCollection/src/org/netxms/ui/eclipse/datacollection/dialogs/SelectNodeDciDialog.java
src/java/netxms-eclipse/DataCollection/src/org/netxms/ui/eclipse/datacollection/messages.properties
src/java/netxms-eclipse/DataCollection/src/org/netxms/ui/eclipse/datacollection/messages_cs.properties
src/java/netxms-eclipse/DataCollection/src/org/netxms/ui/eclipse/datacollection/messages_es.properties
src/java/netxms-eclipse/DataCollection/src/org/netxms/ui/eclipse/datacollection/messages_ru.properties
src/java/netxms-eclipse/DataCollection/src/org/netxms/ui/eclipse/datacollection/messages_zh_CN.properties
src/java/netxms-eclipse/DataCollection/src/org/netxms/ui/eclipse/datacollection/widgets/DciList.java
src/java/netxms-eclipse/DataCollection/src/org/netxms/ui/eclipse/datacollection/widgets/DciSelector.java
src/java/netxms-eclipse/NetworkMaps/META-INF/MANIFEST.MF
src/java/netxms-eclipse/NetworkMaps/src/org/netxms/ui/eclipse/networkmaps/views/helpers/MapContentProvider.java
src/java/netxms-eclipse/PerfView/src/org/netxms/ui/eclipse/perfview/PerfTabGraphSettings.java
src/java/netxms-eclipse/PerfView/src/org/netxms/ui/eclipse/perfview/propertypages/PerfTab.java
src/libnetxms/config.cpp
src/libnetxms/stringlist.cpp
src/libnetxms/strmap.cpp
src/libnetxms/strmapbase.cpp
src/libnxcl/epp.cpp
src/libnxcl/objects.cpp
src/libnxlp/parser.cpp
src/libnxsl/variable.cpp
src/libnxsl/vm.cpp
src/server/core/bridge.cpp
src/server/core/cluster.cpp
src/server/core/dcitem.cpp
src/server/core/debug.cpp
src/server/core/epp.cpp
src/server/core/events.cpp
src/server/core/fdb.cpp
src/server/core/index.cpp
src/server/core/layer2.cpp
src/server/core/ldap.cpp
src/server/core/main.cpp
src/server/core/mt.cpp
src/server/core/netobj.cpp
src/server/core/node.cpp
src/server/core/poll.cpp
src/server/core/session.cpp
src/server/core/situation.cpp
src/server/core/snmp.cpp
src/server/core/template.cpp
src/server/core/tools.cpp
src/server/core/userdb.cpp
src/server/core/userdb_objects.cpp
src/server/core/winperf.cpp
src/server/drivers/at/at.cpp
src/server/drivers/baystack/baystack.cpp
src/server/drivers/cisco-esw/cisco-esw.cpp
src/server/drivers/cisco-sb/cisco-sb.cpp
src/server/drivers/dell-pwc/dell-pwc.cpp
src/server/drivers/dlink/dlink.cpp
src/server/drivers/ers8000/ers8000.cpp
src/server/drivers/mikrotik/mikrotik.cpp
src/server/drivers/netscreen/netscreen.cpp
src/server/drivers/procurve/procurve.cpp
src/server/include/nms_dcoll.h
src/server/include/nms_events.h
src/server/include/nms_objects.h
src/server/include/nms_topo.h
src/server/include/nxsrvapi.h
src/server/libnxsrv/ndd.cpp
src/server/tools/driverloader/loader.cpp
src/server/tools/nxap/nxap.cpp
src/server/tools/nxdbmgr/upgrade.cpp
webui/webapp/DataCollection/META-INF/MANIFEST.MF
webui/webapp/DataCollection/src/org/netxms/ui/eclipse/datacollection/dialogs/SelectDciDialog.java
webui/webapp/DataCollection/src/org/netxms/ui/eclipse/datacollection/dialogs/SelectNodeDciDialog.java
webui/webapp/DataCollection/src/org/netxms/ui/eclipse/datacollection/messages.properties
webui/webapp/DataCollection/src/org/netxms/ui/eclipse/datacollection/messages_cs.properties
webui/webapp/DataCollection/src/org/netxms/ui/eclipse/datacollection/messages_es.properties
webui/webapp/DataCollection/src/org/netxms/ui/eclipse/datacollection/messages_ru.properties
webui/webapp/DataCollection/src/org/netxms/ui/eclipse/datacollection/messages_zh_CN.properties
webui/webapp/DataCollection/src/org/netxms/ui/eclipse/datacollection/widgets/DciList.java
webui/webapp/DataCollection/src/org/netxms/ui/eclipse/datacollection/widgets/DciSelector.java
webui/webapp/NetworkMaps/META-INF/MANIFEST.MF
webui/webapp/NetworkMaps/src/org/netxms/ui/eclipse/networkmaps/views/helpers/MapContentProvider.java
webui/webapp/PerfView/META-INF/MANIFEST.MF
webui/webapp/PerfView/src/org/netxms/ui/eclipse/perfview/PerfTabGraphSettings.java
webui/webapp/PerfView/src/org/netxms/ui/eclipse/perfview/propertypages/PerfTab.java

index 46a070e..f552776 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,8 @@
 - Fixed database upgrade issues
 - Fixed packaging issues
 - Fixed bug causing outdated peer information on interface objects
+- Instance display name for DCIs created via instance discovery
+- DCIs created via instance discovery can be combined by instance into one chart on performance tab
 - NXSL:
    - String concatenation operation interprets NULL value as empty string instead of throwing runtime error
    - Fixed incorrect processing of ilike, match, and imatch operators
index fb044b3..95fdb43 100644 (file)
@@ -23,6 +23,6 @@
 #ifndef _netxmsdb_h
 #define _netxmsdb_h
 
-#define DB_FORMAT_VERSION   331
+#define DB_FORMAT_VERSION   332
 
 #endif
index 6e23183..f277cf7 100644 (file)
@@ -988,6 +988,7 @@ typedef struct
 #define VID_ALARM_LIST_DISP_LIMIT   ((UINT32)478)
 #define VID_LANGUAGE                ((UINT32)479)
 #define VID_ROOT                    ((UINT32)480)
+#define VID_INCLUDE_NOVALUE_OBJECTS ((UINT32)481)
 
 // Base variabe for single threshold in message
 #define VID_THRESHOLD_BASE          ((UINT32)0x00800000)
index 67ee09a..08553f6 100644 (file)
@@ -284,7 +284,7 @@ public:
 class LIBNETXMS_EXPORTABLE StringMapBase
 {
 protected:
-       UINT32 m_size;
+       int m_size;
        TCHAR **m_keys;
        void **m_values;
        bool m_objectOwner;
@@ -306,8 +306,8 @@ public:
        void remove(const TCHAR *key);
        void clear();
 
-       UINT32 getSize() { return m_size; }
-       const TCHAR *getKeyByIndex(UINT32 idx) { return (idx < m_size) ? CHECK_NULL_EX(m_keys[idx]) : NULL; }
+       int size() { return m_size; }
+       const TCHAR *getKeyByIndex(int idx) { return ((idx >= 0) && (idx < m_size)) ? CHECK_NULL_EX(m_keys[idx]) : NULL; }
 };
 
 /**
@@ -326,11 +326,13 @@ public:
        void setPreallocated(TCHAR *key, TCHAR *value) { setObject(key, value, true); }
        void set(const TCHAR *key, UINT32 value);
 
+   void addAll(StringMap *src);
+
        const TCHAR *get(const TCHAR *key) { return (const TCHAR *)getObject(key); }
        UINT32 getULong(const TCHAR *key, UINT32 defaultValue);
        bool getBoolean(const TCHAR *key, bool defaultValue);
 
-       const TCHAR *getValueByIndex(UINT32 idx) { return (idx < m_size) ? CHECK_NULL_EX((TCHAR *)m_values[idx]) : NULL; }
+       const TCHAR *getValueByIndex(int idx) { return ((idx >= 0) && (idx < m_size)) ? CHECK_NULL_EX((TCHAR *)m_values[idx]) : NULL; }
 };
 
 /**
@@ -346,7 +348,7 @@ public:
 
        void set(const TCHAR *key, T *object) { setObject((TCHAR *)key, (void *)object, false); }
        T *get(const TCHAR *key) { return (T*)getObject(key); }
-       T *getValueByIndex(UINT32 idx) { return (idx < m_size) ? (T *)m_values[idx] : NULL; }
+       T *getValueByIndex(int idx) { return ((idx >= 0) && (idx < m_size)) ? (T *)m_values[idx] : NULL; }
 };
 
 /**
@@ -374,10 +376,10 @@ public:
        void add(double value);
        void replace(int index, const TCHAR *value);
        void clear();
-       int getSize() { return m_count; }
-       const TCHAR *getValue(int index) { return ((index >=0) && (index < m_count)) ? m_values[index] : NULL; }
-       int getIndex(const TCHAR *value);
-       int getIndexIgnoreCase(const TCHAR *value);
+       int size() { return m_count; }
+       const TCHAR *get(int index) { return ((index >=0) && (index < m_count)) ? m_values[index] : NULL; }
+       int indexOf(const TCHAR *value);
+       int indexOfIgnoreCase(const TCHAR *value);
        void remove(int index);
    void addAll(const StringList *src);
    void merge(const StringList *src, bool matchCase);
index 9e8b177..13842b7 100644 (file)
@@ -81,7 +81,7 @@ LONG ParamProvider::getValue(const TCHAR *name, TCHAR *buffer)
 
        lock();
 
-       for(UINT32 i = 0; i < m_parameters->getSize(); i++)
+       for(int i = 0; i < m_parameters->size(); i++)
        {
                if (!_tcsicmp(m_parameters->getKeyByIndex(i), name))
                {
@@ -132,7 +132,7 @@ void ParamProvider::poll()
                        }
                }
                pclose(hPipe);
-               DebugPrintf(INVALID_INDEX, 8, _T("ParamProvider::poll(): command \"%s\" execution completed, %d values read"), m_command, (int)parameters->getSize());
+               DebugPrintf(INVALID_INDEX, 8, _T("ParamProvider::poll(): command \"%s\" execution completed, %d values read"), m_command, (int)parameters->size());
        }
        else
        {
@@ -155,7 +155,7 @@ void ParamProvider::listParameters(CSCPMessage *msg, UINT32 *baseId, UINT32 *cou
        UINT32 id = *baseId;
 
        lock();
-       for(UINT32 i = 0; i < m_parameters->getSize(); i++)
+       for(int i = 0; i < m_parameters->size(); i++)
        {
                msg->SetVariable(id++, m_parameters->getKeyByIndex(i));
                msg->SetVariable(id++, _T(""));
@@ -173,7 +173,7 @@ void ParamProvider::listParameters(CSCPMessage *msg, UINT32 *baseId, UINT32 *cou
 void ParamProvider::listParameters(StringList *list)
 {
        lock();
-       for(UINT32 i = 0; i < m_parameters->getSize(); i++)
+       for(int i = 0; i < m_parameters->size(); i++)
        {
                list->add(m_parameters->getKeyByIndex(i));
        }
index a077495..8d7948c 100644 (file)
@@ -160,15 +160,15 @@ UINT32 ExecuteCommand(TCHAR *pszCommand, StringList *args, pid_t *pid)
                                {
                                        int argNum = *sptr - _T('1');
 
-                                       if (argNum < args->getSize())
+                                       if (argNum < args->size())
                                        {
                                                int iArgLength;
 
                                                // Extend resulting line
-                                               iArgLength = (int)_tcslen(args->getValue(argNum));
+                                               iArgLength = (int)_tcslen(args->get(argNum));
                                                dwSize += iArgLength * sizeof(TCHAR);
                                                pszCmdLine = (TCHAR *)realloc(pszCmdLine, dwSize);
-                                               _tcscpy(&pszCmdLine[i], args->getValue(argNum));
+                                               _tcscpy(&pszCmdLine[i], args->get(argNum));
                                                i += iArgLength;
                                        }
                                }
@@ -542,7 +542,7 @@ LONG H_ExternalParameter(const TCHAR *cmd, const TCHAR *arg, TCHAR *value)
    LONG status = RunExternal(cmd, arg, &values);
    if (status == SYSINFO_RC_SUCCESS)
    {
-      ret_string(value, values.getSize() > 0 ? values.getValue(0) : _T(""));
+      ret_string(value, values.size() > 0 ? values.get(0) : _T(""));
    }
    return status;
 }
@@ -587,15 +587,15 @@ UINT32 ExecuteShellCommand(TCHAR *pszCommand, StringList *args)
             {
                int argNum = *sptr - _T('1');
 
-               if (argNum < args->getSize())
+               if (argNum < args->size())
                {
                   int iArgLength;
 
                   // Extend resulting line
-                                               iArgLength = (int)_tcslen(args->getValue(argNum));
+                                               iArgLength = (int)_tcslen(args->get(argNum));
                   dwSize += iArgLength * sizeof(TCHAR);
                   pszCmdLine = (TCHAR *)realloc(pszCmdLine, dwSize);
-                  _tcscpy(&pszCmdLine[i], args->getValue(argNum));
+                  _tcscpy(&pszCmdLine[i], args->get(argNum));
                   i += iArgLength;
                }
             }
index 3ace6d6..9c8f81d 100644 (file)
@@ -67,9 +67,9 @@ static void H_GetList(CSCPMessage *pRequest, CSCPMessage *pMsg)
    pMsg->SetVariable(VID_RCC, dwErrorCode);
    if (dwErrorCode == ERR_SUCCESS)
    {
-               pMsg->SetVariable(VID_NUM_STRINGS, (UINT32)value.getSize());
-               for(int i = 0; i < value.getSize(); i++)
-                       pMsg->SetVariable(VID_ENUM_VALUE_BASE + i, value.getValue(i));
+               pMsg->SetVariable(VID_NUM_STRINGS, (UINT32)value.size());
+               for(int i = 0; i < value.size(); i++)
+                       pMsg->SetVariable(VID_ENUM_VALUE_BASE + i, value.get(i));
    }
 }
 
index ccac31a..d07f454 100644 (file)
@@ -657,9 +657,9 @@ void CommSession::getList(CSCPMessage *pRequest, CSCPMessage *pMsg)
    pMsg->SetVariable(VID_RCC, dwErrorCode);
    if (dwErrorCode == ERR_SUCCESS)
    {
-               pMsg->SetVariable(VID_NUM_STRINGS, (UINT32)value.getSize());
-               for(int i = 0; i < value.getSize(); i++)
-                       pMsg->SetVariable(VID_ENUM_VALUE_BASE + i, value.getValue(i));
+               pMsg->SetVariable(VID_NUM_STRINGS, (UINT32)value.size());
+               for(int i = 0; i < value.size(); i++)
+                       pMsg->SetVariable(VID_ENUM_VALUE_BASE + i, value.get(i));
    }
 }
 
index f0d641f..a0fb0de 100644 (file)
@@ -200,9 +200,9 @@ static BOOL CheckFullPath(TCHAR *folder, bool withHomeDir)
    {
       return FALSE;
    }
-   for(int i = 0; i < g_rootFileManagerFolders->getSize(); i++)
+   for(int i = 0; i < g_rootFileManagerFolders->size(); i++)
    {
-      if (!_tcsncmp(g_rootFileManagerFolders->getValue(i), folder, _tcslen(g_rootFileManagerFolders->getValue(i))))
+      if (!_tcsncmp(g_rootFileManagerFolders->get(i), folder, _tcslen(g_rootFileManagerFolders->get(i))))
          return TRUE;
    }
 
@@ -216,7 +216,7 @@ static BOOL CheckFullPath(TCHAR *folder, bool withHomeDir)
 /**
  * Puts in response list of containing files
  */
-static void GetFolderContent(TCHARfolder, CSCPMessage *msg, bool rootFolder)
+static void GetFolderContent(TCHAR *folder, CSCPMessage *msg, bool rootFolder)
 {
    NX_STAT_STRUCT st;
 
@@ -226,14 +226,14 @@ static void GetFolderContent(TCHAR* folder, CSCPMessage *msg, bool rootFolder)
 
    if (!_tcscmp(folder, FS_PATH_SEPARATOR) && rootFolder)
    {
-      for(int i = 0; i < g_rootFileManagerFolders->getSize(); i++)
+      for(int i = 0; i < g_rootFileManagerFolders->size(); i++)
       {
-         if (_taccess(g_rootFileManagerFolders->getValue(i), 4) != 0)
+         if (_taccess(g_rootFileManagerFolders->get(i), 4) != 0)
             continue;
 
-         if (CALL_STAT(g_rootFileManagerFolders->getValue(i), &st) == 0)
+         if (CALL_STAT(g_rootFileManagerFolders->get(i), &st) == 0)
          {
-            msg->SetVariable(varId++, g_rootFileManagerFolders->getValue(i));
+            msg->SetVariable(varId++, g_rootFileManagerFolders->get(i));
             msg->SetVariable(varId++, (QWORD)st.st_size);
             msg->SetVariable(varId++, (QWORD)st.st_mtime);
             UINT32 type = 0;
@@ -242,7 +242,7 @@ static void GetFolderContent(TCHAR* folder, CSCPMessage *msg, bool rootFolder)
             {
                type |= SYMLINC;
                NX_STAT_STRUCT symlincSt;
-               if (CALL_STAT_FOLLOW_SYMLINK(g_rootFileManagerFolders->getValue(i), &symlincSt) == 0)
+               if (CALL_STAT_FOLLOW_SYMLINK(g_rootFileManagerFolders->get(i), &symlincSt) == 0)
                {
                   type |= S_ISDIR(symlincSt.st_mode) ? DIRECTORY : 0;
 
@@ -253,7 +253,7 @@ static void GetFolderContent(TCHAR* folder, CSCPMessage *msg, bool rootFolder)
             type |= S_ISDIR(st.st_mode) ? DIRECTORY : 0;
             msg->SetVariable(varId++, type);
             TCHAR fullName[MAX_PATH];
-            _tcscpy(fullName, g_rootFileManagerFolders->getValue(i));
+            _tcscpy(fullName, g_rootFileManagerFolders->get(i));
             msg->SetVariable(varId++, fullName);
 
             varId += 5;
@@ -261,7 +261,7 @@ static void GetFolderContent(TCHAR* folder, CSCPMessage *msg, bool rootFolder)
          }
          else
          {
-            AgentWriteDebugLog(3, _T("FILEMGR: GetFolderContent: Not possible to get folder %s"), g_rootFileManagerFolders->getValue(i));
+            AgentWriteDebugLog(3, _T("FILEMGR: GetFolderContent: Not possible to get folder %s"), g_rootFileManagerFolders->get(i));
          }
       }
       msg->SetVariable(VID_INSTANCE_COUNT, count);
index b974f8c..f0f7e53 100644 (file)
@@ -99,12 +99,12 @@ LONG actionHandler (const TCHAR *pszAction, StringList *pArgList, const TCHAR *i
    LONG result = SYSINFO_RC_SUCCESS;
    // route the call to SubAgent
    AgentWriteLog(NXLOG_DEBUG, _T("actionHandler(action=%s, id=%s)"), pszAction, id);
-   int len = pArgList->getSize();
+   int len = pArgList->size();
    TCHAR const** args = new TCHAR const* [len];
-   for (int i=0; i<len; i++)
+   for (int i=0; i < len; i++)
    {
                                  // TODO should I use a copy?
-      args[i] = pArgList->getValue(i);
+      args[i] = pArgList->get(i);
    }
    try
    {
index d5a4d0c..b8c139b 100644 (file)
@@ -46,17 +46,17 @@ static LONG H_StringConst(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValu
  */
 static LONG H_SendSMS(const TCHAR *pszAction, StringList *pArgs, const TCHAR *pData)
 {
-       if (pArgs->getSize() < 2)
+       if (pArgs->size() < 2)
                return ERR_BAD_ARGUMENTS;
 
 #ifdef UNICODE
-       char *rcpt = MBStringFromWideString(pArgs->getValue(0));
-       char *text = MBStringFromWideString(pArgs->getValue(1));
+       char *rcpt = MBStringFromWideString(pArgs->get(0));
+       char *text = MBStringFromWideString(pArgs->get(1));
        LONG rc = SendSMS(rcpt, text) ? ERR_SUCCESS : ERR_INTERNAL_ERROR;
        free(rcpt);
        free(text);
 #else
-       LONG rc = SendSMS(pArgs->getValue(0), pArgs->getValue(1)) ? ERR_SUCCESS : ERR_INTERNAL_ERROR;
+       LONG rc = SendSMS(pArgs->get(0), pArgs->get(1)) ? ERR_SUCCESS : ERR_INTERNAL_ERROR;
 #endif
        return rc;
 }
index ae66b8d..fa2c9b2 100644 (file)
@@ -278,9 +278,9 @@ static BOOL MatchProcess(DWORD pid, HANDLE hProcess, HMODULE hModule, BOOL bExtM
                        StringList *pWndList;
 
                        pWndList = GetProcessWindows(pid);
-                       for(i = 0, bWindowMatch = FALSE; i < pWndList->getSize(); i++)
+                       for(i = 0, bWindowMatch = FALSE; i < pWndList->size(); i++)
                        {
-                               if (RegexpMatch(pWndList->getValue(i), pszWindowName, FALSE))
+                               if (RegexpMatch(pWndList->get(i), pszWindowName, FALSE))
                                {
                                        bWindowMatch = TRUE;
                                        break;
index a15e46f..676f034 100644 (file)
@@ -234,7 +234,7 @@ int main(int argc, char *argv[])
                }
        }
 
-       if (s_data->getSize() > 0)
+       if (s_data->size() > 0)
        {
                if (Startup())
                {
@@ -341,8 +341,8 @@ static BOOL Send()
        CSCPMessage msg;
        msg.SetCode(CMD_PUSH_DCI_DATA);
    msg.SetVariable(VID_OBJECT_ID, optObjectId);
-   msg.SetVariable(VID_NUM_ITEMS, s_data->getSize());
-       for(DWORD i = 0, varId = VID_PUSH_DCI_DATA_BASE; i < s_data->getSize(); i++)
+   msg.SetVariable(VID_NUM_ITEMS, s_data->size());
+       for(DWORD i = 0, varId = VID_PUSH_DCI_DATA_BASE; i < s_data->size(); i++)
        {
                msg.SetVariable(varId++, s_data->getKeyByIndex(i));
                msg.SetVariable(varId++, s_data->getValueByIndex(i));
index d26f365..c002208 100644 (file)
@@ -58,7 +58,6 @@ END_MESSAGE_MAP()
 
 BOOL CObjectPropsCustomAttrs::OnInitDialog() 
 {
-       DWORD i;
        int item;
        RECT rect;
 
@@ -73,7 +72,7 @@ BOOL CObjectPropsCustomAttrs::OnInitDialog()
        m_wndListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
 
        // Fill list control with data
-       for(i = 0; i < m_pObject->pCustomAttrs->getSize(); i++)
+       for(int i = 0; i < m_pObject->pCustomAttrs->size(); i++)
        {
                item = m_wndListCtrl.InsertItem(i, m_pObject->pCustomAttrs->getKeyByIndex(i));
                if (item != -1)
index 61ff15c..14f5afd 100644 (file)
@@ -56,7 +56,6 @@ BOOL CRuleSituationDlg::OnInitDialog()
 {
        RECT rect;
        TCHAR buffer[MAX_DB_STRING];
-       DWORD i;
        int item;
 
        CDialog::OnInitDialog();
@@ -72,7 +71,7 @@ BOOL CRuleSituationDlg::OnInitDialog()
        SetDlgItemText(IDC_EDIT_INSTANCE, m_strInstance);
 
        // Attributes
-       for(i = 0; i < m_attrList.getSize(); i++)
+       for(int i = 0; i < m_attrList.size(); i++)
        {
                item = m_wndListCtrl.InsertItem(i, m_attrList.getKeyByIndex(i));
                m_wndListCtrl.SetItemText(item, 1, m_attrList.getValueByIndex(i));
index 374fadd..6f5add4 100644 (file)
@@ -814,6 +814,7 @@ public class NXCPCodes
    public static final long VID_ALARM_LIST_DISP_LIMIT = 478;
    public static final long VID_LANGUAGE = 479;
    public static final long VID_ROOT = 480;
+   public static final long VID_INCLUDE_NOVALUE_OBJECTS = 481;
 
        public static final long VID_ACL_USER_BASE = 0x00001000L;
        public static final long VID_ACL_USER_LAST = 0x00001FFFL;
index b9a0906..119e503 100644 (file)
@@ -304,6 +304,11 @@ public class NXCPMessage
                setVariable(new NXCPVariable(varId, NXCPVariable.TYPE_INT16, (long)value));
        }
        
+   public void setVariable(final long varId, final boolean value)
+   {
+      setVariable(new NXCPVariable(varId, NXCPVariable.TYPE_INT16, value ? 1L : 0L));
+   }
+   
        public byte[] getVariableAsBinary(final long varId)
        {
                final NXCPVariable var = findVariable(varId);
index ed6fc03..c7dc814 100644 (file)
@@ -2913,7 +2913,7 @@ public class NXCSession implements Session, ScriptLibraryManager, UserManager, S
    {
       final NXCPMessage msg = newMessage(NXCPCodes.CMD_CREATE_USER);
       msg.setVariable(NXCPCodes.VID_USER_NAME, name);
-      msg.setVariableInt16(NXCPCodes.VID_IS_GROUP, isGroup ? 1 : 0);
+      msg.setVariable(NXCPCodes.VID_IS_GROUP, isGroup);
       sendMessage(msg);
 
       final NXCPMessage response = waitForRCC(msg.getMessageId());
@@ -3067,17 +3067,19 @@ public class NXCSession implements Session, ScriptLibraryManager, UserManager, S
    /**
     * Get last DCI values for given node
     *
-    * @param nodeId            ID of the node to get DCI values for
-    * @param objectTooltipOnly if set to true, only DCIs with DCF_SHOW_ON_OBJECT_TOOLTIP flag set are returned
+    * @param nodeId                ID of the node to get DCI values for
+    * @param objectTooltipOnly     if set to true, only DCIs with DCF_SHOW_ON_OBJECT_TOOLTIP flag set are returned
+    * @param includeNoValueObjects if set to true, objects with no value (like instance discovery DCIs) will be returned as well
     * @return List of DCI values
     * @throws IOException  if socket I/O error occurs
     * @throws NXCException if NetXMS server returns an error or operation was timed out
     */
-   public DciValue[] getLastValues(final long nodeId, boolean objectTooltipOnly) throws IOException, NXCException
+   public DciValue[] getLastValues(final long nodeId, boolean objectTooltipOnly, boolean includeNoValueObjects) throws IOException, NXCException
    {
       final NXCPMessage msg = newMessage(NXCPCodes.CMD_GET_LAST_VALUES);
       msg.setVariableInt32(NXCPCodes.VID_OBJECT_ID, (int) nodeId);
-      msg.setVariableInt16(NXCPCodes.VID_OBJECT_TOOLTIP_ONLY, objectTooltipOnly ? 1 : 0);
+      msg.setVariable(NXCPCodes.VID_OBJECT_TOOLTIP_ONLY, objectTooltipOnly);
+      msg.setVariable(NXCPCodes.VID_INCLUDE_NOVALUE_OBJECTS, includeNoValueObjects);
       sendMessage(msg);
 
       final NXCPMessage response = waitForRCC(msg.getMessageId());
@@ -3103,7 +3105,7 @@ public class NXCSession implements Session, ScriptLibraryManager, UserManager, S
     */
    public DciValue[] getLastValues(final long nodeId) throws IOException, NXCException
    {
-      return getLastValues(nodeId, false);
+      return getLastValues(nodeId, false, false);
    }
    
    /**
index 1134d35..1e570d9 100644 (file)
@@ -62,7 +62,7 @@ public class DataCollectionTest extends SessionTest
        {
                final NXCSession session = connect();
                
-               DciValue[] list = session.getLastValues(nodeId, true);
+               DciValue[] list = session.getLastValues(nodeId, true, false);
                assertEquals(true, list.length > 0);
                
                boolean statusFound = false;
index 60a6dc2..271306e 100644 (file)
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: Data Collection Management Plug-in
 Bundle-SymbolicName: org.netxms.ui.eclipse.datacollection;singleton:=true
-Bundle-Version: 1.2.15
+Bundle-Version: 1.2.16
 Bundle-Activator: org.netxms.ui.eclipse.datacollection.Activator
 Bundle-Vendor: netxms.org
 Require-Bundle: org.eclipse.ui;bundle-version="3.7.0",
@@ -12,7 +12,7 @@ Require-Bundle: org.eclipse.ui;bundle-version="3.7.0",
  org.netxms.ui.eclipse.objectview;bundle-version="1.2.15",
  org.netxms.ui.eclipse.snmp;bundle-version="1.2.12",
  org.netxms.ui.eclipse.nxsl;bundle-version="1.2.15",
- org.netxms.ui.eclipse.console;bundle-version="1.2.15",
+ org.netxms.ui.eclipse.console;bundle-version="1.2.16",
  org.eclipse.core.expressions;bundle-version="3.4.300",
  org.netxms.ui.eclipse.charts;bundle-version="1.2.11",
  org.eclipse.ui.forms;bundle-version="3.5.101"
index 953cf67..670c346 100644 (file)
@@ -64,6 +64,7 @@ public class SelectDciDialog extends Dialog
        private boolean enableEmptySelection = false;
        private boolean allowTemplateItems = false;
        private boolean allowSingleSelection = false;
+       private boolean allowNoValueObjects = false;
        
        /**
         * @param parentShell
@@ -146,7 +147,7 @@ public class SelectDciDialog extends Dialog
                }
 
       dciList = new DciList(null, (fixedNode == 0) ? splitter : dialogArea, SWT.BORDER, null,
-            "SelectDciDialog.dciList", dcObjectType, allowSingleSelection ? SWT.NONE : SWT.MULTI); //$NON-NLS-1$
+            "SelectDciDialog.dciList", dcObjectType, allowSingleSelection ? SWT.NONE : SWT.MULTI, allowNoValueObjects); //$NON-NLS-1$
                dciList.setDcObjectType(dcObjectType);
                dciList.addDoubleClickListener(new IDoubleClickListener() {
                        @Override
@@ -312,4 +313,12 @@ public class SelectDciDialog extends Dialog
    {
       this.allowSingleSelection = allowSingleSelection;
    }
+
+   /**
+    * @param allowNoValueObjects the allowNoValueObjects to set
+    */
+   public void setAllowNoValueObjects(boolean allowNoValueObjects)
+   {
+      this.allowNoValueObjects = allowNoValueObjects;
+   }
 }
index b094ecc..733e4b5 100644 (file)
@@ -89,7 +89,7 @@ public class SelectNodeDciDialog extends Dialog
                
                dialogArea.setLayout(new FillLayout());
                
-               dciList = new DciList(null, dialogArea, SWT.BORDER, null, "SelectNodeDciDialog.dciList", dcObjectType, SWT.SINGLE);  //$NON-NLS-1$
+               dciList = new DciList(null, dialogArea, SWT.BORDER, null, "SelectNodeDciDialog.dciList", dcObjectType, SWT.SINGLE, false);  //$NON-NLS-1$
                dciList.setDcObjectType(dcObjectType);
                dciList.addDoubleClickListener(new IDoubleClickListener() {
                        @Override
index 9d00cf8..e65062e 100644 (file)
@@ -151,8 +151,8 @@ DciLabelProvider_Unknown=<unknown>
 DciList_ColDescr=Description
 DciList_ColID=ID
 DciList_ColParam=Parameter
-DciList_JobError=Cannot get DCI list for node 
-DciList_JobTitle=Get DCI values for node 
+DciList_JobError=Cannot get DCI list for node %s
+DciList_JobTitle=Get DCI values for node %s
 DciRemoveConfirmationDialog_Remove=&Remove DCIs from node
 DciRemoveConfirmationDialog_Title=Remove Template
 DciRemoveConfirmationDialog_Unbind=&Unbind DCIs from template
index 7c0a737..0ab8977 100644 (file)
@@ -151,8 +151,8 @@ DciLabelProvider_Unknown=<nezn\u00e1m\u00fd>
 DciList_ColDescr=Popis
 DciList_ColID=ID
 DciList_ColParam=Parametr
-DciList_JobError=Nelze z\u00edskat seznam DCI prvku
-DciList_JobTitle=Z\u00edskat DCI hodnoty prvku
+DciList_JobError=Nelze z\u00edskat seznam DCI prvku %s
+DciList_JobTitle=Z\u00edskat DCI hodnoty prvku %s
 DciRemoveConfirmationDialog_Remove=&Odstranit DCI z prvku
 DciRemoveConfirmationDialog_Title=Odstranit \u0161ablonu
 DciRemoveConfirmationDialog_Unbind=&Odv\u00e1zat DCI ze \u0161ablony
index e3c1894..355b920 100644 (file)
@@ -151,8 +151,8 @@ DciLabelProvider_Unknown=<desconocido>
 DciList_ColDescr=Descripci\u00f3n
 DciList_ColID=ID
 DciList_ColParam=Par\u00e1metro
-DciList_JobError=No es posible obtener la lista de monitores para el nodo
-DciList_JobTitle=Obtener los valores de los monitores del nodo
+DciList_JobError=No es posible obtener la lista de monitores para el nodo %s
+DciList_JobTitle=Obtener los valores de los monitores del nodo %s
 DciRemoveConfirmationDialog_Remove=&Eliminar monitores para el nodo
 DciRemoveConfirmationDialog_Title=Eliminar Plantilla
 DciRemoveConfirmationDialog_Unbind=&Desvincular DCIs de la plantilla
index 493f647..980c5a3 100644 (file)
@@ -151,8 +151,8 @@ DciLabelProvider_Unknown=<\u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d
 DciList_ColDescr=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435
 DciList_ColID=\u041a\u043e\u0434
 DciList_ColParam=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440
-DciList_JobError=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u043b\u044f \u0443\u0437\u043b\u0430
-DciList_JobTitle=\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u043b\u044f \u0443\u0437\u043b\u0430
+DciList_JobError=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u043b\u044f \u0443\u0437\u043b\u0430 %s
+DciList_JobTitle=\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u043b\u044f \u0443\u0437\u043b\u0430 %s
 DciRemoveConfirmationDialog_Remove=&\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u0441 \u0443\u0437\u043b\u0430
 DciRemoveConfirmationDialog_Title=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430
 DciRemoveConfirmationDialog_Unbind=&\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043a \u0448\u0430\u0431\u043b\u043e\u043d\u0443
index 2faf86d..fa20b11 100644 (file)
@@ -151,8 +151,8 @@ DciLabelProvider_Unknown=<unknown>
 DciList_ColDescr=Description
 DciList_ColID=ID
 DciList_ColParam=Parameter
-DciList_JobError=Cannot get DCI list for node
-DciList_JobTitle=Get DCI values for node
+DciList_JobError=Cannot get DCI list for node %s
+DciList_JobTitle=Get DCI values for node %s
 DciRemoveConfirmationDialog_Remove=&Remove DCIs from node
 DciRemoveConfirmationDialog_Title=Remove Template
 DciRemoveConfirmationDialog_Unbind=&Unbind DCIs from template
index 2774207..f4d5594 100644 (file)
@@ -62,6 +62,7 @@ public class DciList extends Composite
        private NXCSession session;
        private SortableTableViewer viewer;
        private int dcObjectType;       // DC object type filter; -1 allows all object types
+       private boolean allowNoValueObjects = false;
        
        /**
         * Create "last values" widget
@@ -72,13 +73,14 @@ public class DciList extends Composite
         * @param _node node to display data for
         * @param configPrefix configuration prefix for saving/restoring viewer settings
         */
-       public DciList(ViewPart viewPart, Composite parent, int style, AbstractNode _node, final String configPrefix, int dcObjectType, int selectionType)
+       public DciList(ViewPart viewPart, Composite parent, int style, AbstractNode _node, final String configPrefix, int dcObjectType, int selectionType, boolean allowNoValueObjects)
        {
                super(parent, style);
                session = (NXCSession)ConsoleSharedData.getSession();
                this.viewPart = viewPart;               
                this.node = _node;
                this.dcObjectType = dcObjectType;
+               this.allowNoValueObjects = allowNoValueObjects;
                
                final IDialogSettings ds = Activator.getDefault().getDialogSettings();
                
@@ -121,19 +123,19 @@ public class DciList extends Composite
                        return;
                }
 
-               ConsoleJob job = new ConsoleJob(Messages.get().DciList_JobTitle + node.getObjectName(), viewPart, Activator.PLUGIN_ID, null) {
+               ConsoleJob job = new ConsoleJob(String.format(Messages.get().DciList_JobTitle, node.getObjectName()), viewPart, Activator.PLUGIN_ID, null) {
                        @Override
                        protected String getErrorMessage()
                        {
-                               return Messages.get().DciList_JobError + node.getObjectName();
+                               return String.format(Messages.get().DciList_JobError, node.getObjectName());
                        }
 
                        @Override
                        protected void runInternal(IProgressMonitor monitor) throws Exception
                        {
                                final List<DciValue> data = 
-                                               (dcObjectType == -1) ? Arrays.asList(session.getLastValues(node.getObjectId())) 
-                                                               : new ArrayList<DciValue>(Arrays.asList(session.getLastValues(node.getObjectId())));
+                                               (dcObjectType == -1) ? Arrays.asList(session.getLastValues(node.getObjectId(), false, allowNoValueObjects)) 
+                                                               : new ArrayList<DciValue>(Arrays.asList(session.getLastValues(node.getObjectId(), false, allowNoValueObjects)));
                                if (dcObjectType != -1)
                                {
                                        Iterator<DciValue> it = data.iterator();
index b8dd8f3..0e441ba 100644 (file)
@@ -44,7 +44,8 @@ public class DciSelector extends AbstractSelector
        private int dcObjectType = -1;
    private int dciObjectType = -1;
        private String dciName = null;
-       private boolean fixedNode = false; 
+       private boolean fixedNode = false;
+       private boolean allowNoValueObjects = false;
 
        /**
         * @param parent
@@ -68,6 +69,7 @@ public class DciSelector extends AbstractSelector
                dlg.setEnableEmptySelection(true);
                dlg.setDcObjectType(dcObjectType);
                dlg.setSingleSelection(true);
+               dlg.setAllowNoValueObjects(allowNoValueObjects);
                if (dlg.open() == Window.OK)
                {
                   List<DciValue> dci = dlg.getSelection();
@@ -251,4 +253,20 @@ public class DciSelector extends AbstractSelector
    {
       this.dciObjectType = dciObjectType;
    }
+
+   /**
+    * @param allowNoValueObjects the allowNoValueObjects to set
+    */
+   public void setAllowNoValueObjects(boolean allowNoValueObjects)
+   {
+      this.allowNoValueObjects = allowNoValueObjects;
+   }
+
+   /**
+    * @return the allowNoValueObjects
+    */
+   public boolean isAllowNoValueObjects()
+   {
+      return allowNoValueObjects;
+   }
 }
index 76ed1ae..8250758 100644 (file)
@@ -2,15 +2,15 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: NXMC Network Maps Plug-in
 Bundle-SymbolicName: org.netxms.ui.eclipse.networkmaps;singleton:=true
-Bundle-Version: 1.2.15
+Bundle-Version: 1.2.16
 Bundle-Activator: org.netxms.ui.eclipse.networkmaps.Activator
 Bundle-Vendor: netxms.org
 Require-Bundle: org.eclipse.ui;bundle-version="3.7.0",
  org.eclipse.core.runtime;bundle-version="3.7.0",
- org.netxms.ui.eclipse.console;bundle-version="1.2.15",
+ org.netxms.ui.eclipse.console;bundle-version="1.2.16",
  org.netxms.ui.eclipse.objectbrowser;bundle-version="1.2.15",
  org.netxms.ui.eclipse.imagelibrary;bundle-version="1.2.14",
- org.netxms.ui.eclipse.osm;bundle-version="1.2.7",
+ org.netxms.ui.eclipse.osm;bundle-version="1.2.10",
  org.netxms.ui.eclipse.charts;bundle-version="1.2.11",
  org.eclipse.draw2d;bundle-version="3.9.0",
  org.netxms.ui.eclipse.nxsl;bundle-version="1.2.11",
@@ -18,7 +18,7 @@ Require-Bundle: org.eclipse.ui;bundle-version="3.7.0",
  org.netxms.gef4.zest.jface;bundle-version="2.0.0",
  org.netxms.gef4.zest.layouts;bundle-version="2.0.0",
  org.netxms.ui.eclipse.objectview;bundle-version="1.2.15",
- org.netxms.ui.eclipse.datacollection;bundle-version="1.2.13"
+ org.netxms.ui.eclipse.datacollection;bundle-version="1.2.16"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
 Export-Package: org.netxms.ui.eclipse.networkmaps.algorithms,
index df1ce62..46d700c 100644 (file)
@@ -90,7 +90,7 @@ public class MapContentProvider implements IGraphEntityRelationshipContentProvid
                                {
                                        try
                                        {
-                                               DciValue[] values = session.getLastValues(e.getKey(), true);
+                                               DciValue[] values = session.getLastValues(e.getKey(), true, false);
                                                cachedDciValues.put(e.getKey(), values);
                                        }
                                        catch(Exception e2)
index fb24a57..6d72ed6 100644 (file)
@@ -319,7 +319,8 @@ public class PerfTabGraphSettings
                {
                        if (parentDciId == s.getRuntimeDciInfo().getId())
                                return; // found valid parent ID
-                       if (parentDciId == s.getRuntimeDciInfo().getTemplateDciId())
+                       if ((parentDciId == s.getRuntimeDciInfo().getTemplateDciId()) &&
+                           s.getRuntimeDciInfo().getInstance().equals(runtimeDciInfo.getInstance()))
                        {
                                // found parent ID from template
                                parentDciId = s.getRuntimeDciInfo().getId();
index 399ce99..6512c57 100644 (file)
@@ -120,6 +120,7 @@ public class PerfTab extends PropertyPage
       parentDci = new DciSelector(dialogArea, SWT.NONE, false);
       parentDci.setDciId(dci.getNodeId(), settings.getParentDciId());
       parentDci.setFixedNode(true);
+      parentDci.setAllowNoValueObjects(true);
       parentDci.setLabel(Messages.get().PerfTab_Attach);
       gd = new GridData();
       gd.horizontalSpan = layout.numColumns;
index a6c69c6..eddba44 100644 (file)
@@ -492,7 +492,7 @@ void ConfigEntry::createXml(String &xml, int level)
       xml.addFormattedString(_T("%*s<%s"), level * 4, _T(""), name);
    else
       xml.addFormattedString(_T("%*s<%s id=\"%d\""), level * 4, _T(""), name, m_id);
-   for(UINT32 j = 0; j < m_attributes.getSize(); j++)
+   for(int j = 0; j < m_attributes.size(); j++)
    {
       if (_tcscmp(m_attributes.getKeyByIndex(j), _T("id")))
          xml.addFormattedString(_T(" %s=\"%s\""), m_attributes.getKeyByIndex(j), m_attributes.getValueByIndex(j));
index f678b6c..06faf7f 100644 (file)
@@ -174,7 +174,7 @@ void StringList::replace(int index, const TCHAR *value)
  * if given value not found in the list. If list contains duplicate values,
  * index of first occurence will be returned.
  */
-int StringList::getIndex(const TCHAR *value)
+int StringList::indexOf(const TCHAR *value)
 {
        for(int i = 0; i < m_count; i++)
                if ((m_values[i] != NULL) && !_tcscmp(m_values[i], value))
@@ -187,7 +187,7 @@ int StringList::getIndex(const TCHAR *value)
  * if given value not found in the list. If list contains duplicate values,
  * index of first occurence will be returned.
  */
-int StringList::getIndexIgnoreCase(const TCHAR *value)
+int StringList::indexOfIgnoreCase(const TCHAR *value)
 {
        for(int i = 0; i < m_count; i++)
                if ((m_values[i] != NULL) && !_tcsicmp(m_values[i], value))
@@ -224,7 +224,7 @@ void StringList::merge(const StringList *src, bool matchCase)
 {
    for(int i = 0; i < src->m_count; i++)
    {
-      if ((matchCase ? getIndex(src->m_values[i]) : getIndexIgnoreCase(src->m_values[i])) == -1)
+      if ((matchCase ? indexOf(src->m_values[i]) : indexOfIgnoreCase(src->m_values[i])) == -1)
          add(src->m_values[i]);
    }
 }
index 1ddd8c6..ea546fb 100644 (file)
  */
 StringMap::StringMap(const StringMap &src) : StringMapBase(true)
 {
-       UINT32 i;
-
        m_size = src.m_size;
        m_objectOwner = src.m_objectOwner;
        m_keys = (TCHAR **)malloc(sizeof(TCHAR *) * m_size);
        m_values = (void **)malloc(sizeof(void *) * m_size);
-       for(i = 0; i < m_size; i++)
+       for(int i = 0; i < m_size; i++)
        {
                m_keys[i] = _tcsdup(src.m_keys[i]);
                m_values[i] = _tcsdup((TCHAR *)src.m_values[i]);
@@ -54,13 +52,11 @@ StringMap::~StringMap()
  */
 StringMap& StringMap::operator =(const StringMap &src)
 {
-       UINT32 i;
-
        clear();
        m_size = src.m_size;
        m_keys = (TCHAR **)malloc(sizeof(TCHAR *) * m_size);
        m_values = (void **)malloc(sizeof(void *) * m_size);
-       for(i = 0; i < m_size; i++)
+       for(int i = 0; i < m_size; i++)
        {
                m_keys[i] = _tcsdup(src.m_keys[i]);
                m_values[i] = _tcsdup((TCHAR *)src.m_values[i]);
@@ -68,6 +64,15 @@ StringMap& StringMap::operator =(const StringMap &src)
        return *this;
 }
 
+/**
+ * Add all values from another string map
+ */
+void StringMap::addAll(StringMap *src)
+{
+   for(int i = 0; i < src->m_size; i++)
+      set(src->m_keys[i], (TCHAR *)src->m_values[i]);
+}
+
 /**
  * Set value from UINT32
  */
index d2c0219..1d605ea 100644 (file)
@@ -57,9 +57,7 @@ StringMapBase::~StringMapBase()
  */
 void StringMapBase::clear()
 {
-       UINT32 i;
-
-       for(i = 0; i < m_size; i++)
+       for(int i = 0; i < m_size; i++)
        {
                safe_free(m_keys[i]);
                if (m_objectOwner)
@@ -78,7 +76,7 @@ UINT32 StringMapBase::find(const TCHAR *key)
        if (key == NULL)
                return INVALID_INDEX;
 
-       for(UINT32 i = 0; i < m_size; i++)
+       for(int i = 0; i < m_size; i++)
        {
       if (m_ignoreCase ? !_tcsicmp(key, m_keys[i]) : !_tcscmp(key, m_keys[i]))
                        return i;
index 0b28441..cb6345b 100644 (file)
@@ -284,7 +284,7 @@ UINT32 LIBNXCL_EXPORTABLE NXCSaveEventPolicy(NXC_SESSION hSession, NXC_EPP *pEve
                        msg.SetVariable(VID_ALARM_TIMEOUT_EVENT, pEventPolicy->pRuleList[i].dwAlarmTimeoutEvent);
                        msg.SetVariable(VID_SITUATION_ID, pEventPolicy->pRuleList[i].dwSituationId);
                        msg.SetVariable(VID_SITUATION_INSTANCE, pEventPolicy->pRuleList[i].szSituationInstance);
-                       count = (pEventPolicy->pRuleList[i].pSituationAttrList != NULL) ? pEventPolicy->pRuleList[i].pSituationAttrList->getSize() : 0;
+                       count = (pEventPolicy->pRuleList[i].pSituationAttrList != NULL) ? pEventPolicy->pRuleList[i].pSituationAttrList->size() : 0;
                        msg.SetVariable(VID_SITUATION_NUM_ATTRS, count);
                        for(j = 0, id = VID_SITUATION_ATTR_LIST_BASE; j < count; j++)
                        {
index 0fee55b..42b5934 100644 (file)
@@ -1013,8 +1013,8 @@ UINT32 LIBNXCL_EXPORTABLE NXCModifyObject(NXC_SESSION hSession, NXC_OBJECT_UPDAT
    }
    if (pUpdate->qwFlags & OBJ_UPDATE_CUSTOM_ATTRS)
    {
-      msg.SetVariable(VID_NUM_CUSTOM_ATTRIBUTES, pUpdate->pCustomAttrs->getSize());
-      for(i = 0, dwId1 = VID_CUSTOM_ATTRIBUTES_BASE; i < pUpdate->pCustomAttrs->getSize(); i++)
+      msg.SetVariable(VID_NUM_CUSTOM_ATTRIBUTES, pUpdate->pCustomAttrs->size());
+      for(i = 0, dwId1 = VID_CUSTOM_ATTRIBUTES_BASE; i < pUpdate->pCustomAttrs->size(); i++)
       {
          msg.SetVariable(dwId1++, pUpdate->pCustomAttrs->getKeyByIndex(i));
          msg.SetVariable(dwId1++, pUpdate->pCustomAttrs->getValueByIndex(i));
@@ -1573,9 +1573,9 @@ UINT32 LIBNXCL_EXPORTABLE NXCSaveObjectCache(NXC_SESSION hSession, const TCHAR *
                                fwrite(pList[i].pObject->pdwTrustedNodes, pList[i].pObject->dwNumTrustedNodes, sizeof(UINT32), hFile);
 
                        // Custom attributes
-                       dwSize = pList[i].pObject->pCustomAttrs->getSize();
+                       dwSize = pList[i].pObject->pCustomAttrs->size();
          fwrite(&dwSize, 1, sizeof(UINT32), hFile);
-                       for(j = 0; j < pList[i].pObject->pCustomAttrs->getSize(); j++)
+                       for(j = 0; j < pList[i].pObject->pCustomAttrs->size(); j++)
                        {
                                WriteStringToCacheFile(hFile, pList[i].pObject->pCustomAttrs->getKeyByIndex(j), true);
                                WriteStringToCacheFile(hFile, pList[i].pObject->pCustomAttrs->getValueByIndex(j), true);
index 40d0b34..10d6c6d 100644 (file)
@@ -709,12 +709,12 @@ ObjectArray<LogParser> *LogParser::createFromXml(const char *xml, int xmlLen, TC
        else if (success)
        { 
                parsers = new ObjectArray<LogParser>;
-               if (state.files.getSize() > 0)
+               if (state.files.size() > 0)
                {
-                       for(int i = 0; i < state.files.getSize(); i++)
+                       for(int i = 0; i < state.files.size(); i++)
                        {
                                LogParser *p = (i > 0) ? new LogParser(state.parser) : state.parser;
-                               p->setFileName(state.files.getValue(i));
+                               p->setFileName(state.files.get(i));
                                p->setFileEncoding(*state.encodings.get(i));
                                parsers->add(p);
                        }
index 16b8d36..ae54de7 100644 (file)
@@ -115,7 +115,7 @@ void NXSL_VariableSystem::merge(NXSL_VariableSystem *src)
  */
 void NXSL_VariableSystem::addAll(StringObjectMap<NXSL_Value> *src)
 {
-       for(UINT32 i = 0; i < src->getSize(); i++)
+       for(int i = 0; i < src->size(); i++)
        {
       const TCHAR *name = src->getKeyByIndex(i);
       if (find(name) == NULL)
index 4f20cee..8627cef 100644 (file)
@@ -192,16 +192,16 @@ bool NXSL_VM::load(NXSL_Program *program)
 
    // Set constants
    m_pConstants->clear();
-   for(i = 0; i < (int)program->m_constants->getSize(); i++)
+   for(i = 0; i < (int)program->m_constants->size(); i++)
    {
       m_pConstants->create(program->m_constants->getKeyByIndex(i), new NXSL_Value(program->m_constants->getValueByIndex(i)));
    }
 
    // Load modules
    m_modules = new ObjectArray<NXSL_Module>(4, 4, true);
-   for(i = 0; i < program->m_requiredModules.getSize(); i++)
+   for(i = 0; i < program->m_requiredModules.size(); i++)
    {
-      if (!m_env->loadModule(this, program->m_requiredModules.getValue(i)))
+      if (!m_env->loadModule(this, program->m_requiredModules.get(i)))
       {
          error(NXSL_ERR_MODULE_NOT_FOUND);
          success = false;
index 4d1c029..ddbe22f 100644 (file)
@@ -45,7 +45,7 @@ static UINT32 PortMapCallback(UINT32 snmpVersion, SNMP_Variable *var, SNMP_Trans
    {
                UINT32 ifIndex = pRespPDU->getVariable(0)->getValueAsUInt();
                InterfaceList *ifList = (InterfaceList *)arg;
-               for(int i = 0; i < ifList->getSize(); i++)
+               for(int i = 0; i < ifList->size(); i++)
                        if (ifList->get(i)->dwIndex == ifIndex)
                        {
                                ifList->get(i)->dwBridgePortNumber = var->getValueAsUInt();
index 25a8cc4..8971965 100644 (file)
@@ -545,7 +545,7 @@ void Cluster::statusPoll(ClientSession *pSession, UINT32 dwRqId, int nPoller)
                        if (pIfList != NULL)
                        {
                                LockData();
-                               for(j = 0; j < (UINT32)pIfList->getSize(); j++)
+                               for(j = 0; j < (UINT32)pIfList->size(); j++)
                                {
                                        for(k = 0; k < m_dwNumResources; k++)
                                        {
index 9ec3da7..d56b3b8 100644 (file)
@@ -1649,34 +1649,39 @@ bool DCItem::hasValue()
 void DCItem::expandInstance()
 {
        String temp = m_szName;
-       temp.replace(_T("{instance}"), m_instance);
+   temp.replace(_T("{instance}"), m_instanceDiscoveryData);
+       temp.replace(_T("{instance-name}"), m_instance);
        nx_strncpy(m_szName, (const TCHAR *)temp, MAX_ITEM_NAME);
 
        temp = m_szDescription;
-       temp.replace(_T("{instance}"), m_instance);
+   temp.replace(_T("{instance}"), m_instanceDiscoveryData);
+       temp.replace(_T("{instance-name}"), m_instance);
        nx_strncpy(m_szDescription, (const TCHAR *)temp, MAX_DB_STRING);
 }
 
 /**
  * Filter instance list
  */
-void DCItem::filterInstanceList(StringList *instances)
+void DCItem::filterInstanceList(StringMap *instances)
 {
    if (m_instanceFilter == NULL)
                return;
 
-       for(int i = 0; i < instances->getSize(); i++)
+   StringMap filteredInstances;
+       for(int i = 0; i < instances->size(); i++)
        {
-      NXSL_Value *pValue = new NXSL_Value(instances->getValue(i));
+      NXSL_Value *pValue = new NXSL_Value(instances->getKeyByIndex(i));
       m_instanceFilter->setGlobalVariable(_T("$node"), new NXSL_Value(new NXSL_Object(&g_nxslNodeClass, m_pNode)));
       m_instanceFilter->setGlobalVariable(_T("$dci"), new NXSL_Value(new NXSL_Object(&g_nxslDciClass, this)));
 
       if (m_instanceFilter->run(1, &pValue))
       {
+         bool accepted;
+         const TCHAR *instance = instances->getKeyByIndex(i);
+         const TCHAR *name = instances->getValueByIndex(i);
          pValue = m_instanceFilter->getResult();
          if (pValue != NULL)
          {
-            bool accepted;
             if (pValue->isArray())
             {
                NXSL_Array *array = pValue->getValueAsArray();
@@ -1687,11 +1692,23 @@ void DCItem::filterInstanceList(StringList *instances)
                   {
                      // transformed value
                      const TCHAR *newValue = array->get(1)->getValueAsCString();
-                     if (newValue != NULL)
+                     if ((newValue != NULL) && (*newValue != 0))
                      {
                         DbgPrintf(5, _T("DCItem::filterInstanceList(%s [%d]): instance %d \"%s\" replaced by \"%s\""),
-                                  m_szName, m_dwId, i, instances->getValue(i), newValue);
-                        instances->replace(i, newValue);
+                                  m_szName, m_dwId, i, instance, newValue);
+                        instance = newValue;
+                     }
+
+                     if (array->size() > 2)
+                     {
+                        // instance name
+                        const TCHAR *newName = array->get(2)->getValueAsCString();
+                        if ((newName != NULL) && (*newName != 0))
+                        {
+                           DbgPrintf(5, _T("DCItem::filterInstanceList(%s [%d]): instance %d \"%s\" name set to \"%s\""),
+                                     m_szName, m_dwId, i, instance, newName);
+                           name = newName;
+                        }
                      }
                   }
                }
@@ -1704,14 +1721,20 @@ void DCItem::filterInstanceList(StringList *instances)
             {
                accepted = pValue->getValueAsInt32() ? true : false;
             }
-                               if (!accepted)
-                               {
-                                       DbgPrintf(5, _T("DCItem::filterInstanceList(%s [%d]): instance \"%s\" removed by filtering script"),
-                                                 m_szName, m_dwId, instances->getValue(i));
-                                       instances->remove(i);
-                                       i--;
-                               }
          }
+         else
+         {
+            accepted = true;
+         }
+                       if (accepted)
+         {
+            filteredInstances.set(instance, name);
+         }
+         else
+                       {
+                               DbgPrintf(5, _T("DCItem::filterInstanceList(%s [%d]): instance \"%s\" removed by filtering script"),
+                                         m_szName, m_dwId, instances->getKeyByIndex(i));
+                       }
       }
       else
       {
@@ -1721,6 +1744,9 @@ void DCItem::filterInstanceList(StringList *instances)
                     (m_pNode != NULL) ? m_pNode->Name() : _T("(null)"), m_dwId);
          PostEvent(EVENT_SCRIPT_ERROR, g_dwMgmtNode, "ssd", szBuffer,
                    m_instanceFilter->getErrorText(), m_dwId);
+         filteredInstances.set(instances->getKeyByIndex(i), instances->getValueByIndex(i));
       }
    }
+   instances->clear();
+   instances->addAll(&filteredInstances);
 }
index 4b342fb..aee4736 100644 (file)
@@ -122,7 +122,7 @@ void ShowServerStats(CONSOLE_CTX pCtx)
    ConsolePrintf(pCtx, _T("Total number of objects:     %d\n")
                        _T("Number of monitored nodes:   %d\n")
                        _T("Number of collectable DCIs:  %d\n\n"),
-                     g_idxObjectById.getSize(), g_idxNodeById.getSize(), dciCount);
+                     g_idxObjectById.size(), g_idxNodeById.size(), dciCount);
 }
 
 /**
index d951e97..0d8d2b3 100644 (file)
@@ -453,7 +453,6 @@ bool EPRule::matchScript(Event *pEvent)
 bool EPRule::processEvent(Event *pEvent)
 {
    bool bStopProcessing = false;
-   UINT32 i;
 
    // Check disable flag
    if (!(m_dwFlags & RF_DISABLED))
@@ -473,7 +472,7 @@ bool EPRule::processEvent(Event *pEvent)
          {
             TCHAR *alarmMessage = pEvent->expandText(m_szAlarmMessage);
             TCHAR *alarmKey = pEvent->expandText(m_szAlarmKey);
-            for(i = 0; i < m_dwNumActions; i++)
+            for(UINT32 i = 0; i < m_dwNumActions; i++)
                ExecuteAction(m_pdwActionList[i], pEvent, alarmMessage, alarmKey);
             free(alarmMessage);
             free(alarmKey);
@@ -489,7 +488,7 @@ bool EPRule::processEvent(Event *pEvent)
                                if (pSituation != NULL)
                                {
                                        TCHAR *pszText = pEvent->expandText(m_szSituationInstance);
-                                       for(i = 0; i < m_situationAttrList.getSize(); i++)
+                                       for(int i = 0; i < m_situationAttrList.size(); i++)
                                        {
                                                pszAttr = pEvent->expandText(m_situationAttrList.getKeyByIndex(i));
                                                pszValue = pEvent->expandText(m_situationAttrList.getValueByIndex(i));
@@ -635,8 +634,8 @@ void EPRule::saveToDB(DB_HANDLE hdb)
    DBQuery(hdb, pszQuery);
 
    // Actions
-       UINT32 i;
-   for(i = 0; i < m_dwNumActions; i++)
+       int i;
+   for(i = 0; i < (int)m_dwNumActions; i++)
    {
       _sntprintf(pszQuery, len, _T("INSERT INTO policy_action_list (rule_id,action_id) VALUES (%d,%d)"),
                 m_dwId, m_pdwActionList[i]);
@@ -644,7 +643,7 @@ void EPRule::saveToDB(DB_HANDLE hdb)
    }
 
    // Events
-   for(i = 0; i < m_dwNumEvents; i++)
+   for(i = 0; i < (int)m_dwNumEvents; i++)
    {
       _sntprintf(pszQuery, len, _T("INSERT INTO policy_event_list (rule_id,event_code) VALUES (%d,%d)"),
                 m_dwId, m_pdwEventList[i]);
@@ -652,7 +651,7 @@ void EPRule::saveToDB(DB_HANDLE hdb)
    }
 
    // Sources
-   for(i = 0; i < m_dwNumSources; i++)
+   for(i = 0; i < (int)m_dwNumSources; i++)
    {
       _sntprintf(pszQuery, len, _T("INSERT INTO policy_source_list (rule_id,object_id) VALUES (%d,%d)"),
                 m_dwId, m_pdwSourceList[i]);
@@ -660,7 +659,7 @@ void EPRule::saveToDB(DB_HANDLE hdb)
    }
 
        // Situation attributes
-       for(i = 0; i < m_situationAttrList.getSize(); i++)
+       for(i = 0; i < m_situationAttrList.size(); i++)
        {
       _sntprintf(pszQuery, len, _T("INSERT INTO policy_situation_attr_list (rule_id,situation_id,attr_name,attr_value) VALUES (%d,%d,%s,%s)"),
                 m_dwId, m_dwSituationId,
@@ -677,8 +676,6 @@ void EPRule::saveToDB(DB_HANDLE hdb)
  */
 void EPRule::createMessage(CSCPMessage *pMsg)
 {
-       UINT32 i, id;
-
    pMsg->SetVariable(VID_FLAGS, m_dwFlags);
    pMsg->SetVariable(VID_RULE_ID, m_dwId);
    pMsg->SetVariable(VID_GUID, m_guid, UUID_LENGTH);
@@ -697,8 +694,9 @@ void EPRule::createMessage(CSCPMessage *pMsg)
    pMsg->SetVariable(VID_SCRIPT, CHECK_NULL_EX(m_pszScript));
        pMsg->SetVariable(VID_SITUATION_ID, m_dwSituationId);
        pMsg->SetVariable(VID_SITUATION_INSTANCE, m_szSituationInstance);
-       pMsg->SetVariable(VID_SITUATION_NUM_ATTRS, m_situationAttrList.getSize());
-       for(i = 0, id = VID_SITUATION_ATTR_LIST_BASE; i < m_situationAttrList.getSize(); i++)
+       pMsg->SetVariable(VID_SITUATION_NUM_ATTRS, m_situationAttrList.size());
+       UINT32 id = VID_SITUATION_ATTR_LIST_BASE;
+   for(int i = 0; i < m_situationAttrList.size(); i++)
        {
                pMsg->SetVariable(id++, m_situationAttrList.getKeyByIndex(i));
                pMsg->SetVariable(id++, m_situationAttrList.getValueByIndex(i));
index 92ef8df..3fa9b8a 100644 (file)
@@ -527,7 +527,7 @@ TCHAR *Event::expandText(Event *event, UINT32 sourceObject, const TCHAR *textTem
                                                        {
                                                                scriptName[i] = 0;
                                                                StrStrip(scriptName);
-                                                               int index = event->m_parameterNames.getIndexIgnoreCase(scriptName);
+                                                               int index = event->m_parameterNames.indexOfIgnoreCase(scriptName);
                                                                if (index != -1)
                                                                {
                                                                        const TCHAR *temp = (TCHAR *)event->m_parameters.get(index);
@@ -590,7 +590,7 @@ void Event::addParameter(const TCHAR *name, const TCHAR *value)
  */
 void Event::setNamedParameter(const TCHAR *name, const TCHAR *value)
 {
-       int index = m_parameterNames.getIndexIgnoreCase(name);
+       int index = m_parameterNames.indexOfIgnoreCase(name);
        if (index != -1)
        {
                m_parameters.replace(index, _tcsdup(value));
index 97b0c31..0e29711 100644 (file)
@@ -345,7 +345,7 @@ ForwardingDatabase *GetSwitchForwardingDatabase(Node *node)
                VlanList *vlans = node->getVlans();
                if (vlans != NULL)
                {
-                       for(int i = 0; i < vlans->getSize(); i++)
+                       for(int i = 0; i < vlans->size(); i++)
                        {
                                TCHAR context[16];
                                _sntprintf(context, 16, _T("%s%d"), (node->getSNMPVersion() < SNMP_VERSION_3) ? _T("") : _T("vlan-"), vlans->get(i)->getVlanId());
index 759bedd..a7b79f3 100644 (file)
@@ -163,12 +163,12 @@ NetObj *ObjectIndex::get(QWORD key)
 /**
  * Get index size
  */
-int ObjectIndex::getSize()
+int ObjectIndex::size()
 {
        RWLockReadLock(m_lock, INFINITE);
-       int size = m_size;
+       int s = m_size;
        RWLockUnlock(m_lock);
-       return size;
+       return s;
 }
 
 /**
index 91fd8e0..2f9abf6 100644 (file)
@@ -36,7 +36,7 @@ void BuildL2Topology(nxmap_ObjList &topology, Node *root, int nDepth, bool inclu
        if (nbs == NULL)
                return;
 
-       for(int i = 0; i < nbs->getSize(); i++)
+       for(int i = 0; i < nbs->size(); i++)
        {
                LL_NEIGHBOR_INFO *info = nbs->getConnection(i);
                if (info != NULL)
index b0f0734..7a26048 100644 (file)
@@ -410,7 +410,7 @@ TCHAR *LDAPConnection::getAttrValue(LDAPMessage *entry, const char *attr, UINT32
  */
 void LDAPConnection::compareUserLists(StringObjectMap<Entry> *userEntryList)
 {
-   for(UINT32 i = 0; i < userEntryList->getSize(); i++)
+   for(int i = 0; i < userEntryList->size(); i++)
    {
       UpdateLDAPUsers(userEntryList->getKeyByIndex(i), userEntryList->getValueByIndex(i));
    }
@@ -422,7 +422,7 @@ void LDAPConnection::compareUserLists(StringObjectMap<Entry> *userEntryList)
  */
 void LDAPConnection::compareGroupList(StringObjectMap<Entry> *groupEntryList)
 {
-   for(UINT32 i = 0; i < groupEntryList->getSize(); i++)
+   for(int i = 0; i < groupEntryList->size(); i++)
    {
       UpdateLDAPGroups(groupEntryList->getKeyByIndex(i), groupEntryList->getValueByIndex(i));
    }
index ecdbd89..781e010 100644 (file)
@@ -1456,7 +1456,7 @@ int ProcessConsoleCommand(const TCHAR *pszCmdLine, CONSOLE_CTX pCtx)
                                                {
                                                        ConsolePrintf(pCtx, _T("\x1b[1mVLAN\x1b[0m | \x1b[1mName\x1b[0m             | \x1b[1mPorts\x1b[0m\n")
                                                                                 _T("-----+------------------+-----------------------------------------------------------------\n"));
-                                                       for(int i = 0; i < vlans->getSize(); i++)
+                                                       for(int i = 0; i < vlans->size(); i++)
                                                        {
                                                                VlanInfo *vlan = vlans->get(i);
                                                                ConsolePrintf(pCtx, _T("%4d | %-16s |"), vlan->getVlanId(), vlan->getName());
index c12e3ea..53770fb 100644 (file)
@@ -144,9 +144,9 @@ void MappingTable::fillMessage(CSCPMessage *msg)
        msg->SetVariable(VID_FLAGS, m_flags);
        msg->SetVariable(VID_DESCRIPTION, CHECK_NULL_EX(m_description));
        
-       msg->SetVariable(VID_NUM_ELEMENTS, m_data->getSize());
+       msg->SetVariable(VID_NUM_ELEMENTS, (UINT32)m_data->size());
        UINT32 varId = VID_ELEMENT_LIST_BASE;
-       for(UINT32 i = 0; i < m_data->getSize(); i++)
+       for(int i = 0; i < m_data->size(); i++)
        {
                msg->SetVariable(varId++, m_data->getKeyByIndex(i));
                MappingTableElement *e = m_data->getValueByIndex(i);
@@ -203,7 +203,7 @@ bool MappingTable::saveToDatabase()
        if (hStmt == NULL)
                goto failure2;
 
-       for(UINT32 i = 0; i < m_data->getSize(); i++)
+       for(int i = 0; i < m_data->size(); i++)
        {
                MappingTableElement *e = m_data->getValueByIndex(i);
                DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, m_id);
index 8d9d1bd..0495ce4 100644 (file)
@@ -129,7 +129,7 @@ bool NetObj::deleteFromDB(DB_HANDLE hdb)
    // Delete module data
    if (success && (m_moduleData != NULL))
    {
-      for(UINT32 i = 0; (i < m_moduleData->getSize()) && success; i++)
+      for(UINT32 i = 0; (i < m_moduleData->size()) && success; i++)
          success = m_moduleData->getValueByIndex(i)->deleteFromDatabase(hdb, m_dwId);
    }
 
@@ -330,7 +330,7 @@ bool NetObj::saveCommonProperties(DB_HANDLE hdb)
                        hStmt = DBPrepare(hdb, _T("INSERT INTO object_custom_attributes (object_id,attr_name,attr_value) VALUES (?,?,?)"));
                        if (hStmt != NULL)
                        {
-                               for(UINT32 i = 0; i < m_customAttributes.getSize(); i++)
+                               for(UINT32 i = 0; i < m_customAttributes.size(); i++)
                                {
                                        DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, m_dwId);
                                        DBBind(hStmt, 2, DB_SQLTYPE_VARCHAR, m_customAttributes.getKeyByIndex(i), DB_BIND_STATIC);
@@ -351,7 +351,7 @@ bool NetObj::saveCommonProperties(DB_HANDLE hdb)
    // Save module data
    if (success && (m_moduleData != NULL))
    {
-      for(UINT32 i = 0; (i < m_moduleData->getSize()) && success; i++)
+      for(UINT32 i = 0; (i < m_moduleData->size()) && success; i++)
          success = m_moduleData->getValueByIndex(i)->saveToDatabase(hdb, m_dwId);
    }
 
@@ -871,8 +871,8 @@ void NetObj::CreateMessage(CSCPMessage *pMsg)
        if (m_dwNumTrustedNodes > 0)
                pMsg->setFieldInt32Array(VID_TRUSTED_NODES, m_dwNumTrustedNodes, m_pdwTrustedNodes);
 
-       pMsg->SetVariable(VID_NUM_CUSTOM_ATTRIBUTES, m_customAttributes.getSize());
-       for(i = 0, dwId = VID_CUSTOM_ATTRIBUTES_BASE; i < m_customAttributes.getSize(); i++)
+       pMsg->SetVariable(VID_NUM_CUSTOM_ATTRIBUTES, m_customAttributes.size());
+       for(i = 0, dwId = VID_CUSTOM_ATTRIBUTES_BASE; i < m_customAttributes.size(); i++)
        {
                pMsg->SetVariable(dwId++, m_customAttributes.getKeyByIndex(i));
                pMsg->SetVariable(dwId++, m_customAttributes.getValueByIndex(i));
@@ -883,8 +883,8 @@ void NetObj::CreateMessage(CSCPMessage *pMsg)
 
    if (m_moduleData != NULL)
    {
-      pMsg->SetVariable(VID_MODULE_DATA_COUNT, (UINT16)m_moduleData->getSize());
-      for(i = 0, dwId = VID_MODULE_DATA_BASE; i < m_moduleData->getSize(); i++, dwId += 0x100000)
+      pMsg->SetVariable(VID_MODULE_DATA_COUNT, (UINT16)m_moduleData->size());
+      for(i = 0, dwId = VID_MODULE_DATA_BASE; i < m_moduleData->size(); i++, dwId += 0x100000)
       {
          pMsg->SetVariable(dwId, m_moduleData->getKeyByIndex(i));
          ModuleData *d = m_moduleData->getValueByIndex(i);
index fa7814b..5b19d12 100644 (file)
@@ -604,9 +604,9 @@ void Node::addVrrpInterfaces(InterfaceList *ifList)
        LockData();
        if (m_vrrpInfo != NULL)
        {
-               DbgPrintf(6, _T("Node::addVrrpInterfaces(node=%s [%d]): m_vrrpInfo->getSize()=%d"), m_szName, (int)m_dwId, m_vrrpInfo->getSize());
+               DbgPrintf(6, _T("Node::addVrrpInterfaces(node=%s [%d]): m_vrrpInfo->size()=%d"), m_szName, (int)m_dwId, m_vrrpInfo->size());
 
-               for(i = 0; i < m_vrrpInfo->getSize(); i++)
+               for(i = 0; i < m_vrrpInfo->size(); i++)
                {
                        VrrpRouter *router = m_vrrpInfo->getRouter(i);
                        DbgPrintf(6, _T("Node::addVrrpInterfaces(node=%s [%d]): vrouter %d state=%d"), m_szName, (int)m_dwId, i, router->getState());
@@ -615,7 +615,7 @@ void Node::addVrrpInterfaces(InterfaceList *ifList)
 
                        // Get netmask for this VR
                        UINT32 netmask = 0;
-                       for(j = 0; j < ifList->getSize(); j++)
+                       for(j = 0; j < ifList->size(); j++)
                                if (ifList->get(j)->dwIndex == router->getIfIndex())
                                {
                                        netmask = ifList->get(j)->dwIpNetMask;
@@ -629,10 +629,10 @@ void Node::addVrrpInterfaces(InterfaceList *ifList)
                                DbgPrintf(6, _T("Node::addVrrpInterfaces(node=%s [%d]): checking VIP %s@%d"), m_szName, (int)m_dwId, IpToStr(vip, buffer), i);
                                if (vip != 0)
                                {
-                                       for(k = 0; k < ifList->getSize(); k++)
+                                       for(k = 0; k < ifList->size(); k++)
                                                if (ifList->get(k)->dwIpAddr == vip)
                                                        break;
-                                       if (k == ifList->getSize())
+                                       if (k == ifList->size())
                                        {
                                                NX_INTERFACE_INFO iface;
                                                memset(&iface, 0, sizeof(NX_INTERFACE_INFO));
@@ -1633,7 +1633,7 @@ void Node::checkAgentPolicyBinding(AgentConnection *conn)
        if (rcc == ERR_SUCCESS)
        {
                // Check for unbound but installed policies
-               for(int i = 0; i < ap->getSize(); i++)
+               for(int i = 0; i < ap->size(); i++)
                {
                        uuid_t guid;
                        ap->getGuid(i, guid);
@@ -1658,13 +1658,13 @@ void Node::checkAgentPolicyBinding(AgentConnection *conn)
                                int j;
 
                                m_pParentList[i]->getGuid(guid1);
-                               for(j = 0; j < ap->getSize(); j++)
+                               for(j = 0; j < ap->size(); j++)
                                {
                                        ap->getGuid(j, guid2);
                                        if (!uuid_compare(guid1, guid2))
                                                break;
                                }
-                               if (j == ap->getSize())
+                               if (j == ap->size())
                                        unbindList[unbindListSize++] = m_pParentList[i];
                        }
                }
@@ -2538,11 +2538,11 @@ BOOL Node::updateInterfaceConfiguration(UINT32 dwRqId, UINT32 dwNetMask)
    pIfList = getInterfaceList();
    if (pIfList != NULL)
    {
-               DbgPrintf(6, _T("Node::updateInterfaceConfiguration(%s [%u]): got %d interfaces"), m_szName, m_dwId, pIfList->getSize());
+               DbgPrintf(6, _T("Node::updateInterfaceConfiguration(%s [%u]): got %d interfaces"), m_szName, m_dwId, pIfList->size());
                // Remove cluster virtual interfaces from list
                if (pCluster != NULL)
                {
-                       for(i = 0; i < pIfList->getSize(); i++)
+                       for(i = 0; i < pIfList->size(); i++)
                        {
                                if (pCluster->isVirtualAddr(pIfList->get(i)->dwIpAddr))
                                {
@@ -2562,14 +2562,14 @@ BOOL Node::updateInterfaceConfiguration(UINT32 dwRqId, UINT32 dwNetMask)
             Interface *pInterface = (Interface *)m_pChildList[i];
                                if (!pInterface->isManuallyCreated())
                                {
-                                       for(j = 0; j < pIfList->getSize(); j++)
+                                       for(j = 0; j < pIfList->size(); j++)
                                        {
                                                if ((pIfList->get(j)->dwIndex == pInterface->getIfIndex()) &&
                                                         (pIfList->get(j)->dwIpAddr == pInterface->IpAddr()))
                                                        break;
                                        }
 
-                                       if (j == pIfList->getSize())
+                                       if (j == pIfList->size())
                                        {
                                                // No such interface in current configuration, add it to delete list
                                                ppDeleteList[iDelCount++] = pInterface;
@@ -2595,7 +2595,7 @@ BOOL Node::updateInterfaceConfiguration(UINT32 dwRqId, UINT32 dwNetMask)
       safe_free(ppDeleteList);
 
       // Add new interfaces and check configuration of existing
-      for(j = 0; j < pIfList->getSize(); j++)
+      for(j = 0; j < pIfList->size(); j++)
       {
                        NX_INTERFACE_INFO *ifInfo = pIfList->get(j);
          BOOL bNewInterface = TRUE;
@@ -2893,10 +2893,10 @@ void Node::doInstanceDiscovery()
                DCItem *dci = rootItems.get(i);
                DbgPrintf(5, _T("Node::doInstanceDiscovery(%s [%u]): Updating instances for instance discovery DCI %s [%d]"),
                          m_szName, m_dwId, dci->getName(), dci->getId());
-               StringList *instances = getInstanceList(dci);
+               StringMap *instances = getInstanceList(dci);
                if (instances != NULL)
                {
-                       DbgPrintf(5, _T("Node::doInstanceDiscovery(%s [%u]): read %d values"), m_szName, m_dwId, instances->getSize());
+                       DbgPrintf(5, _T("Node::doInstanceDiscovery(%s [%u]): read %d values"), m_szName, m_dwId, instances->size());
                        dci->filterInstanceList(instances);
                        updateInstances(dci, instances);
                        delete instances;
@@ -2913,7 +2913,7 @@ void Node::doInstanceDiscovery()
 /**
  * Get instances for instance discovery DCI
  */
-StringList *Node::getInstanceList(DCItem *dci)
+StringMap *Node::getInstanceList(DCItem *dci)
 {
        if (dci->getInstanceDiscoveryData() == NULL)
                return NULL;
@@ -2955,13 +2955,20 @@ StringList *Node::getInstanceList(DCItem *dci)
                        instances = NULL;
                        break;
        }
-       return instances;
+   if (instances == NULL)
+      return NULL;
+
+   StringMap *instanceMap = new StringMap;
+   for(int i = 0; i < instances->size(); i++)
+      instanceMap->set(instances->get(i), instances->get(i));
+   delete instances;
+       return instanceMap;
 }
 
 /**
  * Update instance DCIs created from instance discovery DCI
  */
-void Node::updateInstances(DCItem *root, StringList *instances)
+void Node::updateInstances(DCItem *root, StringMap *instances)
 {
    lockDciAccess(true);
 
@@ -2976,16 +2983,16 @@ void Node::updateInstances(DCItem *root, StringList *instances)
                        continue;
 
                int j;
-               for(j = 0; j < instances->getSize(); j++)
-                       if (!_tcscmp(((DCItem *)object)->getInstance(), instances->getValue(j)))
+               for(j = 0; j < instances->size(); j++)
+         if (!_tcscmp(((DCItem *)object)->getInstanceDiscoveryData(), instances->getKeyByIndex(j)))
                                break;
 
-               if (j < instances->getSize())
+               if (j < instances->size())
                {
                        // found, remove value from instances
                        DbgPrintf(5, _T("Node::updateInstances(%s [%u], %s [%u]): instance \"%s\" found"),
-                                 m_szName, m_dwId, root->getName(), root->getId(), instances->getValue(j));
-                       instances->remove(j);
+                                 m_szName, m_dwId, root->getName(), root->getId(), instances->getKeyByIndex(j));
+                       instances->remove(instances->getKeyByIndex(j));
                }
                else
                {
@@ -3000,18 +3007,18 @@ void Node::updateInstances(DCItem *root, StringList *instances)
                deleteDCObject(deleteList.get(i), false);
 
        // Create new instances
-       for(int i = 0; i < instances->getSize(); i++)
+       for(int i = 0; i < instances->size(); i++)
        {
                DbgPrintf(5, _T("Node::updateInstances(%s [%u], %s [%u]): creating new DCI for instance \"%s\""),
-                         m_szName, m_dwId, root->getName(), root->getId(), instances->getValue(i));
+                         m_szName, m_dwId, root->getName(), root->getId(), instances->getKeyByIndex(i));
 
                DCItem *dci = new DCItem(root);
                dci->setTemplateId(m_dwId, root->getId());
-               dci->setInstance(instances->getValue(i));
+               dci->setInstance(instances->getValueByIndex(i));
                dci->setInstanceDiscoveryMethod(IDM_NONE);
-               dci->setInstanceDiscoveryData(NULL);
+               dci->setInstanceDiscoveryData(instances->getKeyByIndex(i));
                dci->setInstanceFilter(NULL);
-               dci->expandInstance();
+      dci->expandInstance();
                dci->changeBinding(CreateUniqueId(IDG_ITEM), this, FALSE);
                addDCObject(dci, true);
        }
@@ -3839,7 +3846,7 @@ void Node::CreateMessage(CSCPMessage *pMsg)
        if (m_vrrpInfo != NULL)
        {
                pMsg->SetVariable(VID_VRRP_VERSION, (WORD)m_vrrpInfo->getVersion());
-               pMsg->SetVariable(VID_VRRP_VR_COUNT, (WORD)m_vrrpInfo->getSize());
+               pMsg->SetVariable(VID_VRRP_VR_COUNT, (WORD)m_vrrpInfo->size());
        }
        if (m_driver != NULL)
        {
@@ -4774,7 +4781,7 @@ BOOL Node::checkSNMPIntegerValue(SNMP_Transport *pTransport, const TCHAR *pszOID
 void Node::checkInterfaceNames(InterfaceList *pIfList)
 {
    // Cut interface names to MAX_OBJECT_NAME and check for unnamed interfaces
-   for(int i = 0; i < pIfList->getSize(); i++)
+   for(int i = 0; i < pIfList->size(); i++)
    {
       pIfList->get(i)->szName[MAX_OBJECT_NAME - 1] = 0;
       if (pIfList->get(i)->szName[0] == 0)
@@ -5193,8 +5200,8 @@ void Node::topologyPoll(ClientSession *pSession, UINT32 dwRqId, int nPoller)
        LinkLayerNeighbors *nbs = BuildLinkLayerNeighborList(this);
        if (nbs != NULL)
        {
-               sendPollerMsg(dwRqId, POLLER_INFO _T("Link layer topology retrieved (%d connections found)\r\n"), nbs->getSize());
-               DbgPrintf(4, _T("Link layer topology retrieved for node %s [%d] (%d connections found)"), m_szName, (int)m_dwId, nbs->getSize());
+               sendPollerMsg(dwRqId, POLLER_INFO _T("Link layer topology retrieved (%d connections found)\r\n"), nbs->size());
+               DbgPrintf(4, _T("Link layer topology retrieved for node %s [%d] (%d connections found)"), m_szName, (int)m_dwId, nbs->size());
 
                MutexLock(m_mutexTopoAccess);
                if (m_linkLayerNeighbors != NULL)
@@ -5204,7 +5211,7 @@ void Node::topologyPoll(ClientSession *pSession, UINT32 dwRqId, int nPoller)
 
                // Walk through interfaces and update peers
           sendPollerMsg(dwRqId, _T("Updating peer information on interfaces\r\n"));
-               for(int i = 0; i < nbs->getSize(); i++)
+               for(int i = 0; i < nbs->size(); i++)
                {
                        LL_NEIGHBOR_INFO *ni = nbs->getConnection(i);
                        NetObj *object = FindObjectById(ni->objectId);
@@ -5266,7 +5273,7 @@ void Node::topologyPoll(ClientSession *pSession, UINT32 dwRqId, int nPoller)
          {
             bool nodeFound = false;
             bool ifaceFound = false;
-                     for(int i = 0; i < nbs->getSize(); i++)
+                     for(int i = 0; i < nbs->size(); i++)
                      {
                              LL_NEIGHBOR_INFO *ni = nbs->getConnection(i);
                if (ni->objectId == iface->getPeerNodeId())
@@ -5457,7 +5464,7 @@ void Node::addExistingConnections(LinkLayerNeighbors *nbs)
  */
 void Node::resolveVlanPorts(VlanList *vlanList)
 {
-       for(int i = 0; i < vlanList->getSize(); i++)
+       for(int i = 0; i < vlanList->size(); i++)
        {
                VlanInfo *vlan = vlanList->get(i);
                vlan->prepareForResolve();
@@ -5533,7 +5540,7 @@ void Node::checkSubnetBinding(InterfaceList *pIfList)
 
           // Check if we have subnet bindings for all interfaces
           DbgPrintf(5, _T("Checking subnet bindings for node %s [%d]"), m_szName, m_dwId);
-          for(int i = 0; i < pIfList->getSize(); i++)
+          for(int i = 0; i < pIfList->size(); i++)
           {
                   NX_INTERFACE_INFO *iface = pIfList->get(i);
                   if (iface->dwIpAddr != 0)
@@ -5688,7 +5695,7 @@ void Node::updateInterfaceNames(ClientSession *pSession, UINT32 dwRqId)
    if (pIfList != NULL)
    {
       // Check names of existing interfaces
-      for(j = 0; j < pIfList->getSize(); j++)
+      for(j = 0; j < pIfList->size(); j++)
       {
          LockChildList(FALSE);
          for(i = 0; i < m_dwChildCount; i++)
index e25d132..5acfe42 100644 (file)
@@ -152,7 +152,7 @@ void CheckForMgmtNode()
    pIfList = GetLocalInterfaceList();
    if (pIfList != NULL)
    {
-      for(i = 0; i < pIfList->getSize(); i++)
+      for(i = 0; i < pIfList->size(); i++)
       {
          NX_INTERFACE_INFO *iface = pIfList->get(i);
          if ((iface->dwType == IFTYPE_SOFTWARE_LOOPBACK) || ((iface->dwIpAddr & 0xFF000000) == 0x7F000000) || (iface->dwIpAddr == 0))
@@ -169,10 +169,10 @@ void CheckForMgmtNode()
             break;
          }
       }
-      if (i == pIfList->getSize())   // No such node
+      if (i == pIfList->size())   // No such node
       {
          // Find interface with IP address
-         for(i = 0; i < pIfList->getSize(); i++)
+         for(i = 0; i < pIfList->size(); i++)
          {
             NX_INTERFACE_INFO *iface = pIfList->get(i);
             if ((iface->dwType != IFTYPE_SOFTWARE_LOOPBACK) && ((iface->dwIpAddr & 0xFF000000) != 0x7F000000) && (iface->dwIpAddr != 0))
index 77a2544..3956f36 100644 (file)
@@ -325,7 +325,7 @@ ClientSession::~ClientSession()
                free(m_console);
        }
    m_musicTypeList.clear();
-   if(m_agentConn.getSize() > 0)
+   if (m_agentConn.size() > 0)
    {
       m_agentConn.forEach(&DeleteCallback, NULL);
    }
@@ -4035,7 +4035,10 @@ void ClientSession::getLastValues(CSCPMessage *pRequest)
          if ((object->Type() == OBJECT_NODE) || (object->Type() == OBJECT_MOBILEDEVICE) ||
              (object->Type() == OBJECT_TEMPLATE) || (object->Type() == OBJECT_CLUSTER))
          {
-            msg.SetVariable(VID_RCC, ((Template *)object)->getLastValues(&msg, pRequest->GetVariableShort(VID_OBJECT_TOOLTIP_ONLY) ? true : false));
+            msg.SetVariable(VID_RCC, 
+               ((Template *)object)->getLastValues(&msg, 
+                  pRequest->getFieldAsBoolean(VID_OBJECT_TOOLTIP_ONLY),
+                  pRequest->getFieldAsBoolean(VID_INCLUDE_NOVALUE_OBJECTS)));
          }
          else
          {
@@ -7812,8 +7815,8 @@ void ClientSession::sendServerStats(UINT32 dwRqId)
        UINT32 dciCount = 0;
        g_idxNodeById.forEach(DciCountCallback, &dciCount);
    msg.SetVariable(VID_NUM_ITEMS, dciCount);
-       msg.SetVariable(VID_NUM_OBJECTS, (UINT32)g_idxObjectById.getSize());
-       msg.SetVariable(VID_NUM_NODES, (UINT32)g_idxNodeById.getSize());
+       msg.SetVariable(VID_NUM_OBJECTS, (UINT32)g_idxObjectById.size());
+       msg.SetVariable(VID_NUM_NODES, (UINT32)g_idxNodeById.size());
 
    // Client sessions
    msg.SetVariable(VID_NUM_SESSIONS, (UINT32)GetSessionCount());
@@ -10658,13 +10661,13 @@ void ClientSession::getServerFile(CSCPMessage *pRequest)
    msg.SetCode(CMD_REQUEST_COMPLETED);
    msg.SetId(pRequest->GetId());
    pRequest->GetVariableStr(VID_FILE_NAME, name, MAX_PATH);
-   for(int i = 0; i < m_musicTypeList.getSize(); i++)
+   for(int i = 0; i < m_musicTypeList.size(); i++)
    {
       TCHAR *extension = _tcsrchr(name, _T('.'));
       if (extension != NULL)
       {
          extension++;
-         if(!_tcscmp(extension, m_musicTypeList.getValue(i)))
+         if(!_tcscmp(extension, m_musicTypeList.get(i)))
          {
             musicFile = true;
             break;
@@ -12073,9 +12076,9 @@ void ClientSession::listServerFileStore(CSCPMessage *request)
        for(int i = 0; i < length; i++)
    {
       extensionList.add(request->GetVariableStr(varId++));
-      for(int j = 0; j < m_musicTypeList.getSize(); j++)
+      for(int j = 0; j < m_musicTypeList.size(); j++)
       {
-         if(_tcscmp(extensionList.getValue(i), m_musicTypeList.getValue(j)))
+         if(_tcscmp(extensionList.get(i), m_musicTypeList.get(j)))
          {
             musicFiles = false;
          }
@@ -12110,9 +12113,9 @@ void ClientSession::listServerFileStore(CSCPMessage *request)
                   if (extension != NULL)
                   {
                      extension++;
-                     for(int j = 0; j < extensionList.getSize(); j++)
+                     for(int j = 0; j < extensionList.size(); j++)
                      {
-                        if (!_tcscmp(extension, extensionList.getValue(j)))
+                        if (!_tcscmp(extension, extensionList.get(j)))
                         {
                            correctType = true;
                            break;
index aea52a8..138e045 100644 (file)
@@ -98,11 +98,11 @@ const TCHAR *SituationInstance::GetAttribute(const TCHAR *attribute)
  */
 UINT32 SituationInstance::CreateMessage(CSCPMessage *msg, UINT32 baseId)
 {
-       UINT32 i, id = baseId;
+       UINT32 id = baseId;
        
        msg->SetVariable(id++, m_name);
-       msg->SetVariable(id++, m_attributes.getSize());
-       for(i = 0; i < m_attributes.getSize(); i++)
+       msg->SetVariable(id++, (UINT32)m_attributes.size());
+       for(int i = 0; i < m_attributes.size(); i++)
        {
                msg->SetVariable(id++, m_attributes.getKeyByIndex(i));
                msg->SetVariable(id++, m_attributes.getValueByIndex(i));
@@ -123,12 +123,10 @@ Situation::Situation(const TCHAR *name)
        m_accessMutex = MutexCreate();
 }
 
-
-//
-// Situation constructor for loading from database
-// Expected field order: id,name,comments
-//
-
+/**
+ * Situation constructor for loading from database
+ * Expected field order: id,name,comments
+ */
 Situation::Situation(DB_RESULT handle, int row)
 {
        m_id = DBGetFieldULong(handle, row, 0);
index cec56b9..c8f13d6 100644 (file)
@@ -204,9 +204,9 @@ static SNMP_SecurityContext *SnmpCheckV3CommSettings(SNMP_Transport *pTransport,
                DbgPrintf(5, _T("SnmpCheckV3CommSettings: trying %hs/%d:%d"), originalContext->getUser(),
                          originalContext->getAuthMethod(), originalContext->getPrivMethod());
                pTransport->setSecurityContext(new SNMP_SecurityContext(originalContext));
-      for(int i = 0; i < testOids->getSize(); i++)
+      for(int i = 0; i < testOids->size(); i++)
       {
-         if (SnmpGet(SNMP_VERSION_3, pTransport, testOids->getValue(i), NULL, 0, buffer, sizeof(buffer), 0) == SNMP_ERR_SUCCESS)
+         if (SnmpGet(SNMP_VERSION_3, pTransport, testOids->get(i), NULL, 0, buffer, sizeof(buffer), 0) == SNMP_ERR_SUCCESS)
          {
                           DbgPrintf(5, _T("SnmpCheckV3CommSettings: success"));
                           return new SNMP_SecurityContext(originalContext);
@@ -232,9 +232,9 @@ static SNMP_SecurityContext *SnmpCheckV3CommSettings(SNMP_Transport *pTransport,
                                                       DBGetFieldLong(hResult, i, 1), DBGetFieldLong(hResult, i, 2));
                        pTransport->setSecurityContext(ctx);
                        DbgPrintf(5, _T("SnmpCheckV3CommSettings: trying %hs/%d:%d"), ctx->getUser(), ctx->getAuthMethod(), ctx->getPrivMethod());
-         for(int j = 0; j < testOids->getSize(); j++)
+         for(int j = 0; j < testOids->size(); j++)
          {
-            if (SnmpGet(SNMP_VERSION_3, pTransport, testOids->getValue(j), NULL, 0, buffer, sizeof(buffer), 0) == SNMP_ERR_SUCCESS)
+            if (SnmpGet(SNMP_VERSION_3, pTransport, testOids->get(j), NULL, 0, buffer, sizeof(buffer), 0) == SNMP_ERR_SUCCESS)
             {
                                   DbgPrintf(5, _T("SnmpCheckV3CommSettings: success"));
                                   goto stop_test;
@@ -285,9 +285,9 @@ restart_check:
        {
                DbgPrintf(5, _T("SnmpCheckCommSettings: trying version %d community '%hs'"), snmpVer, originalContext->getCommunity());
                pTransport->setSecurityContext(new SNMP_SecurityContext(originalContext));
-      for(int i = 0; i < testOids->getSize(); i++)
+      for(int i = 0; i < testOids->size(); i++)
       {
-         if (SnmpGet(snmpVer, pTransport, testOids->getValue(i), NULL, 0, buffer, sizeof(buffer), 0) == SNMP_ERR_SUCCESS)
+         if (SnmpGet(snmpVer, pTransport, testOids->get(i), NULL, 0, buffer, sizeof(buffer), 0) == SNMP_ERR_SUCCESS)
                   {
                           *version = snmpVer;
                           return new SNMP_SecurityContext(originalContext);
@@ -302,9 +302,9 @@ restart_check:
    {
        DbgPrintf(5, _T("SnmpCheckCommSettings: trying version %d community '%hs'"), snmpVer, defCommunity);
           pTransport->setSecurityContext(new SNMP_SecurityContext(defCommunity));
-      for(int i = 0; i < testOids->getSize(); i++)
+      for(int i = 0; i < testOids->size(); i++)
       {
-         if (SnmpGet(snmpVer, pTransport, testOids->getValue(i), NULL, 0, buffer, sizeof(buffer), 0) == SNMP_ERR_SUCCESS)
+         if (SnmpGet(snmpVer, pTransport, testOids->get(i), NULL, 0, buffer, sizeof(buffer), 0) == SNMP_ERR_SUCCESS)
              {
                      *version = snmpVer;
                      return new SNMP_SecurityContext(defCommunity);
@@ -329,9 +329,9 @@ restart_check:
          {
                           DbgPrintf(5, _T("SnmpCheckCommSettings: trying version %d community '%hs'"), snmpVer, temp);
                           pTransport->setSecurityContext(new SNMP_SecurityContext(temp));
-            for(int j = 0; j < testOids->getSize(); j++)
+            for(int j = 0; j < testOids->size(); j++)
             {
-               if (SnmpGet(snmpVer, pTransport, testOids->getValue(j), NULL, 0, buffer, sizeof(buffer), 0) == SNMP_ERR_SUCCESS)
+               if (SnmpGet(snmpVer, pTransport, testOids->get(j), NULL, 0, buffer, sizeof(buffer), 0) == SNMP_ERR_SUCCESS)
                    {
                                   *version = snmpVer;
                   goto stop_test;
index 05c817e..13587ec 100644 (file)
@@ -1067,7 +1067,7 @@ bool Template::isApplicable(Node *node)
  * derived from DataCollectionTarget actual values will always be empty strings
  * with data type DCI_DT_NULL.
  */
-UINT32 Template::getLastValues(CSCPMessage *msg, bool objectTooltipOnly)
+UINT32 Template::getLastValues(CSCPMessage *msg, bool objectTooltipOnly, bool includeNoValueObjects)
 {
    lockDciAccess(false);
 
@@ -1075,7 +1075,7 @@ UINT32 Template::getLastValues(CSCPMessage *msg, bool objectTooltipOnly)
    for(int i = 0; i < m_dcObjects->size(); i++)
        {
                DCObject *object = m_dcObjects->get(i);
-               if (object->hasValue() &&
+               if ((object->hasValue() || includeNoValueObjects) &&
           _tcsnicmp(object->getDescription(), _T("@system."), 8) &&
           (!objectTooltipOnly || object->isShowOnObjectTooltip()))
                {
index f0c813b..2133bfe 100644 (file)
@@ -113,7 +113,7 @@ UINT32 GetLocalIpAddr()
    if (pIfList != NULL)
    {
       // Find first interface with IP address
-      for(i = 0; i < pIfList->getSize(); i++)
+      for(i = 0; i < pIfList->size(); i++)
                        if ((pIfList->get(i)->dwIpAddr != 0) && ((pIfList->get(i)->dwIpAddr & 0xFF000000) != 0x7F000000))
          {
             dwAddr = pIfList->get(i)->dwIpAddr;
index 91d4146..768a0fc 100644 (file)
@@ -666,15 +666,15 @@ void SyncGroupMembers(Group* group, Entry *obj)
     * Go throught existing group member list checking each ldap user by dn
     * with new gotten group member list and removing ldap users not existing in last list.
     */
-   for(i = 0; i <count; i++)
+   for(i = 0; i < count; i++)
    {
       UserDatabaseObject * user = GetUser(oldMembers[i]);
       if(user != NULL && user->isLDAPUser())
       {
          bool found = false;
-         for(j = 0; j < newMembers->getSize(); j++)
+         for(j = 0; j < newMembers->size(); j++)
          {
-            if(!_tcscmp(newMembers->getValue(j), CHECK_NULL_EX(user->getDn())))
+            if(!_tcscmp(newMembers->get(j), CHECK_NULL_EX(user->getDn())))
             {
                found = true;
                break;
@@ -694,9 +694,9 @@ void SyncGroupMembers(Group* group, Entry *obj)
     * Go throught new gotten group member list checking each ldap user by dn
     * with existing group member list and adding users not existing in last list.
     */
-   for(i = 0; i< newMembers->getSize(); i++)
+   for(i = 0; i < newMembers->size(); i++)
    {
-      UserDatabaseObject * userNew = GetUser(newMembers->getValue(i));
+      UserDatabaseObject * userNew = GetUser(newMembers->get(i));
       if(userNew != NULL && userNew->isLDAPUser())
       {
          bool found = false;
@@ -712,7 +712,7 @@ void SyncGroupMembers(Group* group, Entry *obj)
          }
          if(!found)
          {
-            DbgPrintf(4, _T("SyncGroupMembers: %s user added to %s group"), newMembers->getValue(i), group->getDn());
+            DbgPrintf(4, _T("SyncGroupMembers: %s user added to %s group"), newMembers->get(i), group->getDn());
             group->addUser(userNew->getId());
             count = group->getMembers(&oldMembers);
          }
index afa97a3..bf3cd65 100644 (file)
@@ -93,16 +93,15 @@ bool UserDatabaseObject::deleteFromDatabase(DB_HANDLE hdb)
  */
 void UserDatabaseObject::fillMessage(CSCPMessage *msg)
 {
-       UINT32 i, varId;
-
    msg->SetVariable(VID_USER_ID, m_id);
    msg->SetVariable(VID_USER_NAME, m_name);
    msg->SetVariable(VID_USER_FLAGS, (WORD)m_flags);
    msg->SetVariable(VID_USER_SYS_RIGHTS, m_systemRights);
    msg->SetVariable(VID_USER_DESCRIPTION, m_description);
    msg->SetVariable(VID_GUID, m_guid, UUID_LENGTH);
-       msg->SetVariable(VID_NUM_CUSTOM_ATTRIBUTES, m_attributes.getSize());
-       for(i = 0, varId = VID_CUSTOM_ATTRIBUTES_BASE; i < m_attributes.getSize(); i++)
+       msg->SetVariable(VID_NUM_CUSTOM_ATTRIBUTES, m_attributes.size());
+       UINT32 varId = VID_CUSTOM_ATTRIBUTES_BASE;
+       for(int i = 0; i < m_attributes.size(); i++)
        {
                msg->SetVariable(varId++, m_attributes.getKeyByIndex(i));
                msg->SetVariable(varId++, m_attributes.getValueByIndex(i));
@@ -201,7 +200,6 @@ bool UserDatabaseObject::loadCustomAttributes(DB_HANDLE hdb)
 bool UserDatabaseObject::saveCustomAttributes(DB_HANDLE hdb)
 {
        TCHAR query[256];
-       UINT32 i;
        bool success = false;
 
        _sntprintf(query, 256, _T("DELETE FROM userdb_custom_attributes WHERE object_id=%d"), m_id);
@@ -211,14 +209,15 @@ bool UserDatabaseObject::saveCustomAttributes(DB_HANDLE hdb)
       if (hStmt != NULL)
       {
          DBBind(hStmt, 1, DB_SQLTYPE_INTEGER, m_id);
-                  for(i = 0; i < m_attributes.getSize(); i++)
+         int i;
+                  for(i = 0; i < m_attributes.size(); i++)
                   {
             DBBind(hStmt, 2, DB_SQLTYPE_VARCHAR, m_attributes.getKeyByIndex(i), DB_BIND_STATIC);
             DBBind(hStmt, 3, DB_SQLTYPE_VARCHAR, m_attributes.getValueByIndex(i), DB_BIND_STATIC);
                           if (!DBExecute(hStmt))
                                   break;
                   }
-                  success = (i == m_attributes.getSize());
+                  success = (i == m_attributes.size());
          DBFreeStatement(hStmt);
       }
        }
index bb5a9b8..820c3fc 100644 (file)
@@ -72,14 +72,14 @@ bool WinPerfObject::readDataFromAgent(AgentConnection *conn)
 UINT32 WinPerfObject::fillMessage(CSCPMessage *msg, UINT32 baseId)
 {
        msg->SetVariable(baseId, m_name);
-       msg->SetVariable(baseId + 1, (UINT32)m_counters->getSize());
-       msg->SetVariable(baseId + 2, (UINT32)m_instances->getSize());
+       msg->SetVariable(baseId + 1, (UINT32)m_counters->size());
+       msg->SetVariable(baseId + 2, (UINT32)m_instances->size());
 
        UINT32 varId = baseId + 3;
-       for(int i = 0; i < m_counters->getSize(); i++)
-               msg->SetVariable(varId++, m_counters->getValue(i));
-       for(int i = 0; i < m_instances->getSize(); i++)
-               msg->SetVariable(varId++, m_instances->getValue(i));
+       for(int i = 0; i < m_counters->size(); i++)
+               msg->SetVariable(varId++, m_counters->get(i));
+       for(int i = 0; i < m_instances->size(); i++)
+               msg->SetVariable(varId++, m_instances->get(i));
        return varId;
 }
 
index 7b14605..e5b223e 100644 (file)
@@ -104,7 +104,7 @@ InterfaceList *AlliedTelesisDriver::getInterfaces(SNMP_Transport *snmp, StringMa
       bool isGS950 = attributes->getBoolean(_T(".alliedTelesis.isGS950"), false);
 
       // Find physical ports
-      for(int i = 0; i < ifList->getSize(); i++)
+      for(int i = 0; i < ifList->size(); i++)
       {
          NX_INTERFACE_INFO *iface = ifList->get(i);
          if (isGS950)
@@ -217,7 +217,7 @@ static void ParsePortList(TCHAR *ports, VlanInfo *vlan, UINT32 slot)
 VlanList *AlliedTelesisDriver::getVlans(SNMP_Transport *snmp, StringMap *attributes, DriverData *driverData)
 {
    VlanList *list = NetworkDeviceDriver::getVlans(snmp, attributes, driverData);
-   if ((list != NULL) && (list->getSize() > 0))
+   if ((list != NULL) && (list->size() > 0))
       return list;   // retrieved from standard MIBs
 
    if (list == NULL)
@@ -226,7 +226,7 @@ VlanList *AlliedTelesisDriver::getVlans(SNMP_Transport *snmp, StringMap *attribu
    if (SnmpWalk(snmp->getSnmpVersion(), snmp, _T(".1.3.6.1.4.1.207.8.33.8.1.1.2"), HandlerVlanList, list, FALSE) != SNMP_ERR_SUCCESS)
                goto failure;
 
-   for(int i = 0; i < list->getSize(); i++)
+   for(int i = 0; i < list->size(); i++)
    {
       VlanInfo *vlan = list->get(i);
 
index 425b9ec..7639434 100644 (file)
@@ -132,7 +132,7 @@ InterfaceList *BayStackDriver::getInterfaces(SNMP_Transport *snmp, StringMap *at
 
    // Translate interface names 
        // TODO: does it really needed?
-   for(int i = 0; i < ifList->getSize(); i++)
+   for(int i = 0; i < ifList->size(); i++)
    {
                NX_INTERFACE_INFO *iface = ifList->get(i);
 
@@ -164,7 +164,7 @@ InterfaceList *BayStackDriver::getInterfaces(SNMP_Transport *snmp, StringMap *at
        
        // Calculate slot/port pair from ifIndex
        UINT32 slotSize = attributes->getULong(_T(".baystack.slotSize"), 64);
-       for(int i = 0; i < ifList->getSize(); i++)
+       for(int i = 0; i < ifList->size(); i++)
        {
                UINT32 slot = ifList->get(i)->dwIndex / slotSize + 1;
                if ((slot > 0) && (slot <= 8))
@@ -191,10 +191,10 @@ InterfaceList *BayStackDriver::getInterfaces(SNMP_Transport *snmp, StringMap *at
                        int i;
 
                        // Add management virtual interface if management IP is missing in interface list
-                       for(i = 0; i < ifList->getSize(); i++)
+                       for(i = 0; i < ifList->size(); i++)
                                if (ifList->get(i)->dwIpAddr == mgmtIpAddr)
                                        break;
-                       if (i == ifList->getSize())
+                       if (i == ifList->size())
                        {
                                NX_INTERFACE_INFO iface;
 
@@ -209,7 +209,7 @@ InterfaceList *BayStackDriver::getInterfaces(SNMP_Transport *snmp, StringMap *at
                }
 
                // Update wrongly reported MAC addresses
-               for(int i = 0; i < ifList->getSize(); i++)
+               for(int i = 0; i < ifList->size(); i++)
                {
                        NX_INTERFACE_INFO *curr = ifList->get(i);
                        if ((curr->dwSlotNumber != 0) &&
index 0d21488..232d718 100644 (file)
@@ -84,7 +84,7 @@ InterfaceList *CiscoEswDriver::getInterfaces(SNMP_Transport *snmp, StringMap *at
                return NULL;
 
        // Find physical ports
-       for(int i = 0; i < ifList->getSize(); i++)
+       for(int i = 0; i < ifList->size(); i++)
        {
                NX_INTERFACE_INFO *iface = ifList->get(i);
                if ((iface->dwType == IFTYPE_ETHERNET_CSMACD) && (iface->dwIndex <= 48))
index 5496373..8fded94 100644 (file)
@@ -86,7 +86,7 @@ InterfaceList *CiscoSbDriver::getInterfaces(SNMP_Transport *snmp, StringMap *att
 
    // Check if there are indexes below 49
    bool highBase = true;
-       for(int i = 0; i < ifList->getSize(); i++)
+       for(int i = 0; i < ifList->size(); i++)
    {
       if (ifList->get(i)->dwIndex < 49)
       {
@@ -96,7 +96,7 @@ InterfaceList *CiscoSbDriver::getInterfaces(SNMP_Transport *snmp, StringMap *att
    }
 
        // Find physical ports
-       for(int i = 0; i < ifList->getSize(); i++)
+       for(int i = 0; i < ifList->size(); i++)
        {
                NX_INTERFACE_INFO *iface = ifList->get(i);
                if (iface->dwIndex < 1000)
index ab3d992..a37555e 100644 (file)
@@ -93,7 +93,7 @@ InterfaceList *PowerConnectDriver::getInterfaces(SNMP_Transport *snmp, StringMap
        UINT32 slotSize = attributes->getULong(_T(".powerConnect.slotSize"), 52);
 
        // Find physical ports
-       for(int i = 0; i < ifList->getSize(); i++)
+       for(int i = 0; i < ifList->size(); i++)
        {
                NX_INTERFACE_INFO *iface = ifList->get(i);
                if (iface->dwType == IFTYPE_ETHERNET_CSMACD)
index 4b8f937..0bf0f31 100644 (file)
@@ -93,7 +93,7 @@ InterfaceList *DLinkDriver::getInterfaces(SNMP_Transport *snmp, StringMap *attri
        UINT32 slotSize = attributes->getULong(_T(".dlink.slotSize"), 48);
 
        // Find physical ports
-       for(int i = 0; i < ifList->getSize(); i++)
+       for(int i = 0; i < ifList->size(); i++)
        {
                NX_INTERFACE_INFO *iface = ifList->get(i);
                if (iface->dwIndex < 1024)
index 138bdb4..4d3861c 100644 (file)
@@ -111,7 +111,7 @@ InterfaceList *PassportDriver::getInterfaces(SNMP_Transport *snmp, StringMap *at
        bool is1600Series = attributes->getBoolean(_T(".rapidCity.is1600"), false);
        
        // Calculate slot/port pair from ifIndex
-       for(int i = 0; i < ifList->getSize(); i++)
+       for(int i = 0; i < ifList->size(); i++)
        {
                UINT32 slot = ifList->get(i)->dwIndex / 64;
 
index f39dfc9..923ac58 100644 (file)
@@ -82,7 +82,7 @@ InterfaceList *MikrotikDriver::getInterfaces(SNMP_Transport *snmp, StringMap *at
        if (ifList == NULL)
                return NULL;
 
-   for(int i = 0; i < ifList->getSize(); i++)
+   for(int i = 0; i < ifList->size(); i++)
    {
       NX_INTERFACE_INFO *iface = ifList->get(i);
       if (iface->dwType == IFTYPE_ETHERNET_CSMACD)
index 5ea5920..eba1cb7 100644 (file)
@@ -88,7 +88,7 @@ static UINT32 HandlerIfList(UINT32 snmpVersion, SNMP_Variable *varbind, SNMP_Tra
 {
        InterfaceList *ifList = (InterfaceList *)arg;
 
-   UINT32 nameLen = varbind->getName()->getLength();
+   size_t nameLen = varbind->getName()->getLength();
        UINT32 oidName[MAX_OID_LEN];
        memcpy(oidName, varbind->getName()->getValue(), nameLen * sizeof(UINT32));
 
@@ -138,11 +138,11 @@ InterfaceList *NetscreenDriver::getInterfaces(SNMP_Transport *snmp, StringMap *a
        if (SnmpWalk(snmp->getSnmpVersion(), snmp, _T(".1.3.6.1.4.1.3224.9.1.1.1"), HandlerIfList, ifList, FALSE) == SNMP_ERR_SUCCESS)
        {
                // Fix interface indexes
-               for(int i = 0; i < ifList->getSize(); i++)
+               for(int i = 0; i < ifList->size(); i++)
                {
                        NX_INTERFACE_INFO *iface = ifList->get(i);
                        int j;
-                       for(j = 0; j < stdIfList->getSize(); j++)
+                       for(j = 0; j < stdIfList->size(); j++)
                        {
                                if (!_tcscmp(iface->szName, stdIfList->get(j)->szName))
                                {
@@ -150,7 +150,7 @@ InterfaceList *NetscreenDriver::getInterfaces(SNMP_Transport *snmp, StringMap *a
                                        break;
                                }
                        }
-                       if (j == stdIfList->getSize())
+                       if (j == stdIfList->size())
                        {
                                // Interface nt found in standard interface list (usually tunnel interface)
                                iface->dwIndex += 32768;
index 461ea8a..a4adcc5 100644 (file)
@@ -105,7 +105,7 @@ InterfaceList *ProCurveDriver::getInterfaces(SNMP_Transport *snmp, StringMap *at
        UINT32 slotSize = attributes->getULong(_T(".procurve.slotSize"), 24);
 
        // Find physical ports
-       for(int i = 0; i < ifList->getSize(); i++)
+       for(int i = 0; i < ifList->size(); i++)
        {
                NX_INTERFACE_INFO *iface = ifList->get(i);
                if (iface->dwType == IFTYPE_ETHERNET_CSMACD)
index a1ec859..dedbffe 100644 (file)
@@ -360,7 +360,7 @@ public:
        const TCHAR *getInstance() { return m_instance; }
        int getSampleCount() { return m_sampleCount; }
 
-       void filterInstanceList(StringList *instances);
+       void filterInstanceList(StringMap *instances);
        void expandInstance();
 
    virtual bool processNewValue(time_t nTimeStamp, void *value);
@@ -399,7 +399,7 @@ public:
        void addThreshold(Threshold *pThreshold);
        void deleteAllThresholds();
        void setInstanceDiscoveryMethod(WORD method) { m_instanceDiscoveryMethod = method; }
-       void setInstanceDiscoveryData(const TCHAR *data) { safe_free(m_instanceDiscoveryData); m_instanceDiscoveryData = (data != NULL) ? _tcsdup(data) : NULL; }
+       void setInstanceDiscoveryData(const TCHAR *data) { safe_free(m_instanceDiscoveryData); m_instanceDiscoveryData = _tcsdup_ex(data); }
    void setInstanceFilter(const TCHAR *pszScript);
 
    static bool testTransformation(DataCollectionTarget *object, const TCHAR *script, const TCHAR *value, TCHAR *buffer, size_t bufSize);
index 7f3a7f6..3b8468f 100644 (file)
@@ -97,9 +97,9 @@ public:
    UINT32 getParameterAsULong(int index) { const TCHAR *v = (TCHAR *)m_parameters.get(index); return (v != NULL) ? _tcstoul(v, NULL, 0) : 0; }
    UINT64 getParameterAsUInt64(int index) { const TCHAR *v = (TCHAR *)m_parameters.get(index); return (v != NULL) ? _tcstoull(v, NULL, 0) : 0; }
 
-       const TCHAR *getNamedParameter(const TCHAR *name) { return getParameter(m_parameterNames.getIndexIgnoreCase(name)); }
-   UINT32 getNamedParameterAsULong(const TCHAR *name) { return getParameterAsULong(m_parameterNames.getIndexIgnoreCase(name)); }
-   UINT64 getNamedParameterAsUInt64(const TCHAR *name) { return getParameterAsUInt64(m_parameterNames.getIndexIgnoreCase(name)); }
+       const TCHAR *getNamedParameter(const TCHAR *name) { return getParameter(m_parameterNames.indexOfIgnoreCase(name)); }
+   UINT32 getNamedParameterAsULong(const TCHAR *name) { return getParameterAsULong(m_parameterNames.indexOfIgnoreCase(name)); }
+   UINT64 getNamedParameterAsUInt64(const TCHAR *name) { return getParameterAsUInt64(m_parameterNames.indexOfIgnoreCase(name)); }
 
        void addParameter(const TCHAR *name, const TCHAR *value);
        void setNamedParameter(const TCHAR *name, const TCHAR *value);
index fab0678..bc32f86 100644 (file)
@@ -174,7 +174,7 @@ public:
        NetObj *get(QWORD key);
        NetObj *find(bool (*comparator)(NetObj *, void *), void *data);
 
-       int getSize();
+       int size();
        ObjectArray<NetObj> *getObjects(bool updateRefCount, bool (*filter)(NetObj *, void *) = NULL, void *userData = NULL);
 
        void forEach(void (*callback)(NetObj *, void *), void *data);
@@ -591,7 +591,7 @@ public:
        bool enumDCObjects(bool (* pfCallback)(DCObject *, UINT32, void *), void *pArg);
        void associateItems();
 
-   UINT32 getLastValues(CSCPMessage *msg, bool objectTooltipOnly);
+   UINT32 getLastValues(CSCPMessage *msg, bool objectTooltipOnly, bool includeNoValueObjects);
 };
 
 /**
@@ -1049,8 +1049,8 @@ protected:
 
        void applyUserTemplates();
        void doInstanceDiscovery();
-       StringList *getInstanceList(DCItem *dci);
-       void updateInstances(DCItem *root, StringList *instances);
+       StringMap *getInstanceList(DCItem *dci);
+       void updateInstances(DCItem *root, StringMap *instances);
 
        void updateContainerMembership();
        BOOL updateInterfaceConfiguration(UINT32 dwRqId, UINT32 dwNetMask);
index 8b51d6c..eec58f0 100644 (file)
@@ -192,7 +192,7 @@ public:
        void *getData(int index) { return ((index >= 0) && (index < 4)) ? m_data[index] : NULL; }
        void setData(void *data) { setData(0, data); }
        void *getData() { return getData(0); }
-       int getSize() { return m_count; }
+       int size() { return m_count; }
 };
 
 
@@ -254,7 +254,7 @@ public:
        ~VrrpInfo();
 
        int getVersion() { return m_version; }
-       int getSize() { return m_routers->size(); }
+       int size() { return m_routers->size(); }
        VrrpRouter *getRouter(int index) { return m_routers->get(index); }
 };
 
index 174d62b..9d37757 100644 (file)
@@ -234,7 +234,7 @@ public:
        void add(NX_INTERFACE_INFO *iface);
        void remove(int index);
 
-       int getSize() { return m_size; }
+       int size() { return m_size; }
        NX_INTERFACE_INFO *get(int index) { return ((index >= 0) && (index < m_size)) ? &m_interfaces[index] : NULL; }
        NX_INTERFACE_INFO *findByIfIndex(UINT32 ifIndex);
 
@@ -299,7 +299,7 @@ public:
        void add(VlanInfo *vlan);
        void addMemberPort(int vlanId, UINT32 portId);
 
-       int getSize() { return m_size; }
+       int size() { return m_size; }
        VlanInfo *get(int index) { return ((index >= 0) && (index < m_size)) ? m_vlans[index] : NULL; }
        VlanInfo *findById(int id);
        VlanInfo *findByName(const TCHAR *name);
@@ -346,7 +346,7 @@ public:
        AgentPolicyInfo(CSCPMessage *msg);
        ~AgentPolicyInfo();
 
-       int getSize() { return m_size; }
+       int size() { return m_size; }
        bool getGuid(int index, uuid_t guid);
        int getType(int index) { return ((index >= 0) && (index < m_size)) ? m_typeList[index] : -1; }
        const TCHAR *getServer(int index) { return ((index >= 0) && (index < m_size)) ? m_serverList[index] : NULL; }
index cd12eb7..8d3cd0d 100644 (file)
@@ -210,7 +210,7 @@ static UINT32 HandlerIpAddr(UINT32 dwVersion, SNMP_Variable *pVar, SNMP_Transpor
    {
                InterfaceList *ifList = (InterfaceList *)pArg;
 
-               for(int i = 0; i < ifList->getSize(); i++)
+               for(int i = 0; i < ifList->size(); i++)
                {
          if (ifList->get(i)->dwIndex == dwIndex)
          {
@@ -284,7 +284,7 @@ InterfaceList *NetworkDeviceDriver::getInterfaces(SNMP_Transport *snmp, StringMa
       SnmpWalk(snmp->getSnmpVersion(), snmp, _T(".1.3.6.1.2.1.31.1.1.1.1"), HandlerIndexIfXTable, pIfList, FALSE);
 
       // Enumerate interfaces
-               for(i = 0; i < pIfList->getSize(); i++)
+               for(i = 0; i < pIfList->size(); i++)
       {
                        NX_INTERFACE_INFO *iface = pIfList->get(i);
 
index 7ba9890..0708b05 100644 (file)
@@ -124,7 +124,7 @@ static bool ConnectToDevice(NetworkDeviceDriver *driver, SNMP_Transport *transpo
    
    driver->analyzeDevice(transport, oid, &s_customAttributes, &s_driverData);
    _tprintf(_T("Custom attributes after device analyze:\n"));
-   for(UINT32 i = 0; i < s_customAttributes.getSize(); i++)
+   for(int i = 0; i < s_customAttributes.size(); i++)
    {
       _tprintf(_T("   %s = %s\n"), s_customAttributes.getKeyByIndex(i), s_customAttributes.getValueByIndex(i));
    }
index 030ef18..07ee29a 100644 (file)
@@ -46,7 +46,7 @@ static int GetPolicyInventory(AgentConnection &conn)
 
                _tprintf(_T("GUID                                 Type Server\n")
                         _T("----------------------------------------------------------\n"));
-               for(int i = 0; i < ap->getSize(); i++)
+               for(int i = 0; i < ap->size(); i++)
                {
                        ap->getGuid(i, guid);
                        _tprintf(_T("%-16s %-4d %s\n"), uuid_to_string(guid, buffer), ap->getType(i), ap->getServer(i));
index 1944e83..efd61d4 100644 (file)
@@ -387,6 +387,16 @@ static BOOL RecreateTData(const TCHAR *className, bool multipleTables, bool inde
    return TRUE;
 }
 
+/**
+ * Upgrade from V331 to V332
+ */
+static BOOL H_UpgradeFromV331(int currVersion, int newVersion)
+{
+   CHK_EXEC(SQLQuery(_T("UPDATE items SET instd_data=instance WHERE node_id=template_id AND instd_method=0")));
+   CHK_EXEC(SQLQuery(_T("UPDATE metadata SET var_value='332' WHERE var_name='SchemaVersion'")));
+   return TRUE;
+}
+
 /**
  * Upgrade from V330 to V331
  */
@@ -8060,6 +8070,7 @@ static struct
    { 328, 329, H_UpgradeFromV328 },
    { 329, 330, H_UpgradeFromV329 },
    { 330, 331, H_UpgradeFromV330 },
+   { 331, 332, H_UpgradeFromV331 },
    { 0, 0, NULL }
 };
 
index 31d2aac..c76dc21 100644 (file)
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: Data Collection Management Plug-in
 Bundle-SymbolicName: org.netxms.ui.eclipse.datacollection;singleton:=true
-Bundle-Version: 1.2.15
+Bundle-Version: 1.2.16
 Bundle-Activator: org.netxms.ui.eclipse.datacollection.Activator
 Bundle-Vendor: netxms.org
 Require-Bundle: org.netxms.ui.eclipse.objectbrowser;bundle-version="1.2.15",
@@ -10,7 +10,7 @@ Require-Bundle: org.netxms.ui.eclipse.objectbrowser;bundle-version="1.2.15",
  org.netxms.ui.eclipse.snmp;bundle-version="1.2.12",
  org.netxms.ui.eclipse.nxsl;bundle-version="1.2.15",
  org.eclipse.core.expressions;bundle-version="3.4.500",
- org.netxms.webui.core;bundle-version="1.2.15",
+ org.netxms.webui.core;bundle-version="1.2.16",
  org.eclipse.rap.ui;bundle-version="2.2.0",
  org.netxms.ui.eclipse.charts;bundle-version="1.2.11",
  org.eclipse.rap.ui.forms;bundle-version="2.2.0",
index 953cf67..670c346 100644 (file)
@@ -64,6 +64,7 @@ public class SelectDciDialog extends Dialog
        private boolean enableEmptySelection = false;
        private boolean allowTemplateItems = false;
        private boolean allowSingleSelection = false;
+       private boolean allowNoValueObjects = false;
        
        /**
         * @param parentShell
@@ -146,7 +147,7 @@ public class SelectDciDialog extends Dialog
                }
 
       dciList = new DciList(null, (fixedNode == 0) ? splitter : dialogArea, SWT.BORDER, null,
-            "SelectDciDialog.dciList", dcObjectType, allowSingleSelection ? SWT.NONE : SWT.MULTI); //$NON-NLS-1$
+            "SelectDciDialog.dciList", dcObjectType, allowSingleSelection ? SWT.NONE : SWT.MULTI, allowNoValueObjects); //$NON-NLS-1$
                dciList.setDcObjectType(dcObjectType);
                dciList.addDoubleClickListener(new IDoubleClickListener() {
                        @Override
@@ -312,4 +313,12 @@ public class SelectDciDialog extends Dialog
    {
       this.allowSingleSelection = allowSingleSelection;
    }
+
+   /**
+    * @param allowNoValueObjects the allowNoValueObjects to set
+    */
+   public void setAllowNoValueObjects(boolean allowNoValueObjects)
+   {
+      this.allowNoValueObjects = allowNoValueObjects;
+   }
 }
index b094ecc..733e4b5 100644 (file)
@@ -89,7 +89,7 @@ public class SelectNodeDciDialog extends Dialog
                
                dialogArea.setLayout(new FillLayout());
                
-               dciList = new DciList(null, dialogArea, SWT.BORDER, null, "SelectNodeDciDialog.dciList", dcObjectType, SWT.SINGLE);  //$NON-NLS-1$
+               dciList = new DciList(null, dialogArea, SWT.BORDER, null, "SelectNodeDciDialog.dciList", dcObjectType, SWT.SINGLE, false);  //$NON-NLS-1$
                dciList.setDcObjectType(dcObjectType);
                dciList.addDoubleClickListener(new IDoubleClickListener() {
                        @Override
index 9d00cf8..e65062e 100644 (file)
@@ -151,8 +151,8 @@ DciLabelProvider_Unknown=<unknown>
 DciList_ColDescr=Description
 DciList_ColID=ID
 DciList_ColParam=Parameter
-DciList_JobError=Cannot get DCI list for node 
-DciList_JobTitle=Get DCI values for node 
+DciList_JobError=Cannot get DCI list for node %s
+DciList_JobTitle=Get DCI values for node %s
 DciRemoveConfirmationDialog_Remove=&Remove DCIs from node
 DciRemoveConfirmationDialog_Title=Remove Template
 DciRemoveConfirmationDialog_Unbind=&Unbind DCIs from template
index 7c0a737..0ab8977 100644 (file)
@@ -151,8 +151,8 @@ DciLabelProvider_Unknown=<nezn\u00e1m\u00fd>
 DciList_ColDescr=Popis
 DciList_ColID=ID
 DciList_ColParam=Parametr
-DciList_JobError=Nelze z\u00edskat seznam DCI prvku
-DciList_JobTitle=Z\u00edskat DCI hodnoty prvku
+DciList_JobError=Nelze z\u00edskat seznam DCI prvku %s
+DciList_JobTitle=Z\u00edskat DCI hodnoty prvku %s
 DciRemoveConfirmationDialog_Remove=&Odstranit DCI z prvku
 DciRemoveConfirmationDialog_Title=Odstranit \u0161ablonu
 DciRemoveConfirmationDialog_Unbind=&Odv\u00e1zat DCI ze \u0161ablony
index e3c1894..355b920 100644 (file)
@@ -151,8 +151,8 @@ DciLabelProvider_Unknown=<desconocido>
 DciList_ColDescr=Descripci\u00f3n
 DciList_ColID=ID
 DciList_ColParam=Par\u00e1metro
-DciList_JobError=No es posible obtener la lista de monitores para el nodo
-DciList_JobTitle=Obtener los valores de los monitores del nodo
+DciList_JobError=No es posible obtener la lista de monitores para el nodo %s
+DciList_JobTitle=Obtener los valores de los monitores del nodo %s
 DciRemoveConfirmationDialog_Remove=&Eliminar monitores para el nodo
 DciRemoveConfirmationDialog_Title=Eliminar Plantilla
 DciRemoveConfirmationDialog_Unbind=&Desvincular DCIs de la plantilla
index 493f647..980c5a3 100644 (file)
@@ -151,8 +151,8 @@ DciLabelProvider_Unknown=<\u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d
 DciList_ColDescr=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435
 DciList_ColID=\u041a\u043e\u0434
 DciList_ColParam=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440
-DciList_JobError=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u043b\u044f \u0443\u0437\u043b\u0430
-DciList_JobTitle=\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u043b\u044f \u0443\u0437\u043b\u0430
+DciList_JobError=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u043b\u044f \u0443\u0437\u043b\u0430 %s
+DciList_JobTitle=\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u043b\u044f \u0443\u0437\u043b\u0430 %s
 DciRemoveConfirmationDialog_Remove=&\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u0441 \u0443\u0437\u043b\u0430
 DciRemoveConfirmationDialog_Title=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430
 DciRemoveConfirmationDialog_Unbind=&\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043a \u0448\u0430\u0431\u043b\u043e\u043d\u0443
index 2faf86d..fa20b11 100644 (file)
@@ -151,8 +151,8 @@ DciLabelProvider_Unknown=<unknown>
 DciList_ColDescr=Description
 DciList_ColID=ID
 DciList_ColParam=Parameter
-DciList_JobError=Cannot get DCI list for node
-DciList_JobTitle=Get DCI values for node
+DciList_JobError=Cannot get DCI list for node %s
+DciList_JobTitle=Get DCI values for node %s
 DciRemoveConfirmationDialog_Remove=&Remove DCIs from node
 DciRemoveConfirmationDialog_Title=Remove Template
 DciRemoveConfirmationDialog_Unbind=&Unbind DCIs from template
index 2774207..f4d5594 100644 (file)
@@ -62,6 +62,7 @@ public class DciList extends Composite
        private NXCSession session;
        private SortableTableViewer viewer;
        private int dcObjectType;       // DC object type filter; -1 allows all object types
+       private boolean allowNoValueObjects = false;
        
        /**
         * Create "last values" widget
@@ -72,13 +73,14 @@ public class DciList extends Composite
         * @param _node node to display data for
         * @param configPrefix configuration prefix for saving/restoring viewer settings
         */
-       public DciList(ViewPart viewPart, Composite parent, int style, AbstractNode _node, final String configPrefix, int dcObjectType, int selectionType)
+       public DciList(ViewPart viewPart, Composite parent, int style, AbstractNode _node, final String configPrefix, int dcObjectType, int selectionType, boolean allowNoValueObjects)
        {
                super(parent, style);
                session = (NXCSession)ConsoleSharedData.getSession();
                this.viewPart = viewPart;               
                this.node = _node;
                this.dcObjectType = dcObjectType;
+               this.allowNoValueObjects = allowNoValueObjects;
                
                final IDialogSettings ds = Activator.getDefault().getDialogSettings();
                
@@ -121,19 +123,19 @@ public class DciList extends Composite
                        return;
                }
 
-               ConsoleJob job = new ConsoleJob(Messages.get().DciList_JobTitle + node.getObjectName(), viewPart, Activator.PLUGIN_ID, null) {
+               ConsoleJob job = new ConsoleJob(String.format(Messages.get().DciList_JobTitle, node.getObjectName()), viewPart, Activator.PLUGIN_ID, null) {
                        @Override
                        protected String getErrorMessage()
                        {
-                               return Messages.get().DciList_JobError + node.getObjectName();
+                               return String.format(Messages.get().DciList_JobError, node.getObjectName());
                        }
 
                        @Override
                        protected void runInternal(IProgressMonitor monitor) throws Exception
                        {
                                final List<DciValue> data = 
-                                               (dcObjectType == -1) ? Arrays.asList(session.getLastValues(node.getObjectId())) 
-                                                               : new ArrayList<DciValue>(Arrays.asList(session.getLastValues(node.getObjectId())));
+                                               (dcObjectType == -1) ? Arrays.asList(session.getLastValues(node.getObjectId(), false, allowNoValueObjects)) 
+                                                               : new ArrayList<DciValue>(Arrays.asList(session.getLastValues(node.getObjectId(), false, allowNoValueObjects)));
                                if (dcObjectType != -1)
                                {
                                        Iterator<DciValue> it = data.iterator();
index b8dd8f3..f96f44a 100644 (file)
@@ -45,6 +45,7 @@ public class DciSelector extends AbstractSelector
    private int dciObjectType = -1;
        private String dciName = null;
        private boolean fixedNode = false; 
+       private boolean allowNoValueObjects = false;
 
        /**
         * @param parent
@@ -68,6 +69,7 @@ public class DciSelector extends AbstractSelector
                dlg.setEnableEmptySelection(true);
                dlg.setDcObjectType(dcObjectType);
                dlg.setSingleSelection(true);
+               dlg.setAllowNoValueObjects(allowNoValueObjects);
                if (dlg.open() == Window.OK)
                {
                   List<DciValue> dci = dlg.getSelection();
@@ -251,4 +253,20 @@ public class DciSelector extends AbstractSelector
    {
       this.dciObjectType = dciObjectType;
    }
+
+   /**
+    * @param allowNoValueObjects the allowNoValueObjects to set
+    */
+   public void setAllowNoValueObjects(boolean allowNoValueObjects)
+   {
+      this.allowNoValueObjects = allowNoValueObjects;
+   }
+
+   /**
+    * @return the allowNoValueObjects
+    */
+   public boolean isAllowNoValueObjects()
+   {
+      return allowNoValueObjects;
+   }
 }
index b062a3a..069d1f9 100644 (file)
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: NXMC Network Maps Plug-in
 Bundle-SymbolicName: org.netxms.ui.eclipse.networkmaps;singleton:=true
-Bundle-Version: 1.2.15
+Bundle-Version: 1.2.16
 Bundle-Activator: org.netxms.ui.eclipse.networkmaps.Activator
 Bundle-Vendor: netxms.org
 Require-Bundle: org.eclipse.core.runtime;bundle-version="3.8.0",
@@ -10,15 +10,15 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="3.8.0",
  org.netxms.ui.eclipse.imagelibrary;bundle-version="1.2.13",
  org.netxms.ui.eclipse.osm;bundle-version="1.2.10",
  org.eclipse.rap.ui;bundle-version="2.2.0",
- org.netxms.webui.core;bundle-version="1.2.15",
+ org.netxms.webui.core;bundle-version="1.2.16",
  org.netxms.gef4.zest.layouts;bundle-version="2.0.2",
  org.netxms.gef4.zest.core;bundle-version="2.0.2",
  org.netxms.gef4.zest.jface;bundle-version="2.0.2",
  org.netxms.rap.draw2d;bundle-version="1.5.1",
  org.netxms.ui.eclipse.charts;bundle-version="1.2.11",
  org.netxms.ui.eclipse.nxsl;bundle-version="1.2.11",
- org.netxms.ui.eclipse.objectview;bundle-version="1.2.14",
- org.netxms.ui.eclipse.datacollection;bundle-version="1.2.13"
+ org.netxms.ui.eclipse.objectview;bundle-version="1.2.15",
+ org.netxms.ui.eclipse.datacollection;bundle-version="1.2.16"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
 Export-Package: org.netxms.ui.eclipse.networkmaps.algorithms,
index df1ce62..46d700c 100644 (file)
@@ -90,7 +90,7 @@ public class MapContentProvider implements IGraphEntityRelationshipContentProvid
                                {
                                        try
                                        {
-                                               DciValue[] values = session.getLastValues(e.getKey(), true);
+                                               DciValue[] values = session.getLastValues(e.getKey(), true, false);
                                                cachedDciValues.put(e.getKey(), values);
                                        }
                                        catch(Exception e2)
index 53049ab..26dd323 100644 (file)
@@ -2,16 +2,16 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: Performance View Plug-in for NXMC
 Bundle-SymbolicName: org.netxms.ui.eclipse.perfview;singleton:=true
-Bundle-Version: 1.2.13
+Bundle-Version: 1.2.16
 Bundle-Activator: org.netxms.ui.eclipse.perfview.Activator
 Bundle-Vendor: netxms.org
 Require-Bundle: org.eclipse.core.runtime;bundle-version="3.9.0",
  org.netxms.ui.eclipse.charts;bundle-version="1.2.11",
- org.netxms.ui.eclipse.objectview;bundle-version="1.2.10",
+ org.netxms.ui.eclipse.objectview;bundle-version="1.2.15",
  org.eclipse.rap.ui;bundle-version="2.2.0",
- org.netxms.webui.core;bundle-version="1.2.13",
- org.netxms.ui.eclipse.datacollection;bundle-version="1.2.11",
- org.netxms.ui.eclipse.usermanager;bundle-version="1.2.10"
+ org.netxms.webui.core;bundle-version="1.2.16",
+ org.netxms.ui.eclipse.datacollection;bundle-version="1.2.16",
+ org.netxms.ui.eclipse.usermanager;bundle-version="1.2.15"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
 Export-Package: org.netxms.ui.eclipse.perfview.views.helpers,
index fb24a57..6d72ed6 100644 (file)
@@ -319,7 +319,8 @@ public class PerfTabGraphSettings
                {
                        if (parentDciId == s.getRuntimeDciInfo().getId())
                                return; // found valid parent ID
-                       if (parentDciId == s.getRuntimeDciInfo().getTemplateDciId())
+                       if ((parentDciId == s.getRuntimeDciInfo().getTemplateDciId()) &&
+                           s.getRuntimeDciInfo().getInstance().equals(runtimeDciInfo.getInstance()))
                        {
                                // found parent ID from template
                                parentDciId = s.getRuntimeDciInfo().getId();
index 399ce99..6512c57 100644 (file)
@@ -120,6 +120,7 @@ public class PerfTab extends PropertyPage
       parentDci = new DciSelector(dialogArea, SWT.NONE, false);
       parentDci.setDciId(dci.getNodeId(), settings.getParentDciId());
       parentDci.setFixedNode(true);
+      parentDci.setAllowNoValueObjects(true);
       parentDci.setLabel(Messages.get().PerfTab_Attach);
       gd = new GridData();
       gd.horizontalSpan = layout.numColumns;