Revision 112 org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/dynobject/impl/DefaultDynField.java
DefaultDynField.java | ||
---|---|---|
1 | 1 |
package org.gvsig.tools.dynobject.impl; |
2 | 2 |
|
3 |
import java.io.File; |
|
4 |
import java.net.URI; |
|
5 |
import java.text.ParsePosition; |
|
6 |
import java.text.SimpleDateFormat; |
|
7 | 3 |
import java.util.Date; |
8 | 4 |
import java.util.Iterator; |
9 | 5 |
import java.util.List; |
... | ... | |
11 | 7 |
import java.util.Set; |
12 | 8 |
|
13 | 9 |
import org.gvsig.tools.ToolsLocator; |
10 |
import org.gvsig.tools.dataTypes.CoercionException; |
|
14 | 11 |
import org.gvsig.tools.dataTypes.DataTypes; |
12 |
import org.gvsig.tools.dataTypes.DataTypesManager; |
|
15 | 13 |
import org.gvsig.tools.dynobject.DynClass; |
16 | 14 |
import org.gvsig.tools.dynobject.DynField; |
17 | 15 |
import org.gvsig.tools.dynobject.DynMethod; |
... | ... | |
33 | 31 |
|
34 | 32 |
private Object defaultValue; |
35 | 33 |
|
36 |
/** @deprecated **/ |
|
37 |
private int typeOfAvailableValues; |
|
38 |
|
|
39 | 34 |
private int order; |
40 | 35 |
private String groupName; |
41 | 36 |
private DynObjectValueItem[] availableValues; |
... | ... | |
52 | 47 |
DataTypes.UNKNOWN, // data type |
53 | 48 |
null, // default value |
54 | 49 |
true, // persistent |
55 |
false, // mandatory |
|
56 |
DynField.ANY // type of available values |
|
50 |
false // mandatory |
|
57 | 51 |
); |
58 | 52 |
} |
59 | 53 |
|
60 | 54 |
public DefaultDynField(String name, int dataType, Object defaultValue, |
61 |
boolean persistent, boolean mandatory, int typeOfAvailableValues) {
|
|
55 |
boolean persistent, boolean mandatory) { |
|
62 | 56 |
this.name = name; |
63 | 57 |
this.dataType = dataType; |
64 | 58 |
this.defaultValue = defaultValue; |
65 | 59 |
this.persistent = persistent; |
66 | 60 |
this.mandatory = mandatory; |
67 |
this.typeOfAvailableValues = typeOfAvailableValues; |
|
68 | 61 |
this.theClass = null; |
69 | 62 |
this.validateElements = false; |
70 | 63 |
this.subtype = null; |
... | ... | |
104 | 97 |
} |
105 | 98 |
|
106 | 99 |
public DynField setType(int dataType) { |
100 |
DataTypesManager manager = ToolsLocator.getDataTypesManager(); |
|
107 | 101 |
this.dataType = dataType; |
108 |
this.theClass = ToolsLocator.getDynObjectManager().getDefaultClassOfType(dataType); |
|
102 |
this.theClass = manager.getDefaultClass(dataType); |
|
103 |
this.subtype = manager.getSubtype(dataType); |
|
109 | 104 |
return this; |
110 | 105 |
} |
111 | 106 |
|
... | ... | |
131 | 126 |
return defaultValue; |
132 | 127 |
} |
133 | 128 |
|
134 |
public int getTheTypeOfAvailableValues() { |
|
135 |
return typeOfAvailableValues; |
|
136 |
} |
|
137 |
|
|
138 | 129 |
public DynField setAvailableValues(DynObjectValueItem[] availableValues) { |
139 | 130 |
this.availableValues = availableValues; |
140 | 131 |
return this; |
... | ... | |
186 | 177 |
} |
187 | 178 |
|
188 | 179 |
public DynField setTheTypeOfAvailableValues(int type) { |
189 |
if (type == DynField.ANY || type == DynField.RANGE |
|
190 |
|| type == DynField.CHOICE) { |
|
191 |
this.typeOfAvailableValues = type; |
|
192 |
} else { |
|
193 |
// FIXME |
|
194 |
throw new IllegalArgumentException(); |
|
195 |
} |
|
196 |
return this; |
|
180 |
return this; // FIXME: this method is @deprecated |
|
197 | 181 |
} |
198 | 182 |
|
183 |
public int getTheTypeOfAvailableValues() { |
|
184 |
return 1; // FIXME: this method is @deprecated |
|
185 |
} |
|
199 | 186 |
|
187 |
|
|
200 | 188 |
public boolean equals(Object obj) { |
201 | 189 |
if (this == obj) { |
202 | 190 |
return true; |
... | ... | |
272 | 260 |
default: |
273 | 261 |
throw new DynFieldIsNotAContainerException(this.name); |
274 | 262 |
} |
275 |
DynField dynField = new DefaultDynField(this.name+"-"+DataTypes.getTypeName(this.dataType)+"-item");
|
|
263 |
DynField dynField = new DefaultDynField(this.name+"-"+ToolsLocator.getDataTypesManager().getTypeName(this.dataType)+"-item");
|
|
276 | 264 |
this.elementsType = new ElementTypeWrapper(this.name, this.description, dynField); |
277 | 265 |
return dynField; |
278 | 266 |
} |
... | ... | |
402 | 390 |
if( this.mandatory && value==null ) { |
403 | 391 |
throw new DynFieldValidateException(value,this); |
404 | 392 |
} |
405 |
|
|
406 |
switch( this.typeOfAvailableValues) { |
|
407 |
case ANY: |
|
408 |
break; |
|
409 |
|
|
410 |
case CHOICE: |
|
393 |
|
|
394 |
if( this.getAvailableValues() != null ) { |
|
411 | 395 |
if( !(value instanceof Comparable) ) { |
412 | 396 |
throw new DynFieldValidateException(value,this); |
413 | 397 |
} |
414 | 398 |
v = (Comparable)value; |
399 |
boolean ok = false; |
|
415 | 400 |
for( int i=0; i<this.availableValues.length; i++ ) { |
416 |
if( v.compareTo(this.availableValues[i].getValue())!=0) { |
|
417 |
throw new DynFieldValidateException(value,this); |
|
401 |
if( v.compareTo(this.availableValues[i].getValue())==0) { |
|
402 |
ok = true; |
|
403 |
break; |
|
418 | 404 |
} |
419 | 405 |
} |
420 |
break; |
|
421 |
|
|
422 |
case RANGE: |
|
406 |
if( !ok ) { |
|
407 |
throw new DynFieldValidateException(value,this); |
|
408 |
} |
|
409 |
} else if( this.getMaxValue()!=null && this.getMinValue()!=null ) { |
|
423 | 410 |
if( !(value instanceof Comparable) ) { |
424 | 411 |
throw new DynFieldValidateException(value,this); |
425 | 412 |
} |
... | ... | |
427 | 414 |
if( v.compareTo(this.minValue)<0 || v.compareTo(this.maxValue)>0 ) { |
428 | 415 |
throw new DynFieldValidateException(value,this); |
429 | 416 |
} |
430 |
break; |
|
431 |
|
|
432 | 417 |
} |
433 | 418 |
} |
434 | 419 |
|
435 |
public Object coerce(Object value) { |
|
420 |
public Object coerce(Object value) throws CoercionException {
|
|
436 | 421 |
if( value == null ) { |
437 | 422 |
return value; // O debe retorna this.defaultValue |
438 | 423 |
} |
439 |
switch( this.dataType ) { |
|
440 |
case DataTypes.FOLDER: |
|
441 |
case DataTypes.FILE: |
|
442 |
if( ! (value instanceof File) ) { |
|
443 |
if( value instanceof String ) { |
|
444 |
value = new File((String) value); |
|
445 |
} else if( value instanceof URI ) { |
|
446 |
value = new File((URI) value); |
|
447 |
} else { |
|
448 |
value = null; |
|
449 |
} |
|
450 |
} |
|
451 |
break; |
|
452 |
|
|
453 |
case DataTypes.STRING: |
|
454 |
case DataTypes.CHAR: |
|
455 |
if( !(value instanceof String )) { |
|
456 |
value = value.toString(); |
|
457 |
} |
|
458 |
break; |
|
459 |
|
|
460 |
case DataTypes.INT: |
|
461 |
if( ! (value instanceof Integer) ) { |
|
462 |
if( value instanceof Number ) { |
|
463 |
value = new Integer(((Number)value).intValue()); |
|
464 |
} else { |
|
465 |
value = Integer.valueOf(value.toString()); |
|
466 |
} |
|
467 |
} |
|
468 |
break; |
|
469 |
|
|
470 |
case DataTypes.LONG: |
|
471 |
if( ! (value instanceof Long) ) { |
|
472 |
if( value instanceof Number ) { |
|
473 |
value = new Long(((Number)value).longValue()); |
|
474 |
} else { |
|
475 |
value = Long.valueOf(value.toString()); |
|
476 |
} |
|
477 |
} |
|
478 |
break; |
|
479 |
|
|
480 |
case DataTypes.DOUBLE: |
|
481 |
if( ! (value instanceof Double) ) { |
|
482 |
if( value instanceof Number ) { |
|
483 |
value = new Double(((Number)value).doubleValue()); |
|
484 |
} else { |
|
485 |
value = Double.valueOf(value.toString()); |
|
486 |
} |
|
487 |
} |
|
488 |
break; |
|
489 |
|
|
490 |
case DataTypes.FLOAT: |
|
491 |
if( ! (value instanceof Float) ) { |
|
492 |
if( value instanceof Number ) { |
|
493 |
value = new Float(((Number)value).floatValue()); |
|
494 |
} else { |
|
495 |
value = Float.valueOf(value.toString()); |
|
496 |
} |
|
497 |
} |
|
498 |
break; |
|
499 |
|
|
500 |
case DataTypes.DATE: |
|
501 |
case DataTypes.TIME: |
|
502 |
case DataTypes.TIMESTAMP: |
|
503 |
if( ! (value instanceof Date) ) { |
|
504 |
SimpleDateFormat formatter = new SimpleDateFormat(); |
|
505 |
ParsePosition pp = new ParsePosition(0); |
|
506 |
Date d = formatter.parse(value.toString(), pp); |
|
507 |
value = d; // If not parse value is set to null |
|
508 |
} |
|
509 |
break; |
|
510 |
|
|
511 |
case DataTypes.BOOLEAN: |
|
512 |
if( ! (value instanceof Boolean) ) { |
|
513 |
if( value instanceof Number ) { |
|
514 |
if( ((Number)value).intValue()==1 ) { |
|
515 |
value = Boolean.TRUE; |
|
516 |
} else { |
|
517 |
value = Boolean.FALSE; |
|
518 |
} |
|
519 |
} else { |
|
520 |
value = Boolean.valueOf(value.toString()); |
|
521 |
} |
|
522 |
} |
|
523 |
break; |
|
524 |
|
|
525 |
} |
|
526 |
return value; |
|
424 |
DataTypesManager manager = ToolsLocator.getDataTypesManager(); |
|
425 |
return manager.coerce(this.dataType, value); |
|
527 | 426 |
} |
528 | 427 |
|
529 | 428 |
|
Also available in: Unified diff