用于生成mock模型对象Setter代码工具类

最近写的一个工具类, 用来生成mock的javabean对象, 比如将一条模拟数据直接生成javabean的setter代码
public class MockBuilder extends ToStringBuilder {
	private String objectName;
	/** 是否包含日期时间字段 */
	private boolean includeDateField = false;

	public MockBuilder(Object object, String objectName) {
		super(object, ToStringStyle.MULTI_LINE_STYLE, null);
		this.setObjectName(objectName);
	}

	public MockBuilder(Object object, String objectName,
			boolean includeDateField) {
		this(object, objectName);
		this.includeDateField = includeDateField;
	}

	public static String toString(Object object, String objectName) {
		return toString(object, objectName, false);
	}

	public static String toString(Object object, String objectName,
			boolean includeDate) {
		return new MockBuilder(object, objectName, includeDate).toString();
	}

	public static void sysPrint(Object object, String objectName) {
		sysPrint(object, objectName, false);
	}

	/**
	 * @param object
	 * @param objectName
	 * @param includeDate 是否包含日期时间字段
	 */
	public static void sysPrint(Object object, String objectName,
			boolean includeDate) {
		System.out.println(toString(object, objectName, includeDate));
	}

	@SuppressWarnings("unchecked")
	public String toString() {
		if (this.getObject() == null) {
			return "<null>";
		}
		getStringBuffer().delete(0, getStringBuffer().length());
		Class clazz = this.getObject().getClass();
		this.appendWriteMethods(clazz);
		return this.getStringBuffer().toString();
	}

	public void setObjectName(String objectName) {
		this.objectName = objectName;
	}

	public String getObjectName() {
		return objectName;
	}

	@SuppressWarnings("unchecked")
	protected void appendWriteMethods(Class clazz) {
		try {
			BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
			PropertyDescriptor[] descriptors = beanInfo
					.getPropertyDescriptors();
			for (PropertyDescriptor descriptor : descriptors) {
				Method writeMethod = descriptor.getWriteMethod();
				if (writeMethod == null)
					continue;

				Method readMethod = descriptor.getReadMethod();
				if (readMethod == null) {
					continue;
				}

				String setterName = writeMethod.getName();

				Object value = readMethod.invoke(getObject(), new Object[] {});

				if (value == null) {
					continue;
				}

				if (value instanceof Number) {
					if (((Number) value).doubleValue() == 0) {
						continue;
					}
				}

				if (value instanceof Date) {
					if (includeDateField) {
						value = "new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\").parse(\""
								+ new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
										.format(value) + "\")";
					} else {
						continue;
					}
				} else if (value instanceof String) {
					if (value.equals("")) {
						continue;
					}
					value = "\"" + value + "\"";
				}

				if (value instanceof List) {
					continue;
				}

				this.getStringBuffer().append(objectName).append(".").append(
						setterName).append("(").append(value).append(");\n");
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public static void main(String[] args) {
		SpuDO spu = new SpuDO();
		spu.setName("The Body Shop橙花茉莉香水");
		System.out.println(toString(spu, "spuMock"));
		;
	}
}

你可能感兴趣的:(mock javabean)