- Timestamp:
- May 31, 2010, 10:24:00 AM (14 years ago)
- Location:
- trunk/grails-app/domain/dbnp/studycapturing
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/grails-app/domain/dbnp/studycapturing/RelTime.groovy
- Property svn:keywords set to Date Rev Author
-
trunk/grails-app/domain/dbnp/studycapturing/TemplateEntity.groovy
r497 r500 21 21 Map templateDoubleFields = [:] 22 22 Map templateDateFields = [:] 23 23 Map templateRelTimeFields = [:] // Contains relative times in seconds 24 24 Map templateTermFields = [:] 25 25 … … 33 33 templateDateFields: Date, 34 34 templateTermFields: Term, 35 35 templateRelTimeFields: long, 36 36 systemFields: TemplateField 37 37 ] … … 41 41 42 42 templateTextFields type: 'text' 43 } 43 } 44 44 45 45 /** … … 66 66 fields.each { key, value -> 67 67 // check if the value is of proper type 68 if ( value && value.class != String) {68 if (value && value.class != String) { 69 69 // it's of some other type 70 70 try { … … 91 91 def error = false 92 92 fields.each { key, value -> 93 if ( value && value.class != String) {93 if (value && value.class != String) { 94 94 try { 95 95 fields[key] = (value as String) … … 110 110 def error = false 111 111 fields.each { key, value -> 112 if ( value && value.class != TemplateFieldListItem) {112 if (value && value.class != TemplateFieldListItem) { 113 113 try { 114 114 fields[key] = (value as TemplateFieldListItem) … … 129 129 def error = false 130 130 fields.each { key, value -> 131 if (value && value.class != Integer 131 if (value && value.class != Integer) { 132 132 try { 133 133 fields[key] = (value as Integer) … … 148 148 def error = false 149 149 fields.each { key, value -> 150 if ( value && value.class != Float) {150 if (value && value.class != Float) { 151 151 try { 152 152 fields[key] = (value as Float) … … 167 167 def error = false 168 168 fields.each { key, value -> 169 if ( value && value.class != Double) {169 if (value && value.class != Double) { 170 170 try { 171 171 fields[key] = (value as Double) … … 186 186 def error = false 187 187 fields.each { key, value -> 188 if ( value && value.class != Date) {188 if (value && value.class != Date) { 189 189 try { 190 190 fields[key] = (value as Date) … … 205 205 def error = false 206 206 fields.each { key, value -> 207 if ( value && value.class != long) {207 if (value && value.class != long) { 208 208 try { 209 209 fields[key] = (value as long) … … 224 224 def error = false 225 225 fields.each { key, value -> 226 if ( value && value.class != Term) {226 if (value && value.class != Term) { 227 227 try { 228 228 fields[key] = (value as Term) … … 250 250 */ 251 251 public Map getStore(TemplateFieldType fieldType) { 252 switch (fieldType) {252 switch (fieldType) { 253 253 case TemplateFieldType.STRING: 254 254 return templateStringFields … … 269 269 case TemplateFieldType.ONTOLOGYTERM: 270 270 return templateTermFields 271 271 default: 272 272 throw new NoSuchFieldException("Field type ${fieldType} not recognized") 273 273 } … … 285 285 // (such escaped names are commonly used 286 286 // in the HTTP forms of this application) 287 String escapedLowerCaseFieldName = fieldName.toLowerCase().replaceAll("([^a-z0-9])", "_")287 String escapedLowerCaseFieldName = fieldName.toLowerCase().replaceAll("([^a-z0-9])", "_") 288 288 289 289 // Find the target template field, if not found, throw an error … … 307 307 308 308 if (isDomainField(fieldName)) { 309 309 return this[fieldName] 310 310 } 311 311 else { 312 TemplateField field = getField(this.giveTemplateFields(),fieldName)313 312 TemplateField field = getField(this.giveTemplateFields(), fieldName) 313 return getStore(field.type)[fieldName] 314 314 } 315 315 … … 324 324 // getField should throw a NoSuchFieldException if the field does not exist 325 325 try { 326 TemplateField field = getField(this.giveFields(), fieldName)326 TemplateField field = getField(this.giveFields(), fieldName) 327 327 // return true if exception is not thrown (but double check if field really is not null) 328 328 if (field) { … … 334 334 } 335 335 // if exception is thrown, return false 336 catch (NoSuchFieldException e) {336 catch (NoSuchFieldException e) { 337 337 return false 338 338 } … … 346 346 def setFieldValue(String fieldName, value) { 347 347 // get the template field 348 TemplateField field = getField(this.giveFields(), fieldName)348 TemplateField field = getField(this.giveFields(), fieldName) 349 349 350 350 // Convenience setter for template string list fields: find TemplateFieldListItem by name … … 377 377 378 378 // Magic setter for relative times: handle string values for relTime fields 379 379 // 380 380 if (field.type == TemplateFieldType.RELTIME && value != null && value.class == String) { 381 382 value = RelTime.parseRelTime( value).getValue();381 // A string was given, attempt to transform it into a timespan 382 value = RelTime.parseRelTime(value).getValue(); 383 383 } 384 384 … … 408 408 409 409 // remove value. For numbers, this is done by setting 410 411 switch( field.type.toString()) {412 413 414 415 416 417 410 // the value to 0, otherwise, setting it to NULL 411 switch (field.type.toString()) { 412 case ['INTEGER', 'FLOAT', 'DOUBLE', 'RELTIME']: 413 this[field.name] = 0; 414 break; 415 default: 416 this[field.name] = null 417 } 418 418 } 419 419 } else { … … 422 422 def store = getStore(field.type) 423 423 424 425 426 427 if ( value || value == 0) {428 429 430 431 432 } else if ( store[fieldName]) {433 434 435 436 437 424 // If some value is entered (or 0), then save the value 425 // otherwise, it should not be present in the store, so 426 // it is unset if it is. 427 if (value || value == 0) { 428 println ".setting [" + ((super) ? super.class : '??') + "] template field: [" + fieldName + "] ([" + value.toString() + "] of type [" + value.class + "])" 429 430 // set value 431 store[fieldName] = value 432 } else if (store[fieldName]) { 433 println ".unsetting [" + ((super) ? super.class : '??') + "] template field: [" + fieldName + "]" 434 435 // remove the item from the Map (if present) 436 store.remove(fieldName) 437 } 438 438 } 439 439 … … 443 443 /** 444 444 * Check if a given field is a domain field 445 * @param TemplateField 445 * @param TemplateField field instance 446 446 * @return boolean 447 447 */ 448 448 boolean isDomainField(TemplateField field) { 449 return isDomainField( field.name)449 return isDomainField(field.name) 450 450 } 451 451 452 452 /** 453 453 * Check if a given field is a domain field 454 * @param String 454 * @param String field name 455 455 * @return boolean 456 456 */ 457 458 459 460 457 boolean isDomainField(String fieldName) { 458 return this.giveDomainFields()*.name.contains(fieldName) 459 } 460 461 461 /** 462 462 * Return all fields defined in the underlying template and the built-in 463 463 * domain fields of this entity 464 464 */ 465 465 def List<TemplateField> giveFields() { … … 477 477 * Return all relevant 'built-in' domain fields of the super class 478 478 * @return List with DomainTemplateFields 479 480 479 * @see TemplateField 480 */ 481 481 abstract List<TemplateField> giveDomainFields() 482 482 -
trunk/grails-app/domain/dbnp/studycapturing/TemplateFieldType.groovy
r496 r500 17 17 ONTOLOGYTERM('Ontology Reference'), 18 18 DATE('Date'), 19 19 RELTIME('Relative time') // relative date, e.g. days since start of study 20 20 21 21 String name … … 30 30 31 31 def getDefaultValue() { 32 switch (this) {32 switch (this) { 33 33 case [STRING, TEXT]: 34 34 return "" … … 45 45 case DATE: 46 46 return null 47 48 47 case RELTIME: 48 return null 49 49 default: 50 50 throw new NoSuchFieldException("Field type ${fieldType} not recognized")
Note: See TracChangeset
for help on using the changeset viewer.