com.gh.mygreen.xlsmapper.xml.OgnlValueFormatter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of xlsmapper Show documentation
Show all versions of xlsmapper Show documentation
XlsMapper is Java Library for mapping Excel sheets to POJO.
package com.gh.mygreen.xlsmapper.xml;
/**
* JavaのオブジェクトをOGNL形式の文字列に変換します。
*
* - このクラスは、{@link XmlBuilder}でアノテーション定義用のXMLを組み立てるために利用します。
* - アノテーションで利用可能な属性の型(プリミティブ型/String/Class/列挙型、それらの一次元配列)に対応しています。
* - プリミティブ型のラッパークラスは、プリミティブ型の形式に変換して処理されます。
*
*
* @since 1.1
* @author T.TSUCHIE
*
*/
public class OgnlValueFormatter {
/**
* JavaオブジェクトをOGNL式に変換する。
* @param value 変換対象のオブジェクト。
* @return OGNL式。
* @throws IllegalArgumentException value class type is not supported.
*/
public String format(final Object value) {
if(value == null) {
return "null";
}
final Class> clazz = value.getClass();
if(clazz.isPrimitive()) {
if(clazz.equals(Boolean.TYPE)) {
return format((boolean) value);
} else if(clazz.equals(Byte.TYPE)) {
return format((byte) value);
} else if(clazz.equals(Character.TYPE)) {
return format((char) value);
} else if(clazz.equals(Short.TYPE)) {
return format((short) value);
} else if(clazz.equals(Integer.TYPE)) {
return format((int) value);
} else if(clazz.equals(Long.TYPE)) {
return format((long) value);
} else if(clazz.equals(Float.TYPE)) {
return format((float) value);
} else if(clazz.equals(Double.TYPE)) {
return format((double) value);
}
} else if(clazz.isArray()) {
if(value instanceof boolean[]) {
return format((boolean[]) value);
} else if(value instanceof char[]) {
return format((char[]) value);
} else if(value instanceof byte[]) {
return format((byte[]) value);
} else if(value instanceof short[]) {
return format((short[]) value);
} else if(value instanceof int[]) {
return format((int[]) value);
} else if(value instanceof long[]) {
return format((long[]) value);
} else if(value instanceof float[]) {
return format((float[]) value);
} else if(value instanceof double[]) {
return format((double[]) value);
} else if(value instanceof String[]) {
return format((String[]) value);
} else if(value instanceof Enum[]) {
return format((Enum[]) value);
} else if(value instanceof Class[]) {
return format((Class[]) value);
}
} else if(value instanceof String) {
return format((String) value);
} else if(value instanceof Boolean) {
return format((boolean) value);
} else if(value instanceof Byte) {
return format((byte) value);
} else if(value instanceof Character) {
return format((char) value);
} else if(value instanceof Short) {
return format((short) value);
} else if(value instanceof Integer) {
return format((int) value);
} else if(value instanceof Long) {
return format((long) value);
} else if(value instanceof Float) {
return format((float) value);
} else if(value instanceof Double) {
return format((double) value);
} else if(Class.class.isAssignableFrom(clazz)) {
return format((Class>) value);
} else if(Enum.class.isAssignableFrom(clazz)) {
return format((Enum>) value);
}
throw new IllegalArgumentException(String.format("not support type '%s'.", clazz.getName()));
}
private String format(final boolean value) {
return String.valueOf(value);
}
private String format(final char value) {
return String.format("'\\u%04X'", (int)value);
}
private String format(final byte value) {
return String.format("@Byte@valueOf('%d').byteValue()", value);
}
private String format(final short value) {
return String.format("@Short@valueOf('%d').shortValue()", value);
}
private String format(final int value) {
return String.valueOf(value);
}
private String format(final long value) {
return String.valueOf(value) + "L";
}
private String format(final float value) {
return String.valueOf(value) + "F";
}
private String format(final double value) {
return String.valueOf(value) + "D";
}
private String format(final String value) {
StringBuilder sb = new StringBuilder();
sb.append("\"");
final int len = value.length();
for(int i=0; i < len; i++) {
char c = value.charAt(i);
if(c == '"') {
// エスケープ
sb.append("\\\"");
} else {
sb.append(c);
}
}
sb.append("\"");
return sb.toString();
}
private String format(final Enum> value) {
String className = value.getClass().getName();
String itemName = value.name();
return "@" + className + "@" + itemName;
}
private String format(final Class> value) {
String className = value.getName();
return "@" + className + "@class";
}
private String format(final boolean[] value) {
StringBuilder sb = new StringBuilder();
sb.append("new boolean[] {");
final int len = value.length;
for(int i=0; i < len; i++) {
sb.append(format(value[i]));
if(i < len - 1) {
sb.append(", ");
}
}
sb.append("}");
return sb.toString();
}
private String format(final char[] value) {
StringBuilder sb = new StringBuilder();
sb.append("new char[] {");
final int len = value.length;
for(int i=0; i < len; i++) {
sb.append(format(value[i]));
if(i < len - 1) {
sb.append(", ");
}
}
sb.append("}");
return sb.toString();
}
private String format(final byte[] value) {
StringBuilder sb = new StringBuilder();
sb.append("new byte[] {");
final int len = value.length;
for(int i=0; i < len; i++) {
sb.append(format(value[i]));
if(i < len - 1) {
sb.append(", ");
}
}
sb.append("}");
return sb.toString();
}
private String format(final short[] value) {
StringBuilder sb = new StringBuilder();
sb.append("new short[] {");
final int len = value.length;
for(int i=0; i < len; i++) {
sb.append(format(value[i]));
if(i < len - 1) {
sb.append(", ");
}
}
sb.append("}");
return sb.toString();
}
private String format(final int[] value) {
StringBuilder sb = new StringBuilder();
sb.append("new int[] {");
final int len = value.length;
for(int i=0; i < len; i++) {
sb.append(format(value[i]));
if(i < len - 1) {
sb.append(", ");
}
}
sb.append("}");
return sb.toString();
}
private String format(final long[] value) {
StringBuilder sb = new StringBuilder();
sb.append("new long[] {");
final int len = value.length;
for(int i=0; i < len; i++) {
sb.append(format(value[i]));
if(i < len - 1) {
sb.append(", ");
}
}
sb.append("}");
return sb.toString();
}
private String format(final float[] value) {
StringBuilder sb = new StringBuilder();
sb.append("new float[] {");
final int len = value.length;
for(int i=0; i < len; i++) {
sb.append(format(value[i]));
if(i < len - 1) {
sb.append(", ");
}
}
sb.append("}");
return sb.toString();
}
private String format(final double[] value) {
StringBuilder sb = new StringBuilder();
sb.append("new double[] {");
final int len = value.length;
for(int i=0; i < len; i++) {
sb.append(format(value[i]));
if(i < len - 1) {
sb.append(", ");
}
}
sb.append("}");
return sb.toString();
}
private String format(final String[] value) {
StringBuilder sb = new StringBuilder();
sb.append("new String[] {");
joinedFormat(value, sb);
sb.append("}");
return sb.toString();
}
private void joinedFormat(final Object[] array, final StringBuilder sb) {
final int len = array.length;
for(int i=0; i < len; i++) {
sb.append(format(array[i]));
if(i < len - 1) {
sb.append(", ");
}
}
}
private String format(final Enum>[] value) {
StringBuilder sb = new StringBuilder();
String className = value.getClass().getComponentType().getName();
sb.append(String.format("new %s[] {", className));
joinedFormat(value, sb);
sb.append("}");
return sb.toString();
}
private String format(final Class>[] value) {
StringBuilder sb = new StringBuilder();
String className = value.getClass().getComponentType().getName();
sb.append(String.format("new %s[] {", className));
joinedFormat(value, sb);
sb.append("}");
return sb.toString();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy