Changeset 16139

Show
Ignore:
Timestamp:
09/07/08 17:41:16 (4 months ago)
Author:
kmr
Message:

Fix TypeUtil?.stringToObject() to be able to convert date strings into Date
objects.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/intermine/objectstore/main/src/org/intermine/util/TypeUtil.java

    r15966 r16139  
    2323import java.util.Arrays; 
    2424import java.util.Collection; 
     25import java.util.Date; 
    2526import java.util.HashMap; 
    2627import java.util.HashSet; 
    2728import java.util.Map; 
    28 import java.util.Date; 
    2929import java.util.Set; 
    3030import java.util.StringTokenizer; 
     31import java.util.TimeZone; 
    3132import java.util.TreeMap; 
     33import java.text.DateFormat; 
     34import java.text.ParseException; 
     35import java.text.SimpleDateFormat; 
    3236 
    3337import org.intermine.metadata.Model; 
     
    478482    } 
    479483 
     484    static final private DateFormat DATE_TIME_FORMAT; 
     485    static final private DateFormat DATE_FORMAT; 
     486 
     487    static { 
     488        DATE_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     489        DATE_TIME_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC")); 
     490 
     491        DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); 
     492        DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC")); 
     493    } 
    480494 
    481495    /** 
     
    516530        } 
    517531        if (clazz.equals(Date.class)) { 
    518             return new Date(Long.parseLong(value)); 
     532            if (value.matches("^\\d+$")) { 
     533                return new Date(Long.parseLong(value)); 
     534            } else { 
     535                try { 
     536                    return DATE_TIME_FORMAT.parse(value); 
     537                } catch (ParseException e) { 
     538                    try { 
     539                        return DATE_FORMAT.parse(value); 
     540                    } catch (ParseException e1) { 
     541                        return new RuntimeException("Failed to parse " + value + " as a Date", e); 
     542                    } 
     543                } 
     544            } 
    519545        } 
    520546        if (clazz.equals(BigDecimal.class)) { 
  • trunk/intermine/objectstore/test/src/org/intermine/util/TypeUtilTest.java

    r14641 r16139  
    170170        assertEquals(new Character('c'), TypeUtil.stringToObject(Character.TYPE, "c")); 
    171171        assertEquals(new Date(7777777), TypeUtil.stringToObject(Date.class, "7777777")); 
     172        assertEquals(new Date(1199923200000L), TypeUtil.stringToObject(Date.class, "2008-01-10")); 
     173        assertEquals(new Date(1199926800000L), 
     174                     TypeUtil.stringToObject(Date.class, "2008-01-10 01:00:00")); 
    172175    } 
    173176