jp.terasoluna.fw.beans
クラス JXPathIndexedBeanWrapperImpl

java.lang.Object
  上位を拡張 jp.terasoluna.fw.beans.JXPathIndexedBeanWrapperImpl
すべての実装されたインタフェース:
IndexedBeanWrapper

public class JXPathIndexedBeanWrapperImpl
extends Object
implements IndexedBeanWrapper

JXPathを用いたIndexBeanWrapperの実装。

JavaBean、Map、DynaBeanからプロパティ名を指定することにより、 属性値を取得することができる。 属性が配列・List型の場合、該当する属性値を全て取得する。

取得できる属性の型

Mapオブジェクト、またはMap型属性を使用する場合、 以下の文字はMapキーに使用できない。


簡単な使用例

以下のようなEmployeeオブジェクトのfirstName属性にアクセスする。

 public class Employee {
     private String firstName;

     public void setFirstName(String firstName) {
         this.firstName = firstName;
     }
     public String getFirstName() {
         return firstName;
     }
 }
 

1.コンストラクタでアクセス対象のJavaBeanをラップする。

 // アクセス対象となるEmployeeオブジェクト
 Employee emp = new Employee();
 emp.setFirstName("めい");
 
 IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(emp);
 

2.firstName属性にアクセスする。 引数のStringには属性名を指定する。

 Map<String, Object> map = bw.getIndexedPropertyValues("firstName");
 
キーがプロパティ名、値が属性値のMapインスタンスが返される。 以下のコードでは全ての要素をコンソールに出力している。
 System.out.println("Mapのキー:Mapの値");
 System.out.println("========================");
 Set<String> keyset = map.keySet();
 for (String key : keyset) {
     System.out.print(key + ":");
     System.out.println(map.get(key).toString());
 }
 
結果は以下のように出力される。
 Mapのキー:Mapの値
 ========================
 firstName:めい
 


配列属性へのアクセス

以下のようなAddressオブジェクトの配列型属性numbersにアクセスする。

 public class Address {
     private int[] numbers;

     public void setNumbers(int[] numbers) {
         this.numbers = numbers;
     }
     public int[] getNumbers() {
         return numbers;
     }
 }
 

1.コンストラクタでアクセス対象のJavaBeanをラップする。

 // Employeeの属性となるAddressオブジェクト
 Address address = new Address();
 address.setNumbers(new int[]{1, 2, 3});
 
 IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(address);
 

2.numbers属性にアクセスする。 'numbers[]'のように配列記号を付ける必要はなく、 属性名を指定すればよいことに注意すること。

 Map<String, Object> map = bw.getIndexedPropertyValues("numbers");
 

キーがプロパティ名、値が属性値のMapインスタンスが返される。 以下のコードでは全ての要素をコンソールに出力している。
 System.out.println("Mapのキー:Mapの値");
 System.out.println("========================");
 Set<String> keyset = map.keySet();
 for (String key : keyset) {
     System.out.print(key + ":");
     System.out.println(map.get(key).toString());
 }
 
結果は以下のように出力される。
 Mapのキー:Mapの値
 ========================
 numbers[0]:1
 numbers[1]:2
 numbers[2]:3
 
List型のオブジェクトに対しても、同様の方法で値が取得できる。


ネストした属性へのアクセス

下記のようなEmployeeオブジェクトから、 ネストされたAddressクラスのstreetNumber属性にアクセスする。

 public class Employee {
     private Address homeAddress;

     public void setHomeAddress(Address homeAddress) {
         this.homeAddress = homeAddress;
     }
     public Address getHomeAddress() {
         return homeAddress;
     }
 }
 public class Address {
     private String streetNumber;

     public void setStreetNumber(String streetNumber) {
         this.streetNumber = streetNumber;
     }
     public String getStreetNumber() {
         return streetNumber;
     }
 }
 

1.コンストラクタでアクセス対象のJavaBeanをラップする。

 // Employeeの属性となるAddressオブジェクト
 Address address = new Address();
 address.setStreetNumber("住所");
 
 // Employee
 Employee emp = new Employee();
 emp.setHomeAddress(address);
 
 IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(emp);
 

2.EmployeeオブジェクトのhomeAddress属性にネストされた、 streetNumber属性にアクセスする。 ネストした属性を指定する場合、以下のコードのように'.'(ドット)で 属性名を連結する。

 Map<String, Object> map = bw.getIndexedPropertyValues("homeAddress.streetNumber");
 

キーがプロパティ名、値が属性値のMapインスタンスが返される。 以下のコードでは全ての要素をコンソールに出力している。
 System.out.println("Mapのキー:Mapの値");
 System.out.println("========================");
 Set<String> keyset = map.keySet();
 for (String key : keyset) {
     System.out.print(key + ":");
     System.out.println(map.get(key).toString());
 }
 
結果は以下のように出力される。
 Mapのキー:Mapの値
 ========================
 homeAddress.streetNumber:住所
 
ネストした属性が配列・List型であっても、値を取得することができる。


Map型属性へのアクセス

下記のようなEmployeeオブジェクトのMap属性addressMapにアクセスする。

 public class Employee {
     private Map addressMap;

     public void setAddressMap(Map addressMap) {
         this.addressMap = addressMap;
     }
     public Map getAddressMap() {
         return addressMap;
     }
 }
 

1.コンストラクタでアクセス対象のJavaBeanをラップする。

 // Employeeの属性となるMap
 Map addressMap = new HashMap();
 addressMap.put("home", "address1");
 
 // Employee
 Employee emp = new Employee();
 emp.setAddressMap(addressMap);
 
 IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(emp);
 

2.EmployeeのaddressMap属性中にセットしたhomeキーにアクセスする。 Map型属性のキーを指定する場合、以下のコードのようにかっこでキー名を連結する。

 Map<String, Object> map = bw.getIndexedPropertyValues("addressMap(home)");
 

キーがプロパティ名、値が属性値のMapインスタンスが返される。 以下のコードでは全ての要素をコンソールに出力している。
 System.out.println("Mapのキー:Mapの値");
 System.out.println("========================");
 Set<String> keyset = map.keySet();
 for (String key : keyset) {
     System.out.print(key + ":");
     System.out.println(map.get(key).toString());
 }
 
結果は以下のように出力される。
 Mapのキー:Mapの値
 ========================
 addressMap(home):address1
 
Map型属性のキー名は()(括弧)で囲われることに注意すること。


Mapオブジェクトへのアクセス

本クラスはJavaBeanだけではなく、Mapオブジェクトへのアクセスが可能である。

1.コンストラクタでアクセス対象のMapをラップする。

 // Employeeの属性となるMap
 Map addressMap = new HashMap();
 addressMap.put("home", "address1");
 
 IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(addressMap);
 

2.addressMapにセットしたhomeキーにアクセスする。

 Map<String, Object> map = bw.getIndexedPropertyValues("home");
 

キーがプロパティ名、値が属性値のMapインスタンスが返される。 以下のコードでは全ての要素をコンソールに出力している。
 System.out.println("Mapのキー:Mapの値");
 System.out.println("========================");
 Set<String> keyset = map.keySet();
 for (String key : keyset) {
     System.out.print(key + ":");
     System.out.println(map.get(key).toString());
 }
 
結果は以下のように出力される。
 Mapのキー:Mapの値
 ========================
 home:address1
 
Mapオブジェクトに対しても、配列・List型属性、 ネストした属性の取得が可能である。


DynaBeanへのアクセス

本クラスはJavaBeanだけではなく、DynaBeanへのアクセスが可能である。

1.コンストラクタでアクセス対象のDynaBeanをラップする。

 // DynaBeanにラップされるJavaBean
 Address address = new Address();
 address.setStreetNumber("住所");
 
 // DynaBean
 DynaBean dynaBean = new WrapDynaBean(address);
 
 IndexedBeanWrapper bw = new JXPathIndexedBeanWrapperImpl(dynaBean);
     
 --------------------------------------------------------
 上記のコードで使用しているAddressオブジェクトは以下のようなクラスである。
 
 public class Address {
     private String streetNumber;

     public void setStreetNumber(String streetNumber) {
         this.streetNumber = streetNumber;
     }
     public String getStreetNumber() {
         return streetNumber;
     }
 }
 

2.DynaBeanのstreetNumber属性にアクセスする。

 Map<String, Object> map = bw.getIndexedPropertyValues("streetNumber");
 

キーがプロパティ名、値が属性値のMapインスタンスが返される。 以下のコードでは全ての要素をコンソールに出力している。
 System.out.println("Mapのキー:Mapの値");
 System.out.println("========================");
 Set<String> keyset = map.keySet();
 for (String key : keyset) {
     System.out.print(key + ":");
     System.out.println(map.get(key).toString());
 }
 
結果は以下のように出力される。
 Mapのキー:Mapの値
 ========================
 streetNumber:住所
 


フィールドの概要
protected  org.apache.commons.jxpath.JXPathContext context
          JXPathコンテキスト。
 
コンストラクタの概要
JXPathIndexedBeanWrapperImpl(Object target)
          コンストラクタ。
 
メソッドの概要
protected  String escapeMapProperty(String property)
          MapプロパティをXPath形式にエスケープする。
protected  String extractAttributeName(String node)
          属性名を取り出す。
protected  String extractDecrementIndex(String node)
          デクリメントした添え字を取り出す。
protected  String extractIncrementIndex(String property)
          インクリメントされた添え字を取り出す。
protected  String extractIncrementIndex(String property, int increment)
          インクリメントされた添え字を取り出す。
protected  String extractIndex(String property)
          配列インデックスを取得する。
protected  String extractMapAttributeName(String node)
          Mapの属性名を取り出す。
protected  String extractMapKey(String node)
          Mapキーを取り出す。
protected  String extractMapPropertyKey(String property)
          Map型属性のキー名を取り出す。
protected  String extractMapPropertyName(String property)
          Map型属性のプロパティ名を取り出す。
 Map<String,Object> getIndexedPropertyValues(String propertyName)
          指定したプロパティ名に一致する属性値を返す。
protected  boolean isMapAttribute(String node)
          Map属性を持つオブジェクトかどうか判断する。
protected  boolean isMapObject(String node)
          Mapオブジェクトかどうか判断する。
protected  boolean isMapProperty(String property)
          Map型属性かどうか判断する。
protected  String toPropertyName(String xpath)
          XPath形式の文字列をプロパティ形式の文字列に変換する。
protected  String toXPath(String propertyName)
          プロパティ形式の文字列をXPath形式の文字列に変換する。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

context

protected org.apache.commons.jxpath.JXPathContext context
JXPathコンテキスト。

コンストラクタの詳細

JXPathIndexedBeanWrapperImpl

public JXPathIndexedBeanWrapperImpl(Object target)
コンストラクタ。

パラメータ:
target - 対象のオブジェクト
メソッドの詳細

getIndexedPropertyValues

public Map<String,Object> getIndexedPropertyValues(String propertyName)
指定したプロパティ名に一致する属性値を返す。

定義:
インタフェース IndexedBeanWrapper 内の getIndexedPropertyValues
パラメータ:
propertyName - プロパティ名
戻り値:
プロパティ名に一致する属性値を格納するMap(位置情報、属性値)

toXPath

protected String toXPath(String propertyName)
プロパティ形式の文字列をXPath形式の文字列に変換する。

パラメータ:
propertyName - プロパティ形式文字列
戻り値:
XPath形式文字列

extractIncrementIndex

protected String extractIncrementIndex(String property)
インクリメントされた添え字を取り出す。

パラメータ:
property - Javaプロパティ名。
戻り値:
String XPath形式の添え字。

extractIncrementIndex

protected String extractIncrementIndex(String property,
                                       int increment)
インクリメントされた添え字を取り出す。

パラメータ:
property - プロパティ名。
increment - インクリメントする値。
戻り値:
String インクリメントされた添え字。

extractIndex

protected String extractIndex(String property)
配列インデックスを取得する。

パラメータ:
property - プロパティ名。
戻り値:
配列インデックス。

escapeMapProperty

protected String escapeMapProperty(String property)
MapプロパティをXPath形式にエスケープする。

パラメータ:
property - Javaプロパティ名。
戻り値:
String XPath。

extractMapPropertyName

protected String extractMapPropertyName(String property)
Map型属性のプロパティ名を取り出す。

パラメータ:
property - Javaプロパティ名。
戻り値:
String XPath。

extractMapPropertyKey

protected String extractMapPropertyKey(String property)
Map型属性のキー名を取り出す。

パラメータ:
property - Javaプロパティ名。
戻り値:
String XPath。

isMapProperty

protected boolean isMapProperty(String property)
Map型属性かどうか判断する。

パラメータ:
property - Javaプロパティ名。
戻り値:
boolean Map型属性ならばtrue、それ以外はfalseを返す。

toPropertyName

protected String toPropertyName(String xpath)
XPath形式の文字列をプロパティ形式の文字列に変換する。

パラメータ:
xpath - XPath形式文字列
戻り値:
プロパティ形式文字列

extractAttributeName

protected String extractAttributeName(String node)
属性名を取り出す。 配列の場合、添え字はカットされる。

パラメータ:
node - XPathのノード。
戻り値:
属性名。

extractMapAttributeName

protected String extractMapAttributeName(String node)
Mapの属性名を取り出す。

パラメータ:
node - XPathのノード。
戻り値:
属性名。

extractMapKey

protected String extractMapKey(String node)
Mapキーを取り出す。

パラメータ:
node - XPathのノード。
戻り値:
属性名。

extractDecrementIndex

protected String extractDecrementIndex(String node)
デクリメントした添え字を取り出す。

パラメータ:
node - XPathのノード。
戻り値:
属性名。

isMapAttribute

protected boolean isMapAttribute(String node)
Map属性を持つオブジェクトかどうか判断する。

パラメータ:
node - XPathのノード。
戻り値:
Map属性ならばtrue、それ以外はfalseを返す。

isMapObject

protected boolean isMapObject(String node)
Mapオブジェクトかどうか判断する。

パラメータ:
node - XPathのノード。
戻り値:
Mapオブジェクトならばtrue、それ以外はfalseを返す。


Copyright © 2011. All Rights Reserved.