Commit 5f904693399ca3cf4c611e9cc3488b23e119be21
1 parent
95cf2731
Exists in
master
Move model methods to VOTableData and add method getCell().
Showing
2 changed files
with
89 additions
and
73 deletions
Show diff stats
src/main/java/eu/omp/irap/vespa/epntapclient/votable/data/VOTableData.java
@@ -17,7 +17,9 @@ | @@ -17,7 +17,9 @@ | ||
17 | package eu.omp.irap.vespa.epntapclient.votable.data; | 17 | package eu.omp.irap.vespa.epntapclient.votable.data; |
18 | 18 | ||
19 | import java.util.ArrayList; | 19 | import java.util.ArrayList; |
20 | +import java.util.HashMap; | ||
20 | import java.util.List; | 21 | import java.util.List; |
22 | +import java.util.Map; | ||
21 | 23 | ||
22 | /** | 24 | /** |
23 | * @author N. Jourdane | 25 | * @author N. Jourdane |
@@ -58,4 +60,61 @@ public class VOTableData { | @@ -58,4 +60,61 @@ public class VOTableData { | ||
58 | public void addRow(Object[] row) { | 60 | public void addRow(Object[] row) { |
59 | data.add(row); | 61 | data.add(row); |
60 | } | 62 | } |
63 | + | ||
64 | + /** | ||
65 | + * @param column The name of the column to get. | ||
66 | + * @return An array of Table fields name. | ||
67 | + * @throws IllegalArgumentException Column name not found in the table. | ||
68 | + */ | ||
69 | + public int getColumnIndex(String column) { | ||
70 | + int i = 0; | ||
71 | + while (!column.equals(columnsName[i])) { | ||
72 | + i++; | ||
73 | + if (i > columnsName.length) { | ||
74 | + throw new IllegalArgumentException("Column " + column + " not found in the table."); | ||
75 | + } | ||
76 | + } | ||
77 | + return i; | ||
78 | + } | ||
79 | + | ||
80 | + /** | ||
81 | + * @param rowIndex The index of the row to get. | ||
82 | + * @return The Table row at the specified index. | ||
83 | + */ | ||
84 | + public Object[] getRowByIndex(int rowIndex) { | ||
85 | + return data.get(rowIndex); | ||
86 | + } | ||
87 | + | ||
88 | + public Object getCell(int rowIndex, String columnName) { | ||
89 | + return data.get(rowIndex)[getColumnIndex(columnName)]; | ||
90 | + } | ||
91 | + | ||
92 | + /** | ||
93 | + * @param columnIndex A UNIQUE column (as SQL sense) to identify a row. | ||
94 | + * @param value The value at `columnName`, in order to get the full row. | ||
95 | + * @return A Table row, identified by a unique `value` in the `columnName` column. | ||
96 | + * @throws IndexOutOfBoundsException If the value is not found at the specified column. | ||
97 | + */ | ||
98 | + public Object[] getRowByValue(int columnIndex, Object value) { | ||
99 | + for (Object[] row : data) { | ||
100 | + if (value.equals(row[columnIndex])) { | ||
101 | + return row; | ||
102 | + } | ||
103 | + } | ||
104 | + throw new IndexOutOfBoundsException( | ||
105 | + "The value " + value + " is not found on the table at the column " + columnIndex); | ||
106 | + } | ||
107 | + | ||
108 | + /** | ||
109 | + * @param rowIndex The index of the row to get. | ||
110 | + * @return A dictionary representing the row, where each key is a column name. | ||
111 | + */ | ||
112 | + public Map<String, Object> getRowMapByIndex(int rowIndex) { | ||
113 | + Map<String, Object> row = new HashMap<>(); | ||
114 | + for (int i = 0; i < columnsName.length; i++) { | ||
115 | + row.put(columnsName[i], data.get(rowIndex)[i]); | ||
116 | + } | ||
117 | + return row; | ||
118 | + } | ||
119 | + | ||
61 | } | 120 | } |
src/main/java/eu/omp/irap/vespa/epntapclient/votable/data/VOTableDataCtrl.java
@@ -19,15 +19,14 @@ package eu.omp.irap.vespa.epntapclient.votable.data; | @@ -19,15 +19,14 @@ package eu.omp.irap.vespa.epntapclient.votable.data; | ||
19 | import java.io.IOException; | 19 | import java.io.IOException; |
20 | import java.nio.ByteBuffer; | 20 | import java.nio.ByteBuffer; |
21 | import java.util.ArrayList; | 21 | import java.util.ArrayList; |
22 | -import java.util.HashMap; | ||
23 | import java.util.List; | 22 | import java.util.List; |
24 | -import java.util.Map; | ||
25 | import java.util.logging.Logger; | 23 | import java.util.logging.Logger; |
26 | 24 | ||
27 | import javax.xml.bind.DatatypeConverter; | 25 | import javax.xml.bind.DatatypeConverter; |
28 | 26 | ||
29 | import com.google.gson.Gson; | 27 | import com.google.gson.Gson; |
30 | 28 | ||
29 | +import eu.omp.irap.vespa.epntapclient.votable.model.Data; | ||
31 | import eu.omp.irap.vespa.epntapclient.votable.model.DataType; | 30 | import eu.omp.irap.vespa.epntapclient.votable.model.DataType; |
32 | import eu.omp.irap.vespa.epntapclient.votable.model.Field; | 31 | import eu.omp.irap.vespa.epntapclient.votable.model.Field; |
33 | import eu.omp.irap.vespa.epntapclient.votable.model.Stream; | 32 | import eu.omp.irap.vespa.epntapclient.votable.model.Stream; |
@@ -50,6 +49,10 @@ public class VOTableDataCtrl { | @@ -50,6 +49,10 @@ public class VOTableDataCtrl { | ||
50 | 49 | ||
51 | private int nbColumns; | 50 | private int nbColumns; |
52 | 51 | ||
52 | + private Data dataNode; | ||
53 | + | ||
54 | + private List<Field> fieldsNodes; | ||
55 | + | ||
53 | /** The index of the current position in the bytes array. */ | 56 | /** The index of the current position in the bytes array. */ |
54 | private int cursor; | 57 | private int cursor; |
55 | 58 | ||
@@ -64,96 +67,42 @@ public class VOTableDataCtrl { | @@ -64,96 +67,42 @@ public class VOTableDataCtrl { | ||
64 | */ | 67 | */ |
65 | public VOTableDataCtrl(Table table) throws IOException { | 68 | public VOTableDataCtrl(Table table) throws IOException { |
66 | cursor = 0; | 69 | cursor = 0; |
70 | + dataNode = table.getDATA(); | ||
67 | 71 | ||
68 | - List<Field> fields = new ArrayList<>(); | 72 | + fieldsNodes = new ArrayList<>(); |
69 | for (Object obj : table.getFIELDOrPARAMOrGROUP()) { | 73 | for (Object obj : table.getFIELDOrPARAMOrGROUP()) { |
70 | if (obj.getClass() == Field.class) { | 74 | if (obj.getClass() == Field.class) { |
71 | - fields.add((Field) obj); | 75 | + fieldsNodes.add((Field) obj); |
72 | } | 76 | } |
73 | } | 77 | } |
74 | - String[] columnsName = new String[fields.size()]; | 78 | + |
79 | + String[] columnsName = new String[fieldsNodes.size()]; | ||
75 | nbColumns = columnsName.length; | 80 | nbColumns = columnsName.length; |
76 | - for (int i = 0; i < fields.size(); i++) { | ||
77 | - columnsName[i] = fields.get(i).getName(); | 81 | + for (int i = 0; i < fieldsNodes.size(); i++) { |
82 | + columnsName[i] = fieldsNodes.get(i).getName(); | ||
78 | } | 83 | } |
79 | data = new VOTableData(columnsName); | 84 | data = new VOTableData(columnsName); |
80 | VOTableDataCtrl.logger.info("Columns name: " + new Gson().toJson(columnsName)); | 85 | VOTableDataCtrl.logger.info("Columns name: " + new Gson().toJson(columnsName)); |
86 | + } | ||
81 | 87 | ||
88 | + public VOTableData parseData() { | ||
82 | List<Object[]> rows = new ArrayList<>(); | 89 | List<Object[]> rows = new ArrayList<>(); |
83 | 90 | ||
84 | - if (table.getDATA().getBINARY() != null) { | ||
85 | - parseBinaryStream(table.getDATA().getBINARY().getSTREAM(), fields); | ||
86 | - } else if (table.getDATA().getBINARY2() != null) { | ||
87 | - VOTableDataCtrl.parseBinary2Stream(table.getDATA().getBINARY2().getSTREAM(), fields); | ||
88 | - } else if (table.getDATA().getTABLEDATA() != null) { | ||
89 | - VOTableDataCtrl.parseTableDataStream(table.getDATA().getTABLEDATA(), fields); | ||
90 | - } else if (table.getDATA().getFITS() != null) { | ||
91 | - VOTableDataCtrl.parseFITSStream(table.getDATA().getFITS().getSTREAM(), fields); | 91 | + if (dataNode.getBINARY() != null) { |
92 | + parseBinaryStream(dataNode.getBINARY().getSTREAM(), fieldsNodes); | ||
93 | + } else if (dataNode.getBINARY2() != null) { | ||
94 | + VOTableDataCtrl.parseBinary2Stream(dataNode.getBINARY2().getSTREAM(), fieldsNodes); | ||
95 | + } else if (dataNode.getTABLEDATA() != null) { | ||
96 | + VOTableDataCtrl.parseTableDataStream(dataNode.getTABLEDATA(), fieldsNodes); | ||
97 | + } else if (dataNode.getFITS() != null) { | ||
98 | + VOTableDataCtrl.parseFITSStream(dataNode.getFITS().getSTREAM(), fieldsNodes); | ||
92 | } | 99 | } |
93 | 100 | ||
94 | Debug.printObject("voTableData", rows); | 101 | Debug.printObject("voTableData", rows); |
95 | - } | ||
96 | - | ||
97 | - /** | ||
98 | - * @return the data stored in the Table. | ||
99 | - */ | ||
100 | - public VOTableData getData() { | ||
101 | return data; | 102 | return data; |
102 | } | 103 | } |
103 | 104 | ||
104 | /** | 105 | /** |
105 | - * @param column The name of the column to get. | ||
106 | - * @return An array of Table fields name. | ||
107 | - * @throws IllegalArgumentException Column name not found in the table. | ||
108 | - */ | ||
109 | - public int getColumnIndex(String column) { | ||
110 | - int i = 0; | ||
111 | - while (!column.equals(data.getColumnsName()[i])) { | ||
112 | - i++; | ||
113 | - if (i > nbColumns) { | ||
114 | - throw new IllegalArgumentException("Column " + column + " not found in the table."); | ||
115 | - } | ||
116 | - } | ||
117 | - return i; | ||
118 | - } | ||
119 | - | ||
120 | - /** | ||
121 | - * @param rowIndex The index of the row to get. | ||
122 | - * @return The Table row at the specified index. | ||
123 | - */ | ||
124 | - public Object[] getRowByIndex(int rowIndex) { | ||
125 | - return data.getData().get(rowIndex); | ||
126 | - } | ||
127 | - | ||
128 | - /** | ||
129 | - * @param rowIndex The index of the row to get. | ||
130 | - * @return A dictionary representing the row, where each key is a column name. | ||
131 | - */ | ||
132 | - public Map<String, Object> getDicRowByIndex(int rowIndex) { | ||
133 | - Map<String, Object> row = new HashMap<>(); | ||
134 | - for (int i = 0; i < nbColumns; i++) { | ||
135 | - row.put(data.getColumnsName()[i], data.getData().get(rowIndex)[i]); | ||
136 | - } | ||
137 | - return row; | ||
138 | - } | ||
139 | - | ||
140 | - /** | ||
141 | - * @param columnIndex A UNIQUE column (as SQL sense) to identify a row. | ||
142 | - * @param value The value at `columnName`, in order to get the full row. | ||
143 | - * @return A Table row, identified by a unique `value` in the `columnName` column. | ||
144 | - * @throws IndexOutOfBoundsException If the value is not found at the specified column. | ||
145 | - */ | ||
146 | - public Object[] getRowByValue(int columnIndex, Object value) { | ||
147 | - for (Object[] row : data.getData()) { | ||
148 | - if (value.equals(row[columnIndex])) { | ||
149 | - return row; | ||
150 | - } | ||
151 | - } | ||
152 | - throw new IndexOutOfBoundsException( | ||
153 | - "The value " + value + " is not found on the table at the column " + columnIndex); | ||
154 | - } | ||
155 | - | ||
156 | - /** | ||
157 | * get the data on its BINARY form. | 106 | * get the data on its BINARY form. |
158 | * | 107 | * |
159 | * @param voStream the data Stream in the VOTable Table. | 108 | * @param voStream the data Stream in the VOTable Table. |
@@ -271,4 +220,12 @@ public class VOTableDataCtrl { | @@ -271,4 +220,12 @@ public class VOTableDataCtrl { | ||
271 | private static void parseFITSStream(Stream stream, List<Field> fields) { | 220 | private static void parseFITSStream(Stream stream, List<Field> fields) { |
272 | VOTableDataCtrl.logger.info("Parsing data in FITS stream..."); | 221 | VOTableDataCtrl.logger.info("Parsing data in FITS stream..."); |
273 | } | 222 | } |
223 | + | ||
224 | + /** | ||
225 | + * @return the data stored in the Table. | ||
226 | + */ | ||
227 | + public VOTableData getData() { | ||
228 | + return data; | ||
229 | + } | ||
230 | + | ||
274 | } | 231 | } |