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 |
}
|