Changeset 2209

Show
Ignore:
Timestamp:
05-04-12 17:14:23 (2 years ago)
Author:
work@…
Message:

- improved api service

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/services/api/ApiService.groovy

    r2207 r2209  
    1919import dbnp.authentication.SecUser 
    2020import grails.converters.JSON 
     21import org.dbnp.gdt.TemplateEntity 
    2122 
    2223class ApiService implements Serializable { 
     24    // inject the module communication service 
     25    def moduleCommunicationService 
     26 
    2327    // the shared secret used to validate api calls 
    2428    static final String API_SECRET = "th!s_sH0uld^Pr0bab7y_m0v3_t%_th3_uSeR_d0Ma!n_ins7ead!" 
     29 
     30    // transactional 
    2531    static transactional = false 
    2632 
    27     def moduleCommunicationService 
     33    // hasMany keys to ignore when flattening domain data 
     34    static ignoreHasManyKeys = [ 
     35            "systemFields", 
     36            "templateBooleanFields", 
     37            "templateDateFields", 
     38            "templateDoubleFields", 
     39            "templateExtendableStringListFields", 
     40            "templateFileFields", 
     41            "templateLongFields", 
     42            "templateModuleFields", 
     43            "templateTermFields", 
     44            "templateRelTimeFields", 
     45            "templateStringFields", 
     46            "templateStringListFields", 
     47            "templateTemplateFields", 
     48            "templateTextFields" 
     49    ] 
    2850 
    2951    /** 
     
    89111            // add subject field values 
    90112            fields.each { field -> 
     113                // get a camelCased version of the field name 
     114                def name = field.name.split(" ").collect {it[0].toUpperCase() + it.substring(1)}.join('') 
     115                    name = name[0].toLowerCase() + name.substring(1) 
     116 
     117                // get the value for this field 
    91118                def value = it.getFieldValue( field.name ) 
    92119 
     120                // add value 
    93121                if (value.hasProperty('name')) { 
    94                     item[ field.name ] = value.name 
     122                    item[ name ] = value.name 
    95123                } else { 
    96                     item[ field.name ] = value 
     124                    item[ name ] = value 
    97125                } 
    98126            } 
    99127 
     128            // list hasMany sizes 
     129            it.properties.hasMany.each { hasManyItem -> 
     130                if (!ignoreHasManyKeys.contains(hasManyItem.key)) { 
     131                    // add count for this hasMany item 
     132                    item[ hasManyItem.key ] = it[ hasManyItem.key ].size() 
     133                } 
     134            } 
     135 
     136            // add item to resultset 
    100137            items[ items.size() ] = item 
    101138        }