XmlBuilder.java
package com.gh.mygreen.xlsmapper.xml;
import java.lang.annotation.Annotation;
import com.gh.mygreen.xlsmapper.xml.bind.AnnotationInfo;
import com.gh.mygreen.xlsmapper.xml.bind.AnnotationMappingInfo;
import com.gh.mygreen.xlsmapper.xml.bind.ClassInfo;
import com.gh.mygreen.xlsmapper.xml.bind.FieldInfo;
import com.gh.mygreen.xlsmapper.xml.bind.MethodInfo;
/**
* アノテーション用のXMLのオブジェクト({@link AnnotationMappingInfo})を組み立てるためのヘルパークラス。
*
* <pre class="highlight"><code class="java">
* // static import をすると使いやすくなります。
* import static com.gh.mygreen.xlsmapper.xml.XmlBuilder.*;
*
* public void sample() {
* AnnotationMappingInfo annotationMapping = createXml()
* .classInfo(createClass(SimpleSheet.class)
* .annotation(createAnnotationBuilder(XlsSheet.class) // クラスに対するアノテーションの定義
* .attribute("name", "単純なシート")
* .buildAnnotation())
* .field(createField("sheetName") // フィールドに対するアノテーションの定義
* .annotation(createAnnotation(XlsSheetName.class)
* .buildAnnotation())
* .buildField())
* .field(createField("name")
* .annotation(createAnnotation(XlsLabelledCell.class)
* .attribute("label", "名称")
* .attribute("type", LabelledCellType.Right)
* .buildAnnotation())
* .annotation(createAnnotation(XlsTrim.class)
* .buildAnnotation())
* .annotation(createAnnotation(XlsDefaultValue.class)
* .attribute("value", "ー")
* .buildAnnotation())
* .buildField())
* .method(createMethod("setRecords") // メソッドに対するアノテーションの定義
* .annotation(createAnnotation(XlsHorizontalRecords.class)
* .attribute("tableLabel", "名簿一覧")
* .attribute("terminal", RecordTerminal.Border)
* .buildAnnotation())
* .buildMethod())
* .buildClass())
* .buildXml();
*
* // ファイルへの保存
* XmlIO.save(annotationMapping, new File("anno_simple.xml"), "UTF-8");
*
* // システム設定へ渡す。
* XlsMapper xlsMapper = new XlsMapper();
* xlsMapper.getConfiguration.setAnnotationMapping(annotaionMapping);
*
* }
* </code></pre>
* @since 1.1
* @author T.TSUCHIE
*
*/
public class XmlBuilder {
/**
* JavaオブジェクトをOGNL式に変換するためのクラス。
*/
private static OgnlValueFormatter valueFormatter = new OgnlValueFormatter();
/**
* {@link AnnotationMappingInfo}のビルダクラスの{@link AnnotationMappingInfo.Builder}インスタンスを作成する。
* @return
*/
public static AnnotationMappingInfo.Builder createXml() {
return AnnotationMappingInfo.builder();
}
/**
* {@link ClassInfo}のビルダクラスの{@link ClassInfo.Builder}インスタンスを作成する。
* @param clazz マッピング対象のJavaのクラス情報。
* @return
*/
public static ClassInfo.Builder createClass(final Class<?> clazz) {
return ClassInfo.builder().name(clazz);
}
/**
* {@link MethodInfo}のビルダクラスの{@link MethodInfo.Builder}インスタンスを作成する。
* @param methodName メソッド名
* @return
*/
public static MethodInfo.Builder createMethod(final String methodName) {
return MethodInfo.builder().name(methodName);
}
/**
* {@link FieldInfo}のビルダクラスの{@link FieldInfo.Builder}インスタンスを作成する。
* @param fieldName フィールド名
* @return
*/
public static FieldInfo.Builder createField(final String fieldName) {
return FieldInfo.builder().name(fieldName);
}
/**
* {@link AnnotationInfo}のビルダクラスの{@link AnnotationInfo.Builder}インスタンスを作成する。
* <p>JavaオブジェクトをOGNL式に変換するクラス{@link OgnlValueFormatter}はデフォルトの物が使用される。
* 独自のものを設定したい場合は、{@link #setValueFormatter(OgnlValueFormatter)}を予め呼び変更しておく必要がある。
* @param clazz アノテーションのクラス
* @return
*/
public static AnnotationInfo.Builder createAnnotation(Class<? extends Annotation> clazz) {
return AnnotationInfo.builder(valueFormatter).name(clazz);
}
/**
* JavaオブジェクトをOGNL式に変換するためのクラスを取得する。
* @return OGNL式のフォーマッタを返す。
*/
public synchronized static OgnlValueFormatter getValueFormatter() {
return valueFormatter;
}
/**
* JavaオブジェクトをOGNL式に変換するためのクラスを設定する。
*
* @param valueFormatter
*/
public synchronized static void setValueFormatter(final OgnlValueFormatter valueFormatter) {
XmlBuilder.valueFormatter = valueFormatter;
}
}