From d39838de667f4b4d325a5fc0879425b88d46f517 Mon Sep 17 00:00:00 2001
From: pompert <sdos@astron.nl>
Date: Fri, 9 Jun 2006 14:24:46 +0000
Subject: [PATCH] BugID: 701 Additions: -Swing code that triggers the plotter's
 updatedata method. -Extra popupmenu that enables the user to add data to an
 existing plot (has to be further implemented)

---
 SAS/OTB/OTB/src/ParmDBConfiguration.xml       |  2 +-
 .../lofar/sas/otb/util/plotter/PlotSlot.java  |  8 +++---
 .../sas/otb/util/plotter/PlotSlotManager.java | 25 +++++++++++++++++
 .../sas/otb/util/plotter/PlotSlotsPanel.java  | 12 ++++++++
 .../sas/otbcomponents/ParmDBPlotPanel.java    | 28 +++++++++++++++++--
 5 files changed, 68 insertions(+), 7 deletions(-)

diff --git a/SAS/OTB/OTB/src/ParmDBConfiguration.xml b/SAS/OTB/OTB/src/ParmDBConfiguration.xml
index 140851fe223..20a893d7dd6 100644
--- a/SAS/OTB/OTB/src/ParmDBConfiguration.xml
+++ b/SAS/OTB/OTB/src/ParmDBConfiguration.xml
@@ -11,7 +11,7 @@
         <!-- Only one server can be specified at this time. Please modify this server node if needed -->
         <server id="ParmDB1" name="ParmDB on LOFAR17">
             <connection>                
-                <rmihostname>lofar17.astron.nl</rmihostname>
+                <rmihostname>localhost</rmihostname>
                 <rmiport>10668</rmiport>
             </connection>
             <tables>
diff --git a/SAS/OTB/OTB/src/nl/astron/lofar/sas/otb/util/plotter/PlotSlot.java b/SAS/OTB/OTB/src/nl/astron/lofar/sas/otb/util/plotter/PlotSlot.java
index af0d57d3ac4..5f592904506 100644
--- a/SAS/OTB/OTB/src/nl/astron/lofar/sas/otb/util/plotter/PlotSlot.java
+++ b/SAS/OTB/OTB/src/nl/astron/lofar/sas/otb/util/plotter/PlotSlot.java
@@ -116,8 +116,8 @@ public class PlotSlot extends JPanel{
             add(itsPlot,BorderLayout.CENTER);
         } catch (PlotterException ex) {
             JTextArea error = new JTextArea(ex.getMessage());
-            error.setColumns(50);
-            add(new JTextArea(ex.getMessage()),BorderLayout.CENTER);
+            error.setColumns(20);
+            add(error,BorderLayout.CENTER);
             ex.printStackTrace();
         }
     }
@@ -135,8 +135,8 @@ public class PlotSlot extends JPanel{
                 
             } catch (PlotterException ex) {
                 JTextArea error = new JTextArea(ex.getMessage());
-                error.setColumns(50);
-                add(new JTextArea(ex.getMessage()),BorderLayout.CENTER);
+                error.setColumns(20);
+                add(error,BorderLayout.CENTER);
                 ex.printStackTrace();
             }
             
diff --git a/SAS/OTB/OTB/src/nl/astron/lofar/sas/otb/util/plotter/PlotSlotManager.java b/SAS/OTB/OTB/src/nl/astron/lofar/sas/otb/util/plotter/PlotSlotManager.java
index 994938fd9e8..47b2bf98947 100644
--- a/SAS/OTB/OTB/src/nl/astron/lofar/sas/otb/util/plotter/PlotSlotManager.java
+++ b/SAS/OTB/OTB/src/nl/astron/lofar/sas/otb/util/plotter/PlotSlotManager.java
@@ -125,6 +125,19 @@ public class PlotSlotManager{
         
         return availableSlots;
     }
+    public int[] getOccupiedSlotIndexes(){
+        int[] occupiedSlots = null;
+        occupiedSlots = new int[countOccupiedSlots()];
+        int index = 0;
+        for(PlotSlot slot : itsPlotSlots){
+            if(!slot.isEmpty()){
+                occupiedSlots[index] = itsPlotSlots.indexOf(slot)+1;
+                index++;
+            }
+        }
+        
+        return occupiedSlots;
+    }
     
     public boolean areSlotsAvailable(){
         boolean slotsAvailable = false;
@@ -144,6 +157,15 @@ public class PlotSlotManager{
         }
         return numberOfAvailableSlots;
     }
+    public int countOccupiedSlots(){
+        int numberOfOccupiedSlots = 0;
+        for(PlotSlot slot : itsPlotSlots){
+            if(!slot.isEmpty()){
+                numberOfOccupiedSlots++;
+            }
+        }
+        return numberOfOccupiedSlots;
+    }
     
     public void createPlotInSlot(int index, Object constraints){
         getSlot(index).addPlot(constraints);
@@ -203,6 +225,9 @@ public class PlotSlotManager{
     public boolean isSlotAvailable(int index){
         return getSlot(index).isEmpty();
     }
+    public boolean isSlotOccupied(int index){
+        return !getSlot(index).isEmpty();
+    }
     
     /**
      * Utility field used by event firing mechanism.
diff --git a/SAS/OTB/OTB/src/nl/astron/lofar/sas/otb/util/plotter/PlotSlotsPanel.java b/SAS/OTB/OTB/src/nl/astron/lofar/sas/otb/util/plotter/PlotSlotsPanel.java
index e98c96a0970..65336d5c4f4 100644
--- a/SAS/OTB/OTB/src/nl/astron/lofar/sas/otb/util/plotter/PlotSlotsPanel.java
+++ b/SAS/OTB/OTB/src/nl/astron/lofar/sas/otb/util/plotter/PlotSlotsPanel.java
@@ -74,6 +74,15 @@ public class PlotSlotsPanel extends javax.swing.JPanel {
             throw new IllegalArgumentException("A plot already exists in slot "+index);
         }
     }
+    /** adds a button to the BeanForm */
+    public void addDataToPlot(int slotIndex,Object constraints) throws IllegalArgumentException{
+        if(itsSlotManager.isSlotOccupied(slotIndex)){
+            itsSlotManager.modifyPlotInSlot(slotIndex,constraints);
+        }else{
+            throw new IllegalArgumentException("A plot was not found in slot "+slotIndex);
+        }
+    }
+    
     public void clearSlots(){
         itsSlotManager.clearSlots();
         repaint();
@@ -95,6 +104,9 @@ public class PlotSlotsPanel extends javax.swing.JPanel {
     public int[] getAvailableSlotIndexes(){
         return itsSlotManager.getAvailableSlotIndexes();
     }
+    public int[] getOccupiedSlotIndexes(){
+        return itsSlotManager.getOccupiedSlotIndexes();
+    }
     
     private void rearrangeSlotGrid(){
         slotsPanel.removeAll();
diff --git a/SAS/OTB/OTB/src/nl/astron/lofar/sas/otbcomponents/ParmDBPlotPanel.java b/SAS/OTB/OTB/src/nl/astron/lofar/sas/otbcomponents/ParmDBPlotPanel.java
index 29f771902d9..5c546012489 100644
--- a/SAS/OTB/OTB/src/nl/astron/lofar/sas/otbcomponents/ParmDBPlotPanel.java
+++ b/SAS/OTB/OTB/src/nl/astron/lofar/sas/otbcomponents/ParmDBPlotPanel.java
@@ -147,6 +147,25 @@ public class ParmDBPlotPanel extends javax.swing.JPanel implements IViewPanel{
             }
             aPopupMenu.add(addSlotMenu);
         }
+        int[] occupiedSlots = itsSlotsPanel.getOccupiedSlotIndexes();
+        if(occupiedSlots.length > 0){
+            JMenu addSlotMenu=new JMenu("Add to plot in slot");
+                
+            logger.trace("Occupied slots to put in popup menu: "+ availableSlots.length);
+            for(int i = 0; i < occupiedSlots.length; i++){
+                JMenuItem aMenuItem=new JMenuItem(""+occupiedSlots[i]);
+                aMenuItem.setActionCommand("Add to plot in slot "+occupiedSlots[i]);
+                aMenuItem.addActionListener(new java.awt.event.ActionListener() {
+                    public void actionPerformed(java.awt.event.ActionEvent evt) {
+                        popupMenuHandler(evt);
+                    }
+                });
+                
+                addSlotMenu.add(aMenuItem);
+                
+            }
+            aPopupMenu.add(addSlotMenu);
+        }
         aPopupMenu.setOpaque(true);
         aPopupMenu.show(aComponent, x, y );
     }
@@ -166,6 +185,11 @@ public class ParmDBPlotPanel extends javax.swing.JPanel implements IViewPanel{
             logger.debug("Plot Slot extrapolated: "+slotSelected);
             itsSlotsPanel.addPlotToSlot(slotSelected,constructPlotterConstraints(itsParamName));
         }
+        else if(evt.getActionCommand().startsWith("Add to plot in slot")){
+            int slotSelected = Integer.parseInt(evt.getActionCommand().toString().substring(20));
+            logger.debug("Plot Slot extrapolated: "+slotSelected);
+            itsSlotsPanel.addDataToPlot(slotSelected,constructPlotterConstraints(itsParamName));
+        }
     }
     
     private Object constructPlotterConstraints(String aParamName){
@@ -192,8 +216,8 @@ public class ParmDBPlotPanel extends javax.swing.JPanel implements IViewPanel{
                 double endx =Double.parseDouble(paramValues.get(1).toString());
                 double starty = Double.parseDouble(paramValues.get(2).toString());
                 double endy = Double.parseDouble(paramValues.get(3).toString());
-                int numx = Integer.parseInt("5");
-                int numy = Integer.parseInt("5");
+                int numx = Integer.parseInt("10");
+                int numy = Integer.parseInt("10");
                 
                 passToDataAccess[0] = cloneParamName;
                 passToDataAccess[1] = ""+startx;
-- 
GitLab