Revision 2415

View differences:

trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/rendering/VectorialUniqueValueLegend.java
46 46
import com.hardcode.gdbms.engine.instruction.SemanticException;
47 47
import com.hardcode.gdbms.engine.values.BooleanValue;
48 48
import com.hardcode.gdbms.engine.values.NullValue;
49
import com.hardcode.gdbms.engine.values.StringValue;
49 50
import com.hardcode.gdbms.engine.values.Value;
50 51
import com.hardcode.gdbms.engine.values.ValueFactory;
51 52

  
......
58 59

  
59 60
import com.iver.utiles.XMLEntity;
60 61

  
62
import java.sql.Types;
63
import java.text.ParseException;
61 64
import java.util.ArrayList;
62 65
import java.util.Comparator;
63 66
import java.util.TreeMap;
64 67

  
68
import org.exolab.castor.xml.TypeValidator;
65 69

  
70

  
66 71
/**
67 72
 * Leyenda vectorial por valores ?nicos.
68 73
 *
......
78 83
						Value v2 = (Value) o2;
79 84
						Value v1 = (Value) o1;
80 85
						BooleanValue boolVal;
81

  
86
//						TODO estas dos comprobaciones son por evitar un bug en el gdbms, cuando se solucione se puede eliminar.
87
						if (v1 instanceof NullValue && v2 instanceof NullValue)return 0;
88
						if (v1 instanceof NullValue)return -1;
89
						if (v2 instanceof NullValue)return 1;
90
						
91
						if (v1 instanceof StringValue && v2 instanceof StringValue && ((StringValue)v2).getValue().equals(((StringValue)v1).getValue()))return 0;
92
						if (v1 instanceof StringValue)return -1;
93
						if (v2 instanceof StringValue)return 1;
82 94
						try {
83 95
							boolVal = (BooleanValue) (v1.greater(v2));
84 96

  
85
							//TODO estas dos comprobaciones son por evitar un bug en el gdbms, cuando se solucione se puede eliminar.
86
							if (v1 instanceof NullValue)return -1;
87
							if (v2 instanceof NullValue)return 1;
88 97
							
98
							
89 99
							if (boolVal.getValue()) {
90 100
								return 1;
91 101
							}
......
113 123
	private FSymbol defaultSymbol;
114 124
	private DataSource dataSource;
115 125
	private int shapeType;
126
	private String valueType=NullValue.class.getName();
127
	private boolean useDefaultSymbol=false;
116 128

  
117 129
	/**
118 130
	 * Crea un nuevo VectorialUniqueValueLegend.
......
127 139
	 * @param shapeType Tipo de shape.
128 140
	 */
129 141
	public VectorialUniqueValueLegend(int shapeType) {
130
		switch (shapeType) {
142
		setShapeType(shapeType);
143
	}
144

  
145
	/**
146
	 * Inserta el tipo de shape.
147
	 *
148
	 * @param shapeType Tipo de shape.
149
	 */
150
	public void setShapeType(int shapeType) {
151
		if (this.shapeType != shapeType) {
152
			switch (shapeType) {
131 153
			case FShape.POINT:
132 154
				defaultSymbol = new FSymbol(FConstant.SYMBOL_TYPE_POINT);
133 155

  
......
143 165

  
144 166
				break;
145 167
		}
146
	}
147

  
148
	/**
149
	 * Inserta el tipo de shape.
150
	 *
151
	 * @param shapeType Tipo de shape.
152
	 */
153
	public void setShapeType(int shapeType) {
154
		if (this.shapeType != shapeType) {
155
			switch (shapeType) {
156
				case FShape.POINT:
157
					defaultSymbol = new FSymbol(FConstant.SYMBOL_TYPE_POINT);
158

  
159
					break;
160

  
161
				case FShape.LINE:
162
					defaultSymbol = new FSymbol(FConstant.SYMBOL_TYPE_LINE);
163

  
164
					break;
165

  
166
				case FShape.POLYGON:
167
					defaultSymbol = new FSymbol(FConstant.SYMBOL_TYPE_FILL);
168

  
169
					break;
170
			}
171

  
172 168
			this.shapeType = shapeType;
173 169
		}
174 170
	}
......
226 222
				" Sviejo= " + ((FSymbol) resul).getDescription());
227 223
		} else {
228 224
			keys.add(key);
225
			if (!key.getClass().equals(NullValue.class)){
226
				valueType=key.getClass().getName();
227
			}
229 228
		}
230 229
	}
231 230

  
......
300 299
			Value val = dataSource.getFieldValue(recordIndex, fieldId);
301 300
			FSymbol theSymbol = getSymbolByValue(val);
302 301

  
303
			if (theSymbol != null) {
302
			//if (theSymbol != null) {
304 303
				return theSymbol;
305
			} else {
306
				return getDefaultSymbol();
307
			}
304
			//} else {
305
			//	return getDefaultSymbol();
306
			//}
308 307
		} catch (com.hardcode.gdbms.engine.data.driver.DriverException e) {
309 308
			throw new DriverException(e);
310 309
		}
......
314 313
        Value val = feat.getAttribute(fieldId);
315 314
        FSymbol theSymbol = getSymbolByValue(val);
316 315

  
317
        if (theSymbol != null) {
316
        //if (theSymbol != null) {
318 317
            return theSymbol;
319
        } else {
320
            return getDefaultSymbol();
321
        }
318
        //} else {
319
        //    return getDefaultSymbol();
320
        //}
322 321
        
323 322
    }
324 323
	/**
......
337 336
		xml.putProperty("fieldName", fieldName);
338 337
		xml.putProperty("labelfield", labelFieldName);
339 338

  
340
		if (getDefaultSymbol() == null) {
341
			xml.putProperty("useDefaultSymbol", 0);
342
		} else {
343
			xml.putProperty("useDefaultSymbol", 1);
344
			xml.addChild(getDefaultSymbol().getXMLEntity());
345
		}
346

  
339
		xml.putProperty("useDefaultSymbol", useDefaultSymbol);
340
		xml.addChild(getDefaultSymbol().getXMLEntity());
341
		
347 342
		xml.putProperty("numKeys", keys.size());
348 343

  
349 344
		if (keys.size() > 0) {
350
			xml.putProperty("tipoValueKeys", keys.get(0).getClass().getName());
345
			xml.putProperty("tipoValueKeys", valueType);
351 346

  
352 347
			String[] sk = new String[keys.size()];
353 348
			String[] sv = new String[keys.size()];
......
430 425
		setFieldName(xml.getStringProperty("fieldName"));
431 426
		setLabelField(xml.getStringProperty("labelfield"));
432 427

  
433
		int useDefaultSymbol = xml.getIntProperty("useDefaultSymbol");
434

  
435
		if (useDefaultSymbol == 1) {
436
			setDefaultSymbol(FSymbol.createFromXML(xml.getChild(0)));
437
		} else {
438
			setDefaultSymbol(null);
439
		}
440

  
428
		useDefaultSymbol = xml.getBooleanProperty("useDefaultSymbol");
429
		setDefaultSymbol(FSymbol.createFromXML(xml.getChild(0)));
430
		//addSymbol(new NullUniqueValue(),getDefaultSymbol());
441 431
		int numKeys = xml.getIntProperty("numKeys");
442 432

  
443 433
		if (numKeys > 0) {
444 434
			String className = xml.getStringProperty("tipoValueKeys");
445 435
			String[] sk = xml.getStringArrayProperty("keys");
446 436
			String[] sv = xml.getStringArrayProperty("values");
447
			Value auxValue;
448
			Value auxValue2;
437
			Value auxValue=null;
438
			Value auxValue2=null;
449 439

  
450 440
			for (int i = 0; i < numKeys; i++) {
451
				try {
452
					auxValue = ValueFactory.createValue(sk[i], className);
453
					auxValue2 = ValueFactory.createValue(sv[i], className);
454

  
441
				//try {
442
					boolean isDefault=false;
443
					if (getValue(sk[i])==null)
444
						isDefault=true;
445
					if (className.equals("com.hardcode.gdbms.engine.values.NullUniqueValue") || isDefault){
446
						auxValue=new NullUniqueValue();
447
						auxValue2=ValueFactory.createNullValue();
448
					}else{
449
					auxValue = getValue(sk[i]);//ValueFactory.createValue(sk[i], className);
450
					auxValue2 =getValue(sv[i]);// ValueFactory.createValue(sv[i], className);
451
					}
455 452
					FSymbol sym = FSymbol.createFromXML(xml.getChild(i +
456
								useDefaultSymbol));
453
								1));
457 454

  
458 455
					///addSymbol(auxValue, sym);
459 456
					symbols.put(auxValue2, sym);
460 457
					keys.add(auxValue);
461

  
458
					
462 459
					///System.out.println("---set------"+auxValue.toString());
463 460
					/// System.out.println("set-----------"+sk[i]+"--"+sym.getDescription()+"---"+sym.getColor());
464
				} catch (SemanticException e) {
465
					// TODO Auto-generated catch block
466
					e.printStackTrace();
467
				}
461
				//} catch (SemanticException e) {
462
				//	e.printStackTrace();
463
				//}
468 464
			}
469 465
		}
466
		
470 467
	}
468
	private Value getValue(String s) {
469
		Value val = new NullUniqueValue();
470
		try {
471
			try {
472
				val = ValueFactory.createValueByType(s, Types.INTEGER);
471 473

  
474
				return val;
475
			} catch (NumberFormatException e) {
476
			}
477

  
478
			try {
479
				val = ValueFactory.createValueByType(s, Types.BIGINT);
480

  
481
				return val;
482
			} catch (NumberFormatException e) {
483
			}
484

  
485
			try {
486
				val = ValueFactory.createValueByType(s, Types.FLOAT);
487

  
488
				return val;
489
			} catch (NumberFormatException e) {
490
			}
491

  
492
			try {
493
				val = ValueFactory.createValueByType(s, Types.DOUBLE);
494

  
495
				return val;
496
			} catch (NumberFormatException e) {
497
			}
498

  
499
			val = ValueFactory.createValueByType(s, Types.LONGVARCHAR);
500
		} catch (ParseException e) {
501
			e.printStackTrace();
502
		}
503
		return val;
504
	}
505

  
506

  
472 507
	/**
473 508
	 * @see com.iver.cit.gvsig.fmap.rendering.Legend#cloneLegend()
474 509
	 */
......
497 532
	public FSymbol getSymbolByValue(Value key) {
498 533
		if (symbols.containsKey(key)) {
499 534
			return (FSymbol) symbols.get(key);
535
		}else if (useDefaultSymbol){
536
			return getDefaultSymbol();
500 537
		}
501

  
502 538
		return null;
503 539
	}
504 540

  
......
540 576
	public void setLabelRotationField(String str) {
541 577
		labelFieldRotation = str;
542 578
	}
579

  
580
	public void useDefaultSymbol(boolean b) {
581
		useDefaultSymbol=b;
582
	}
543 583
}
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/rendering/NullUniqueValue.java
1
package com.iver.cit.gvsig.fmap.rendering;
2

  
3
import com.hardcode.gdbms.engine.values.NullValue;
4

  
5

  
6
/**
7
 * Clase que extiende a NullValue para especificar los vlaores no representados
8
 * por ning?n otro valor.
9
 *
10
 * @author Vicente Caballero Navarro
11
 */
12
public class NullUniqueValue extends NullValue {
13
	public String toString() {
14
		return "Resto de Valores";
15
	}
16
}
0 17

  

Also available in: Unified diff