Statistics
| Revision:

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
}