Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.impl / src / main / java / org / gvsig / fmap / dal / feature / impl / DefaultFeatureComparator.java @ 40435

History | View | Annotate | Download (1.84 KB)

1
package org.gvsig.fmap.dal.feature.impl;
2

    
3
import java.util.Comparator;
4
import java.util.Iterator;
5

    
6
import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
7
import org.gvsig.fmap.dal.feature.Feature;
8
import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
9
import org.gvsig.tools.evaluator.Evaluator;
10
import org.gvsig.tools.evaluator.EvaluatorData;
11
import org.gvsig.tools.evaluator.EvaluatorException;
12

    
13
public class DefaultFeatureComparator implements Comparator {
14

    
15
        private FeatureQueryOrder order;
16

    
17

    
18
        public DefaultFeatureComparator(FeatureQueryOrder order) {
19
                this.order = order;
20
                // TODO optimizar en un array???
21

    
22
        }
23

    
24

    
25
        private int myCompare(Object arg0, Object arg1) {
26
                if (arg0 == null){
27
                        if (arg1 == null){
28
                                return 0;
29
                        } else{
30
                                return 1;
31
                        }
32
                } else if (arg1 == null){
33
                        if (arg0 == null) {
34
                                return 0;
35
                        } else {
36
                                return 1;
37
                        }
38
                }
39
                if (arg0 instanceof Comparable) {
40
                        return ((Comparable) arg0).compareTo(arg1);
41
                } else if (arg1 instanceof Comparable) {
42
                        return ((Comparable) arg1).compareTo(arg0) * -1;
43
                }
44

    
45
                if (arg0.equals(arg1)){
46
                        return 0;
47
                } else{
48
                        return -1;
49
                }
50

    
51
        }
52

    
53
        public int compare(Object arg0, Object arg1) {
54
                Iterator iter = this.order.iterator();
55
                int returnValue = 0;
56
                Feature f0 = (Feature) arg0;
57
                Feature f1 = (Feature) arg1;
58
                Object item;
59
                String attrName;
60
                Evaluator evaluator;
61
                while (returnValue == 0 && iter.hasNext()) {
62
                        item = iter.next();
63
                        if (item instanceof String) {
64
                                attrName = (String) item;
65
                                returnValue = this
66
                                                .myCompare(f0.get(attrName), f1
67
                                                .get(attrName));
68
                        } else {
69
                                evaluator = (Evaluator) item;
70
                                try {
71
                                        returnValue = this.myCompare(evaluator
72
                                                        .evaluate((EvaluatorData) f0), evaluator
73
                                                        .evaluate((EvaluatorData) f1));
74
                                } catch (EvaluatorException e) {
75
                                        throw new DataEvaluatorRuntimeException(e);
76
                                }
77
                        }
78
                }
79

    
80
                return returnValue;
81
        }
82

    
83
}