Revision 26321 branches/v2_0_0_prep/libraries/libFMap_dal/src-test/org/gvsig/fmap/dal/feature/BaseTestFeatureStore.java
BaseTestFeatureStore.java | ||
---|---|---|
41 | 41 |
import org.gvsig.fmap.dal.DataServerExplorer; |
42 | 42 |
import org.gvsig.fmap.dal.DataStoreParameters; |
43 | 43 |
import org.gvsig.fmap.dal.DataTypes; |
44 |
import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException; |
|
44 | 45 |
import org.gvsig.fmap.dal.exception.DataException; |
46 |
import org.gvsig.fmap.dal.feature.FeatureQueryOrder.FeatureQueryOrderMember; |
|
45 | 47 |
import org.gvsig.fmap.geom.Geometry; |
46 | 48 |
import org.gvsig.tools.ToolsLibrary; |
47 | 49 |
import org.gvsig.tools.ToolsLocator; |
... | ... | |
914 | 916 |
|
915 | 917 |
} |
916 | 918 |
|
919 |
|
|
920 |
public void testSort() { |
|
921 |
try { |
|
922 |
DataStoreParameters dbfParameters = this |
|
923 |
.getDefaultDataStoreParameters(); |
|
924 |
|
|
925 |
FeatureStore store = (FeatureStore) dataManager |
|
926 |
.createStore(dbfParameters); |
|
927 |
|
|
928 |
FeatureSet set1; |
|
929 |
FeatureQuery query; |
|
930 |
Iterator iter1, attrIter; |
|
931 |
FeatureAttributeDescriptor attr; |
|
932 |
|
|
933 |
attrIter = store.getDefaultFeatureType().iterator(); |
|
934 |
|
|
935 |
String[] names; |
|
936 |
while (attrIter.hasNext()) { |
|
937 |
attr = (FeatureAttributeDescriptor) attrIter.next(); |
|
938 |
|
|
939 |
query = store.createFeatureQuery(); |
|
940 |
String fieldName = attr.getName(); |
|
941 |
|
|
942 |
names = new String[] { fieldName }; |
|
943 |
query.setAttributeNames(names); |
|
944 |
query.getOrder().add(fieldName, getRandom().nextBoolean()); |
|
945 |
|
|
946 |
set1 = store.getFeatureSet(query); |
|
947 |
if (getRandom().nextBoolean()) { |
|
948 |
iter1 = set1.fastIterator(); |
|
949 |
} else { |
|
950 |
iter1 = set1.iterator(); |
|
951 |
} |
|
952 |
|
|
953 |
assertTrue(checkSort(iter1, query)); |
|
954 |
|
|
955 |
set1.dispose(); |
|
956 |
} |
|
957 |
|
|
958 |
int ntimes = getRandom().nextInt(10) + 5; |
|
959 |
FeatureType type = store.getDefaultFeatureType(); |
|
960 |
query = store.createFeatureQuery(); |
|
961 |
for (int i = 0; i < ntimes; i++) { |
|
962 |
names = getRandomAttibuteList(type); |
|
963 |
|
|
964 |
int nShortFields = getRandom().nextInt(names.length) + 1; |
|
965 |
query.getOrder().clear(); |
|
966 |
for (int j = 0; j < nShortFields; j++) { |
|
967 |
attr = store.getDefaultFeatureType().getAttributeDescriptor(names[getRandom().nextInt(names.length)]); |
|
968 |
if (attr.getDataType() == DataTypes.INT |
|
969 |
|| attr.getDataType() == DataTypes.LONG |
|
970 |
|| attr.getDataType() == DataTypes.DOUBLE |
|
971 |
|| attr.getDataType() == DataTypes.STRING |
|
972 |
|| attr.getDataType() == DataTypes.DATE |
|
973 |
|| attr.getDataType() == DataTypes.BOOLEAN |
|
974 |
|| attr.getDataType() == DataTypes.BYTE |
|
975 |
|| attr.getDataType() == DataTypes.FLOAT) { |
|
976 |
|
|
977 |
query.getOrder().add(attr.getName(), |
|
978 |
getRandom().nextBoolean()); |
|
979 |
} |
|
980 |
} |
|
981 |
|
|
982 |
query.setAttributeNames(names); |
|
983 |
set1 = store.getFeatureSet(query); |
|
984 |
|
|
985 |
if (getRandom().nextBoolean()) { |
|
986 |
iter1 = set1.fastIterator(); |
|
987 |
} else { |
|
988 |
iter1 = set1.iterator(); |
|
989 |
} |
|
990 |
|
|
991 |
assertTrue(checkSort(iter1, query)); |
|
992 |
|
|
993 |
set1.dispose(); |
|
994 |
|
|
995 |
} |
|
996 |
|
|
997 |
|
|
998 |
store.dispose(); |
|
999 |
} catch (DataException e3) { |
|
1000 |
e3.printStackTrace(); |
|
1001 |
fail(); |
|
1002 |
return; |
|
1003 |
} |
|
1004 |
} |
|
1005 |
|
|
1006 |
|
|
1007 |
public boolean checkSort(Iterator iter, FeatureQuery query) { |
|
1008 |
|
|
1009 |
FeatureQueryOrderMember order; |
|
1010 |
Feature prevFeature = null; |
|
1011 |
Feature currFeature = null; |
|
1012 |
boolean isFirst = true; |
|
1013 |
Comparable v1, v2; |
|
1014 |
int v; |
|
1015 |
FeatureQueryOrder queryOrder = query.getOrder(); |
|
1016 |
|
|
1017 |
Iterator orderIter; |
|
1018 |
|
|
1019 |
//for debug only |
|
1020 |
/* |
|
1021 |
System.out.println("\nCheck order:"); |
|
1022 |
Iterator orderIter = queryOrder.iterator(); |
|
1023 |
while (orderIter.hasNext()) { |
|
1024 |
order = (FeatureQueryOrderMember) orderIter.next(); |
|
1025 |
System.out.print(order.getAttributeName() + " "); |
|
1026 |
if (order.getAscending()) { |
|
1027 |
System.out.print("Asc, "); |
|
1028 |
} else { |
|
1029 |
System.out.print("Desc, "); |
|
1030 |
} |
|
1031 |
} |
|
1032 |
System.out.println(";"); |
|
1033 |
*/ |
|
1034 |
|
|
1035 |
while (iter.hasNext()) { |
|
1036 |
currFeature = (Feature) iter.next(); |
|
1037 |
if (isFirst) { |
|
1038 |
prevFeature = currFeature.getCopy(); |
|
1039 |
// printFeature(prevFeature, true, 15); |
|
1040 |
isFirst = false; |
|
1041 |
continue; |
|
1042 |
} |
|
1043 |
// printFeature(currFeature, false, 15); |
|
1044 |
orderIter = queryOrder.iterator(); |
|
1045 |
while (orderIter.hasNext()) { |
|
1046 |
order = (FeatureQueryOrderMember) orderIter.next(); |
|
1047 |
if (order.hasEvaluator()) { |
|
1048 |
try { |
|
1049 |
v1 = (Comparable) order.getEvaluator().evaluate( |
|
1050 |
(EvaluatorData) prevFeature); |
|
1051 |
v2 = (Comparable) order.getEvaluator().evaluate( |
|
1052 |
(EvaluatorData) currFeature); |
|
1053 |
} catch (EvaluatorException e) { |
|
1054 |
throw new DataEvaluatorRuntimeException(e); |
|
1055 |
} |
|
1056 |
} else { |
|
1057 |
v1 = (Comparable) prevFeature.get(order.getAttributeName()); |
|
1058 |
v2 = (Comparable) currFeature.get(order.getAttributeName()); |
|
1059 |
} |
|
1060 |
v = v1.compareTo(v2); |
|
1061 |
if (v != 0) { |
|
1062 |
if (!order.getAscending()) { |
|
1063 |
v = -v; |
|
1064 |
} |
|
1065 |
} |
|
1066 |
if (v < 0) { |
|
1067 |
break; |
|
1068 |
} else if (v > 0) { |
|
1069 |
return false; |
|
1070 |
} |
|
1071 |
} |
|
1072 |
prevFeature = currFeature.getCopy(); |
|
1073 |
} |
|
1074 |
|
|
1075 |
return true; |
|
1076 |
} |
|
1077 |
|
|
1078 |
|
|
917 | 1079 |
} |
Also available in: Unified diff