svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libFMap_data / src / org / gvsig / fmap / data / feature / impl / DefaultFeatureComparator.java @ 24017
History | View | Annotate | Download (1.63 KB)
1 | 23820 | jjdelcerro | package org.gvsig.fmap.data.feature.impl; |
---|---|---|---|
2 | |||
3 | import java.util.Comparator; |
||
4 | import java.util.Iterator; |
||
5 | |||
6 | import org.gvsig.fmap.data.feature.Feature; |
||
7 | import org.gvsig.fmap.data.feature.FeatureQueryOrder; |
||
8 | import org.gvsig.tools.evaluator.Evaluator; |
||
9 | import org.gvsig.tools.evaluator.EvaluatorData; |
||
10 | |||
11 | public class DefaultFeatureComparator implements Comparator { |
||
12 | |||
13 | private FeatureQueryOrder order;
|
||
14 | |||
15 | |||
16 | public DefaultFeatureComparator(FeatureQueryOrder order) {
|
||
17 | this.order = order;
|
||
18 | // TODO optimizar en un array???
|
||
19 | |||
20 | } |
||
21 | |||
22 | |||
23 | private int myCompare(Object arg0, Object arg1) { |
||
24 | if (arg0 == null){ |
||
25 | if (arg1 == null){ |
||
26 | return 0; |
||
27 | } else{
|
||
28 | return 1; |
||
29 | } |
||
30 | } else if (arg1 == null){ |
||
31 | if (arg0 == null) { |
||
32 | return 0; |
||
33 | } else {
|
||
34 | return 1; |
||
35 | } |
||
36 | } |
||
37 | if (arg0 instanceof Comparable) { |
||
38 | return ((Comparable) arg0).compareTo(arg1); |
||
39 | } else if (arg1 instanceof Comparable) { |
||
40 | return ((Comparable) arg1).compareTo(arg0) * -1; |
||
41 | } |
||
42 | |||
43 | if (arg0.equals(arg1)){
|
||
44 | return 0; |
||
45 | } else{
|
||
46 | return -1; |
||
47 | } |
||
48 | |||
49 | } |
||
50 | |||
51 | public int compare(Object arg0, Object arg1) { |
||
52 | Iterator iter = this.order.iterator(); |
||
53 | int returnValue = 0; |
||
54 | Feature f0 = (Feature) arg0; |
||
55 | Feature f1 = (Feature) arg1; |
||
56 | Object item;
|
||
57 | String attrName;
|
||
58 | Evaluator evaluator; |
||
59 | while (returnValue == 0 && iter.hasNext()) { |
||
60 | item = iter.next(); |
||
61 | if (item instanceof String) { |
||
62 | attrName = (String) item;
|
||
63 | returnValue = this
|
||
64 | .myCompare(f0.get(attrName), f1 |
||
65 | .get(attrName)); |
||
66 | } else {
|
||
67 | evaluator = (Evaluator) item; |
||
68 | returnValue = this.myCompare(evaluator
|
||
69 | .evaluate((EvaluatorData) f0), evaluator |
||
70 | .evaluate((EvaluatorData) f1)); |
||
71 | } |
||
72 | } |
||
73 | |||
74 | return returnValue;
|
||
75 | } |
||
76 | |||
77 | } |