Skip to content

Commit bf8cd0d

Browse files
author
Lijun Zhang
committed
DM-8010:handled the data type issue in the data, convert the degree to arcsec for elliptical method search, and all columns are selected if the selcol=null
1 parent 48b09a7 commit bf8cd0d

File tree

1 file changed

+75
-26
lines changed

1 file changed

+75
-26
lines changed

src/firefly/java/edu/caltech/ipac/firefly/server/query/lsst/LSSTCataLogSearch.java

Lines changed: 75 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -178,21 +178,37 @@ private DataGroup getDataFromURL(TableServerRequest request) throws Exception {
178178
}
179179

180180

181+
private void adjustDataType(DataType[] dataType,JSONArray meta ){
182+
for (int i=0; i<dataType.length; i++){
183+
for (int j=0; j<meta.size(); j++){
184+
JSONObject element = (JSONObject) meta.get(j);
185+
if ( element.get("name").toString().equalsIgnoreCase(dataType[i].getKeyName())){
186+
if (element.get("datatype").getClass()!=dataType[i].getDataType()){
187+
dataType[i].setDataType(element.get("datatype").getClass());
188+
}
189+
break;
190+
}
191+
192+
}
193+
}
194+
195+
}
181196
/**
182197
* This method convert the json data file to data group
183198
* @param jsonFile
184199
* @return
185200
* @throws IOException
186201
* @throws ParseException
187202
*/
188-
private DataGroup getTableDataFromJson(TableServerRequest request, File jsonFile) throws IOException, ParseException {
203+
private DataGroup getTableDataFromJson(TableServerRequest request, File jsonFile) throws IOException, ParseException, ClassNotFoundException {
189204

190205
JSONParser parser = new JSONParser();
191206
JSONObject obj = (JSONObject) parser.parse(new FileReader(jsonFile));
192207
JSONArray data = (JSONArray) ((JSONObject) ((JSONObject) obj.get("result")).get("table")).get("data");
193208

194-
JSONArray columns = (JSONArray) ( (JSONObject) ( (JSONObject)( (JSONObject) obj.get("result")).get("table")).get("metadata")).get("elements");
195-
DataType[] dataType = getTypeDef(request, columns);
209+
JSONArray metaInData = (JSONArray) ( (JSONObject) ( (JSONObject)( (JSONObject) obj.get("result")).get("table")).get("metadata")).get("elements");
210+
211+
DataType[] dataType = getTypeDef(request, metaInData);
196212

197213
DataGroup dg = new DataGroup("result", dataType );
198214

@@ -208,6 +224,7 @@ private DataGroup getTableDataFromJson(TableServerRequest request, File jsonFil
208224
for (int j=0; j<dataType.length; j++){
209225

210226
Object d = rowTblData.get(j);
227+
211228
if (d==null){
212229
dataType[j].setMayBeNull(true);
213230
row.setDataElement(dataType[j], null);
@@ -227,7 +244,9 @@ private DataGroup getTableDataFromJson(TableServerRequest request, File jsonFil
227244
d=new Boolean(true);
228245
}
229246
}
230-
row.setDataElement(dataType[j],d );
247+
248+
row.setDataElement(dataType[j], d);
249+
231250
}
232251

233252
}
@@ -249,19 +268,19 @@ private Class getDataClass(String classType){
249268
else if (classType.equalsIgnoreCase("float") || classType.equalsIgnoreCase("real") ){
250269
return Float.class;
251270
}
252-
else if (classType.equalsIgnoreCase("int(11)")){
271+
else if (classType.equalsIgnoreCase("int(11)") || classType.equalsIgnoreCase("int")){
253272
return Integer.class;
254273
}
255-
else if (classType.equalsIgnoreCase("BigInt(20)") ){
274+
else if (classType.equalsIgnoreCase("BigInt(20)") || classType.equalsIgnoreCase("long")){
256275
return Long.class;
257276
}
258-
else if (classType.equalsIgnoreCase("bit(1)")){
277+
else if (classType.equalsIgnoreCase("bit(1)") || classType.equalsIgnoreCase("boolean")){
259278
return Boolean.class;
260279
}
261-
else if (classType.equalsIgnoreCase("TINYINT")){
280+
else if (classType.equalsIgnoreCase("TINYINT") || classType.equalsIgnoreCase("byte")){
262281
return Byte.class;
263282
}
264-
else if (classType.equalsIgnoreCase("SMALLINT")){
283+
else if (classType.equalsIgnoreCase("SMALLINT") || classType.equalsIgnoreCase("short)")){
265284
return Short.class;
266285
}
267286
else if (classType.equalsIgnoreCase("string") ) {
@@ -275,34 +294,64 @@ else if (classType.equalsIgnoreCase("string") ) {
275294
return null;
276295

277296
}
278-
private DataType[] getTypeDef(TableServerRequest request, JSONArray columns){
297+
private DataType[] getTypeDef(TableServerRequest request, JSONArray columns) {
279298

280299

281300
TableServerRequest metaRequest = new TableServerRequest("LSSTMetaSearch");
282-
metaRequest.setParam("table_name",request.getParam("meta_table") );
301+
metaRequest.setParam("table_name", request.getParam("meta_table"));
283302
metaRequest.setPageSize(Integer.MAX_VALUE);
284303
//call LSSTMetaSearch processor to get the meta data as a DataGroup
285304
DataGroup metaData = getMeta(metaRequest);
286305

287306
DataType[] dataTypes = new DataType[columns.size()];
288-
DataObject[] dataObjects=metaData.values().toArray(new DataObject[0]);
289-
for (int k=0; k<columns.size(); k++) {
290-
JSONObject col = (JSONObject) columns.get(k);
291-
for (int i = 0; i < dataObjects.length; i++) {
292-
String keyName = ((String) dataObjects[i].getDataElement("Field")).trim();
293-
if (keyName.equalsIgnoreCase( col.get("name").toString().trim() ) ){
294-
boolean maybeNull = dataObjects[i].getDataElement("Null").toString().equalsIgnoreCase("yes") ? true : false;
295-
dataTypes[k] = new DataType(keyName, keyName,
296-
getDataClass((String) dataObjects[i].getDataElement("Type")),
297-
DataType.Importance.HIGH,
298-
(String) dataObjects[i].getDataElement("Unit"),
299-
maybeNull
300-
);
301-
dataTypes[k].setShortDesc((String) dataObjects[i].getDataElement("Description"));
302-
break;
307+
DataObject[] dataObjects = metaData.values().toArray(new DataObject[0]);
308+
309+
//all columns are selected, the default
310+
if (columns.size() == dataObjects.length) {
311+
for (int i = 0;i < columns.size(); i++) {
312+
JSONObject col = (JSONObject) columns.get(i);
313+
boolean maybeNull = dataObjects[i].getDataElement("Null").toString().equalsIgnoreCase("yes") ? true : false;
314+
//TODO always get the data type from the data meta unless it is null
315+
Class cls = getDataClass(col.get("datatype").toString());
316+
if (cls==null){
317+
cls = getDataClass( (String) dataObjects[i].getDataElement("Type"));
318+
}
319+
String colName = col.get("name").toString().trim();
320+
dataTypes[i] = new DataType(colName, colName,
321+
cls,
322+
DataType.Importance.HIGH,
323+
(String) dataObjects[i].getDataElement("Unit"),
324+
maybeNull
325+
);
326+
dataTypes[i].setShortDesc((String) dataObjects[i].getDataElement("Description"));
327+
}
328+
329+
330+
} else {
331+
for (int k = 0; k < columns.size(); k++) {
332+
JSONObject col = (JSONObject) columns.get(k);
333+
for (int i = 0; i < dataObjects.length; i++) {
334+
String keyName = ((String) dataObjects[i].getDataElement("Field")).trim();
335+
if (keyName.equalsIgnoreCase(col.get("name").toString().trim())) {
336+
boolean maybeNull = dataObjects[i].getDataElement("Null").toString().equalsIgnoreCase("yes") ? true : false;
337+
//TODO always get the data type from the data meta unless it is null
338+
Class cls = getDataClass(col.get("datatype").toString());
339+
if (cls==null){
340+
cls = getDataClass( (String) dataObjects[i].getDataElement("Type"));
341+
}
342+
dataTypes[k] = new DataType(keyName, keyName,
343+
cls,
344+
DataType.Importance.HIGH,
345+
(String) dataObjects[i].getDataElement("Unit"),
346+
maybeNull
347+
);
348+
dataTypes[k].setShortDesc((String) dataObjects[i].getDataElement("Description"));
349+
break;
350+
}
303351
}
304352
}
305353
}
354+
306355
return dataTypes;
307356
}
308357

0 commit comments

Comments
 (0)