/*
* Copyright 2004-2015 the Seasar Foundation and the Others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.seasar.extension.dxo;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.seasar.extension.dxo.annotation.DestPrefix;
import org.seasar.extension.dxo.annotation.ExcludeNull;
import org.seasar.extension.dxo.annotation.SourcePrefix;
import org.seasar.extension.unit.S2TestCase;
/**
* @author koichik
*/
public class DxoInterceptorTigerTest extends S2TestCase {
BeanDxo beanDxo;
FromMapDxo fromMapDxo;
ToMapDxo toMapDxo;
SearchDxo searchDxo;
@Override
protected void setUp() throws Exception {
super.setUp();
include(getClass().getName().replace('.', '/') + ".dicon");
}
/**
* @throws Exception
*/
public void testBeanArrayToArray() throws Exception {
HogeHoge[] src = new HogeHoge[2];
src[0] = new HogeHoge("100", "Hoge".toCharArray(), 1000);
src[1] = new HogeHoge("200", "HogeHoge".toCharArray(), 2000);
Hoge[] dest = beanDxo.convertArrayToArray(src);
assertNotNull(dest);
assertEquals(2, dest.length);
Hoge hoge = dest[0];
assertEquals(100, hoge.getFoo());
assertEquals("Hoge", hoge.getBar());
assertEquals(new BigDecimal("1000"), hoge.getBaz());
hoge = dest[1];
assertEquals(200, hoge.getFoo());
assertEquals("HogeHoge", hoge.getBar());
assertEquals(new BigDecimal("2000"), hoge.getBaz());
}
/**
* @throws Exception
*/
public void testBeanArrayToList() throws Exception {
HogeHoge[] src = new HogeHoge[2];
src[0] = new HogeHoge("100", "Hoge".toCharArray(), 1000);
src[1] = new HogeHoge("200", "HogeHoge".toCharArray(), 2000);
List<Hoge> dest = beanDxo.convertArrayToList(src);
assertNotNull(dest);
assertEquals(2, dest.size());
Hoge hoge = dest.get(0);
assertEquals(100, hoge.getFoo());
assertEquals("Hoge", hoge.getBar());
assertEquals(new BigDecimal("1000"), hoge.getBaz());
hoge = dest.get(1);
assertEquals(200, hoge.getFoo());
assertEquals("HogeHoge", hoge.getBar());
assertEquals(new BigDecimal("2000"), hoge.getBaz());
}
/**
* @throws Exception
*/
public void testBeanListToArray() throws Exception {
List<HogeHoge> src = new ArrayList<HogeHoge>();
src.add(new HogeHoge("100", "Hoge".toCharArray(), 1000));
src.add(new HogeHoge("200", "HogeHoge".toCharArray(), 2000));
Hoge[] dest = beanDxo.convertListToArray(src);
assertNotNull(dest);
assertEquals(2, dest.length);
Hoge hoge = dest[0];
assertEquals(100, hoge.getFoo());
assertEquals("Hoge", hoge.getBar());
assertEquals(new BigDecimal("1000"), hoge.getBaz());
hoge = dest[1];
assertEquals(200, hoge.getFoo());
assertEquals("HogeHoge", hoge.getBar());
assertEquals(new BigDecimal("2000"), hoge.getBaz());
}
/**
* @throws Exception
*/
public void testBeanListToList() throws Exception {
List<HogeHoge> src = new ArrayList<HogeHoge>();
src.add(new HogeHoge("100", "Hoge".toCharArray(), 1000));
src.add(new HogeHoge("200", "HogeHoge".toCharArray(), 2000));
List<Hoge> dest = beanDxo.convertListToList(src);
assertNotNull(dest);
assertEquals(2, dest.size());
Hoge hoge = dest.get(0);
assertEquals(100, hoge.getFoo());
assertEquals("Hoge", hoge.getBar());
assertEquals(new BigDecimal("1000"), hoge.getBaz());
hoge = dest.get(1);
assertEquals(200, hoge.getFoo());
assertEquals("HogeHoge", hoge.getBar());
assertEquals(new BigDecimal("2000"), hoge.getBaz());
}
/**
* @throws Exception
*/
public void testBean_GenericProperty() throws Exception {
Aaa src = new Aaa();
src.prop1 = new Integer[] { 1, 2, 3, null, 5 };
src.setProp2(Arrays.asList(1, 2, 3, 4, null));
Bbb dest = beanDxo.convert(src);
assertNotNull(dest);
assertEquals(5, dest.getProp1().size());
assertEquals("1", dest.getProp1().get(0));
assertEquals("2", dest.getProp1().get(1));
assertEquals("3", dest.getProp1().get(2));
assertNull(dest.getProp1().get(3));
assertEquals("5", dest.getProp1().get(4));
assertEquals(5, dest.prop2.size());
Iterator<String> it = dest.prop2.iterator();
assertEquals("1", it.next());
assertEquals("2", it.next());
assertEquals("3", it.next());
assertEquals("4", it.next());
assertNull(it.next());
}
/**
* @throws Exception
*/
@SuppressWarnings("unchecked")
public void testFromMap_Scalar() throws Exception {
Map src = new HashMap();
src.put("foo", new Integer(100));
src.put("bar", "Hoge");
src.put("baz", new BigDecimal("1000"));
Hoge dest = fromMapDxo.convert(src);
assertNotNull(dest);
assertEquals(100, dest.getFoo());
assertEquals("Hoge", dest.getBar());
assertEquals(new BigDecimal("1000"), dest.getBaz());
}
/**
*
*/
@SuppressWarnings("unchecked")
public void testFromMap_ArrayToList() {
Map[] src = new Map[2];
src[0] = new HashMap();
src[0].put("foo", new Integer(100));
src[0].put("bar", "Hoge");
src[0].put("baz", new BigDecimal("1000"));
src[1] = new HashMap();
src[1].put("foo", new Integer(200));
src[1].put("bar", "HogeHoge");
src[1].put("baz", new BigDecimal("2000"));
List<Hoge> dest = fromMapDxo.convert(src);
assertNotNull(dest);
assertEquals(2, dest.size());
Hoge hoge = dest.get(0);
assertNotNull(hoge);
assertEquals(100, hoge.getFoo());
assertEquals("Hoge", hoge.getBar());
assertEquals(new BigDecimal("1000"), hoge.getBaz());
hoge = dest.get(1);
assertNotNull(hoge);
assertEquals(200, hoge.getFoo());
assertEquals("HogeHoge", hoge.getBar());
assertEquals(new BigDecimal("2000"), hoge.getBaz());
}
/**
*
*/
@SuppressWarnings("unchecked")
public void testFromMap_ListToArray() {
List<Map> src = new ArrayList<Map>();
Map map = new HashMap();
map.put("foo", new Integer(100));
map.put("bar", "Hoge");
map.put("baz", new BigDecimal("1000"));
src.add(map);
map = new HashMap();
map.put("foo", new Integer(200));
map.put("bar", "HogeHoge");
map.put("baz", new BigDecimal("2000"));
src.add(map);
Hoge[] dest = fromMapDxo.convert(src);
assertNotNull(dest);
assertEquals(2, dest.length);
assertNotNull(dest[0]);
assertEquals(100, dest[0].getFoo());
assertEquals("Hoge", dest[0].getBar());
assertEquals(new BigDecimal("1000"), dest[0].getBaz());
assertNotNull(dest[1]);
assertEquals(200, dest[1].getFoo());
assertEquals("HogeHoge", dest[1].getBar());
assertEquals(new BigDecimal("2000"), dest[1].getBaz());
}
/**
* @throws Exception
*/
@SuppressWarnings("unchecked")
public void testToMap_Scalar() throws Exception {
Hoge src = new Hoge(100, "Hoge", new BigDecimal("1000"));
Map dest = toMapDxo.convert(src);
assertNotNull(dest);
assertEquals(3, dest.size());
assertEquals(new Integer(100), dest.get("foo"));
assertEquals("Hoge", dest.get("bar"));
assertEquals(new BigDecimal("1000"), dest.get("baz"));
}
/**
* @throws Exception
*/
@SuppressWarnings("unchecked")
public void testToMap_ArrayToArray() throws Exception {
Hoge[] src = new Hoge[2];
src[0] = new Hoge(100, "Hoge", new BigDecimal("1000"));
src[1] = new Hoge(200, "HogeHoge", new BigDecimal("2000"));
Map[] dest = toMapDxo.convert(src);
assertNotNull(dest);
assertEquals(2, dest.length);
assertEquals(3, dest[0].size());
assertEquals(new Integer(100), dest[0].get("foo"));
assertEquals("Hoge", dest[0].get("bar"));
assertEquals(new BigDecimal("1000"), dest[0].get("baz"));
assertEquals(3, dest[1].size());
assertEquals(new Integer(200), dest[1].get("foo"));
assertEquals("HogeHoge", dest[1].get("bar"));
assertEquals(new BigDecimal("2000"), dest[1].get("baz"));
}
/**
* @throws Exception
*/
@SuppressWarnings("unchecked")
public void testToMap_ListToList() throws Exception {
List<Hoge> src = new ArrayList<Hoge>();
src.add(new Hoge(100, "Hoge", new BigDecimal("1000")));
src.add(new Hoge(200, "HogeHoge", new BigDecimal("2000")));
List<Map> dest = toMapDxo.convert(src);
assertNotNull(dest);
assertEquals(2, dest.size());
Map map = dest.get(0);
assertEquals(3, map.size());
assertEquals(new Integer(100), map.get("foo"));
assertEquals("Hoge", map.get("bar"));
assertEquals(new BigDecimal("1000"), map.get("baz"));
map = dest.get(1);
assertEquals(3, map.size());
assertEquals(new Integer(200), map.get("foo"));
assertEquals("HogeHoge", map.get("bar"));
assertEquals(new BigDecimal("2000"), map.get("baz"));
}
/**
* @throws Exception
*/
public void testExcludeNull() throws Exception {
Employee emp = new Employee();
Department dept = new Department();
emp.setDepartment(dept);
EmpDto dest = new EmpDto();
dest.setEname("foo");
dest.setDname("bar");
beanDxo.convertExcludeNull(emp, dest);
assertEquals("foo", dest.getEname());
assertEquals("bar", dest.getDname());
emp.setEname("hoge");
beanDxo.convertExcludeNull(emp, dest);
assertEquals("hoge", dest.getEname());
assertEquals("bar", dest.getDname());
dept.setDname("hogehoge");
beanDxo.convertExcludeNull(emp, dest);
assertEquals("hoge", dest.getEname());
assertEquals("hogehoge", dest.getDname());
}
/**
* @throws Exception
*/
public void testEnum() throws Exception {
Foo foo = new Foo(Color.RED.ordinal(), Color.GREEN.name());
Bar bar = beanDxo.convert(foo);
assertEquals(Color.RED, bar.getOrdinal());
assertEquals(Color.GREEN, bar.getName());
foo = beanDxo.convert(bar);
assertEquals(Color.RED.ordinal(), foo.getOrdinal());
assertEquals(Color.GREEN.name(), foo.getName());
// [CONTAINER-400]
Bar src = new Bar(Color.RED, Color.GREEN);
Bar dest = new Bar();
beanDxo.convert(src, dest);
assertEquals(Color.RED, dest.getOrdinal());
assertEquals(Color.GREEN, dest.getName());
}
/**
* @throws Exception
*/
public void testSrcPrefix_BeanToBean() throws Exception {
SearchPage src = new SearchPage();
src.setSearch_name_LIKE("%hoge%");
src.setSearch_age_GT(Integer.valueOf(25));
src.setName("foo");
src.setAge(Integer.valueOf(100));
src.setHoge("hoge");
SearchDto dest = searchDxo.convert(src);
assertEquals("%hoge%", dest.getName_LIKE());
assertEquals(Integer.valueOf(25), dest.getAge_GT());
assertNull(dest.getName());
assertNull(dest.getAge());
assertNull(dest.getHoge());
}
/**
* @throws Exception
*/
@SuppressWarnings("unchecked")
public void testSrcPrefix_MapToBean() throws Exception {
Map src = new HashMap();
src.put("search_name_LIKE", "%hoge%");
src.put("search_age_GT", Integer.valueOf(25));
src.put("name", "foo");
src.put("age", Integer.valueOf(100));
src.put("hoge", "hoge");
SearchDto dest = searchDxo.convert(src);
assertEquals("%hoge%", dest.getName_LIKE());
assertEquals(Integer.valueOf(25), dest.getAge_GT());
assertNull(dest.getName());
assertNull(dest.getAge());
assertNull(dest.getHoge());
}
/**
* @throws Exception
*/
@SuppressWarnings("unchecked")
public void testSrcPrefix_BeanToMap() throws Exception {
SearchPage src = new SearchPage();
src.setSearch_name_LIKE("%hoge%");
src.setSearch_age_GT(Integer.valueOf(25));
src.setName("foo");
src.setAge(Integer.valueOf(100));
src.setHoge("hoge");
Map dest = new HashMap();
searchDxo.convert(src, dest);
assertEquals("%hoge%", dest.get("name_LIKE"));
assertEquals(Integer.valueOf(25), dest.get("age_GT"));
assertNull(dest.get("name"));
assertNull(dest.get("age"));
assertNull(dest.get("hoge"));
}
/**
* @throws Exception
*/
public void testDestPrefix_BeanToBean() throws Exception {
SearchDto src = new SearchDto();
src.setName_LIKE("%hoge%");
src.setAge_GT(Integer.valueOf(25));
src.setName("foo");
src.setAge(Integer.valueOf(100));
src.setHoge("hoge");
SearchPage dest = new SearchPage();
searchDxo.convert(src, dest);
assertEquals("%hoge%", dest.getSearch_name_LIKE());
assertEquals(Integer.valueOf(25), dest.getSearch_age_GT());
assertNull(dest.getName());
assertNull(dest.getAge());
assertNull(dest.getHoge());
}
/**
* @throws Exception
*/
@SuppressWarnings("unchecked")
public void testDestPrefix_MapToBean() throws Exception {
Map src = new HashMap();
src.put("name_LIKE", "%hoge%");
src.put("age_GT", Integer.valueOf(25));
src.put("name", "foo");
src.put("age", Integer.valueOf(100));
src.put("hoge", "hoge");
SearchPage dest = new SearchPage();
searchDxo.convert(src, dest);
assertEquals("%hoge%", dest.getSearch_name_LIKE());
assertEquals(Integer.valueOf(25), dest.getSearch_age_GT());
assertNull(dest.getName());
assertNull(dest.getAge());
assertNull(dest.getHoge());
}
/**
* @throws Exception
*/
@SuppressWarnings("unchecked")
public void testDestPrefix_BeanToMap() throws Exception {
SearchDto src = new SearchDto();
src.setName_LIKE("%hoge%");
src.setAge_GT(Integer.valueOf(25));
src.setName("foo");
src.setAge(Integer.valueOf(100));
src.setHoge("hoge");
Map dest = new HashMap();
searchDxo.convert(src, dest);
assertEquals("%hoge%", dest.get("search_name_LIKE"));
assertEquals(Integer.valueOf(25), dest.get("search_age_GT"));
assertNull(dest.get("name"));
assertNull(dest.get("age"));
assertNull(dest.get("hoge"));
}
/**
*
*/
public interface BeanDxo {
/**
* @param src
* @return
*/
Hoge[] convertArrayToArray(HogeHoge[] src);
/**
* @param src
* @return
*/
List<Hoge> convertArrayToList(HogeHoge[] src);
/**
* @param src
* @return
*/
Hoge[] convertListToArray(List<HogeHoge> src);
/**
* @param src
* @return
*/
List<Hoge> convertListToList(List<HogeHoge> src);
/**
* @param employee
* @param empDto
*/
@ExcludeNull
void convertExcludeNull(Employee employee, EmpDto empDto);
/**
* @param bar
* @return
*/
Foo convert(Bar bar);
/**
* @param foo
* @return
*/
Bar convert(Foo foo);
/**
* @param aaa
* @return
*/
Bbb convert(Aaa aaa);
/**
* @param src
* @param dest
*/
void convert(Bar src, Bar dest);
}
/**
*
*/
@SuppressWarnings("unchecked")
public interface FromMapDxo {
/**
* @param src
* @return
*/
Hoge convert(Map src);
/**
* @param src
* @return
*/
List<Hoge> convert(Map[] src);
/**
* @param src
* @return
*/
Hoge[] convert(List<Map> src);
}
/**
*
*/
@SuppressWarnings("unchecked")
public interface ToMapDxo {
/**
* @param src
* @return
*/
Map convert(Hoge src);
/**
* @param src
* @return
*/
Map[] convert(Hoge[] src);
/**
* @param src
* @return
*/
List<Map> convert(List<Hoge> src);
}
/**
*
*/
public interface SearchDxo {
/**
* @param src
* @return
*/
@SourcePrefix("search_")
SearchDto convert(SearchPage src);
/**
* @param src
* @return
*/
@SourcePrefix("search_")
@SuppressWarnings("unchecked")
SearchDto convert(Map src);
/**
* @param src
* @param dest
* @return
*/
@SourcePrefix("search_")
@SuppressWarnings("unchecked")
void convert(SearchPage src, Map dest);
/**
* @param src
* @param dest
*/
@DestPrefix("search_")
void convert(SearchDto src, SearchPage dest);
/**
* @param src
* @param dest
*/
@SuppressWarnings("unchecked")
@DestPrefix("search_")
void convert(Map src, SearchPage dest);
/**
* @param src
* @param dest
*/
@SuppressWarnings("unchecked")
@DestPrefix("search_")
void convert(SearchDto src, Map dest);
}
}