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