|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
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 JXPathContext |
context
JXPathコンテキスト。 |
private static 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 Log log
protected 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のノード。
|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||