All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nablarch.core.util.MapUtil Maven / Gradle / Ivy

The newest version!
package nablarch.core.util;

import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

/**
 * マップユーティリティ
 * 
 * @author TIS
 */
public final class MapUtil {
    
    /**
     * 隠蔽コンストラクタ
     */
    private MapUtil() {
        // NOP
    }
    

    /**
     * オブジェクトから階層構造をキーで表現したマップを作成します。
     * 
     * @see MapUtil#createFlatMap(String, Object)
     * 
     * @param form フォーム
     * @return マップ
     */
    public static Map createFlatMap(Object form) {
        return createFlatMap("", form);
    }
    
    /**
     * オブジェクトから階層構造をキーで表現したマップを作成します。
     * 

* 本メソッドではオブジェクト内の全てのゲッターメソッドを対象として、データ取得を行い、 * 以下の規則に従って、取得したデータをマップに格納します。
* プロパティ名はゲッターメソッド名からgetを除き先頭を大文字に変換した名称とします。 * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
対象データ型格納キー格納データ型格納データ内容備考
String"${プリフィックス}." + プロパティ名String取得データそのまま 
String[]"${プリフィックス}." + プロパティ名String[]取得データそのまま 
Number"${プリフィックス}." + プロパティ名String取得データを文字列化したもの 
Boolean"${プリフィックス}." + プロパティ名String取得データを文字列化したもの 
その他オブジェクト"${プリフィックス}." + プロパティ名 + "." + オブジェクト内のプロパティ名StringまたはString[]オブジェクト内のプロパティデータ型による再帰的に処理が行われる
その他オブジェクトの配列"${プリフィックス}." + プロパティ名 + "[${要素番号}]" + "." + オブジェクト内のプロパティ名StringまたはString[]オブジェクト内のプロパティデータ型による再帰的に処理が行われる
* * @param prefix プリフィックス * @param form フォーム * @return マップ */ public static Map createFlatMap(String prefix, Object form) { Map map = new HashMap(); if (form == null) { // 空のマップを返却 return map; } // 内部で使用するプリフィックスの調整 String innerPrefix; if (StringUtil.isNullOrEmpty(prefix)) { innerPrefix = ""; } else { innerPrefix = prefix + "."; } // Mapの場合は値をつめなおして返却 if (form instanceof Map) { for (Entry e : ((Map) form).entrySet()) { if (e.getKey() != null) { if (e.getValue() instanceof Map) { map.putAll(createFlatMap(innerPrefix + e.getKey(), e.getValue())); } else { map.put(innerPrefix + e.getKey(), e.getValue()); } } } return map; } // 全てのゲッターメソッドを走査しマップに格納 for (Method m : ObjectUtil.getGetterMethods(form.getClass())) { String propName = ObjectUtil.getPropertyNameFromGetter(m); Object o = ObjectUtil.getProperty(form, propName); if (o == null) { map.put(innerPrefix + propName, null); } else if (o instanceof String) { map.put(innerPrefix + propName, o); } else if (o instanceof String[]) { map.put(innerPrefix + propName, o); } else if (o instanceof Number) { map.put(innerPrefix + propName, StringUtil.toString(o)); } else if (o instanceof Boolean) { map.put(innerPrefix + propName, o.toString()); } else if (m.getReturnType().isArray()) { int length = Array.getLength(o); for (int i = 0; i < length; i++) { map.putAll(createFlatMap(innerPrefix + propName + "[" + i + "]", Array.get(o, i))); } } else { map.putAll(createFlatMap(innerPrefix + propName, o)); } } return map; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy