From 302523984e5e233bf29ee85bb3e90ced1a9a29a3 Mon Sep 17 00:00:00 2001 From: Margarida Castro Neves Date: Thu, 14 Aug 2014 12:12:40 +0200 Subject: [PATCH] Changes in query string and Metadata Parameter selection - ucd value is shown in the metadata parameter table - only the servers containing at least one selected parameter will be queried - query String is now editable --- .../starlink/splat/vo/SSAMetadataPanel.java | 145 +++++++++---- .../uk/ac/starlink/splat/vo/SSAQuery.java | 63 +++++- .../ac/starlink/splat/vo/SSAQueryBrowser.java | 200 ++++++++++-------- .../splat/vo/ServerParamRelation.java | 1 + 4 files changed, 278 insertions(+), 131 deletions(-) diff --git a/splat/src/main/uk/ac/starlink/splat/vo/SSAMetadataPanel.java b/splat/src/main/uk/ac/starlink/splat/vo/SSAMetadataPanel.java index 661e8fc430..3a7d1c8ccf 100644 --- a/splat/src/main/uk/ac/starlink/splat/vo/SSAMetadataPanel.java +++ b/splat/src/main/uk/ac/starlink/splat/vo/SSAMetadataPanel.java @@ -25,6 +25,7 @@ import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Comparator; @@ -101,7 +102,7 @@ public class SSAMetadataPanel extends JPanel implements ActionListener, TableMod private HashMap metaParam=null; // the metadata table - private static final int NRCOLS = 5; // the number of columns in the table + private static final int NRCOLS = 6; // the number of columns in the table // the table indexes private static final int SELECTED_INDEX = 0; @@ -109,18 +110,18 @@ public class SSAMetadataPanel extends JPanel implements ActionListener, TableMod private static final int NAME_INDEX = 2; private static final int VALUE_INDEX = 3; private static final int DESCRIPTION_INDEX = 4; + private static final int UCD_INDEX = 5; // total number of servers that returned parameters - int nrServers; + // private int nrServers; // the table headers - String[] headers; - String[] headersToolTips; + private String[] headers; + private String[] headersToolTips; // cell renderer for the parameter name column - ParamCellRenderer paramRenderer=null; + private ParamCellRenderer paramRenderer=null; - /** * Constructor: @@ -169,7 +170,7 @@ public void initMetadataTable() headers[NAME_INDEX] = "Name"; headers[VALUE_INDEX] = "Value"; headers[DESCRIPTION_INDEX] = "Description"; - + headers[UCD_INDEX] = "UCD"; // the tooltip Texts for the headers headersToolTips = new String[NRCOLS]; @@ -178,7 +179,7 @@ public void initMetadataTable() headersToolTips[NAME_INDEX] = "Parameter name"; headersToolTips[VALUE_INDEX] = "Parameter value"; headersToolTips[DESCRIPTION_INDEX] = "Description"; - + headersToolTips[UCD_INDEX] = "UCD"; // Table of metadata parameters goes into a scrollpane in the center of // window (along with a set of buttons, see initUI). @@ -214,9 +215,11 @@ public void initMetadataTable() */ public void updateMetadata(HashMap metaParam ) { + metadataTableModel = new MetadataTableModel(headers); metadataTable.setModel(metadataTableModel ); - adjustColumns(); + adjustColumns(); + // ???fireProperty(); } @@ -243,7 +246,8 @@ public String[][] getParamList() metadataList[row][NR_SERVERS_INDEX] = Integer.toString(mip.getCounter());//+"/"+Integer.toString(nrServers); // nr supporting servers metadataList[row][NAME_INDEX] = mip.getName().replace("INPUT:", ""); // name - metadataList[row][VALUE_INDEX] = mip.getValue(); // value (default value or "") + metadataList[row][VALUE_INDEX] = ""; //mip.getValue(); + metadataList[row][UCD_INDEX] = mip.getUCD(); String unit = mip.getUnit(); String desc = mip.getDescription(); desc = desc.replaceAll("\n+", "
"); @@ -284,11 +288,12 @@ private void adjustColumns() { metadataTable.getColumnModel().getColumn(SELECTED_INDEX).setCellEditor(new DefaultCellEditor(cb)); metadataTable.getColumnModel().getColumn(SELECTED_INDEX).setMaxWidth(30); metadataTable.getColumnModel().getColumn(SELECTED_INDEX).setMinWidth(30); - metadataTable.getColumnModel().getColumn(NR_SERVERS_INDEX).setMaxWidth(60); - metadataTable.getColumnModel().getColumn(NAME_INDEX).setMinWidth(150); - metadataTable.getColumnModel().getColumn(VALUE_INDEX).setMinWidth(150); + metadataTable.getColumnModel().getColumn(NR_SERVERS_INDEX).setMaxWidth(0); + metadataTable.getColumnModel().getColumn(NAME_INDEX).setMinWidth(100); + metadataTable.getColumnModel().getColumn(VALUE_INDEX).setMinWidth(100); metadataTable.getColumnModel().getColumn(VALUE_INDEX).setCellEditor(new DefaultCellEditor(tf)); - metadataTable.getColumnModel().getColumn(NAME_INDEX).setCellRenderer(paramRenderer); + metadataTable.getColumnModel().getColumn(NAME_INDEX).setCellRenderer(paramRenderer); + metadataTable.getColumnModel().getColumn(UCD_INDEX).setMinWidth(100); metadataTable.getColumnModel().getColumn (DESCRIPTION_INDEX).setMaxWidth(0); // Remove the description column. Its contents will not be removed. They'll be displayed as tooltip text in the NAME_INDEX column. metadataTable.removeColumn(metadataTable.getColumnModel().getColumn (DESCRIPTION_INDEX)); @@ -304,19 +309,50 @@ private void adjustColumns() { public String getParamsQueryString() { String query=""; - + HashMap UCDList = new HashMap () ; // iterate through all rows + // String suffix = ""; for (int i=0; i< metadataTable.getRowCount(); i++) { if (rowChecked( i )) { String val = getTableData(i,VALUE_INDEX).toString().trim(); - if (val != null && val.length() > 0) { - String name = getTableData(i,NAME_INDEX).toString().trim(); + String ucd = (String) getTableData(i,UCD_INDEX); + String name = (String) getTableData(i,NAME_INDEX); + + /* if (ucd.endsWith("max") ) + suffix = "max"; + else if (ucd.endsWith("min") ) + suffix = "min"; + */ + if (val != null && val.length() > 0) { // all non-empty values + if ( ucd != null && ! ucd.isEmpty()) // if there are no UCDs assigned just add the parameters to the query string + UCDList.put(ucd, val); query += "&"+name+"="+val; - } + } } } + /* + // set the same value and add to the query all params with the same UCD as the selected parameters + for (int i=0; i< metadataTable.getRowCount(); i++) + { + String suffix2 = ""; + String ucd = (String) getTableData(i,UCD_INDEX); + if ( ucd != null && !ucd.isEmpty() && UCDList.containsKey(ucd)) + { + + if (ucd.endsWith("max") ) + suffix2 = "max"; + else if (ucd.endsWith("min") ) + suffix2 = "min"; + if ( suffix.isEmpty() || suffix.equals(suffix2) ) + { + String name = getTableData(i,NAME_INDEX).toString().trim(); + query += "&"+name+"="+UCDList.get(ucd); + } + } + } + */ return query; } @@ -365,7 +401,7 @@ private void setTableData(String newValue, int row, int col ) */ protected void initUI() { - // this.setPreferredSize(new Dimension(500,150)); + this.setPreferredSize(new Dimension(500,150)); setLayout( new BorderLayout() ); JScrollPane scroller = new JScrollPane( metadataTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS ); @@ -503,7 +539,9 @@ public void actionPerformed(ActionEvent e) { } if ( command.equals( "load" ) ) // read saved table values from a file { + readMetadataFromFile(); + fireProperty(); } // if ( command.equals( "refresh" ) ) // add new server to list // { @@ -538,17 +576,31 @@ public void openWindow() } /** - * Remove selected Parameter from table + * Select all Parameters from table */ - public void removeSelectedMetadata() + public void selectAll() { - int [] selRows = metadataTable.getSelectedRows(); - for (int i=0; i?".length(), q.length()); + } + public String getQueryText() { + return this.queryText; + + } + // public String getExtendedQuery() { + // return this.extendedQuery; + // } + + /** + * Parse a query line into an array of parameter names + * returns the extended parameters + */ + public ArrayList getParamList( String queryparams) { + + ArrayList extp = new ArrayList (); + //String sub = ""; + String[] paramdata = queryparams.split("&"); + for ( int i = 1; i extp = new ArrayList(); + if (extp.isEmpty()) + return null; + else return extp; + } + + + /** + * Returns the full request URL as String + */ + public URL getRequestURL() + throws MalformedURLException, UnsupportedEncodingException + { + String newURL = this.baseURL; + if ( newURL.indexOf( '?' ) == -1 ) // No ? in URL. + newURL += ( "?" ); + else if ( newURL.indexOf('?') != newURL.length()-1 ) //? is not at the end + newURL += ( "&" ); + + newURL += this.queryText; + return new URL(newURL); + + } } diff --git a/splat/src/main/uk/ac/starlink/splat/vo/SSAQueryBrowser.java b/splat/src/main/uk/ac/starlink/splat/vo/SSAQueryBrowser.java index 4ab10e6489..6ae7bcc216 100644 --- a/splat/src/main/uk/ac/starlink/splat/vo/SSAQueryBrowser.java +++ b/splat/src/main/uk/ac/starlink/splat/vo/SSAQueryBrowser.java @@ -14,8 +14,6 @@ import java.awt.BorderLayout; -import java.awt.Checkbox; -import java.awt.CheckboxGroup; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; @@ -36,7 +34,6 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; -import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.Authenticator; import java.net.MalformedURLException; @@ -49,7 +46,6 @@ import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; -import java.util.List; import java.util.Properties; import java.util.logging.Logger; import java.util.prefs.Preferences; @@ -508,16 +504,16 @@ public class SSAQueryBrowser /** * The Button for adding optional parameters to the query - * @uml.property name="addParamButton" + * @uml.property name="selectAllParamsButton" * @uml.associationEnd */ - protected JButton addParamButton = null; + protected JButton selectAllParamsButton = null; /** * The Button for removing optional parameters from the optional parameters list - * @uml.property name="removeParamButton" + * @uml.property name="selectAllParamsButton" * @uml.associationEnd */ - protected JButton removeParamButton = null; + protected JButton deselectAllParamsButton = null; /** The list of all input parameters read from the servers */ // protected static SSAMetadataFrame metaFrame = null; @@ -1071,25 +1067,26 @@ private void initQueryComponents() optionalQueryPanel.setLayout( new BoxLayout(optionalQueryPanel, BoxLayout.PAGE_AXIS) ); metaPanel = new SSAMetadataPanel(); metaPanel.addPropertyChangeListener(this); - metaPanel.setVisible(false); + //showParameters(); + // metaPanel.setVisible(false); // layouter.add(metaPanel, true); // metaPanel.setTableWidth(200); optionalQueryPanel.add(metaPanel);//, BorderLayout.NORTH); - + showParameters(); // queryTextPanel.add(new JLabel("Query:")); JPanel paramButtonsPanel = new JPanel( ); - addParamButton = new JButton("Add Parameter"); - addParamButton.addActionListener( this ); - addParamButton.setToolTipText("Add Optional Parameters"); - addParamButton.setMargin(new Insets(2,2,2,2)); - // optionalQueryPanel.add(addParamButton, BorderLayout.WEST); - removeParamButton = new JButton("Remove Parameter"); - removeParamButton.addActionListener( this ); - removeParamButton.setToolTipText("Remove selected Parameters"); - removeParamButton.setMargin(new Insets(2,2,2,2)); - // optionalQueryPanel.add(removeParamButton, BorderLayout.EAST); - paramButtonsPanel.add( addParamButton ); - paramButtonsPanel.add( removeParamButton ); + selectAllParamsButton = new JButton("Select all"); + selectAllParamsButton.addActionListener( this ); + // selectAllParamsButton.setToolTipText("Add optional parameters"); + selectAllParamsButton.setMargin(new Insets(2,2,2,2)); + // optionalQueryPanel.add(selectAllParamsButton, BorderLayout.WEST); + deselectAllParamsButton = new JButton("Deselect all"); + deselectAllParamsButton.addActionListener( this ); + // deselectAllParamsButton.setToolTipText("Remove selected parameters"); + deselectAllParamsButton.setMargin(new Insets(2,2,2,2)); + // optionalQueryPanel.add(deselectAllParamsButton, BorderLayout.EAST); + paramButtonsPanel.add( selectAllParamsButton ); + paramButtonsPanel.add( deselectAllParamsButton ); optionalQueryPanel.add(paramButtonsPanel, BorderLayout.SOUTH); @@ -1109,7 +1106,8 @@ private void initQueryComponents() JScrollPane queryScroller = new JScrollPane(); queryScroller.add(queryText); // queryScroller.setV - queryText.setEditable(false); + queryText.setEditable(true); + sendQueryPanel.add(queryText); queryText.setLineWrap(true); sendQueryPanel.add(goButton, BorderLayout.LINE_END); @@ -1500,20 +1498,24 @@ public void doQuery() ErrorDialog.showError( this, "Position input error", e ); return; } - queryLine.setRadius( radius ); + /* queryLine.setRadius( radius ); queryLine.setBand(lowerBandField.getText(), upperBandField.getText()); queryLine.setTime(lowerTimeField.getText(), upperTimeField.getText()); queryLine.setWaveCalib(wlcalibList.getSelectedItem().toString()); queryLine.setFluxCalib(flcalibList.getSelectedItem().toString()); queryLine.setFormat(formatList.getSelectedItem().toString()); + */ + // !!!!! + + // update serverlist from servertree class + final SSAServerList slist=tree.getServerList(); // Create a stack of all queries to perform. ArrayList queryList = new ArrayList(); - // update serverlist from servertree class - final SSAServerList slist=tree.getServerList(); + //serverList = tree.getServerList(); Iterator i = slist.getIterator(); - + SSAPRegResource server = null; while( i.hasNext() ) { server = (SSAPRegResource) i.next(); @@ -1521,18 +1523,20 @@ public void doQuery() try { if (slist.isServerSelected(server.getShortName())) { - SSAQuery ssaQuery = new SSAQuery(queryLine);//new SSAQuery( server ); - ssaQuery.setServer( server) ; //Parameters(queryLine); // copy the query parameters to the new query - - /* ssaQuery.setTargetName( objectName ); - ssaQuery.setPosition( ra, dec ); - ssaQuery.setRadius( radius ); - ssaQuery.setBand( lowerBand, upperBand ); - ssaQuery.setTime( lowerTime, upperTime ); - ssaQuery.setFormat( format ); - ssaQuery.setWaveCalib( waveCalib ); - ssaQuery.setFluxCalib( fluxCalib );*/ - queryList.add( ssaQuery ); + SSAQuery ssaQuery = new SSAQuery( server ); + // ssaQuery.setServer(server) ; //Parameters(queryLine); // copy the query parameters to the new query + ssaQuery.setQuery(queryText.getText()); + ArrayList extp = ssaQuery.getParamList(queryText.getText()); + + boolean supportsAll = true; + boolean supportsSome = false; + for (int j=0; j 0) - { - String newURL = queryURL.toString() + extendedQuery; - logger.info( "Query string " + newURL ); - queryURL = new URL(newURL); - } + //if (extendedQuery != null && extendedQuery.length() > 0) + // { + queryURL = ssaQuery.getRequestURL(); + + logger.info( "Query string " + queryURL.toString() ); + //queryURL = new URL(newURL); + // } } catch ( MalformedURLException mue ) { @@ -1666,7 +1672,7 @@ private void runProcessQuery( SSAQuery ssaQuery, ProgressPanel progressPanel ) t logger.info( "URL Encoding Exception "+queryURL ); failed = true; return; - } + } // Do the query and get the result as a StarTable. Uses this // method for efficiency as non-result tables are ignored. @@ -2870,10 +2876,11 @@ public void actionPerformed( ActionEvent e ) return; } - if ( source.equals( addParamButton ) ) + if ( source.equals( selectAllParamsButton ) ) { + metaPanel.selectAll(); //tree.setParamMap(serverParam); - addParameter(); + /* addParameter(); if (extendedQueryText != null && extendedQueryText.length() > 0) { try { @@ -2883,14 +2890,14 @@ public void actionPerformed( ActionEvent e ) e1.printStackTrace(); } } - + */ return; } - if ( source.equals( removeParamButton ) ) + if ( source.equals( deselectAllParamsButton ) ) { // de-select and update query text - - metaPanel.removeSelectedMetadata(); + metaPanel.deselectAll(); + // metaPanel.removeSelectedMetadata(); /* if (extendedQueryText != null && extendedQueryText.length() > 0) { try { @@ -3102,36 +3109,43 @@ private void deactivateDataLinkSupport() { * Event listener * */ - public void propertyChange(PropertyChangeEvent pvt) + public void propertyChange(PropertyChangeEvent pvt) //!!!!!!!!!!!!!!!!!! { // trigger a metadata update if metadata has been added - if (pvt.getPropertyName().equals("changeQuery")) + if (pvt.getPropertyName().equals("changeQuery")) { updateQueryText(); + String txt = ""; + } // update if the server list has been modifyed at ssaservertree (for example, new registry query) - else if (pvt.getPropertyName().equals("changeServerlist")) + else if (pvt.getPropertyName().equals("changeServerlist")) { serverList = tree.getServerList(); + updateParameters(); + metaPanel.updateUI(); + } } private void updateQueryText() { if (metaPanel != null) extendedQueryText=metaPanel.getParamsQueryString(); - + try { - queryText.setText(queryLine.getQueryURLText() + extendedQueryText); - } catch (UnsupportedEncodingException e) { + String txt = queryLine.getQueryURLText() + extendedQueryText; + queryText.setText(txt /*queryLine.getQueryURLText() + extendedQueryText */); + txt = null; + + } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** - * addParameter - * Adds an optional metadata parameter to the query. - * Allows the user to select a list of parameters, according to the selected list of servers - * update the parameter table + * showParameters + * shows a list of optional metadata parameters that can be added to the query. + * */ - private void addParameter() + private void showParameters() { // check serverlist (selected servers!!) // update serverlist @@ -3155,11 +3169,13 @@ private void addParameter() // remove the INPUT: Prefix from the parameters for (int i=0; i server2param; static HashMap param2server; + private static Logger logger = Logger.getLogger( "uk.ac.starlink.splat.vo.ServerParamRelation" );