Revision 112 org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/dynobject/impl/DefaultDynField.java

View differences:

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