Revision 27215 branches/v2_0_0_prep/libraries/libGeocoding/src/org/gvsig/geocoding/styles/DoubleRange.java

View differences:

DoubleRange.java
32 32
import java.util.Set;
33 33
import java.util.TreeSet;
34 34

  
35
import org.gvsig.fmap.dal.exception.DataException;
36
import org.gvsig.fmap.dal.feature.Feature;
35 37
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
36 38
import org.gvsig.fmap.geom.Geometry;
37 39
import org.gvsig.fmap.geom.primitive.Point2D;
......
45 47
import org.gvsig.tools.persistence.AbstractPersistenceManager;
46 48
import org.gvsig.tools.persistence.PersistenceException;
47 49
import org.gvsig.tools.persistence.PersistentState;
50
import org.slf4j.Logger;
51
import org.slf4j.LoggerFactory;
48 52

  
49 53
/**
50 54
 * 
......
55 59

  
56 60
public class DoubleRange extends AbstractRange {
57 61

  
62
	private static final Logger log = LoggerFactory
63
			.getLogger(DoubleRange.class);
64

  
58 65
	private static final String FIRSTLEFTNUMBER = "firstleftnumber";
59 66
	private static final String FIRSTRIGHTNUMBER = "firstrightnumber";
60 67
	private static final String LASTLEFTNUMBER = "lastleftnumber";
......
196 203
	public Set<GeocodingResult> match(List<List<ScoredFeature>> inLists,
197 204
			Address address) {
198 205

  
199
		Set<GeocodingResult> outFeats = new TreeSet<GeocodingResult>();
206
		Set<GeocodingResult> results = new TreeSet<GeocodingResult>();
200 207

  
201 208
		FeatureAttributeDescriptor firstLeftNumberDesc = this
202 209
				.getFirstLeftNumber().getValue();
......
208 215
				.getLastRightNumber().getValue();
209 216

  
210 217
		// get the list
211
		List<ScoredFeature> inFeats = inLists.get(0);
218
		List<ScoredFeature> sFeats = inLists.get(0);
212 219

  
213 220
		int number = ((NumberAddress) address).getNumber();
214 221

  
215
		for (ScoredFeature feat : inFeats) {
222
		try {
223
			for (ScoredFeature sFeat : sFeats) {
216 224

  
217
			int firstL = feat.getInt(firstLeftNumberDesc.getName());
218
			int lastL = feat.getInt(lastLeftNumberDesc.getName());
219
			int firstR = feat.getInt(firstRightNumberDesc.getName());
220
			int lastR = feat.getInt(lastRightNumberDesc.getName());
225
				Feature fea = sFeat.getFeature();
221 226

  
222
			// Number even (Par)
223
			if (number % 2 == 0) {
224
				// Left numbers - EVEN // right numbers - ODD
225
				if (firstL % 2 == 0) {
226
					if (number >= firstL && number <= lastL) {
227
						// create result
228
						GeomMatchResult res = calculatePosition(feat, number,
229
								firstL, lastL);
230
						// add result to the list
231
						outFeats.add(res);
227
				int[] range = getNumberRange(fea, firstLeftNumberDesc,
228
						lastLeftNumberDesc, firstRightNumberDesc,
229
						lastRightNumberDesc);
230
				int firstL = range[0];
231
				int lastL = range[1];
232
				int firstR = range[2];
233
				int lastR = range[3];
234

  
235
				// Number even (Par)
236
				if (number % 2 == 0) {
237
					// Left numbers - EVEN // right numbers - ODD
238
					if (firstL % 2 == 0) {
239
						if (number >= firstL && number <= lastL) {
240
							// create result
241
							GeomMatchResult res = calculatePosition(sFeat,
242
									number, firstL, lastL);
243
							// add result to the list
244
							results.add(res);
245
						}
232 246
					}
247
					// Left numbers - ODD // right numbers - EVEN
248
					else {
249
						if (number >= firstR && number <= lastR) {
250
							// create result
251
							GeomMatchResult res = calculatePosition(sFeat,
252
									number, firstR, lastR);
253
							// add result to the list
254
							results.add(res);
255
						}
256
					}
233 257
				}
234
				// Left numbers - ODD // right numbers - EVEN
258
				// number odd (Impar)
235 259
				else {
236
					if (number >= firstR && number <= lastR) {
237
						// create result
238
						GeomMatchResult res = calculatePosition(feat, number,
239
								firstR, lastR);
240
						// add result to the list
241
						outFeats.add(res);
260
					// Left numbers - EVEN // right numbers - ODD
261
					if (firstL % 2 == 0) {
262
						if (number >= firstR && number <= lastR) {
263
							// create result
264
							GeomMatchResult res = calculatePosition(sFeat,
265
									number, firstR, lastR);
266
							// add result to the list
267
							results.add(res);
268
						}
242 269
					}
243
				}
244
			}
245
			// number odd (Impar)
246
			else {
247
				// Left numbers - EVEN // right numbers - ODD
248
				if (firstL % 2 == 0) {
249
					if (number >= firstR && number <= lastR) {
250
						// create result
251
						GeomMatchResult res = calculatePosition(feat, number,
252
								firstR, lastR);
253
						// add result to the list
254
						outFeats.add(res);
270
					// Left numbers - ODD // right numbers - EVEN
271
					else {
272
						if (number >= firstL && number <= lastL) {
273
							// create result
274
							GeomMatchResult res = calculatePosition(sFeat,
275
									number, firstL, lastL);
276
							// add result to the list
277
							results.add(res);
278
						}
255 279
					}
256 280
				}
257
				// Left numbers - ODD // right numbers - EVEN
258
				else {
259
					if (number >= firstL && number <= lastL) {
260
						// create result
261
						GeomMatchResult res = calculatePosition(feat, number,
262
								firstL, lastL);
263
						// add result to the list
264
						outFeats.add(res);
265
					}
266
				}
267 281
			}
282
		} catch (DataException e) {
283
			log.error("Error getting the features", e);
268 284
		}
269
		return outFeats;
285
		return results;
270 286
	}
271 287

  
272 288
	/**
......
291 307
	 * @param first
292 308
	 * @param last
293 309
	 * @return
310
	 * @throws DataException
294 311
	 */
295 312
	private GeomMatchResult calculatePosition(ScoredFeature feat, int number,
296
			int first, int last) {
313
			int first, int last) throws DataException {
297 314

  
298
		Geometry geom = feat.getDefaultGeometry();
315
		Geometry geom = feat.getReference().getFeature().getDefaultGeometry();
299 316
		com.vividsolutions.jts.geom.Geometry geJTS = MatcherUtils
300 317
				.parseGeomGVToJTS(geom);
301 318
		int relative = calculateRelativeDistance(number, first, last);
......
320 337
	 * @param last
321 338
	 * @param offset
322 339
	 * @return
340
	 * @throws DataException
323 341
	 */
324 342
	private GeomMatchResult calculateOffsetPosition(ScoredFeature feat,
325
			int number, int first, int last, int offset) {
343
			int number, int first, int last, int offset) throws DataException {
326 344

  
327
		Geometry geom = feat.getDefaultGeometry();
345
		Geometry geom = feat.getReference().getFeature().getDefaultGeometry();
328 346
		com.vividsolutions.jts.geom.Geometry geJTS = MatcherUtils
329 347
				.parseGeomGVToJTS(geom);
330 348
		int relative = calculateRelativeDistance(number, first, last);
......
340 358
		return res;
341 359
	}
342 360

  
361
	/**
362
	 * 
363
	 * @param feat
364
	 * @return
365
	 */
366
	private int[] getNumberRange(Feature feat,
367
			FeatureAttributeDescriptor firstRightNumberDesc,
368
			FeatureAttributeDescriptor lastRightNumberDesc,
369
			FeatureAttributeDescriptor firstLeftNumberDesc,
370
			FeatureAttributeDescriptor lastLeftNumberDesc) {
371

  
372
		int[] range = new int[4];
373

  
374
		Object oRFirst = feat.get(firstRightNumberDesc.getName());
375
		Object oRLast = feat.get(lastRightNumberDesc.getName());
376
		Object oLFirst = feat.get(firstLeftNumberDesc.getName());
377
		Object oLLast = feat.get(lastLeftNumberDesc.getName());
378

  
379
		// RIGHT FIRST
380
		if (oRFirst instanceof Double) {
381
			range[0] = ((Double) oRFirst).intValue();
382
		}
383
		if (oRFirst instanceof Integer) {
384
			range[0] = ((Integer) oRFirst).intValue();
385
		}
386
		if (oRFirst instanceof String) {
387
			range[0] = Integer.parseInt(((String) oRFirst));
388
		}
389
		// RIGHT LAST
390
		if (oRLast instanceof Double) {
391
			range[1] = ((Double) oRLast).intValue();
392
		}
393
		if (oRLast instanceof Integer) {
394
			range[1] = ((Integer) oRLast).intValue();
395
		}
396
		if (oRLast instanceof String) {
397
			range[1] = Integer.parseInt(((String) oRLast));
398
		}
399
		// LEFT FIRST
400
		if (oLFirst instanceof Double) {
401
			range[2] = ((Double) oLFirst).intValue();
402
		}
403
		if (oLFirst instanceof Integer) {
404
			range[2] = ((Integer) oLFirst).intValue();
405
		}
406
		if (oLFirst instanceof String) {
407
			range[2] = Integer.parseInt(((String) oLFirst));
408
		}
409
		// LEFT LAST
410
		if (oLLast instanceof Double) {
411
			range[3] = ((Double) oLLast).intValue();
412
		}
413
		if (oLLast instanceof Integer) {
414
			range[3] = ((Integer) oLLast).intValue();
415
		}
416
		if (oLLast instanceof String) {
417
			range[3] = Integer.parseInt(((String) oLLast));
418
		}
419

  
420
		return range;
421
	}
422

  
343 423
}

Also available in: Unified diff