Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
221 changes: 35 additions & 186 deletions grails-core/src/main/groovy/grails/util/AbstractTypeConvertingMap.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,7 @@
*/
package grails.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
Expand All @@ -35,6 +30,8 @@
import org.codehaus.groovy.runtime.DefaultGroovyMethods;
import org.codehaus.groovy.util.HashCodeHelper;

import org.apache.grails.core.internal.util.TypeConverters;

/**
* AbstractTypeConvertingMap is a Map with type conversion capabilities.
*
Expand All @@ -47,7 +44,6 @@
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public abstract class AbstractTypeConvertingMap extends GroovyObjectSupport implements Map, Cloneable {
private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.S";
protected Map wrappedMap;

public AbstractTypeConvertingMap() {
Expand Down Expand Up @@ -120,29 +116,11 @@ public int hashCode() {
* @return The integer value or null if there isn't one
*/
public Byte getByte(String name) {
Object o = get(name);
if (o instanceof Number) {
return ((Number) o).byteValue();
}

if (o != null) {
try {
String string = o.toString();
if (string != null && string.length() > 0) {
return Byte.parseByte(string);
}
}
catch (NumberFormatException e) {}
}
return null;
return TypeConverters.toByte(get(name));
}

public Byte getByte(String name, Integer defaultValue) {
Byte value = getByte(name);
if (value == null && defaultValue != null) {
value = (byte) defaultValue.intValue();
}
return value;
return TypeConverters.toByte(get(name), defaultValue);
}

/**
Expand All @@ -151,26 +129,11 @@ public Byte getByte(String name, Integer defaultValue) {
* @return The Character value or null if there isn't one
*/
public Character getChar(String name) {
Object o = get(name);
if (o instanceof Character) {
return (Character) o;
}

if (o != null) {
String string = o.toString();
if (string != null && string.length() == 1) {
return string.charAt(0);
}
}
return null;
return TypeConverters.toCharacter(get(name));
}

public Character getChar(String name, Integer defaultValue) {
Character value = getChar(name);
if (value == null && defaultValue != null) {
value = (char) defaultValue.intValue();
}
return value;
return TypeConverters.toCharacter(get(name), defaultValue);
}

/**
Expand All @@ -179,29 +142,11 @@ public Character getChar(String name, Integer defaultValue) {
* @return The integer value or null if there isn't one
*/
public Integer getInt(String name) {
Object o = get(name);
if (o instanceof Number) {
return ((Number) o).intValue();
}

if (o != null) {
try {
String string = o.toString();
if (string != null) {
return Integer.parseInt(string);
}
}
catch (NumberFormatException e) {}
}
return null;
return TypeConverters.toInteger(get(name));
}

public Integer getInt(String name, Integer defaultValue) {
Integer value = getInt(name);
if (value == null) {
value = defaultValue;
}
return value;
return TypeConverters.toInteger(get(name), defaultValue);
}

/**
Expand All @@ -210,26 +155,11 @@ public Integer getInt(String name, Integer defaultValue) {
* @return The long value or null if there isn't one
*/
public Long getLong(String name) {
Object o = get(name);
if (o instanceof Number) {
return ((Number) o).longValue();
}

if (o != null) {
try {
return Long.parseLong(o.toString());
}
catch (NumberFormatException e) {}
}
return null;
return TypeConverters.toLong(get(name));
}

public Long getLong(String name, Long defaultValue) {
Long value = getLong(name);
if (value == null) {
value = defaultValue;
}
return value;
return TypeConverters.toLong(get(name), defaultValue);
}

/**
Expand All @@ -238,29 +168,11 @@ public Long getLong(String name, Long defaultValue) {
* @return The short value or null if there isn't one
*/
public Short getShort(String name) {
Object o = get(name);
if (o instanceof Number) {
return ((Number) o).shortValue();
}

if (o != null) {
try {
String string = o.toString();
if (string != null) {
return Short.parseShort(string);
}
}
catch (NumberFormatException e) {}
}
return null;
return TypeConverters.toShort(get(name));
}

public Short getShort(String name, Integer defaultValue) {
Short value = getShort(name);
if (value == null && defaultValue != null) {
value = defaultValue.shortValue();
}
return value;
return TypeConverters.toShort(get(name), defaultValue);
}

/**
Expand All @@ -269,29 +181,11 @@ public Short getShort(String name, Integer defaultValue) {
* @return The double value or null if there isn't one
*/
public Double getDouble(String name) {
Object o = get(name);
if (o instanceof Number) {
return ((Number) o).doubleValue();
}

if (o != null) {
try {
String string = o.toString();
if (string != null) {
return Double.parseDouble(string);
}
}
catch (NumberFormatException e) {}
}
return null;
return TypeConverters.toDouble(get(name));
}

public Double getDouble(String name, Double defaultValue) {
Double value = getDouble(name);
if (value == null) {
value = defaultValue;
}
return value;
return TypeConverters.toDouble(get(name), defaultValue);
}

/**
Expand All @@ -300,29 +194,11 @@ public Double getDouble(String name, Double defaultValue) {
* @return The double value or null if there isn't one
*/
public Float getFloat(String name) {
Object o = get(name);
if (o instanceof Number) {
return ((Number) o).floatValue();
}

if (o != null) {
try {
String string = o.toString();
if (string != null) {
return Float.parseFloat(string);
}
}
catch (NumberFormatException e) {}
}
return null;
return TypeConverters.toFloat(get(name));
}

public Float getFloat(String name, Float defaultValue) {
Float value = getFloat(name);
if (value == null) {
value = defaultValue;
}
return value;
return TypeConverters.toFloat(get(name), defaultValue);
}

/**
Expand All @@ -331,21 +207,7 @@ public Float getFloat(String name, Float defaultValue) {
* @return The boolean value or null if there isn't one
*/
public Boolean getBoolean(String name) {
Object o = get(name);
if (o instanceof Boolean) {
return (Boolean) o;
}

if (o != null) {
try {
String string = o.toString();
if (string != null) {
return GrailsStringUtils.toBoolean(string);
}
}
catch (Exception e) {}
}
return null;
return TypeConverters.toBoolean(get(name));
}

public Boolean getBoolean(String name, Boolean defaultValue) {
Expand All @@ -358,13 +220,26 @@ public Boolean getBoolean(String name, Boolean defaultValue) {
return value;
}

/**
* Helper method for obtaining a String value from a parameter
* @param name The name of the parameter
* @return The String value or null if there isn't one
*/
public String getString(String name) {
return TypeConverters.toStringValue(get(name));
}

public String getString(String name, String defaultValue) {
return TypeConverters.toStringValue(get(name), defaultValue);
}

/**
* Obtains a date for the parameter name using the default format
* @param name
* @return The date (in the {@link DEFAULT_DATE_FORMAT}) or null
* @return The date or null
*/
public Date getDate(String name) {
return getDate(name, DEFAULT_DATE_FORMAT);
return TypeConverters.toDate(get(name));
}

/**
Expand All @@ -374,19 +249,7 @@ public Date getDate(String name) {
* @return The date or null
*/
public Date getDate(String name, String format) {
Object value = get(name);
if (value instanceof Date) {
return (Date) value;
}

if (value != null) {
try {
return new SimpleDateFormat(format).parse(value.toString());
} catch (ParseException e) {
// ignore
}
}
return null;
return TypeConverters.toDate(get(name), format);
}

/**
Expand Down Expand Up @@ -422,11 +285,7 @@ public Date date(String name, Collection<String> formats) {
}

private Date getDate(String name, Collection<String> formats) {
for (String format : formats) {
Date date = getDate(name, format);
if (date != null) return date;
}
return null;
return TypeConverters.toDate(get(name), formats);
}

/**
Expand All @@ -435,17 +294,7 @@ private Date getDate(String name, Collection<String> formats) {
* @return A list of values
*/
public List getList(String name) {
Object paramValues = get(name);
if (paramValues == null) {
return Collections.emptyList();
}
if (paramValues.getClass().isArray()) {
return Arrays.asList((Object[]) paramValues);
}
if (paramValues instanceof Collection) {
return new ArrayList((Collection) paramValues);
}
return Collections.singletonList(paramValues);
return TypeConverters.toList(get(name));
}

public List list(String name) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,4 +111,12 @@ class TypeConvertingMap extends AbstractTypeConvertingMap {
Boolean 'boolean'(String name, Boolean defaultValue) {
return getBoolean(name, defaultValue)
}

String string(String name) {
return getString(name)
}

String string(String name, String defaultValue) {
return getString(name, defaultValue)
}
}
Loading
Loading