Skip to content
Snippets Groups Projects
Commit 708e948f authored by pompert's avatar pompert
Browse files

701

Additions:
-Value removal for plots is now working
Mods:
-External viewers are set to be on top of every other screen.
parent 9a8b2a5d
No related branches found
No related tags found
No related merge requests found
/* /*
* PlotDataAccessParmDBImpl.java * PlotDataAccessParmDBImpl.java
* *
* Copyright (C) 2002-2007 * Copyright (C) 2002-2007
...@@ -21,46 +21,48 @@ ...@@ -21,46 +21,48 @@
* *
*/ */
package nl.astron.lofar.java.cep.jparmfacade; package nl.astron.lofar.sas.otb.util.plotter;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.Vector; import java.util.Vector;
import nl.astron.lofar.java.cep.jparmfacade.jParmFacadeInterface;
import nl.astron.lofar.java.gui.plotter.IPlotDataAccess; import nl.astron.lofar.java.gui.plotter.IPlotDataAccess;
import nl.astron.lofar.java.gui.plotter.PlotConstants; import nl.astron.lofar.java.gui.plotter.PlotConstants;
import nl.astron.lofar.java.gui.plotter.exceptions.PlotterDataAccessException; import nl.astron.lofar.java.gui.plotter.exceptions.PlotterDataAccessException;
/** /**
* This class provides an implementation of IPlotDataAccess for use with LOFAR's * This class provides an implementation of IPlotDataAccess for use with LOFAR's
* jParmFacade interface. It manages connections to that interface, and allows * jParmFacade interface. It manages connections to that interface, and allows
* the plotter framework to generate plots of data present in the ParmDB. * the plotter framework to generate plots of data present in the ParmDB.
* *
* @see nl.astron.lofar.java.cep.jparmfacade.jParmFacade * @see nl.astron.lofar.java.cep.jparmfacade.jParmFacade
* @created 19-04-2006, 11:00 * @created 19-04-2006, 11:00
* @author pompert * @author pompert
* @version $Id$ * @version $Id$
* @updated 19-apr-2006, 11:00 * @updated 19-apr-2006, 11:00
*/ */
public class PlotDataAccessParmDBImpl implements IPlotDataAccess{ public class PlotDataAccessParmDBImpl implements IPlotDataAccess{
private static final int requiredDataConstraints = 7; private static final int requiredDataConstraints = 7;
//Location of ParmDB table file(s) //Location of ParmDB table file(s)
private static jParmFacadeInterface parmDB = null; private static jParmFacadeInterface parmDB = null;
/** /**
* *
*Creates a new instance of PlotDataAccessParmDBImpl *Creates a new instance of PlotDataAccessParmDBImpl
* *
*/ */
public PlotDataAccessParmDBImpl(){ public PlotDataAccessParmDBImpl(){
} }
/** /**
* *
...@@ -69,11 +71,11 @@ public class PlotDataAccessParmDBImpl implements IPlotDataAccess{ ...@@ -69,11 +71,11 @@ public class PlotDataAccessParmDBImpl implements IPlotDataAccess{
*/ */
public void finalize() throws Throwable { public void finalize() throws Throwable {
parmDB = null; parmDB = null;
} }
/** /**
*
* This method, the most important one, makes a Plotter compliant dataset using * This method, the most important one, makes a Plotter compliant dataset using
* the constraints provided by the PlotPanel, and to do that, it uses the * the constraints provided by the PlotPanel, and to do that, it uses the
* jParmFacade interface to get the data. * jParmFacade interface to get the data.
...@@ -91,7 +93,7 @@ public class PlotDataAccessParmDBImpl implements IPlotDataAccess{ ...@@ -91,7 +93,7 @@ public class PlotDataAccessParmDBImpl implements IPlotDataAccess{
* @throws PlotterDataAccessException will be thrown if anything goes wrong * @throws PlotterDataAccessException will be thrown if anything goes wrong
* with the ParmDB interface and calls to it. * with the ParmDB interface and calls to it.
*/ */
@SuppressWarnings("unchecked")
public HashMap retrieveData(Object constraints) throws PlotterDataAccessException{ public HashMap retrieveData(Object constraints) throws PlotterDataAccessException{
if(parmDB == null){ if(parmDB == null){
this.initiateConnectionToParmDB(constraints); this.initiateConnectionToParmDB(constraints);
...@@ -195,7 +197,7 @@ public class PlotDataAccessParmDBImpl implements IPlotDataAccess{ ...@@ -195,7 +197,7 @@ public class PlotDataAccessParmDBImpl implements IPlotDataAccess{
* *
* *
*/ */
@SuppressWarnings("unchecked")
public HashMap updateData(HashMap currentData, Object constraints) throws PlotterDataAccessException{ public HashMap updateData(HashMap currentData, Object constraints) throws PlotterDataAccessException{
if(parmDB == null){ if(parmDB == null){
...@@ -204,33 +206,64 @@ public class PlotDataAccessParmDBImpl implements IPlotDataAccess{ ...@@ -204,33 +206,64 @@ public class PlotDataAccessParmDBImpl implements IPlotDataAccess{
} }
//try{ //try{
LinkedList<HashMap> currentValuesInPlot = (LinkedList<HashMap>)currentData.get(PlotConstants.DATASET_VALUES);
HashMap<String,Object> operatorsOnDataset = (HashMap<String,Object>)constraints;
if(operatorsOnDataset.containsKey(PlotConstants.DATASET_OPERATOR_ADD)){
HashMap<String,Object> addDataSet = (HashMap<String,Object>)operatorsOnDataset.get(PlotConstants.DATASET_OPERATOR_ADD);
String[] constraintsArray = (String[])addDataSet.get("PARMDBCONSTRAINTS");
Vector names = getNames(constraintsArray[0]);
LinkedList<HashMap> currentValuesInPlot = (LinkedList<HashMap>)currentData.get(PlotConstants.DATASET_VALUES); if(names != null && names.size()>=1 && constraintsArray.length == this.requiredDataConstraints){
HashSet<HashMap> toBeAddedValueObjects = new HashSet<HashMap>();
LinkedList<HashMap> newParmValues = getParmValues(names,constraintsArray);
Iterator anIterator = newParmValues.iterator();
while(anIterator.hasNext()){
boolean addData = true;
HashMap parmValue = (HashMap)anIterator.next();
Iterator anIterator2 = currentValuesInPlot.iterator();
while(anIterator2.hasNext()){
HashMap parmValue2 = (HashMap)anIterator2.next();
String compareValue = (String)parmValue2.get(PlotConstants.DATASET_VALUELABEL);
if(parmValue.get(PlotConstants.DATASET_VALUELABEL).equals(compareValue)){
addData = false;
}
}
if(addData){
toBeAddedValueObjects.add(parmValue);
}
}
currentValuesInPlot.addAll(toBeAddedValueObjects);
}
}
if(operatorsOnDataset.containsKey(PlotConstants.DATASET_OPERATOR_MODIFY)){
HashMap<String,Object> operatorsOnDataset = (HashMap<String,Object>)constraints; String[] constraintsArray = (String[])operatorsOnDataset.get(PlotConstants.DATASET_OPERATOR_MODIFY);
//TODO: IMPLEMENT
if(operatorsOnDataset.containsKey(PlotConstants.DATASET_OPERATOR_ADD)){ }
HashMap<String,Object> addDataSet = (HashMap<String,Object>)operatorsOnDataset.get(PlotConstants.DATASET_OPERATOR_ADD); if(operatorsOnDataset.containsKey(PlotConstants.DATASET_OPERATOR_DELETE)){
String[] constraintsArray = (String[])addDataSet.get("PARMDBCONSTRAINTS"); HashSet<HashMap> toBeDeletedValueObjects = new HashSet<HashMap>();
Vector names = getNames(constraintsArray[0]); String[] toBeDeletedValues = (String[])operatorsOnDataset.get(PlotConstants.DATASET_OPERATOR_DELETE);
for(int i = 0; i < toBeDeletedValues.length; i++){
if(names != null && names.size()>=1 && constraintsArray.length == this.requiredDataConstraints){ String aValueToBeDeleted = toBeDeletedValues[i];
//Every parameter Iterator anIterator = currentValuesInPlot.iterator();
currentValuesInPlot.addAll(getParmValues(names,constraintsArray)); while(anIterator.hasNext()){
HashMap<String,Object> dataObject = (HashMap<String,Object>)anIterator.next();
if(dataObject.get(PlotConstants.DATASET_VALUELABEL).equals(aValueToBeDeleted)){
toBeDeletedValueObjects.add(dataObject);
}
} }
} }
if(operatorsOnDataset.containsKey(PlotConstants.DATASET_OPERATOR_MODIFY)){ for(HashMap deleteObject : toBeDeletedValueObjects){
currentValuesInPlot.remove(deleteObject);
String[] constraintsArray = (String[])operatorsOnDataset.get(PlotConstants.DATASET_OPERATOR_MODIFY);
//TODO: IMPLEMENT
}
if(operatorsOnDataset.containsKey(PlotConstants.DATASET_OPERATOR_DELETE)){
String[] toBeDeletedValues = (String[])operatorsOnDataset.get(PlotConstants.DATASET_OPERATOR_DELETE);
//TODO: IMPLEMENT
} }
//TODO: IMPLEMENT
}
//}catch(Exception e){ //}catch(Exception e){
// PlotterDataAccessException ex = new PlotterDataAccessException("An error occurred while updating dataset "+currentData.hashCode()); // PlotterDataAccessException ex = new PlotterDataAccessException("An error occurred while updating dataset "+currentData.hashCode());
// ex.initCause(e); // ex.initCause(e);
...@@ -252,7 +285,7 @@ public class PlotDataAccessParmDBImpl implements IPlotDataAccess{ ...@@ -252,7 +285,7 @@ public class PlotDataAccessParmDBImpl implements IPlotDataAccess{
* not be started, due to missing native libraries or other errors. * not be started, due to missing native libraries or other errors.
* *
*/ */
@SuppressWarnings("unchecked")
private static void initiateConnectionToParmDB(Object constraints) throws PlotterDataAccessException{ private static void initiateConnectionToParmDB(Object constraints) throws PlotterDataAccessException{
if(parmDB == null){ if(parmDB == null){
...@@ -301,7 +334,7 @@ public class PlotDataAccessParmDBImpl implements IPlotDataAccess{ ...@@ -301,7 +334,7 @@ public class PlotDataAccessParmDBImpl implements IPlotDataAccess{
private LinkedList<HashMap> getParmValues(Vector names, String[] constraintsArray) throws PlotterDataAccessException{ private LinkedList<HashMap> getParmValues(Vector names, String[] constraintsArray) throws PlotterDataAccessException{
LinkedList<HashMap> returnList = new LinkedList<HashMap>(); LinkedList<HashMap> returnList = new LinkedList<HashMap>();
for(int n = 0; n < names.size();n++){ for(int n = 0; n < names.size();n++){
Vector paramValues; Vector paramValues;
...@@ -372,11 +405,11 @@ public class PlotDataAccessParmDBImpl implements IPlotDataAccess{ ...@@ -372,11 +405,11 @@ public class PlotDataAccessParmDBImpl implements IPlotDataAccess{
while(anIterator.hasNext()){ while(anIterator.hasNext()){
HashMap<String,Object> aValueMap = new HashMap<String,Object>(); HashMap<String,Object> aValueMap = new HashMap<String,Object>();
String aValue = (String)anIterator.next(); String aValue = (String)anIterator.next();
//System.out.println("Parameter Value Found: "+aValue); //System.out.println("Parameter Value Found: "+aValue);
aValueMap.put(PlotConstants.DATASET_VALUELABEL,aValue); aValueMap.put(PlotConstants.DATASET_VALUELABEL,aValue);
......
...@@ -42,6 +42,7 @@ public class PlotSlotViewFrame extends JDialog{ ...@@ -42,6 +42,7 @@ public class PlotSlotViewFrame extends JDialog{
plotIndex = index; plotIndex = index;
this.getContentPane().setLayout(new BorderLayout()); this.getContentPane().setLayout(new BorderLayout());
setTitle(title); setTitle(title);
this.setAlwaysOnTop(true);
PlotSlot viewSlot = parent.getSlot(index); PlotSlot viewSlot = parent.getSlot(index);
if(!showLegendOnly){ if(!showLegendOnly){
setTitle(title); setTitle(title);
......
...@@ -33,11 +33,17 @@ import java.awt.event.ActionListener; ...@@ -33,11 +33,17 @@ import java.awt.event.ActionListener;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
import java.awt.event.WindowListener; import java.awt.event.WindowListener;
import java.util.HashMap;
import java.util.LinkedList;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JMenu; import javax.swing.JMenu;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JPopupMenu; import javax.swing.JPopupMenu;
import javax.swing.SwingConstants;
import nl.astron.lofar.java.gui.plotter.PlotConstants;
import nl.astron.lofar.java.gui.plotter.exceptions.PlotterException;
import nl.astron.lofar.sas.otb.SharedVars;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
/** /**
...@@ -86,6 +92,17 @@ public class PlotSlotsPanel extends javax.swing.JPanel { ...@@ -86,6 +92,17 @@ public class PlotSlotsPanel extends javax.swing.JPanel {
throw new IllegalArgumentException("A plot was not found in slot "+slotIndex); throw new IllegalArgumentException("A plot was not found in slot "+slotIndex);
} }
} }
/** adds a button to the BeanForm */
public void removeDataInPlot(int slotIndex,String[] dataIdentifiers) throws IllegalArgumentException{
if(itsSlotManager.isSlotOccupied(slotIndex)){
HashMap<String,Object> removeData = new HashMap<String,Object>();
removeData.put(new String("PARMDBINTERFACE"),SharedVars.getJParmFacade());
removeData.put(PlotConstants.DATASET_OPERATOR_DELETE,dataIdentifiers);
itsSlotManager.modifyPlotInSlot(slotIndex,removeData);
}else{
throw new IllegalArgumentException("A plot was not found in slot "+slotIndex);
}
}
public void clearSlots(){ public void clearSlots(){
itsSlotManager.clearSlots(); itsSlotManager.clearSlots();
...@@ -155,7 +172,9 @@ public class PlotSlotsPanel extends javax.swing.JPanel { ...@@ -155,7 +172,9 @@ public class PlotSlotsPanel extends javax.swing.JPanel {
tempPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); tempPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder());
tempPanel.setMinimumSize(new Dimension(getWidth()/columnsAndRows,getHeight()/columnsAndRows)); tempPanel.setMinimumSize(new Dimension(getWidth()/columnsAndRows,getHeight()/columnsAndRows));
tempPanel.setPreferredSize(new Dimension(getWidth()/columnsAndRows,getHeight()/columnsAndRows)); tempPanel.setPreferredSize(new Dimension(getWidth()/columnsAndRows,getHeight()/columnsAndRows));
tempPanel.add(new JLabel("External viewer active"),BorderLayout.CENTER); JLabel tempLabel = new JLabel("External viewer active");
tempLabel.setHorizontalAlignment(SwingConstants.CENTER);
tempPanel.add(tempLabel,BorderLayout.CENTER);
JPanel northPanel = new JPanel(); JPanel northPanel = new JPanel();
northPanel.setLayout(new BorderLayout()); northPanel.setLayout(new BorderLayout());
northPanel.setBackground(Color.LIGHT_GRAY); northPanel.setBackground(Color.LIGHT_GRAY);
...@@ -305,7 +324,7 @@ public class PlotSlotsPanel extends javax.swing.JPanel { ...@@ -305,7 +324,7 @@ public class PlotSlotsPanel extends javax.swing.JPanel {
aMenuItem.add(subMenuItem2); aMenuItem.add(subMenuItem2);
aPopupMenu.add(aMenuItem); aPopupMenu.add(aMenuItem);
}else if(externalLegendActive){ }else if(externalLegendActive){
JMenuItem subMenuItem=new JMenuItem("Separate Legend Viewer active!"); JMenuItem subMenuItem=new JMenuItem("Please close the legend viewer first");
subMenuItem.setEnabled(false); subMenuItem.setEnabled(false);
aPopupMenu.add(subMenuItem); aPopupMenu.add(subMenuItem);
}else if(externalViewerActive){ }else if(externalViewerActive){
...@@ -379,6 +398,33 @@ public class PlotSlotsPanel extends javax.swing.JPanel { ...@@ -379,6 +398,33 @@ public class PlotSlotsPanel extends javax.swing.JPanel {
} }
}); });
aPopupMenu.add(aMenuItem2); aPopupMenu.add(aMenuItem2);
try {
LinkedList<HashMap> currentValuesInPlot = (LinkedList<HashMap>)selectedSlot.getPlot().getDataForPlot().get(PlotConstants.DATASET_VALUES);
if(currentValuesInPlot.size()>0){
aPopupMenu.addSeparator();
JMenu aMenu=new JMenu("Remove value from plot");
for(HashMap aValue : currentValuesInPlot){
String dataValueLabel = (String)aValue.get(PlotConstants.DATASET_VALUELABEL);
JMenuItem clearValueItem=new JMenuItem(dataValueLabel);
clearValueItem.setActionCommand(dataValueLabel);
clearValueItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
String[] valueArray = new String[1];
valueArray[0] = evt.getActionCommand();
removeDataInPlot(Integer.parseInt(selectedSlot.getLabel()),valueArray);
selectedSlot.repaint();
}
});
aMenu.add(clearValueItem);
}
aPopupMenu.add(aMenu);
}
} catch (NumberFormatException ex) {
logger.error("Could not delete data in slot "+selectedSlot.getLabel()+".",ex);
} catch (PlotterException ex) {
logger.error("Could not retrieve the data for slot "+selectedSlot.getLabel()+" to delete specific value(s).",ex);
}
} }
aPopupMenu.setOpaque(true); aPopupMenu.setOpaque(true);
aPopupMenu.show(selectedSlot, e.getX(), e.getY()); aPopupMenu.show(selectedSlot, e.getX(), e.getY());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment