Revision 26321 branches/v2_0_0_prep/libraries/libFMap_dal/src-test/org/gvsig/fmap/dal/feature/BaseTestFeatureStore.java

View differences:

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