added "root object" option to Geo Map dashboard element
authorVictor Kirhenshtein <victor@netxms.org>
Thu, 5 Oct 2017 13:18:15 +0000 (16:18 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Thu, 5 Oct 2017 13:18:15 +0000 (16:18 +0300)
15 files changed:
ChangeLog
src/java/netxms-eclipse/Dashboard/src/org/netxms/ui/eclipse/dashboard/propertypages/GeoMap.java
src/java/netxms-eclipse/Dashboard/src/org/netxms/ui/eclipse/dashboard/widgets/GeoMapElement.java
src/java/netxms-eclipse/Dashboard/src/org/netxms/ui/eclipse/dashboard/widgets/internal/GeoMapConfig.java
src/java/netxms-eclipse/OSM/src/org/netxms/ui/eclipse/osm/GeoLocationCache.java
src/java/netxms-eclipse/OSM/src/org/netxms/ui/eclipse/osm/views/LocationMap.java
src/java/netxms-eclipse/OSM/src/org/netxms/ui/eclipse/osm/widgets/AbstractGeoMapViewer.java
src/java/netxms-eclipse/OSM/src/org/netxms/ui/eclipse/osm/widgets/ObjectGeoLocationViewer.java
webui/webapp/Dashboard/src/org/netxms/ui/eclipse/dashboard/propertypages/GeoMap.java
webui/webapp/Dashboard/src/org/netxms/ui/eclipse/dashboard/widgets/GeoMapElement.java
webui/webapp/Dashboard/src/org/netxms/ui/eclipse/dashboard/widgets/internal/GeoMapConfig.java
webui/webapp/OSM/src/org/netxms/ui/eclipse/osm/GeoLocationCache.java
webui/webapp/OSM/src/org/netxms/ui/eclipse/osm/views/LocationMap.java
webui/webapp/OSM/src/org/netxms/ui/eclipse/osm/widgets/AbstractGeoMapViewer.java
webui/webapp/OSM/src/org/netxms/ui/eclipse/osm/widgets/ObjectGeoLocationViewer.java

index 31dd3e7..d6c28d0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -16,6 +16,8 @@
 - New agent configuration parameter TunnelKeepaliveInterval
 - Optimizations in database access layer
 - Improved database check procedure
+- Management console:
+       - Option to set root object for "Geo Map" dashboard element
 - Fixed issues: NX-1147, NX-1265, NX-1270, NX-1276, NX-1282, NX-1290, NX-1296, NX-1300, NX-1309, NX-1313, NX-1314, NX-1315, NX-1324
 
 
index 7e68a44..1e4facd 100644 (file)
@@ -27,8 +27,10 @@ import org.eclipse.swt.widgets.Spinner;
 import org.eclipse.ui.dialogs.PropertyPage;
 import org.netxms.base.GeoLocation;
 import org.netxms.base.GeoLocationFormatException;
+import org.netxms.client.objects.AbstractObject;
 import org.netxms.ui.eclipse.dashboard.Messages;
 import org.netxms.ui.eclipse.dashboard.widgets.internal.GeoMapConfig;
+import org.netxms.ui.eclipse.objectbrowser.widgets.ObjectSelector;
 import org.netxms.ui.eclipse.tools.MessageDialogHelper;
 import org.netxms.ui.eclipse.tools.WidgetHelper;
 import org.netxms.ui.eclipse.widgets.LabeledText;
@@ -43,6 +45,7 @@ public class GeoMap extends PropertyPage
        private LabeledText latitude;
        private LabeledText longitude;
        private Spinner zoom;
+   private ObjectSelector objectSelector;
 
        /* (non-Javadoc)
         * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
@@ -86,6 +89,16 @@ public class GeoMap extends PropertyPage
                zoom = WidgetHelper.createLabeledSpinner(dialogArea, SWT.BORDER, Messages.get().GeoMap_Zoom, 0, 18, WidgetHelper.DEFAULT_LAYOUT_DATA);
                zoom.setSelection(config.getZoom());
                
+      objectSelector = new ObjectSelector(dialogArea, SWT.NONE, true);
+      objectSelector.setLabel(Messages.get().AlarmViewer_RootObject);
+      objectSelector.setObjectClass(AbstractObject.class);
+      objectSelector.setObjectId(config.getRootObjectId());
+      gd = new GridData();
+      gd.horizontalAlignment = SWT.FILL;
+      gd.grabExcessHorizontalSpace = true;
+      gd.horizontalSpan = 3;
+      objectSelector.setLayoutData(gd);
+               
                return dialogArea;
        }
 
@@ -107,6 +120,7 @@ public class GeoMap extends PropertyPage
                }
                config.setTitle(title.getText());
                config.setZoom(zoom.getSelection());
+               config.setRootObjectId(objectSelector.getObjectId());
                return true;
        }
 }
index 7392456..2605a20 100644 (file)
@@ -27,7 +27,6 @@ import org.netxms.ui.eclipse.osm.widgets.ObjectGeoLocationViewer;
 
 /**
  * Geo map element for dashboard
- *
  */
 public class GeoMapElement extends ElementWidget
 {
@@ -60,6 +59,7 @@ public class GeoMapElement extends ElementWidget
                mapWidget = new ObjectGeoLocationViewer(this, SWT.NONE);
                mapWidget.setViewPart(viewPart);
                mapWidget.setTitle(config.getTitle());
+               mapWidget.setRootObjectId(config.getRootObjectId());
                mapWidget.showMap(config.getLatitude(), config.getLongitude(), config.getZoom());
        }
 }
index 603e66c..6dbb6d1 100644 (file)
@@ -40,6 +40,9 @@ public class GeoMapConfig extends DashboardElementConfig
        
        @Element(required=false)
        private int zoom = 14;
+       
+   @Element(required=false)
+       private long rootObjectId = 0;
 
        /**
         * Create line chart settings object from XML document
@@ -130,4 +133,19 @@ public class GeoMapConfig extends DashboardElementConfig
                this.zoom = zoom;
        }
 
+   /**
+    * @return the rootObjectId
+    */
+   public long getRootObjectId()
+   {
+      return rootObjectId;
+   }
+
+   /**
+    * @param rootObjectId the rootObjectId to set
+    */
+   public void setRootObjectId(long rootObjectId)
+   {
+      this.rootObjectId = rootObjectId;
+   }
 }
index 3455f71..f8ed775 100644 (file)
@@ -162,12 +162,13 @@ public class GeoLocationCache implements SessionListener
        }
        
        /**
-        * Get all objects in given area
+        * Get all objects in given area. If parent ID is set, only objects under given parent will be included.
         * 
-        * @param area
+        * @param area geographical area
+        * @param parentId parent object ID or 0
         * @return
         */
-       public List<AbstractObject> getObjectsInArea(Area area)
+       public List<AbstractObject> getObjectsInArea(Area area, long parentId)
        {
                List<AbstractObject> list = null;
                synchronized(locationTree)
@@ -177,8 +178,10 @@ public class GeoLocationCache implements SessionListener
                        for(Long id : idList)
                        {
                                AbstractObject o = objects.get(id);
-                               if (o != null)
+                               if ((o != null) && ((parentId == 0) || (o.getObjectId() == parentId) || o.isChildOf(parentId)))
+                               {
                                        list.add(o);
+                               }
                        }
                }
                return list;
index 64f439f..98d0280 100644 (file)
@@ -84,7 +84,6 @@ public class LocationMap extends AbstractGeolocationView
        @Override
        protected int getInitialZoomLevel()
        {
-               // TODO Auto-generated method stub
                return 15;
        }
 }
index f112935..66972ad 100644 (file)
@@ -494,6 +494,7 @@ public abstract class AbstractGeoMapViewer extends Canvas implements PaintListen
       rect.height = 47 + textSize.y;
 
       gc.setBackground(INFO_BLOCK_BACKGROUND);
+      gc.setForeground(INFO_BLOCK_TEXT);
       gc.setAlpha(128);
       gc.fillRoundRectangle(rect.x, rect.y, rect.width, rect.height, 8, 8);
       gc.setAlpha(255);
index e58ce68..0f5b3c7 100644 (file)
@@ -64,6 +64,7 @@ public class ObjectGeoLocationViewer extends AbstractGeoMapViewer implements Mou
    private Point objectToolTipLocation = null;
    private Rectangle objectTooltipRectangle = null;
    private Font objectToolTipHeaderFont;
+   private long rootObjectId = 0;
    
    /**
     * @param parent
@@ -85,13 +86,29 @@ public class ObjectGeoLocationViewer extends AbstractGeoMapViewer implements Mou
       });
    }
 
+   /**
+    * @return the rootObjectId
+    */
+   public long getRootObjectId()
+   {
+      return rootObjectId;
+   }
+
+   /**
+    * @param rootObjectId the rootObjectId to set
+    */
+   public void setRootObjectId(long rootObjectId)
+   {
+      this.rootObjectId = rootObjectId;
+   }
+
    /* (non-Javadoc)
     * @see org.netxms.ui.eclipse.osm.widgets.AbstractGeoMapViewer#onMapLoad()
     */
    @Override
    protected void onMapLoad()
    {
-      objects = GeoLocationCache.getInstance().getObjectsInArea(coverage);
+      objects = GeoLocationCache.getInstance().getObjectsInArea(coverage, rootObjectId);
       redraw();
    }
 
@@ -107,7 +124,7 @@ public class ObjectGeoLocationViewer extends AbstractGeoMapViewer implements Mou
             || ((prevLocation != null) && (prevLocation.getType() != GeoLocation.UNSET) && 
                   coverage.contains(prevLocation.getLatitude(), prevLocation.getLongitude())))
       {
-         objects = GeoLocationCache.getInstance().getObjectsInArea(coverage);
+         objects = GeoLocationCache.getInstance().getObjectsInArea(coverage, rootObjectId);
          redraw();
       }
    }
index 7e68a44..1e4facd 100644 (file)
@@ -27,8 +27,10 @@ import org.eclipse.swt.widgets.Spinner;
 import org.eclipse.ui.dialogs.PropertyPage;
 import org.netxms.base.GeoLocation;
 import org.netxms.base.GeoLocationFormatException;
+import org.netxms.client.objects.AbstractObject;
 import org.netxms.ui.eclipse.dashboard.Messages;
 import org.netxms.ui.eclipse.dashboard.widgets.internal.GeoMapConfig;
+import org.netxms.ui.eclipse.objectbrowser.widgets.ObjectSelector;
 import org.netxms.ui.eclipse.tools.MessageDialogHelper;
 import org.netxms.ui.eclipse.tools.WidgetHelper;
 import org.netxms.ui.eclipse.widgets.LabeledText;
@@ -43,6 +45,7 @@ public class GeoMap extends PropertyPage
        private LabeledText latitude;
        private LabeledText longitude;
        private Spinner zoom;
+   private ObjectSelector objectSelector;
 
        /* (non-Javadoc)
         * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
@@ -86,6 +89,16 @@ public class GeoMap extends PropertyPage
                zoom = WidgetHelper.createLabeledSpinner(dialogArea, SWT.BORDER, Messages.get().GeoMap_Zoom, 0, 18, WidgetHelper.DEFAULT_LAYOUT_DATA);
                zoom.setSelection(config.getZoom());
                
+      objectSelector = new ObjectSelector(dialogArea, SWT.NONE, true);
+      objectSelector.setLabel(Messages.get().AlarmViewer_RootObject);
+      objectSelector.setObjectClass(AbstractObject.class);
+      objectSelector.setObjectId(config.getRootObjectId());
+      gd = new GridData();
+      gd.horizontalAlignment = SWT.FILL;
+      gd.grabExcessHorizontalSpace = true;
+      gd.horizontalSpan = 3;
+      objectSelector.setLayoutData(gd);
+               
                return dialogArea;
        }
 
@@ -107,6 +120,7 @@ public class GeoMap extends PropertyPage
                }
                config.setTitle(title.getText());
                config.setZoom(zoom.getSelection());
+               config.setRootObjectId(objectSelector.getObjectId());
                return true;
        }
 }
index 7392456..2605a20 100644 (file)
@@ -27,7 +27,6 @@ import org.netxms.ui.eclipse.osm.widgets.ObjectGeoLocationViewer;
 
 /**
  * Geo map element for dashboard
- *
  */
 public class GeoMapElement extends ElementWidget
 {
@@ -60,6 +59,7 @@ public class GeoMapElement extends ElementWidget
                mapWidget = new ObjectGeoLocationViewer(this, SWT.NONE);
                mapWidget.setViewPart(viewPart);
                mapWidget.setTitle(config.getTitle());
+               mapWidget.setRootObjectId(config.getRootObjectId());
                mapWidget.showMap(config.getLatitude(), config.getLongitude(), config.getZoom());
        }
 }
index 603e66c..6dbb6d1 100644 (file)
@@ -40,6 +40,9 @@ public class GeoMapConfig extends DashboardElementConfig
        
        @Element(required=false)
        private int zoom = 14;
+       
+   @Element(required=false)
+       private long rootObjectId = 0;
 
        /**
         * Create line chart settings object from XML document
@@ -130,4 +133,19 @@ public class GeoMapConfig extends DashboardElementConfig
                this.zoom = zoom;
        }
 
+   /**
+    * @return the rootObjectId
+    */
+   public long getRootObjectId()
+   {
+      return rootObjectId;
+   }
+
+   /**
+    * @param rootObjectId the rootObjectId to set
+    */
+   public void setRootObjectId(long rootObjectId)
+   {
+      this.rootObjectId = rootObjectId;
+   }
 }
index 4aabc8e..c044a56 100644 (file)
@@ -162,12 +162,13 @@ public class GeoLocationCache implements SessionListener
        }
        
        /**
-        * Get all objects in given area
+        * Get all objects in given area. If parent ID is set, only objects under given parent will be included.
         * 
-        * @param area
+        * @param area geographical area
+        * @param parentId parent object ID or 0
         * @return
         */
-       public List<AbstractObject> getObjectsInArea(Area area)
+       public List<AbstractObject> getObjectsInArea(Area area, long parentId)
        {
                List<AbstractObject> list = null;
                synchronized(locationTree)
@@ -177,8 +178,10 @@ public class GeoLocationCache implements SessionListener
                        for(Long id : idList)
                        {
                                AbstractObject o = objects.get(id);
-                               if (o != null)
+                               if ((o != null) && ((parentId == 0) || (o.getObjectId() == parentId) || o.isChildOf(parentId)))
+                               {
                                        list.add(o);
+                               }
                        }
                }
                return list;
@@ -278,7 +281,7 @@ public class GeoLocationCache implements SessionListener
                                break;
                        default:
                                throw new IllegalArgumentException("pointLocation=" + pointLocation); //$NON-NLS-1$
-               }
+               }       
                return new Area(topLeft.getLatitude(), topLeft.getLongitude(), bottomRight.getLatitude(), bottomRight.getLongitude());
        }
 
index 64f439f..98d0280 100644 (file)
@@ -84,7 +84,6 @@ public class LocationMap extends AbstractGeolocationView
        @Override
        protected int getInitialZoomLevel()
        {
-               // TODO Auto-generated method stub
                return 15;
        }
 }
index d56ca55..8cc35b0 100644 (file)
@@ -475,6 +475,7 @@ public abstract class AbstractGeoMapViewer extends Canvas implements PaintListen
       rect.height = 47 + textSize.y;
 
       gc.setBackground(INFO_BLOCK_BACKGROUND);
+      gc.setForeground(INFO_BLOCK_TEXT);
       gc.setAlpha(128);
       gc.fillRoundRectangle(rect.x, rect.y, rect.width, rect.height, 8, 8);
       gc.setAlpha(255);
index 191a209..d48d4d8 100644 (file)
@@ -63,6 +63,7 @@ public class ObjectGeoLocationViewer extends AbstractGeoMapViewer
    private Point objectToolTipLocation = null;
    private Rectangle objectTooltipRectangle = null;
    private Font objectToolTipHeaderFont;
+   private long rootObjectId = 0;
    
    /**
     * @param parent
@@ -83,13 +84,29 @@ public class ObjectGeoLocationViewer extends AbstractGeoMapViewer
       });
    }
 
+   /**
+    * @return the rootObjectId
+    */
+   public long getRootObjectId()
+   {
+      return rootObjectId;
+   }
+
+   /**
+    * @param rootObjectId the rootObjectId to set
+    */
+   public void setRootObjectId(long rootObjectId)
+   {
+      this.rootObjectId = rootObjectId;
+   }
+
    /* (non-Javadoc)
     * @see org.netxms.ui.eclipse.osm.widgets.AbstractGeoMapViewer#onMapLoad()
     */
    @Override
    protected void onMapLoad()
    {
-      objects = GeoLocationCache.getInstance().getObjectsInArea(coverage);
+      objects = GeoLocationCache.getInstance().getObjectsInArea(coverage, rootObjectId);
       redraw();
    }
 
@@ -105,7 +122,7 @@ public class ObjectGeoLocationViewer extends AbstractGeoMapViewer
             || ((prevLocation != null) && (prevLocation.getType() != GeoLocation.UNSET) && 
                   coverage.contains(prevLocation.getLatitude(), prevLocation.getLongitude())))
       {
-         objects = GeoLocationCache.getInstance().getObjectsInArea(coverage);
+         objects = GeoLocationCache.getInstance().getObjectsInArea(coverage, rootObjectId);
          redraw();
       }
    }