@@ -178,21 +178,37 @@ private DataGroup getDataFromURL(TableServerRequest request) throws Exception {
178
178
}
179
179
180
180
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
+ }
181
196
/**
182
197
* This method convert the json data file to data group
183
198
* @param jsonFile
184
199
* @return
185
200
* @throws IOException
186
201
* @throws ParseException
187
202
*/
188
- private DataGroup getTableDataFromJson (TableServerRequest request , File jsonFile ) throws IOException , ParseException {
203
+ private DataGroup getTableDataFromJson (TableServerRequest request , File jsonFile ) throws IOException , ParseException , ClassNotFoundException {
189
204
190
205
JSONParser parser = new JSONParser ();
191
206
JSONObject obj = (JSONObject ) parser .parse (new FileReader (jsonFile ));
192
207
JSONArray data = (JSONArray ) ((JSONObject ) ((JSONObject ) obj .get ("result" )).get ("table" )).get ("data" );
193
208
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 );
196
212
197
213
DataGroup dg = new DataGroup ("result" , dataType );
198
214
@@ -208,6 +224,7 @@ private DataGroup getTableDataFromJson(TableServerRequest request, File jsonFil
208
224
for (int j =0 ; j <dataType .length ; j ++){
209
225
210
226
Object d = rowTblData .get (j );
227
+
211
228
if (d ==null ){
212
229
dataType [j ].setMayBeNull (true );
213
230
row .setDataElement (dataType [j ], null );
@@ -227,7 +244,9 @@ private DataGroup getTableDataFromJson(TableServerRequest request, File jsonFil
227
244
d =new Boolean (true );
228
245
}
229
246
}
230
- row .setDataElement (dataType [j ],d );
247
+
248
+ row .setDataElement (dataType [j ], d );
249
+
231
250
}
232
251
233
252
}
@@ -249,19 +268,19 @@ private Class getDataClass(String classType){
249
268
else if (classType .equalsIgnoreCase ("float" ) || classType .equalsIgnoreCase ("real" ) ){
250
269
return Float .class ;
251
270
}
252
- else if (classType .equalsIgnoreCase ("int(11)" )){
271
+ else if (classType .equalsIgnoreCase ("int(11)" ) || classType . equalsIgnoreCase ( "int" ) ){
253
272
return Integer .class ;
254
273
}
255
- else if (classType .equalsIgnoreCase ("BigInt(20)" ) ){
274
+ else if (classType .equalsIgnoreCase ("BigInt(20)" ) || classType . equalsIgnoreCase ( "long" ) ){
256
275
return Long .class ;
257
276
}
258
- else if (classType .equalsIgnoreCase ("bit(1)" )){
277
+ else if (classType .equalsIgnoreCase ("bit(1)" ) || classType . equalsIgnoreCase ( "boolean" ) ){
259
278
return Boolean .class ;
260
279
}
261
- else if (classType .equalsIgnoreCase ("TINYINT" )){
280
+ else if (classType .equalsIgnoreCase ("TINYINT" ) || classType . equalsIgnoreCase ( "byte" ) ){
262
281
return Byte .class ;
263
282
}
264
- else if (classType .equalsIgnoreCase ("SMALLINT" )){
283
+ else if (classType .equalsIgnoreCase ("SMALLINT" ) || classType . equalsIgnoreCase ( "short)" ) ){
265
284
return Short .class ;
266
285
}
267
286
else if (classType .equalsIgnoreCase ("string" ) ) {
@@ -275,34 +294,64 @@ else if (classType.equalsIgnoreCase("string") ) {
275
294
return null ;
276
295
277
296
}
278
- private DataType [] getTypeDef (TableServerRequest request , JSONArray columns ){
297
+ private DataType [] getTypeDef (TableServerRequest request , JSONArray columns ) {
279
298
280
299
281
300
TableServerRequest metaRequest = new TableServerRequest ("LSSTMetaSearch" );
282
- metaRequest .setParam ("table_name" ,request .getParam ("meta_table" ) );
301
+ metaRequest .setParam ("table_name" , request .getParam ("meta_table" ));
283
302
metaRequest .setPageSize (Integer .MAX_VALUE );
284
303
//call LSSTMetaSearch processor to get the meta data as a DataGroup
285
304
DataGroup metaData = getMeta (metaRequest );
286
305
287
306
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
+ }
303
351
}
304
352
}
305
353
}
354
+
306
355
return dataTypes ;
307
356
}
308
357
0 commit comments