@@ -396,14 +396,31 @@ private ServiceResponse list(Class c, ServiceRequest request, Database database)
396396
397397 //Get tableName and spatial fields associated with the Model
398398 String tableName ;
399+ HashMap <String , String > fieldMap = new HashMap <>();
399400 HashSet <String > spatialFields = new HashSet <>();
400401 try {
401402 Object obj = c .newInstance ();
403+
404+ //Get tableName
402405 java .lang .reflect .Field field = obj .getClass ().getSuperclass ().getDeclaredField ("tableName" );
403406 field .setAccessible (true );
404407 tableName = (String ) field .get (obj );
405408
406409
410+ //Get fieldMap
411+ field = obj .getClass ().getSuperclass ().getDeclaredField ("fieldMap" );
412+ field .setAccessible (true );
413+ HashMap <String , String > map = (HashMap <String , String >) field .get (obj );
414+ Iterator <String > it = map .keySet ().iterator ();
415+ while (it .hasNext ()){
416+ String fieldName = it .next ();
417+ String columnName = map .get (fieldName );
418+ fieldMap .put (fieldName , columnName );
419+ }
420+ fieldMap .put ("id" , "id" );
421+
422+
423+ //Get spatial fields
407424 for (java .lang .reflect .Field f : obj .getClass ().getDeclaredFields ()){
408425 Class fieldType = f .getType ();
409426 String packageName = fieldType .getPackage ()==null ? "" :
@@ -444,24 +461,36 @@ private ServiceResponse list(Class c, ServiceRequest request, Database database)
444461 sql .append (tableName );
445462
446463
464+ String where = null ;
447465 Filter filter = request .getFilter ();
448466 if (!filter .isEmpty ()){
449467 //System.out.println(filter.toJson().toString(4));
450- sql .append (" where " );
451- Filter .Item [] items = filter .getItems ();
452- for (int i =0 ; i <items .length ; i ++){
453- if (i >0 ) sql .append (" and " );
454- sql .append ("(" );
455- sql .append (items [i ].toString ());
456- sql .append (")" );
468+ ArrayList <String > arr = new ArrayList <>();
469+ for (Filter .Item item : filter .getItems ()){
470+ String name = item .getField ();
471+ Iterator <String > it = fieldMap .keySet ().iterator ();
472+ while (it .hasNext ()){
473+ String fieldName = it .next ();
474+ String columnName = fieldMap .get (fieldName );
475+ if (name .equalsIgnoreCase (fieldName ) || name .equalsIgnoreCase (columnName )){
476+ String op = item .getOperation ();
477+ javaxt .utils .Value v = item .getValue ();
478+ arr .add ("(" + columnName + " " + op + " " + v + ")" );
479+ break ;
480+ }
481+ }
482+ }
483+ if (!arr .isEmpty ()){
484+ where = String .join (" and " , arr );
485+ //console.log(where);
457486 }
458487 }
459488 else {
460- String where = request .getWhere ();
461- if ( where != null ){
462- sql . append ( " where " );
463- sql .append (where );
464- }
489+ where = request .getWhere ();
490+ }
491+ if ( where != null ){
492+ sql .append (" where " );
493+ sql . append ( where );
465494 }
466495
467496
@@ -493,8 +522,8 @@ private ServiceResponse list(Class c, ServiceRequest request, Database database)
493522 }
494523
495524
496- String format = "" ;
497-
525+ String format = request . getParameter ( "format" ). toString () ;
526+ if ( format == null ) format = "" ; else format = format . toLowerCase ();
498527
499528
500529 //Excute query and generate response
@@ -517,6 +546,7 @@ private ServiceResponse list(Class c, ServiceRequest request, Database database)
517546 csv .append (field .getName ());
518547 i ++;
519548 }
549+ csv .append ("\r \n " );
520550 }
521551
522552 int i = 0 ;
@@ -655,7 +685,7 @@ private ServiceResponse save(Class c, ServiceRequest request, Database database)
655685 //Get id
656686 Method getID = getMethod ("getID" , c );
657687 id = (Long ) getID .invoke (obj );
658- if (id ==null ) throw new Exception ( "Save failed " );
688+ if (id ==null ) return new ServiceResponse ( 500 , "Failed to retrieve ID on save " );
659689
660690
661691 //Fire event
0 commit comments