ソースを参照

FieldValueKit 更名为 TypeKit

James 3 年 前
コミット
ea1f573cbf

+ 62 - 24
src/main/java/com/jfinal/plugin/activerecord/FieldValueKit.java

@@ -1,18 +1,29 @@
-package com.jfinal.plugin.activerecord;
+package com.jfinal.kit;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.temporal.Temporal;
-import com.jfinal.kit.TimeKit;
 
 /**
- * FieldTypeKit
+ * TypeKit
  */
-class FieldValueKit {
+public class TypeKit {
 	
-	static Integer toInt(Object n) {
+	private static final String datePattern = "yyyy-MM-dd";
+	private static final int dateLen = datePattern.length();
+	
+	private static final String dateTimeWithoutSecondPattern = "yyyy-MM-dd HH:mm";
+	private static final int dateTimeWithoutSecondLen = dateTimeWithoutSecondPattern.length();
+	
+	private static final String dateTimePattern = "yyyy-MM-dd HH:mm:ss";
+	
+	public static String toStr(Object s) {
+		return s != null ? s.toString() : null;
+	}
+	
+	public static Integer toInt(Object n) {
 		if (n instanceof Integer) {
 			return (Integer)n;
 		} else if (n instanceof Number) {
@@ -22,7 +33,7 @@ class FieldValueKit {
 		return n != null ? Integer.parseInt(n.toString()) : null;
 	}
 	
-	static Long toLong(Object n) {
+	public static Long toLong(Object n) {
 		if (n instanceof Long) {
 			return (Long)n;
 		} else if (n instanceof Number) {
@@ -32,7 +43,7 @@ class FieldValueKit {
 		return n != null ? Long.parseLong(n.toString()) : null;
 	}
 	
-	static Double toDouble(Object n) {
+	public static Double toDouble(Object n) {
 		if (n instanceof Double) {
 			return (Double)n;
 		} else if (n instanceof Number) {
@@ -42,7 +53,7 @@ class FieldValueKit {
 		return n != null ? Double.parseDouble(n.toString()) : null;
 	}
 	
-	static BigDecimal toBigDecimal(Object n) {
+	public static BigDecimal toBigDecimal(Object n) {
 		if (n instanceof BigDecimal) {
 			return (BigDecimal)n;
 		} else if (n != null) {
@@ -52,7 +63,7 @@ class FieldValueKit {
 		}
 	}
 	
-	static Float toFloat(Object n) {
+	public static Float toFloat(Object n) {
 		if (n instanceof Float) {
 			return (Float)n;
 		} else if (n instanceof Number) {
@@ -62,7 +73,7 @@ class FieldValueKit {
 		return n != null ? Float.parseFloat(n.toString()) : null;
 	}
 	
-	static Short toShort(Object n) {
+	public static Short toShort(Object n) {
 		if (n instanceof Short) {
 			return (Short)n;
 		} else if (n instanceof Number) {
@@ -72,7 +83,7 @@ class FieldValueKit {
 		return n != null ? Short.parseShort(n.toString()) : null;
 	}
 	
-	static Byte toByte(Object n) {
+	public static Byte toByte(Object n) {
 		if (n instanceof Byte) {
 			return (Byte)n;
 		} else if (n instanceof Number) {
@@ -82,25 +93,25 @@ class FieldValueKit {
 		return n != null ? Byte.parseByte(n.toString()) : null;
 	}
 	
-	static Boolean toBoolean(Object b) {
+	public static Boolean toBoolean(Object b) {
 		if (b instanceof Boolean) {
 			return (Boolean)b;
-		} else if (b == null) {
-			return null;
 		}
 		
-		// 支持 String 类型转换,并且支持数字 1/0 与字符串 "1"/"0" 转换
-		String s = b.toString();
-		if ("true".equalsIgnoreCase(s) || "1".equals(s)) {
-			return Boolean.TRUE;
-		} else if ("false".equalsIgnoreCase(s) || "0".equals(s)) {
-			return Boolean.FALSE;
+		if (b instanceof String) {
+			// 支持 String 类型转换,并且支持数字 1/0 与字符串 "1"/"0" 转换
+			String s = (String)b;
+			if ("true".equalsIgnoreCase(s) || "1".equals(s)) {
+				return Boolean.TRUE;
+			} else if ("false".equalsIgnoreCase(s) || "0".equals(s)) {
+				return Boolean.FALSE;
+			}
 		}
 		
-		throw new ClassCastException("无法转换为 Boolean 值,类型 : " + b.getClass() + " 值 : " + b);
+		return (Boolean)b;
 	}
 	
-	static Number toNumber(Object n) {
+	public static Number toNumber(Object n) {
 		if (n instanceof Number) {
 			return (Number)n;
 		} else if (n == null) {
@@ -112,7 +123,11 @@ class FieldValueKit {
 		return s.indexOf('.') != -1 ? Double.parseDouble(s) : Long.parseLong(s);
 	}
 	
-	static java.util.Date toDate(Object d) {
+	public static java.util.Date toDate(Object d) {
+		if (d instanceof java.util.Date) {
+			return (java.util.Date)d;
+		}
+		
 		if (d instanceof Temporal) {
 			if (d instanceof LocalDateTime) {
 				return TimeKit.toDate((LocalDateTime)d);
@@ -125,13 +140,25 @@ class FieldValueKit {
 			}
 		}
 		
+		if (d instanceof String) {
+			String s = (String)d;
+			if (s.length() <= dateLen) {
+				return TimeKit.parse(s, datePattern);
+			} else if (s.length() <= dateTimeWithoutSecondLen) {
+				return TimeKit.parse(s, dateTimeWithoutSecondPattern);
+			} else {
+				return TimeKit.parse(s, dateTimePattern);
+			}
+		}
+		
 		return (java.util.Date)d;
 	}
 	
-	static LocalDateTime toLocalDateTime(Object ldt) {
+	public static LocalDateTime toLocalDateTime(Object ldt) {
 		if (ldt instanceof LocalDateTime) {
 			return (LocalDateTime)ldt;
 		}
+		
 		if (ldt instanceof LocalDate) {
 			return ((LocalDate)ldt).atStartOfDay();
 		}
@@ -142,6 +169,17 @@ class FieldValueKit {
 			return TimeKit.toLocalDateTime((java.util.Date)ldt);
 		}
 		
+		if (ldt instanceof String) {
+			String s = (String)ldt;
+			if (s.length() <= dateLen) {
+				return TimeKit.parseLocalDateTime(s, datePattern);
+			} else if (s.length() <= dateTimeWithoutSecondLen) {
+				return TimeKit.parseLocalDateTime(s, dateTimeWithoutSecondPattern);
+			} else {
+				return TimeKit.parseLocalDateTime(s, dateTimePattern);
+			}
+		}
+		
 		return (LocalDateTime)ldt;
 	}
 }

+ 12 - 11
src/main/java/com/jfinal/plugin/activerecord/Model.java

@@ -30,6 +30,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.Map.Entry;
 import java.util.function.Function;
+import com.jfinal.kit.TypeKit;
 import com.jfinal.plugin.activerecord.cache.ICache;
 import static com.jfinal.plugin.activerecord.DbKit.NULL_PARA_ARRAY;
 
@@ -345,7 +346,7 @@ public abstract class Model<M extends Model> implements IRow<M>, Serializable {
 	public Integer getInt(String attr) {
 		// Number n = (Number)attrs.get(attr);
 		// return n != null ? n.intValue() : null;
-		return FieldValueKit.toInt(attrs.get(attr));
+		return TypeKit.toInt(attrs.get(attr));
 	}
 	
 	/**
@@ -354,7 +355,7 @@ public abstract class Model<M extends Model> implements IRow<M>, Serializable {
 	public Long getLong(String attr) {
 		// Number n = (Number)attrs.get(attr);
 		// return n != null ? n.longValue() : null;
-		return FieldValueKit.toLong(attrs.get(attr));
+		return TypeKit.toLong(attrs.get(attr));
 	}
 	
 	/**
@@ -368,11 +369,11 @@ public abstract class Model<M extends Model> implements IRow<M>, Serializable {
 	 * Get attribute of mysql type: date, year
 	 */
 	public java.util.Date getDate(String attr) {
-		return FieldValueKit.toDate(attrs.get(attr));
+		return TypeKit.toDate(attrs.get(attr));
 	}
 	
 	public LocalDateTime getLocalDateTime(String attr) {
-		return FieldValueKit.toLocalDateTime(attrs.get(attr));
+		return TypeKit.toLocalDateTime(attrs.get(attr));
 	}
 	
 	/**
@@ -395,7 +396,7 @@ public abstract class Model<M extends Model> implements IRow<M>, Serializable {
 	public Double getDouble(String attr) {
 		// Number n = (Number)attrs.get(attr);
 		// return n != null ? n.doubleValue() : null;
-		return FieldValueKit.toDouble(attrs.get(attr));
+		return TypeKit.toDouble(attrs.get(attr));
 	}
 	
 	/**
@@ -404,19 +405,19 @@ public abstract class Model<M extends Model> implements IRow<M>, Serializable {
 	public Float getFloat(String attr) {
 		// Number n = (Number)attrs.get(attr);
 		// return n != null ? n.floatValue() : null;
-		return FieldValueKit.toFloat(attrs.get(attr));
+		return TypeKit.toFloat(attrs.get(attr));
 	}
 	
 	public Short getShort(String attr) {
 		// Number n = (Number)attrs.get(attr);
 		// return n != null ? n.shortValue() : null;
-		return FieldValueKit.toShort(attrs.get(attr));
+		return TypeKit.toShort(attrs.get(attr));
 	}
 	
 	public Byte getByte(String attr) {
 		// Number n = (Number)attrs.get(attr);
 		// return n != null ? n.byteValue() : null;
-		return FieldValueKit.toByte(attrs.get(attr));
+		return TypeKit.toByte(attrs.get(attr));
 	}
 	
 	/**
@@ -424,14 +425,14 @@ public abstract class Model<M extends Model> implements IRow<M>, Serializable {
 	 */
 	public Boolean getBoolean(String attr) {
 		// return (Boolean)attrs.get(attr);
-		return FieldValueKit.toBoolean(attrs.get(attr));
+		return TypeKit.toBoolean(attrs.get(attr));
 	}
 	
 	/**
 	 * Get attribute of mysql type: decimal, numeric
 	 */
 	public BigDecimal getBigDecimal(String attr) {
-		return FieldValueKit.toBigDecimal(attrs.get(attr));
+		return TypeKit.toBigDecimal(attrs.get(attr));
 	}
 	
 	/**
@@ -446,7 +447,7 @@ public abstract class Model<M extends Model> implements IRow<M>, Serializable {
 	 */
 	public Number getNumber(String attr) {
 		// return (Number)attrs.get(attr);
-		return FieldValueKit.toNumber(attrs.get(attr));
+		return TypeKit.toNumber(attrs.get(attr));
 	}
 	
 	/**

+ 12 - 11
src/main/java/com/jfinal/plugin/activerecord/Record.java

@@ -22,6 +22,7 @@ import java.time.LocalDateTime;
 import java.util.Map;
 import java.util.Set;
 import java.util.Map.Entry;
+import com.jfinal.kit.TypeKit;
 
 /**
  * Record
@@ -280,7 +281,7 @@ public class Record implements IRow<Record>, Serializable {
 	public Integer getInt(String column) {
 		// Number n = getNumber(column);
 		// return n != null ? n.intValue() : null;
-		return FieldValueKit.toInt(getColumns().get(column));
+		return TypeKit.toInt(getColumns().get(column));
 	}
 	
 	/**
@@ -289,7 +290,7 @@ public class Record implements IRow<Record>, Serializable {
 	public Long getLong(String column) {
 		// Number n = getNumber(column);
 		// return n != null ? n.longValue() : null;
-		return FieldValueKit.toLong(getColumns().get(column));
+		return TypeKit.toLong(getColumns().get(column));
 	}
 	
 	/**
@@ -303,11 +304,11 @@ public class Record implements IRow<Record>, Serializable {
 	 * Get column of mysql type: date, year
 	 */
 	public java.util.Date getDate(String column) {
-		return FieldValueKit.toDate(getColumns().get(column));
+		return TypeKit.toDate(getColumns().get(column));
 	}
 	
 	public LocalDateTime getLocalDateTime(String column) {
-		return FieldValueKit.toLocalDateTime(getColumns().get(column));
+		return TypeKit.toLocalDateTime(getColumns().get(column));
 	}
 	
 	/**
@@ -330,7 +331,7 @@ public class Record implements IRow<Record>, Serializable {
 	public Double getDouble(String column) {
 		// Number n = getNumber(column);
 		// return n != null ? n.doubleValue() : null;
-		return FieldValueKit.toDouble(getColumns().get(column));
+		return TypeKit.toDouble(getColumns().get(column));
 	}
 	
 	/**
@@ -339,19 +340,19 @@ public class Record implements IRow<Record>, Serializable {
 	public Float getFloat(String column) {
 		// Number n = getNumber(column);
 		// return n != null ? n.floatValue() : null;
-		return FieldValueKit.toFloat(getColumns().get(column));
+		return TypeKit.toFloat(getColumns().get(column));
 	}
 	
 	public Short getShort(String column) {
 		// Number n = getNumber(column);
 		// return n != null ? n.shortValue() : null;
-		return FieldValueKit.toShort(getColumns().get(column));
+		return TypeKit.toShort(getColumns().get(column));
 	}
 	
 	public Byte getByte(String column) {
 		// Number n = getNumber(column);
 		// return n != null ? n.byteValue() : null;
-		return FieldValueKit.toByte(getColumns().get(column));
+		return TypeKit.toByte(getColumns().get(column));
 	}
 	
 	/**
@@ -359,14 +360,14 @@ public class Record implements IRow<Record>, Serializable {
 	 */
 	public Boolean getBoolean(String column) {
 		// return (Boolean)getColumns().get(column);
-		return FieldValueKit.toBoolean(getColumns().get(column));
+		return TypeKit.toBoolean(getColumns().get(column));
 	}
 	
 	/**
 	 * Get column of mysql type: decimal, numeric
 	 */
 	public BigDecimal getBigDecimal(String column) {
-		return FieldValueKit.toBigDecimal(getColumns().get(column));
+		return TypeKit.toBigDecimal(getColumns().get(column));
 	}
 	
 	/**
@@ -382,7 +383,7 @@ public class Record implements IRow<Record>, Serializable {
 	 */
 	public Number getNumber(String column) {
 		// return (Number)getColumns().get(column);
-		return FieldValueKit.toNumber(getColumns().get(column));
+		return TypeKit.toNumber(getColumns().get(column));
 	}
 	
 	public String toString() {