Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libFMap_dal / src / org / gvsig / fmap / dal / feature / impl / featureSet / FeatureDataComparator.java @ 24496

History | View | Annotate | Download (1.79 KB)

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

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

    
6
import org.gvsig.fmap.dal.exceptions.DataEvaluatorRuntimeException;
7
import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
8
import org.gvsig.fmap.dal.feature.FeatureQueryOrder.FeatureQueryOrderMember;
9
import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
10
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
11
import org.gvsig.fmap.dal.feature.spi.FeatureData;
12
import org.gvsig.tools.evaluator.EvaluatorException;
13

    
14
/*
15
*
16
* Compara dos Feature o FeatureData.
17
*/
18
public class FeatureDataComparator implements Comparator {
19

    
20
        private FeatureQueryOrder order;
21
        private DefaultFeature f1;
22
        private DefaultFeature f2;
23
        private DefaultFeatureStore store;
24

    
25
        public FeatureDataComparator(DefaultFeatureStore store, FeatureQueryOrder order) {
26
                this.order = order;
27
                this.store = store;
28
                this.f1 = new DefaultFeature(this.store);
29
                this.f2 = new DefaultFeature(this.store);
30
        }
31

    
32
        public int compare(Object arg0, Object arg1) {
33
                FeatureQueryOrderMember order;
34
                Comparable v1;
35
                Comparable v2;
36
                int v;
37

    
38
                f1.setData((FeatureData) arg1);
39
                f2.setData((FeatureData) arg1);
40

    
41
                Iterator iterator = this.order.iterator();
42
                while (iterator.hasNext()) {
43
                        order = (FeatureQueryOrderMember)iterator.next();
44
                        if( order.hasEvaluator() ) {
45
                                try {
46
                                        v1 = (Comparable) order.getEvaluator().evaluate(f1);
47
                                        v2 = (Comparable) order.getEvaluator().evaluate(f2);
48
                                } catch (EvaluatorException e) {
49
                                        throw new DataEvaluatorRuntimeException(e);
50
                                }
51
                        } else {
52
                                v1 = (Comparable) f1.get(order.getAttributeName());
53
                                v2 = (Comparable) f2.get(order.getAttributeName());
54
                        }
55
                        v = v1.compareTo(v2);
56
                        if (v != 0) {
57
                                if (order.getAscending()) {
58
                                        return v;
59
                                } else {
60
                                        return -v;
61
                                }
62
                        }
63
                }
64
                return 0;
65
        }
66

    
67
}