rack rear view refactoring and fixes
authorVictor Kirhenshtein <victor@netxms.org>
Fri, 24 Nov 2017 12:06:16 +0000 (14:06 +0200)
committerVictor Kirhenshtein <victor@netxms.org>
Fri, 24 Nov 2017 12:06:16 +0000 (14:06 +0200)
18 files changed:
src/client/java/netxms-client/src/main/java/org/netxms/client/NXCObjectModificationData.java
src/client/java/netxms-client/src/main/java/org/netxms/client/NXCSession.java
src/client/java/netxms-client/src/main/java/org/netxms/client/constants/RackOrientation.java [new file with mode: 0644]
src/client/java/netxms-client/src/main/java/org/netxms/client/objects/AbstractNode.java
src/client/java/netxms-client/src/main/java/org/netxms/client/objects/Chassis.java
src/client/java/netxms-client/src/main/java/org/netxms/client/objects/RackElement.java
src/java/netxms-eclipse/Dashboard/src/org/netxms/ui/eclipse/dashboard/widgets/RackDiagramElement.java
src/java/netxms-eclipse/ObjectManager/src/org/netxms/ui/eclipse/objectmanager/propertypages/RackPlacement.java
src/java/netxms-eclipse/ObjectView/src/org/netxms/ui/eclipse/objectview/objecttabs/RackTab.java
src/java/netxms-eclipse/ObjectView/src/org/netxms/ui/eclipse/objectview/widgets/RackWidget.java
src/server/core/chassis.cpp
src/server/core/node.cpp
src/server/include/nms_objects.h
src/server/tools/nxdbmgr/upgrade_v30.cpp
webui/webapp/Dashboard/src/org/netxms/ui/eclipse/dashboard/widgets/RackDiagramElement.java
webui/webapp/ObjectManager/src/org/netxms/ui/eclipse/objectmanager/propertypages/RackPlacement.java
webui/webapp/ObjectView/src/org/netxms/ui/eclipse/objectview/objecttabs/RackTab.java
webui/webapp/ObjectView/src/org/netxms/ui/eclipse/objectview/widgets/RackWidget.java

index 8720a1a..d9a52f3 100644 (file)
@@ -36,6 +36,7 @@ import org.netxms.base.PostalAddress;
 import org.netxms.client.constants.AgentCacheMode;
 import org.netxms.client.constants.AgentCompressionMode;
 import org.netxms.client.constants.ObjectStatus;
+import org.netxms.client.constants.RackOrientation;
 import org.netxms.client.dashboards.DashboardElement;
 import org.netxms.client.datacollection.ConditionDciInfo;
 import org.netxms.client.maps.MapLayoutAlgorithm;
@@ -213,6 +214,7 @@ public class NXCObjectModificationData
        private UUID rackImage;
        private short rackPosition;
        private short rackHeight;
+   private RackOrientation rackOrientation;
        private Long[] dashboards;
        private boolean rackNumberingTopBottom;
        private long controllerId;
@@ -232,7 +234,6 @@ public class NXCObjectModificationData
    private long sensorProxy;
    private String xmlConfig;
    private List<String> snmpPorts;
-   private short rackOrientation;
        
        /**
         * Constructor for creating modification data for given object
@@ -1618,6 +1619,15 @@ public class NXCObjectModificationData
    }
    
    /**
+    * Get rack orientation
+    * @return rack orientation
+    */
+   public RackOrientation getRackOrientation()
+   {
+      return rackOrientation;
+   }
+   
+   /**
     * Set rack placement data
     * 
     * @param rackId The rack ID to set
@@ -1625,7 +1635,7 @@ public class NXCObjectModificationData
     * @param rackPosition The rack position to set
     * @param rackHeight the rack height to set
     */
-   public void setRackPlacement(long rackId, UUID rackImage, short rackPosition, short rackHeight, short rackOrientation)
+   public void setRackPlacement(long rackId, UUID rackImage, short rackPosition, short rackHeight, RackOrientation rackOrientation)
    {
       this.rackId = rackId;
       this.rackImage = rackImage;
@@ -1955,22 +1965,4 @@ public class NXCObjectModificationData
    {
       return snmpPorts;
    }
-   
-   /**
-    * Set rack orientation
-    * @param rackOrientation to set
-    */
-   public void setRackOrientation(short rackOrientation)
-   {
-      this.rackOrientation = rackOrientation;
-   }
-   
-   /**
-    * Get rack orientation
-    * @return rack orientation
-    */
-   public short getRackOrientation()
-   {
-      return rackOrientation;
-   }
 }
index 0c77b8c..57cf29a 100644 (file)
@@ -5080,7 +5080,7 @@ public class NXCSession
          msg.setField(NXCPCodes.VID_RACK_IMAGE, data.getRackImage());
          msg.setFieldInt16(NXCPCodes.VID_RACK_POSITION, data.getRackPosition());
          msg.setFieldInt16(NXCPCodes.VID_RACK_HEIGHT, data.getRackHeight());
-         msg.setFieldInt16(NXCPCodes.VID_RACK_ORIENTATION, data.getRackOrientation());
+         msg.setFieldInt16(NXCPCodes.VID_RACK_ORIENTATION, data.getRackOrientation().getValue());
       }
 
       if (data.isFieldSet(NXCObjectModificationData.DASHBOARD_LIST))
diff --git a/src/client/java/netxms-client/src/main/java/org/netxms/client/constants/RackOrientation.java b/src/client/java/netxms-client/src/main/java/org/netxms/client/constants/RackOrientation.java
new file mode 100644 (file)
index 0000000..b678346
--- /dev/null
@@ -0,0 +1,81 @@
+/**
+ * NetXMS - open source network management system
+ * Copyright (C) 2003-2017 Raden Solutions
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.netxms.client.constants;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.netxms.base.Logger;
+
+/**
+ * Rack orientation
+ */
+public enum RackOrientation
+{
+   FILL(0),
+   FRONT(1),
+   REAR(2);
+
+   private int value;
+   private static Map<Integer, RackOrientation> lookupTable = new HashMap<Integer, RackOrientation>();
+
+   static
+   {
+      for(RackOrientation element : RackOrientation.values())
+      {
+         lookupTable.put(element.value, element);
+      }
+   }
+
+   /**
+    * Internal constructor
+    *  
+    * @param value integer value
+    */
+   private RackOrientation(int value)
+   {
+      this.value = value;
+   }
+
+   /**
+    * Get integer value
+    * 
+    * @return integer value
+    */
+   public int getValue()
+   {
+      return value;
+   }
+
+   /**
+    * Get enum element by integer value
+    * 
+    * @param value integer value
+    * @return enum element corresponding to given integer value or fall-back element for invalid value
+    */
+   public static RackOrientation getByValue(int value)
+   {
+      final RackOrientation element = lookupTable.get(value);
+      if (element == null)
+      {
+         Logger.warning(RackOrientation.class.getName(), "Unknown element " + value);
+         return FILL; // fall-back
+      }
+      return element;
+   }
+}
index 47b5079..0ab616e 100644 (file)
@@ -29,6 +29,7 @@ import org.netxms.client.NXCSession;
 import org.netxms.client.constants.AgentCacheMode;
 import org.netxms.client.constants.AgentCompressionMode;
 import org.netxms.client.constants.NodeType;
+import org.netxms.client.constants.RackOrientation;
 
 /**
  * Abstract base class for node objects.
@@ -132,13 +133,13 @@ public abstract class AbstractNode extends DataCollectionTarget implements RackE
        protected UUID rackImage;
        protected short rackPosition;
        protected short rackHeight;
+   protected RackOrientation rackOrientation;
    protected long chassisId;
    protected String sshLogin;
    protected String sshPassword;
    protected long sshProxyId;
    protected int portRowCount;
    protected int portNumberingScheme;
-   protected int rackOrientation;
        
        /**
         * Create new node object.
@@ -210,7 +211,7 @@ public abstract class AbstractNode extends DataCollectionTarget implements RackE
       sshProxyId = msg.getFieldAsInt64(NXCPCodes.VID_SSH_PROXY);
       portRowCount = msg.getFieldAsInt16(NXCPCodes.VID_PORT_ROW_COUNT);
       portNumberingScheme = msg.getFieldAsInt16(NXCPCodes.VID_PORT_NUMBERING_SCHEME);
-      rackOrientation = msg.getFieldAsInt16(NXCPCodes.VID_RACK_ORIENTATION);
+      rackOrientation = RackOrientation.getByValue(msg.getFieldAsInt32(NXCPCodes.VID_RACK_ORIENTATION));
                
                long bootTimeSeconds = msg.getFieldAsInt64(NXCPCodes.VID_BOOT_TIME);
                bootTime = (bootTimeSeconds > 0) ? new Date(bootTimeSeconds * 1000) : null;
@@ -794,16 +795,8 @@ public abstract class AbstractNode extends DataCollectionTarget implements RackE
    /* (non-Javadoc)
     * @see org.netxms.client.objects.RackElement#getRackOrientation()
     */
-   public int getRackOrientation()
+   public RackOrientation getRackOrientation()
    {
       return rackOrientation;
    }
-   
-   /* (non-Javadoc)
-    * @see org.netxms.client.objects.RackElement#setRackOrientation(int)
-    */
-   public void setRackOrientation(int rackOrientation)
-   {
-      this.rackOrientation = rackOrientation;
-   }
 }
index db16a62..c9908f9 100644 (file)
@@ -22,6 +22,7 @@ import java.util.UUID;
 import org.netxms.base.NXCPCodes;
 import org.netxms.base.NXCPMessage;
 import org.netxms.client.NXCSession;
+import org.netxms.client.constants.RackOrientation;
 
 /**
  * Chassis object
@@ -33,7 +34,7 @@ public class Chassis extends DataCollectionTarget implements RackElement
    protected UUID rackImage;
    protected short rackPosition;
    protected short rackHeight;
-   protected int rackOrientation;
+   protected RackOrientation rackOrientation;
 
    /**
     * @param msg
@@ -47,7 +48,7 @@ public class Chassis extends DataCollectionTarget implements RackElement
       rackImage = msg.getFieldAsUUID(NXCPCodes.VID_RACK_IMAGE);
       rackPosition = msg.getFieldAsInt16(NXCPCodes.VID_RACK_POSITION);
       rackHeight = msg.getFieldAsInt16(NXCPCodes.VID_RACK_HEIGHT);
-      rackOrientation = msg.getFieldAsInt16(NXCPCodes.VID_RACK_ORIENTATION);
+      rackOrientation = RackOrientation.getByValue(msg.getFieldAsInt32(NXCPCodes.VID_RACK_ORIENTATION));
    }
 
    /* (non-Javadoc)
@@ -116,17 +117,8 @@ public class Chassis extends DataCollectionTarget implements RackElement
     * @see org.netxms.client.objects.RackElement#getRackOrientation()
     */
    @Override
-   public int getRackOrientation()
+   public RackOrientation getRackOrientation()
    {
       return rackOrientation;
    }
-
-   /* (non-Javadoc)
-    * @see org.netxms.client.objects.RackElement#setRackOrientation(int)
-    */
-   @Override
-   public void setRackOrientation(int rackOrientation)
-   {
-      this.rackOrientation = rackOrientation;
-   }
 }
index 9f89fae..236dc98 100644 (file)
@@ -20,16 +20,13 @@ package org.netxms.client.objects;
 
 import java.util.UUID;
 import org.netxms.client.constants.ObjectStatus;
+import org.netxms.client.constants.RackOrientation;
 
 /**
  * Common interface for rack elements (anything that can be mounted in rack)
  */
 public interface RackElement
 {
-   public static final int RACK_POSITION_FRONT = 0;
-   public static final int RACK_POSITION_REAR = 1;
-   public static final int RACK_POSITION_FILL = 2;
-   
    /**
     * Get object ID
     * 
@@ -84,12 +81,5 @@ public interface RackElement
     * 
     * @return orientation of object in rack
     */
-   public int getRackOrientation();
-   
-   /**
-    * Set orientation of object in rack
-    * 
-    * @param rackOrientation to set
-    */
-   public void setRackOrientation(int rackOrientation);
+   public RackOrientation getRackOrientation();
 }
index d77f1a7..f016610 100644 (file)
@@ -26,6 +26,7 @@ import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IViewPart;
 import org.netxms.client.NXCSession;
+import org.netxms.client.constants.RackOrientation;
 import org.netxms.client.dashboards.DashboardElement;
 import org.netxms.client.objects.Rack;
 import org.netxms.ui.eclipse.console.resources.SharedColors;
@@ -97,8 +98,8 @@ public class RackDiagramElement extends ElementWidget
             }
          });
          
-         setRackFrontWidget(new RackWidget(rackArea, SWT.NONE, rack, RackWidget.RACK_FRONT_VIEW));
-         setRackRearWidget(new RackWidget(rackArea, SWT.NONE, rack, RackWidget.RACK_REAR_VIEW));
+         setRackFrontWidget(new RackWidget(rackArea, SWT.NONE, rack, RackOrientation.FRONT));
+         setRackRearWidget(new RackWidget(rackArea, SWT.NONE, rack, RackOrientation.REAR));
       }
       setLayout(new FillLayout());
    }
index a36fe9b..f9ee7db 100644 (file)
@@ -29,6 +29,7 @@ import org.eclipse.ui.dialogs.PropertyPage;
 import org.netxms.base.NXCommon;
 import org.netxms.client.NXCObjectModificationData;
 import org.netxms.client.NXCSession;
+import org.netxms.client.constants.RackOrientation;
 import org.netxms.client.objects.Rack;
 import org.netxms.client.objects.RackElement;
 import org.netxms.ui.eclipse.imagelibrary.widgets.ImageSelector;
@@ -45,7 +46,7 @@ import org.netxms.ui.eclipse.widgets.LabeledSpinner;
  */
 public class RackPlacement extends PropertyPage
 {
-   private final static String[] ORIENTATION = { "Front", "Rear", "Fill" };
+   private final static String[] ORIENTATION = { "Fill", "Front", "Rear" };
    
        private RackElement object;
        private ObjectSelector rackSelector;
@@ -114,7 +115,7 @@ public class RackPlacement extends PropertyPage
       rackHeight.setLayoutData(gd);
       rackOrientation = WidgetHelper.createLabeledCombo(dialogArea, SWT.READ_ONLY, "Orientation", gd);
       rackOrientation.setItems(ORIENTATION);
-      rackOrientation.setText(ORIENTATION[object.getRackOrientation()]);
+      rackOrientation.setText(ORIENTATION[object.getRackOrientation().getValue()]);
       
                return dialogArea;
        }
@@ -131,7 +132,7 @@ public class RackPlacement extends PropertyPage
                
                final NXCObjectModificationData md = new NXCObjectModificationData(object.getObjectId());
                md.setRackPlacement(rackSelector.getObjectId(), rackImageSelector.getImageGuid(), (short)rackPosition.getSelection(), (short)rackHeight.getSelection(),
-                                   (short)rackOrientation.getSelectionIndex());
+                                   RackOrientation.getByValue(rackOrientation.getSelectionIndex()));
                
                final NXCSession session = (NXCSession)ConsoleSharedData.getSession();
                new ConsoleJob(String.format(Messages.get().RackPlacement_UpdatingRackPlacement, object.getObjectName()), null, Activator.PLUGIN_ID, null) {
@@ -194,5 +195,6 @@ public class RackPlacement extends PropertyPage
                rackImageSelector.setImageGuid(NXCommon.EMPTY_GUID, true);
                rackPosition.setSelection(1);
                rackHeight.setSelection(1);
+               rackOrientation.select(0);
        }
 }
index b7004f5..f50fcc0 100644 (file)
@@ -35,6 +35,7 @@ import org.eclipse.swt.events.ControlEvent;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Menu;
+import org.netxms.client.constants.RackOrientation;
 import org.netxms.client.objects.AbstractObject;
 import org.netxms.client.objects.Rack;
 import org.netxms.ui.eclipse.console.resources.SharedColors;
@@ -183,10 +184,10 @@ public class RackTab extends ObjectTab implements ISelectionProvider
             }
          };
          
-         rackFrontWidget = new RackWidget(content, SWT.NONE, (Rack)object, RackWidget.RACK_FRONT_VIEW);
+         rackFrontWidget = new RackWidget(content, SWT.NONE, (Rack)object, RackOrientation.FRONT);
          rackFrontWidget.addSelectionListener(listener);
 
-         rackRearWidget = new RackWidget(content, SWT.NONE, (Rack)object, RackWidget.RACK_REAR_VIEW);
+         rackRearWidget = new RackWidget(content, SWT.NONE, (Rack)object, RackOrientation.REAR);
          rackRearWidget.addSelectionListener(listener);
          
          scroller.setMinSize(content.computeSize(SWT.DEFAULT, scroller.getSize().y));
index 1a50c3a..2f92272 100644 (file)
@@ -41,6 +41,7 @@ import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.widgets.Canvas;
 import org.eclipse.swt.widgets.Composite;
 import org.netxms.base.NXCommon;
+import org.netxms.client.constants.RackOrientation;
 import org.netxms.client.datacollection.DciValue;
 import org.netxms.client.objects.AbstractNode;
 import org.netxms.client.objects.AbstractObject;
@@ -62,11 +63,6 @@ import org.netxms.ui.eclipse.tools.WidgetHelper;
  */
 public class RackWidget extends Canvas implements PaintListener, DisposeListener, ImageUpdateListener, MouseListener, MouseTrackListener, MouseMoveListener
 {
-   // Rack views
-   public static final int RACK_FRONT_VIEW = 0;
-   public static final int RACK_REAR_VIEW = 1;
-   private static final String[] VIEW_LABELS = { "Front", "Back" };
-   
    private static final double UNIT_WH_RATIO = 10.85;
    private static final int BORDER_WIDTH_RATIO = 15;
    private static final int FULL_UNIT_WIDTH = 482;
@@ -79,6 +75,7 @@ public class RackWidget extends Canvas implements PaintListener, DisposeListener
    private static final int OBJECT_TOOLTIP_Y_MARGIN = 6;
    private static final int OBJECT_TOOLTIP_SPACING = 6;
    private static final String[] FONT_NAMES = { "Segoe UI", "Liberation Sans", "DejaVu Sans", "Verdana", "Arial" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+   private static final String[] VIEW_LABELS = { "Front", "Back" };
    
    private Rack rack;
    private Font[] labelFonts;
@@ -95,17 +92,17 @@ public class RackWidget extends Canvas implements PaintListener, DisposeListener
    private Font objectToolTipHeaderFont;
    private AbstractObject tooltipObject = null;
    private ColorCache colorCache;
-   private int view;
+   private RackOrientation view;
    
    /**
     * @param parent
     * @param style
     */
-   public RackWidget(Composite parent, int style, Rack rack, int view)
+   public RackWidget(Composite parent, int style, Rack rack, RackOrientation view)
    {
       super(parent, style | SWT.DOUBLE_BUFFERED);
       this.rack = rack;
-      this.view = (view > 1 ? 0 : view);
+      this.view = (view == RackOrientation.FILL) ? RackOrientation.FRONT : view;
       
       colorCache = new ColorCache(this);
       
@@ -175,8 +172,8 @@ public class RackWidget extends Canvas implements PaintListener, DisposeListener
       
       // Title
       gc.setFont(WidgetHelper.getBestFittingFont(gc, titleFonts, VIEW_LABELS[0], rect.width, TITLE_HEIGHT)); //$NON-NLS-1$
-      Point titleSize = gc.textExtent(VIEW_LABELS[view]);
-      gc.drawText(VIEW_LABELS[view], (rect.width / 2 - titleSize.x / 2) + UNIT_NUMBER_WIDTH + MARGIN_WIDTH, rect.y - TITLE_HEIGHT - MARGIN_HEIGHT / 2);
+      Point titleSize = gc.textExtent(VIEW_LABELS[view.getValue() - 1]);
+      gc.drawText(VIEW_LABELS[view.getValue() - 1], (rect.width / 2 - titleSize.x / 2) + UNIT_NUMBER_WIDTH + MARGIN_WIDTH, rect.y - TITLE_HEIGHT - MARGIN_HEIGHT / 2);
 
       // Rack itself
       gc.setBackground(SharedColors.getColor(SharedColors.RACK_EMPTY_SPACE, getDisplay()));
@@ -228,7 +225,7 @@ public class RackWidget extends Canvas implements PaintListener, DisposeListener
          if ((n.getRackPosition() < 1) || (n.getRackPosition() > rack.getHeight()) || 
              (rack.isTopBottomNumbering() && (n.getRackPosition() + n.getRackHeight() > rack.getHeight() + 1)) ||
              (!rack.isTopBottomNumbering() && (n.getRackPosition() - n.getRackHeight() < 0)) || 
-             ((n.getRackOrientation() == view) ? false : ((n.getRackOrientation() == RackElement.RACK_POSITION_FILL) ? false : true)))
+             ((n.getRackOrientation() != view) && (n.getRackOrientation() != RackOrientation.FILL)))
             continue;
          
          int topLine, bottomLine;
@@ -261,7 +258,7 @@ public class RackWidget extends Canvas implements PaintListener, DisposeListener
          }
          else // Draw default representation
          {
-            Image imageTop = (view == RACK_REAR_VIEW && n.getRackOrientation() == RackElement.RACK_POSITION_FILL) ? imageDefaultRear : imageDefaultTop;
+            Image imageTop = (view == RackOrientation.REAR && n.getRackOrientation() == RackOrientation.FILL) ? imageDefaultRear : imageDefaultTop;
             
             Rectangle r = imageTop.getBounds();
             if (n.getRackHeight() == 1)
@@ -270,8 +267,8 @@ public class RackWidget extends Canvas implements PaintListener, DisposeListener
             }
             else
             {
-               Image imageMiddle = (view == RACK_REAR_VIEW && n.getRackOrientation() == RackElement.RACK_POSITION_FILL) ? imageDefaultRear : imageDefaultMiddle;
-               Image imageBottom = (view == RACK_REAR_VIEW && n.getRackOrientation() == RackElement.RACK_POSITION_FILL) ? imageDefaultRear : imageDefaultBottom;
+               Image imageMiddle = (view == RackOrientation.REAR && n.getRackOrientation() == RackOrientation.FILL) ? imageDefaultRear : imageDefaultMiddle;
+               Image imageBottom = (view == RackOrientation.REAR && n.getRackOrientation() == RackOrientation.FILL) ? imageDefaultRear : imageDefaultBottom;
                if (rack.isTopBottomNumbering())
                {
                   unitRect.height = unitBaselines[n.getRackPosition()] - topLine;
index 6a128c7..e9221d1 100644 (file)
@@ -31,7 +31,7 @@ Chassis::Chassis() : DataCollectionTarget()
    m_rackId = 0;
    m_rackPosition = 0;
    m_rackHeight = 1;
-   m_rackOrientation = RACK_POSITION_FILL;
+   m_rackOrientation = FILL;
 }
 
 /**
@@ -43,7 +43,7 @@ Chassis::Chassis(const TCHAR *name, UINT32 controllerId) : DataCollectionTarget(
    m_rackId = 0;
    m_rackPosition = 0;
    m_rackHeight = 1;
-   m_rackOrientation = RACK_POSITION_FILL;
+   m_rackOrientation = FILL;
 }
 
 /**
@@ -164,7 +164,7 @@ void Chassis::fillMessageInternal(NXCPMessage *msg, UINT32 userId)
    msg->setField(VID_RACK_IMAGE, m_rackImage);
    msg->setField(VID_RACK_POSITION, m_rackPosition);
    msg->setField(VID_RACK_HEIGHT, m_rackHeight);
-   msg->setField(VID_RACK_ORIENTATION, m_rackOrientation);
+   msg->setField(VID_RACK_ORIENTATION, static_cast<INT16>(m_rackOrientation));
 }
 
 /**
@@ -186,7 +186,7 @@ UINT32 Chassis::modifyFromMessageInternal(NXCPMessage *request)
    if (request->isFieldExist(VID_RACK_HEIGHT))
       m_rackHeight = request->getFieldAsInt16(VID_RACK_HEIGHT);
    if (request->isFieldExist(VID_RACK_ORIENTATION))
-      m_rackOrientation = request->getFieldAsInt16(VID_RACK_ORIENTATION);
+      m_rackOrientation = static_cast<RackOrientation>(request->getFieldAsInt16(VID_RACK_ORIENTATION));
 
    return DataCollectionTarget::modifyFromMessageInternal(request);
 }
@@ -281,7 +281,7 @@ bool Chassis::loadFromDatabase(DB_HANDLE hdb, UINT32 id)
    m_rackImage = DBGetFieldGUID(hResult, 0, 2);
    m_rackPosition = DBGetFieldULong(hResult, 0, 3);
    m_rackHeight = DBGetFieldULong(hResult, 0, 4);
-   m_rackHeight = DBGetFieldULong(hResult, 0, 5);
+   m_rackOrientation = static_cast<RackOrientation>(DBGetFieldLong(hResult, 0, 5));
 
    DBFreeResult(hResult);
    DBFreeStatement(hStmt);
index 58bf109..1043d0c 100644 (file)
@@ -125,7 +125,7 @@ Node::Node() : DataCollectionTarget()
    m_portNumberingScheme = NDD_PN_UNKNOWN;
    m_portRowCount = 0;
    m_agentCompressionMode = NODE_AGENT_COMPRESSION_DEFAULT;
-   m_rackOrientation = RACK_POSITION_FILL;
+   m_rackOrientation = FILL;
 }
 
 /**
@@ -229,7 +229,7 @@ Node::Node(const InetAddress& addr, UINT32 flags, UINT32 capabilities, UINT32 ag
    m_portNumberingScheme = NDD_PN_UNKNOWN;
    m_portRowCount = 0;
    m_agentCompressionMode = NODE_AGENT_COMPRESSION_DEFAULT;
-   m_rackOrientation = RACK_POSITION_FILL;
+   m_rackOrientation = FILL;
 }
 
 /**
@@ -416,7 +416,7 @@ bool Node::loadFromDatabase(DB_HANDLE hdb, UINT32 dwId)
    m_capabilities = DBGetFieldULong(hResult, 0, 48);
    m_failTimeSNMP = DBGetFieldLong(hResult, 0, 49);
    m_failTimeAgent = DBGetFieldLong(hResult, 0, 50);
-   m_rackOrientation = DBGetFieldULong(hResult, 0, 51);
+   m_rackOrientation = static_cast<RackOrientation>(DBGetFieldLong(hResult, 0, 51));
 
    DBFreeResult(hResult);
    DBFreeStatement(hStmt);
@@ -4786,7 +4786,7 @@ void Node::fillMessageInternal(NXCPMessage *pMsg, UINT32 userId)
    pMsg->setField(VID_PORT_ROW_COUNT, m_portRowCount);
    pMsg->setField(VID_PORT_NUMBERING_SCHEME, m_portNumberingScheme);
    pMsg->setField(VID_AGENT_COMPRESSION_MODE, m_agentCompressionMode);
-   pMsg->setField(VID_RACK_ORIENTATION, m_rackOrientation);
+   pMsg->setField(VID_RACK_ORIENTATION, static_cast<INT16>(m_rackOrientation));
 }
 
 /**
@@ -5047,7 +5047,7 @@ UINT32 Node::modifyFromMessageInternal(NXCPMessage *pRequest)
       m_agentCompressionMode = pRequest->getFieldAsInt16(VID_AGENT_COMPRESSION_MODE);
 
    if (pRequest->isFieldExist(VID_RACK_ORIENTATION))
-      m_rackOrientation = pRequest->getFieldAsUInt16(VID_RACK_ORIENTATION);
+      m_rackOrientation = static_cast<RackOrientation>(pRequest->getFieldAsUInt16(VID_RACK_ORIENTATION));
 
    return DataCollectionTarget::modifyFromMessageInternal(pRequest);
 }
index b8d48ce..d384562 100644 (file)
@@ -1428,10 +1428,15 @@ public:
    NXSL_Array *getNodesForNXSL();
 };
 
-// Rack element orientation
-#define RACK_POSITION_FRONT 0
-#define RACK_POSITION_REAR  1
-#define RACK_POSITION_FILL  2
+/**
+ * Rack orientation
+ */
+enum RackOrientation
+{
+   FILL = 0,
+   FRONT = 1,
+   REAR = 2
+};
 
 /**
  * Chassis (represents physical chassis)
@@ -1444,7 +1449,7 @@ protected:
    INT16 m_rackPosition;
    UINT32 m_rackId;
    uuid m_rackImage;
-   INT16 m_rackOrientation;
+   RackOrientation m_rackOrientation;
 
    virtual void fillMessageInternal(NXCPMessage *msg, UINT32 userId);
    virtual UINT32 modifyFromMessageInternal(NXCPMessage *request);
@@ -1755,7 +1760,7 @@ protected:
        UINT32 m_sshProxy;
        UINT32 m_portNumberingScheme;
        UINT32 m_portRowCount;
-       INT16 m_rackOrientation;
+       RackOrientation m_rackOrientation;
 
    virtual void statusPoll(PollerInfo *poller, ClientSession *session, UINT32 rqId);
    virtual void configurationPoll(PollerInfo *poller, ClientSession *session, UINT32 rqId);
index f488099..ed29ba8 100644 (file)
@@ -50,10 +50,10 @@ static bool H_UpgradeFromV13()
 static bool H_UpgradeFromV12()
 {
    static const TCHAR *batch =
-            _T("ALTER TABLE nodes ADD rack_orientation integer null\n")
-            _T("ALTER TABLE chassis ADD rack_orientation integer null\n")
-            _T("UPDATE nodes SET rack_orientation=2\n")
-            _T("UPDATE chassis SET rack_orientation=2\n")
+            _T("ALTER TABLE nodes ADD rack_orientation integer\n")
+            _T("ALTER TABLE chassis ADD rack_orientation integer\n")
+            _T("UPDATE nodes SET rack_orientation=0\n")
+            _T("UPDATE chassis SET rack_orientation=0\n")
             _T("<END>");
    CHK_EXEC(SQLBatch(batch));
 
index d77f1a7..f016610 100644 (file)
@@ -26,6 +26,7 @@ import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IViewPart;
 import org.netxms.client.NXCSession;
+import org.netxms.client.constants.RackOrientation;
 import org.netxms.client.dashboards.DashboardElement;
 import org.netxms.client.objects.Rack;
 import org.netxms.ui.eclipse.console.resources.SharedColors;
@@ -97,8 +98,8 @@ public class RackDiagramElement extends ElementWidget
             }
          });
          
-         setRackFrontWidget(new RackWidget(rackArea, SWT.NONE, rack, RackWidget.RACK_FRONT_VIEW));
-         setRackRearWidget(new RackWidget(rackArea, SWT.NONE, rack, RackWidget.RACK_REAR_VIEW));
+         setRackFrontWidget(new RackWidget(rackArea, SWT.NONE, rack, RackOrientation.FRONT));
+         setRackRearWidget(new RackWidget(rackArea, SWT.NONE, rack, RackOrientation.REAR));
       }
       setLayout(new FillLayout());
    }
index a36fe9b..f9ee7db 100644 (file)
@@ -29,6 +29,7 @@ import org.eclipse.ui.dialogs.PropertyPage;
 import org.netxms.base.NXCommon;
 import org.netxms.client.NXCObjectModificationData;
 import org.netxms.client.NXCSession;
+import org.netxms.client.constants.RackOrientation;
 import org.netxms.client.objects.Rack;
 import org.netxms.client.objects.RackElement;
 import org.netxms.ui.eclipse.imagelibrary.widgets.ImageSelector;
@@ -45,7 +46,7 @@ import org.netxms.ui.eclipse.widgets.LabeledSpinner;
  */
 public class RackPlacement extends PropertyPage
 {
-   private final static String[] ORIENTATION = { "Front", "Rear", "Fill" };
+   private final static String[] ORIENTATION = { "Fill", "Front", "Rear" };
    
        private RackElement object;
        private ObjectSelector rackSelector;
@@ -114,7 +115,7 @@ public class RackPlacement extends PropertyPage
       rackHeight.setLayoutData(gd);
       rackOrientation = WidgetHelper.createLabeledCombo(dialogArea, SWT.READ_ONLY, "Orientation", gd);
       rackOrientation.setItems(ORIENTATION);
-      rackOrientation.setText(ORIENTATION[object.getRackOrientation()]);
+      rackOrientation.setText(ORIENTATION[object.getRackOrientation().getValue()]);
       
                return dialogArea;
        }
@@ -131,7 +132,7 @@ public class RackPlacement extends PropertyPage
                
                final NXCObjectModificationData md = new NXCObjectModificationData(object.getObjectId());
                md.setRackPlacement(rackSelector.getObjectId(), rackImageSelector.getImageGuid(), (short)rackPosition.getSelection(), (short)rackHeight.getSelection(),
-                                   (short)rackOrientation.getSelectionIndex());
+                                   RackOrientation.getByValue(rackOrientation.getSelectionIndex()));
                
                final NXCSession session = (NXCSession)ConsoleSharedData.getSession();
                new ConsoleJob(String.format(Messages.get().RackPlacement_UpdatingRackPlacement, object.getObjectName()), null, Activator.PLUGIN_ID, null) {
@@ -194,5 +195,6 @@ public class RackPlacement extends PropertyPage
                rackImageSelector.setImageGuid(NXCommon.EMPTY_GUID, true);
                rackPosition.setSelection(1);
                rackHeight.setSelection(1);
+               rackOrientation.select(0);
        }
 }
index dd3d3ad..1f503b9 100644 (file)
@@ -35,6 +35,7 @@ import org.eclipse.swt.events.ControlEvent;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Menu;
+import org.netxms.client.constants.RackOrientation;
 import org.netxms.client.objects.AbstractObject;
 import org.netxms.client.objects.Rack;
 import org.netxms.ui.eclipse.console.resources.SharedColors;
@@ -182,10 +183,10 @@ public class RackTab extends ObjectTab implements ISelectionProvider
             }
          };
          
-         rackFrontWidget = new RackWidget(content, SWT.NONE, (Rack)object, RackWidget.RACK_FRONT_VIEW);
+         rackFrontWidget = new RackWidget(content, SWT.NONE, (Rack)object, RackOrientation.FRONT);
          rackFrontWidget.addSelectionListener(listener);
 
-         rackRearWidget = new RackWidget(content, SWT.NONE, (Rack)object, RackWidget.RACK_REAR_VIEW);
+         rackRearWidget = new RackWidget(content, SWT.NONE, (Rack)object, RackOrientation.REAR);
          rackRearWidget.addSelectionListener(listener);
          
          scroller.setMinSize(content.computeSize(SWT.DEFAULT, scroller.getSize().y));
index a759e85..b8a6f64 100644 (file)
@@ -41,6 +41,7 @@ import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.widgets.Canvas;
 import org.eclipse.swt.widgets.Composite;
 import org.netxms.base.NXCommon;
+import org.netxms.client.constants.RackOrientation;
 import org.netxms.client.datacollection.DciValue;
 import org.netxms.client.objects.AbstractNode;
 import org.netxms.client.objects.AbstractObject;
@@ -62,11 +63,6 @@ import org.netxms.ui.eclipse.tools.WidgetHelper;
  */
 public class RackWidget extends Canvas implements PaintListener, DisposeListener, ImageUpdateListener, MouseListener, MouseTrackListener, MouseMoveListener
 {
-   // Rack views
-   public static final int RACK_FRONT_VIEW = 0;
-   public static final int RACK_REAR_VIEW = 1;
-   private static final String[] VIEW_LABELS = { "Front", "Back" };
-   
    private static final double UNIT_WH_RATIO = 10.85;
    private static final int BORDER_WIDTH_RATIO = 15;
    private static final int FULL_UNIT_WIDTH = 482;
@@ -79,6 +75,7 @@ public class RackWidget extends Canvas implements PaintListener, DisposeListener
    private static final int OBJECT_TOOLTIP_Y_MARGIN = 6;
    private static final int OBJECT_TOOLTIP_SPACING = 6;
    private static final String[] FONT_NAMES = { "Segoe UI", "Liberation Sans", "DejaVu Sans", "Verdana", "Arial" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+   private static final String[] VIEW_LABELS = { "Front", "Back" };
    
    private Rack rack;
    private Font[] labelFonts;
@@ -95,17 +92,17 @@ public class RackWidget extends Canvas implements PaintListener, DisposeListener
    private Font objectToolTipHeaderFont;
    private AbstractObject tooltipObject = null;
    private ColorCache colorCache;
-   private int view;
+   private RackOrientation view;
    
    /**
     * @param parent
     * @param style
     */
-   public RackWidget(Composite parent, int style, Rack rack, int view)
+   public RackWidget(Composite parent, int style, Rack rack, RackOrientation view)
    {
       super(parent, style | SWT.DOUBLE_BUFFERED);
       this.rack = rack;
-      this.view = (view > 1 ? 0 : view);
+      this.view = (view == RackOrientation.FILL) ? RackOrientation.FRONT : view;
       
       colorCache = new ColorCache(this);
       
@@ -175,8 +172,8 @@ public class RackWidget extends Canvas implements PaintListener, DisposeListener
       
       // Title
       gc.setFont(WidgetHelper.getBestFittingFont(gc, titleFonts, VIEW_LABELS[0], rect.width, TITLE_HEIGHT)); //$NON-NLS-1$
-      Point titleSize = gc.textExtent(VIEW_LABELS[view]);
-      gc.drawText(VIEW_LABELS[view], (rect.width / 2 - titleSize.x / 2) + UNIT_NUMBER_WIDTH + MARGIN_WIDTH, rect.y - TITLE_HEIGHT - MARGIN_HEIGHT / 2);
+      Point titleSize = gc.textExtent(VIEW_LABELS[view.getValue() - 1]);
+      gc.drawText(VIEW_LABELS[view.getValue() - 1], (rect.width / 2 - titleSize.x / 2) + UNIT_NUMBER_WIDTH + MARGIN_WIDTH, rect.y - TITLE_HEIGHT - MARGIN_HEIGHT / 2);
 
       // Rack itself
       gc.setBackground(SharedColors.getColor(SharedColors.RACK_EMPTY_SPACE, getDisplay()));
@@ -228,7 +225,7 @@ public class RackWidget extends Canvas implements PaintListener, DisposeListener
          if ((n.getRackPosition() < 1) || (n.getRackPosition() > rack.getHeight()) || 
              (rack.isTopBottomNumbering() && (n.getRackPosition() + n.getRackHeight() > rack.getHeight() + 1)) ||
              (!rack.isTopBottomNumbering() && (n.getRackPosition() - n.getRackHeight() < 0)) || 
-             ((n.getRackOrientation() == view) ? false : ((n.getRackOrientation() == RackElement.RACK_POSITION_FILL) ? false : true)))
+             ((n.getRackOrientation() != view) && (n.getRackOrientation() != RackOrientation.FILL)))
             continue;
          
          int topLine, bottomLine;
@@ -261,7 +258,7 @@ public class RackWidget extends Canvas implements PaintListener, DisposeListener
          }
          else // Draw default representation
          {
-            Image imageTop = (view == RACK_REAR_VIEW && n.getRackOrientation() == RackElement.RACK_POSITION_FILL) ? imageDefaultRear : imageDefaultTop;
+            Image imageTop = (view == RackOrientation.REAR && n.getRackOrientation() == RackOrientation.FILL) ? imageDefaultRear : imageDefaultTop;
             
             Rectangle r = imageTop.getBounds();
             if (n.getRackHeight() == 1)
@@ -270,8 +267,8 @@ public class RackWidget extends Canvas implements PaintListener, DisposeListener
             }
             else
             {
-               Image imageMiddle = (view == RACK_REAR_VIEW && n.getRackOrientation() == RackElement.RACK_POSITION_FILL) ? imageDefaultRear : imageDefaultMiddle;
-               Image imageBottom = (view == RACK_REAR_VIEW && n.getRackOrientation() == RackElement.RACK_POSITION_FILL) ? imageDefaultRear : imageDefaultBottom;
+               Image imageMiddle = (view == RackOrientation.REAR && n.getRackOrientation() == RackOrientation.FILL) ? imageDefaultRear : imageDefaultMiddle;
+               Image imageBottom = (view == RackOrientation.REAR && n.getRackOrientation() == RackOrientation.FILL) ? imageDefaultRear : imageDefaultBottom;
                if (rack.isTopBottomNumbering())
                {
                   unitRect.height = unitBaselines[n.getRackPosition()] - topLine;
@@ -495,6 +492,7 @@ public class RackWidget extends Canvas implements PaintListener, DisposeListener
       imageDefaultTop.dispose();
       imageDefaultMiddle.dispose();
       imageDefaultBottom.dispose();
+      imageDefaultRear.dispose();
       
       ImageProvider.getInstance().removeUpdateListener(this);
    }