package com.zt.generator.data; import cn.hutool.core.date.DateUtil; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import java.io.Serializable; import java.util.Date; public class DataRow implements Serializable { private boolean isWebMode;// 默认为false; protected DataColumn[] columns; protected Object[] values; public DataRow(DataColumn[] types, Object[] values) { columns = types; this.values = values; } public Object get(int index) { if (values == null) { return null; } if (index < 0 || index >= columns.length) { throw new RuntimeException("DataRow中没有指定的列:" + index); } return values[index]; } public Object get(String columnName) { if (columnName == null || columnName.equals("")) { throw new RuntimeException("不能存取列名为空的列"); } for (int i = 0; i < columns.length; i++) { if (columns[i].getColumnName().equalsIgnoreCase(columnName)) { return values[i]; } } // LogUtil.getLogger().warn("指定的列名没有找到:" + columnName); throw new RuntimeException("指定的列名没有找到:" + columnName); } public String getString(int index) { if (values[index] != null) { if (!"".equals(values[index]) && this.columns[index].getColumnType() == DataColumn.DATETIME) { if (StringUtils.isNotEmpty(this.columns[index].getDateFormat())) { return DateUtil.format((Date) values[index], this.columns[index].getDateFormat()); } else { // return DateUtil.toString((Date) values[index], // "yyyy-MM-dd HH:mm:ss"); 根据目前系统,默认天与时间是分开的。 return DateUtil.format((Date) values[index], "yyyy-MM-dd"); } } String t = String.valueOf(values[index]).trim(); if (isWebMode) { if (t == null || t.equals("")) { return " "; } } return t; } else { if (isWebMode) { return " "; } return ""; } } public String getString(String columnName) { if (columnName == null || columnName.equals("")) { throw new RuntimeException("不能存取列名为空的列"); } for (int i = 0; i < columns.length; i++) { if (columns[i].getColumnName().equalsIgnoreCase(columnName)) { return getString(i); } } return ""; } public Date getDate(int index) { Object obj = get(index); if (obj == null) { return null; } if (obj instanceof Date) { return (Date) obj; } else { return DateUtil.parseDateTime(obj.toString()); } } public Date getDate(String columnName) { if (columnName == null || columnName.equals("")) { throw new RuntimeException("不能存取列名为空的列"); } for (int i = 0; i < columns.length; i++) { if (columns[i].getColumnName().equalsIgnoreCase(columnName)) { return getDate(i); } } return null; } public double getDouble(int index) { Object obj = get(index); if (obj == null) { return 0; } if (obj instanceof Number) { return ((Number) obj).doubleValue(); } else { String str = obj.toString(); if (StringUtils.isEmpty(str)) { return 0; } return Double.parseDouble(str); } } public double getDouble(String columnName) { if (columnName == null || columnName.equals("")) { throw new RuntimeException("不能存取列名为空的列"); } for (int i = 0; i < columns.length; i++) { if (columns[i].getColumnName().equalsIgnoreCase(columnName)) { return getDouble(i); } } return 0; } public long getLong(int index) { Object obj = get(index); if (obj == null) { return 0; } if (obj instanceof Number) { return ((Number) obj).longValue(); } else { String str = obj.toString(); if (StringUtils.isEmpty(str)) { return 0; } return Long.parseLong(str); } } public long getLong(String columnName) { if (columnName == null || columnName.equals("")) { throw new RuntimeException("不能存取列名为空的列"); } for (int i = 0; i < columns.length; i++) { if (columns[i].getColumnName().equalsIgnoreCase(columnName)) { return getLong(i); } } return 0; } public int getInt(int index) { Object obj = get(index); if (obj == null) { return 0; } if (obj instanceof Number) { return ((Number) obj).intValue(); } else { String str = obj.toString(); if (StringUtils.isEmpty(str)) { return 0; } return Integer.parseInt(str); } } public int getInt(String columnName) { if (columnName == null || columnName.equals("")) { throw new RuntimeException("不能存取列名为空的列"); } for (int i = 0; i < columns.length; i++) { if (columns[i].getColumnName().equalsIgnoreCase(columnName)) { return getInt(i); } } return 0; } public boolean isNull(int index) { return get(index) == null; } public boolean isNull(String columnName) { return get(columnName) == null; } public void set(int index, Object value) { if (values == null) { return; } if (index < 0 || index >= values.length) { throw new RuntimeException("DataRow中没有指定的列:" + index); } values[index] = value; } public void set(String columnName, Object value) { if (columnName == null || columnName.equals("")) { throw new RuntimeException("不能存取列名为空的列"); } for (int i = 0; i < values.length; i++) { if (columns[i].getColumnName().equalsIgnoreCase(columnName)) { values[i] = value; return; } } throw new RuntimeException("指定的列名没有找到:" + columnName); } public void set(int index, int value) { set(index, new Integer(value)); } public void set(String columnName, int value) { set(columnName, new Integer(value)); } public void set(String columnName, long value) { set(columnName, new Long(value)); } public void set(int index, long value) { set(index, new Long(value)); } public void set(String columnName, double value) { set(columnName, new Double(value)); } public void set(int index, double value) { set(index, new Double(value)); } public DataColumn getDataColumn(int index) { if (index < 0 || index >= columns.length) { throw new RuntimeException("DataRow中没有指定的列:" + index); } return columns[index]; } public DataColumn getDataColumn(String columnName) { if (columnName == null || columnName.equals("")) { throw new RuntimeException("不能存取列名为空的列"); } for (int i = 0; i < columns.length; i++) { if (columns[i].getColumnName().equalsIgnoreCase(columnName)) { return columns[i]; } } throw new RuntimeException("指定的列名没有找到"); } // add by zhanglei 判断是否已包含列 public boolean containDataColumn(String columnName) { if (columnName == null || columnName.equals("")) { throw new RuntimeException("不能存取列名为空的列"); } for (int i = 0; i < columns.length; i++) { if (columns[i].getColumnName().equalsIgnoreCase(columnName)) { return true; } } return false; } public int getColumnCount() { return columns.length; } public Object[] getDataValues() { return values; } public DataColumn[] getDataColumns() { return columns; } public void insertColumn(String columnName, Object columnValue) { insertColumn(new DataColumn(columnName, DataColumn.STRING), columnValue); } public void insertColumn(String columnName, Object columnValue, int index) { insertColumn(new DataColumn(columnName, DataColumn.STRING), columnValue, index); } public void insertColumn(DataColumn dc, Object columnValue) { insertColumn(dc, columnValue, values.length); } public void insertColumn(DataColumn dc, Object columnValue, int index) { if (index < 0 || index > columns.length) { throw new RuntimeException(index + "超出范围,最大允许值为" + columns.length + "!"); } columns = (DataColumn[]) ArrayUtils.add(columns, index, dc); values = ArrayUtils.add(values, index, columnValue); } public boolean isWebMode() { return isWebMode; } public void setWebMode(boolean isWebMode) { this.isWebMode = isWebMode; } public void fill(Object[] values) { if (values == null) { return; } if (values.length != getColumnCount()) { throw new RuntimeException("执行fill操作数组长度为" + values.length + ",要求的长度为" + getColumnCount() + "!"); } for (int i = 0; i < values.length; i++) { if (columns[i].ColumnType == DataColumn.DATETIME && !Date.class.isInstance(values[i])) { throw new RuntimeException("第" + i + "列必须是Date对象!"); } set(i, values[i]); } } public String toString() { StringBuffer sb = new StringBuffer(); for (int i = 0; i < this.columns.length; i++) { if (i != 0) { sb.append(","); } sb.append(this.columns[i].getColumnName()); sb.append(":"); sb.append(this.values[i]); } return sb.toString(); } }