JAL-2074 Improvement to StructureChooser and FTS interfaces to remember the user...
[jalview.git] / src / jalview / fts / core / FTSRestResponse.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21
22 package jalview.fts.core;
23
24 import jalview.fts.api.FTSData;
25 import jalview.fts.api.FTSDataColumnI;
26
27 import java.util.Collection;
28 import java.util.Map;
29
30 import javax.swing.JTable;
31 import javax.swing.table.DefaultTableModel;
32
33 /**
34  * Represents the response model generated by the FTSRestClient upon successful
35  * execution of a given FTS request
36  * 
37  * @author tcnofoegbu
38  *
39  */
40 public class FTSRestResponse
41 {
42   private int numberOfItemsFound;
43
44   private String responseTime;
45
46   private Collection<FTSData> searchSummary;
47
48   public int getNumberOfItemsFound()
49   {
50     return numberOfItemsFound;
51   }
52
53   public void setNumberOfItemsFound(int itemFound)
54   {
55     this.numberOfItemsFound = itemFound;
56   }
57
58   public String getResponseTime()
59   {
60     return responseTime;
61   }
62
63   public void setResponseTime(String responseTime)
64   {
65     this.responseTime = responseTime;
66   }
67
68   public Collection<FTSData> getSearchSummary()
69   {
70     return searchSummary;
71   }
72
73   public void setSearchSummary(Collection<FTSData> searchSummary)
74   {
75     this.searchSummary = searchSummary;
76   }
77
78   /**
79    * Convenience method to obtain a Table model for a given summary List based
80    * on the request parameters
81    * 
82    * @param request
83    *          the FTSRestRequest object which holds useful information for
84    *          creating a table model
85    * @param summariesList
86    *          the summary list which contains the data for populating the
87    *          table's rows
88    * @return the table model which was dynamically generated
89    */
90   public static DefaultTableModel getTableModel(FTSRestRequest request,
91           Collection<FTSData> summariesList)
92   {
93     final FTSDataColumnI[] cols = request.getWantedFields()
94             .toArray(new FTSDataColumnI[0]);
95     final int colOffset = request.getAssociatedSequence() == null ? 0 : 1;
96     DefaultTableModel tableModel = new DefaultTableModel()
97     {
98       @Override
99       public boolean isCellEditable(int row, int column)
100       {
101         return false;
102       }
103
104       @Override
105       public Class<?> getColumnClass(int columnIndex)
106       {
107         if (colOffset == 1 && columnIndex == 0)
108         {
109           return String.class;
110         }
111         return cols[columnIndex - colOffset].getDataType()
112                 .getDataTypeClass();
113       }
114
115     };
116     if (request.getAssociatedSequence() != null)
117     {
118       tableModel.addColumn("Ref Sequence"); // Create sequence column header if
119       // exists in the request
120     }
121     for (FTSDataColumnI field : request
122             .getWantedFields())
123     {
124       tableModel.addColumn(field.getName()); // Create sequence column header if
125                                              // exists in the request
126     }
127
128     for (FTSData res : summariesList)
129     {
130       tableModel.addRow(res.getSummaryData()); // Populate table rows with
131                                                // summary list
132     }
133
134     return tableModel;
135   }
136
137   public static void configureTableColumn(JTable tbl_summary,
138           Collection<FTSDataColumnI> wantedFields,
139           Map<String, Integer> columnPrefs)
140   {
141     for (FTSDataColumnI wantedField : wantedFields)
142     {
143       try
144       {
145         tbl_summary.getColumn(wantedField.getName()).setMinWidth(
146                 wantedField.getMinWidth());
147         tbl_summary.getColumn(wantedField.getName()).setMaxWidth(
148                 wantedField.getMaxWidth());
149         int prefedWidth = columnPrefs.get(wantedField.getName()) == null ? wantedField
150                 .getPreferredWidth() : columnPrefs.get(wantedField
151                 .getName());
152         tbl_summary.getColumn(wantedField.getName()).setPreferredWidth(
153                 prefedWidth);
154       } catch (Exception e)
155       {
156         e.printStackTrace();
157       }
158       if (wantedField.getDataType().getDataTypeClass() == Double.class)
159       {
160         DecimalFormatTableCellRenderer dfr = new DecimalFormatTableCellRenderer(
161                 wantedField.getDataType().isFormtted(), wantedField
162                         .getDataType().getSignificantFigures());
163         tbl_summary.getColumn(wantedField.getName()).setCellRenderer(dfr);
164       }
165       else if (wantedField.getDataType().getDataTypeClass() == Integer.class)
166       {
167         DecimalFormatTableCellRenderer dfr = new DecimalFormatTableCellRenderer(
168                 wantedField.getDataType().isFormtted(), wantedField
169                         .getDataType().getSignificantFigures());
170         tbl_summary.getColumn(wantedField.getName()).setCellRenderer(dfr);
171       }
172     }
173   }
174
175
176 }