| 
 | ||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectjp.terasoluna.fw.beans.JXPathIndexedBeanWrapperImpl
public class JXPathIndexedBeanWrapperImpl
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]:3List型のオブジェクトに対しても、同様の方法で値が取得できる。
下記のような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型であっても、値を取得することができる。
下記のような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):address1Map型属性のキー名は()(括弧)で囲われることに注意すること。
本クラスは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:address1Mapオブジェクトに対しても、配列・List型属性、 ネストした属性の取得が可能である。
本クラスは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 | contextJXPathコンテキスト。 | 
| private static org.apache.commons.logging.Log | logログクラス。 | 
| コンストラクタの概要 | |
|---|---|
| JXPathIndexedBeanWrapperImpl(java.lang.Object target)コンストラクタ。 | |
| メソッドの概要 | |
|---|---|
| protected  java.lang.String | escapeMapProperty(java.lang.String property)MapプロパティをXPath形式にエスケープする。 | 
| protected  java.lang.String | extractAttributeName(java.lang.String node)属性名を取り出す。 | 
| protected  java.lang.String | extractDecrementIndex(java.lang.String node)デクリメントした添え字を取り出す。 | 
| protected  java.lang.String | extractIncrementIndex(java.lang.String property)インクリメントされた添え字を取り出す。 | 
| protected  java.lang.String | extractIncrementIndex(java.lang.String property,
                      int increment)インクリメントされた添え字を取り出す。 | 
| protected  java.lang.String | extractIndex(java.lang.String property)配列インデックスを取得する。 | 
| protected  java.lang.String | extractMapAttributeName(java.lang.String node)Mapの属性名を取り出す。 | 
| protected  java.lang.String | extractMapKey(java.lang.String node)Mapキーを取り出す。 | 
| protected  java.lang.String | extractMapPropertyKey(java.lang.String property)Map型属性のキー名を取り出す。 | 
| protected  java.lang.String | extractMapPropertyName(java.lang.String property)Map型属性のプロパティ名を取り出す。 | 
|  java.util.Map<java.lang.String,java.lang.Object> | getIndexedPropertyValues(java.lang.String propertyName)指定したプロパティ名に一致する属性値を返す。 | 
| protected  boolean | isMapAttribute(java.lang.String node)Map属性を持つオブジェクトかどうか判断する。 | 
| protected  boolean | isMapObject(java.lang.String node)Mapオブジェクトかどうか判断する。 | 
| protected  boolean | isMapProperty(java.lang.String property)Map型属性かどうか判断する。 | 
| protected  java.lang.String | toPropertyName(java.lang.String xpath)XPath形式の文字列をプロパティ形式の文字列に変換する。 | 
| protected  java.lang.String | toXPath(java.lang.String propertyName)プロパティ形式の文字列をXPath形式の文字列に変換する。 | 
| クラス java.lang.Object から継承されたメソッド | 
|---|
| clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | 
| フィールドの詳細 | 
|---|
private static org.apache.commons.logging.Log log
protected org.apache.commons.jxpath.JXPathContext context
| コンストラクタの詳細 | 
|---|
public JXPathIndexedBeanWrapperImpl(java.lang.Object target)
target - 対象のオブジェクト| メソッドの詳細 | 
|---|
public java.util.Map<java.lang.String,java.lang.Object> getIndexedPropertyValues(java.lang.String propertyName)
IndexedBeanWrapper 内の getIndexedPropertyValuespropertyName - プロパティ名
protected java.lang.String toXPath(java.lang.String propertyName)
propertyName - プロパティ形式文字列
protected java.lang.String extractIncrementIndex(java.lang.String property)
property - Javaプロパティ名。
protected java.lang.String extractIncrementIndex(java.lang.String property,
                                                 int increment)
property - プロパティ名。increment - インクリメントする値。
protected java.lang.String extractIndex(java.lang.String property)
property - プロパティ名。
protected java.lang.String escapeMapProperty(java.lang.String property)
property - Javaプロパティ名。
protected java.lang.String extractMapPropertyName(java.lang.String property)
property - Javaプロパティ名。
protected java.lang.String extractMapPropertyKey(java.lang.String property)
property - Javaプロパティ名。
protected boolean isMapProperty(java.lang.String property)
property - Javaプロパティ名。
protected java.lang.String toPropertyName(java.lang.String xpath)
xpath - XPath形式文字列
protected java.lang.String extractAttributeName(java.lang.String node)
node - XPathのノード。
protected java.lang.String extractMapAttributeName(java.lang.String node)
node - XPathのノード。
protected java.lang.String extractMapKey(java.lang.String node)
node - XPathのノード。
protected java.lang.String extractDecrementIndex(java.lang.String node)
node - XPathのノード。
protected boolean isMapAttribute(java.lang.String node)
node - XPathのノード。
protected boolean isMapObject(java.lang.String node)
node - XPathのノード。
| 
 | ||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||