Project

General

Profile

« Previous | Next » 

Revision be23f38b

Added by Andreas Müller over 12 years ago

bugfix for Coordinate Parser with whitespaces, Dateparsing, etc.

View differences:

cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/TimePeriod.java
10 10
package eu.etaxonomy.cdm.model.common;
11 11

  
12 12
import java.io.Serializable;
13
import java.text.DateFormat;
14
import java.text.ParsePosition;
13 15
import java.util.Calendar;
16
import java.util.Date;
14 17
import java.util.regex.Matcher;
15 18
import java.util.regex.Pattern;
16 19

  
......
23 26
import javax.xml.bind.annotation.XmlType;
24 27
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
25 28

  
29
import org.apache.commons.lang.time.DateUtils;
26 30
import org.apache.log4j.Logger;
27 31
import org.hibernate.annotations.Type;
28 32
import org.hibernate.search.annotations.Field;
......
464 468
		periodString = periodString.trim();
465 469
		
466 470
		result.setFreeText(null);
471
		Date date;
467 472
		
468 473
		//case "1806"[1807];
469 474
		if (uncorrectYearPatter.matcher(periodString).matches()){
......
487 492
			parseDotDatePattern(periodString, result);
488 493
		}else if (standardPattern.matcher(periodString).matches()){
489 494
			parseStandardPattern(periodString, result);
495
//TODO first check ambiguity of parser results e.g. for 7/12/11 
496
//		}else if (isDateString(periodString)){
497
//			String[] startEnd = makeStartEnd(periodString);
498
//			String start = startEnd[0];
499
//			DateTime startDateTime = dateStringParse(start, true);
500
//			result.setStart(startDateTime);
501
//			if (startEnd.length > 1){
502
//				DateTime endDateTime = dateStringParse(startEnd[1], true);
503
//				;
504
//				result.setEnd(endDateTime.toLocalDate());
505
//			}
506
			
490 507
		}else{
491 508
			result.setFreeText(periodString);
492 509
		}
493 510
		return result;
494 511
	}
495 512

  
513
	private static boolean isDateString(String periodString) {
514
		String[] startEnd = makeStartEnd(periodString);
515
		String start = startEnd[0];
516
		DateTime startDateTime = dateStringParse(start, true);
517
		if (startDateTime == null){
518
			return false;
519
		}
520
		if (startEnd.length > 1){
521
			DateTime endDateTime = dateStringParse(startEnd[1], true);
522
			if (endDateTime != null){
523
				return true;
524
			}
525
		}
526
		return false;
527
	}
528

  
529

  
530
	/**
531
	 * @param periodString
532
	 * @return
533
	 */
534
	private static String[] makeStartEnd(String periodString) {
535
		String[] startEnd = new String[]{periodString};
536
		if (periodString.contains("-") && periodString.matches("^-{2,}-^-{2,}")){
537
			startEnd = periodString.split("-");
538
		}
539
		return startEnd;
540
	}
541

  
542

  
543
	private static DateTime dateStringParse(String string, boolean strict) {
544
		DateFormat dateFormat = DateFormat.getDateInstance();
545
		ParsePosition pos = new ParsePosition(0);
546
		Date a = dateFormat.parse(string, pos);
547
		if (a == null || pos.getIndex() != string.length()){
548
			return null;
549
		}
550
		Calendar cal = Calendar.getInstance();
551
		cal.setTime(a);
552
		DateTime result = new DateTime(cal);
553
		return result;
554
	}
555

  
556

  
496 557
	/**
497 558
	 * @param periodString
498 559
	 * @param result
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/location/Point.java
590 590
		return result;
591 591
	}
592 592
	
593
	/* (non-Javadoc)
594
	 * @see java.lang.Object#toString()
595
	 */
596
	@Override
597
	public String toString(){
598
		String result = "";
599
		boolean includeEmptySeconds = true;
600
		result += getLatitudeSexagesimal() == null ? "" : getLatitudeSexagesimal().toString(includeEmptySeconds);
601
		result = CdmUtils.concat(", ", result, getLongitudeSexagesimal() == null ? "" : getLongitudeSexagesimal().toString(includeEmptySeconds));
602
		return result;
603
	}
604
	
593 605
	
594 606
//*********** CLONE **********************************/	
595 607
	
cdmlib-model/src/main/java/eu/etaxonomy/cdm/strategy/parser/location/CoordinateConverter.java
368 368

  
369 369
    //removes whitespace characters
370 370
    private String removeWhiteSpace(String str){
371
        str = str.replaceFirst("\\s*", "");
371
        str = str.replaceFirst("\\s+", "");
372 372
        return str;
373 373
    }
374 374

  
......
397 397

  
398 398

  
399 399
    public ConversionResults tryConvert(String str){
400
        //some local variables
400
        //some local variables 
401 401
        int sign; //sign of the coordinate
402 402
        String[] decimalBit, ddmmss, ddmm; //arrays for splitting
403 403
        double dd = 0, mm = 0, ss = 0, mmm = 0, sss = 0, dec = 0; //parts of the coordinates

Also available in: Unified diff