/* * 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.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.seasar.extension.unit.S2TestCase; import org.seasar.framework.util.CaseInsensitiveMap; /** * @author koichik * */ public class DxoInterceptorTest extends S2TestCase { BeanDxo beanDxo; FromMapDxo fromMapDxo; ToMapDxo toMapDxo; SearchDxo searchDxo; protected void setUp() throws Exception { super.setUp(); include(getClass().getName().replace('.', '/') + ".dicon"); } /** * @throws Exception */ public void testBeanScalar1() throws Exception { Hoge src = new Hoge(100, "Hoge", new BigDecimal("1000")); Hoge dest = beanDxo.convert1(src); assertNotNull(dest); assertEquals(src.getFoo(), dest.getFoo()); assertEquals(src.getBar(), dest.getBar()); assertEquals(src.getBarBar(), dest.getBarBar()); assertEquals(src.getBaz(), dest.getBaz()); } /** * @throws Exception */ public void testBeanScalar2() throws Exception { Hoge src = new Hoge(100, "Hoge", new BigDecimal("1000")); HogeHoge dest = beanDxo.convert2(src); assertNotNull(dest); assertEquals("100", dest.getFoo()); assertEquals(4, dest.getBar().length); assertEquals('H', dest.getBar()[0]); assertEquals('o', dest.getBar()[1]); assertEquals('g', dest.getBar()[2]); assertEquals('e', dest.getBar()[3]); assertEquals(1000, dest.getBaz()); assertEquals("hoge", dest.getHoge()); } /** * @throws Exception */ public void testBeanScalar3() throws Exception { HogeHoge src = new HogeHoge("100", "Hoge".toCharArray(), 1000); Hoge dest = beanDxo.convert3(src); assertNotNull(dest); assertEquals(100, dest.getFoo()); assertEquals("Hoge", dest.getBar()); assertEquals(new BigDecimal("1000"), dest.getBaz()); } /** * @throws Exception */ public void testBeanScalar4() throws Exception { HogeHoge src = new HogeHoge("100", "Hoge".toCharArray(), 1000); HogeHoge dest = beanDxo.convert4(src); assertNotNull(dest); assertEquals(src.getFoo(), dest.getFoo()); assertEquals(src.getBar(), dest.getBar()); assertEquals(src.getBaz(), dest.getBaz()); assertEquals(src.getHoge(), dest.getHoge()); } /** * */ public void testBeanArrayToArray() { Hoge[] src = new Hoge[2]; src[0] = new Hoge(100, "Hoge", new BigDecimal("1000")); src[1] = new Hoge(200, "HogeHoge", new BigDecimal("2000")); HogeHoge[] dest = beanDxo.convert(src); assertNotNull(dest); assertEquals(2, dest.length); assertEquals("100", dest[0].getFoo()); assertEquals(4, dest[0].getBar().length); assertEquals('H', dest[0].getBar()[0]); assertEquals('o', dest[0].getBar()[1]); assertEquals('g', dest[0].getBar()[2]); assertEquals('e', dest[0].getBar()[3]); assertEquals(1000, dest[0].getBaz()); assertEquals("200", dest[1].getFoo()); assertEquals(8, dest[1].getBar().length); assertEquals('H', dest[1].getBar()[0]); assertEquals('o', dest[1].getBar()[1]); assertEquals('g', dest[1].getBar()[2]); assertEquals('e', dest[1].getBar()[3]); assertEquals('H', dest[1].getBar()[4]); assertEquals('o', dest[1].getBar()[5]); assertEquals('g', dest[1].getBar()[6]); assertEquals('e', dest[1].getBar()[7]); assertEquals(2000, dest[1].getBaz()); } /** * @throws Exception */ public void testDateFormat() throws Exception { Employee emp = new Employee(); emp.setHiredate(new Date(0)); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(24 * 60 * 60 * 1000); emp.setCal(cal); EmpDto dest = beanDxo.convert(emp); assertNotNull(dest); assertEquals("1970/01/01", dest.getHiredate()); assertEquals("1970/01/02", dest.getCal()); } /** * @throws Exception */ public void testNestedProperty() throws Exception { Employee emp = new Employee(); emp.setEname("Foo"); Department dept = new Department(); dept.setDname("Bar"); emp.setDepartment(dept); EmpDto dest = beanDxo.convert(emp); assertNotNull(dest); assertEquals("Foo", dest.getEname()); assertEquals("Bar", dest.getDname()); assertNull(dest.getMname()); Employee mgr = new Employee(); mgr.setEname("Baz"); emp.setMgr(mgr); dest = beanDxo.convert(emp); assertNotNull(dest); assertEquals("Foo", dest.getEname()); assertEquals("Bar", dest.getDname()); assertEquals("Baz", dest.getMname()); } /** * @throws Exception */ public void testEmptyString() throws Exception { EmpDto dto = new EmpDto(); dto.setSal(null); dto.setComm(""); Employee dest = beanDxo.convert(dto); assertNotNull(dest); assertNull(dest.getSal()); assertNull(dest.getComm()); } /** * @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 testExcludeWhitespace() throws Exception { Employee emp = new Employee(); emp.setEname(""); Department dept = new Department(); dept.setDname("\n"); emp.setDepartment(dept); EmpDto dest = new EmpDto(); dest.setEname("foo"); dest.setDname("bar"); beanDxo.convertExcludeWhitespace(emp, dest); assertEquals("foo", dest.getEname()); assertEquals("bar", dest.getDname()); emp.setEname("hoge"); beanDxo.convertExcludeWhitespace(emp, dest); assertEquals("hoge", dest.getEname()); assertEquals("bar", dest.getDname()); dept.setDname("hogehoge"); beanDxo.convertExcludeWhitespace(emp, dest); assertEquals("hoge", dest.getEname()); assertEquals("hogehoge", dest.getDname()); } /** * @throws Exception */ 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()); } /** * @throws Exception */ public void testFromMap_Scalar2() throws Exception { Map src = new CaseInsensitiveMap(); src.put("barbar", "Hoge"); Hoge dest = fromMapDxo.convert(src); assertNotNull(dest); assertEquals("Hoge", dest.getBarBar()); } /** * @throws Exception */ public void testFromMap_ExcludeWhitespace() throws Exception { Map src = new CaseInsensitiveMap(); src.put("ename", ""); src.put("job", " \t\r\n "); EmpDto empDto = new EmpDto(); empDto.setEname("foo"); empDto.setJob("bar"); fromMapDxo.convertExcludeWhitespace(src, empDto); assertEquals("foo", empDto.getEname()); assertEquals("bar", empDto.getJob()); src.put("ename", "hoge"); fromMapDxo.convertExcludeWhitespace(src, empDto); assertEquals("hoge", empDto.getEname()); assertEquals("bar", empDto.getJob()); src.put("job", null); fromMapDxo.convertExcludeWhitespace(src, empDto); assertEquals("hoge", empDto.getEname()); assertNull(empDto.getJob()); } /** * */ public void testFromMap_ArrayToArray() { 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")); 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 */ public void testToMap_Scalar() throws Exception { Hoge src = new Hoge(100, "Hoge", new BigDecimal("1000")); Map dest = toMapDxo.convert(src); assertNotNull(dest); assertEquals(4, dest.size()); assertEquals(new Integer(100), dest.get("one")); assertEquals("Hoge", dest.get("two")); assertEquals(new BigDecimal("1000"), dest.get("three")); assertEquals("100Hoge1000", dest.get("four")); } /** * @throws Exception */ public void testToMap_ExcludeWhitespace() throws Exception { EmpDto src = new EmpDto(); src.setEname(""); src.setJob(" "); Map dest = new HashMap(); toMapDxo.convertExcludeWhitespace(src, dest); assertEquals(0, dest.size()); src.setEname("foo"); toMapDxo.convertExcludeWhitespace(src, dest); assertEquals(1, dest.size()); assertEquals("foo", dest.get("ename")); src.setJob("bar"); toMapDxo.convertExcludeWhitespace(src, dest); assertEquals(2, dest.size()); assertEquals("foo", dest.get("ename")); assertEquals("bar", dest.get("job")); } /** * */ public void testToMap_ArrayToArray() { 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(4, dest[0].size()); assertEquals(new Integer(100), dest[0].get("one")); assertEquals("Hoge", dest[0].get("two")); assertEquals(new BigDecimal("1000"), dest[0].get("three")); assertEquals("100Hoge1000", dest[0].get("four")); assertEquals(4, dest[1].size()); assertEquals(new Integer(200), dest[1].get("one")); assertEquals("HogeHoge", dest[1].get("two")); assertEquals(new BigDecimal("2000"), dest[1].get("three")); assertEquals("200HogeHoge2000", dest[1].get("four")); } /** * @throws Exception */ public void testSrcPrefix_BeanToBean() throws Exception { SearchPage src = new SearchPage(); src.setSearch_name_LIKE("%hoge%"); src.setSearch_age_GT(new Integer(25)); src.setName("foo"); src.setAge(new Integer(100)); src.setHoge("hoge"); SearchDto dest = searchDxo.convert(src); assertEquals("%hoge%", dest.name_LIKE); assertEquals(new Integer(25), dest.age_GT); assertNull(dest.name); assertNull(dest.age); assertNull(dest.hoge); } /** * @throws Exception */ public void testSrcPrefix_MapToBean() throws Exception { Map src = new HashMap(); src.put("search_name_LIKE", "%hoge%"); src.put("search_age_GT", new Integer(25)); src.put("name", "foo"); src.put("age", new Integer(100)); src.put("hoge", "hoge"); SearchDto dest = searchDxo.convert(src); assertEquals("%hoge%", dest.name_LIKE); assertEquals(new Integer(25), dest.age_GT); assertNull(dest.name); assertNull(dest.age); assertNull(dest.hoge); } /** * @throws Exception */ public void testSrcPrefix_BeanToMap() throws Exception { SearchPage src = new SearchPage(); src.setSearch_name_LIKE("%hoge%"); src.setSearch_age_GT(new Integer(25)); src.setName("foo"); src.setAge(new Integer(100)); src.setHoge("hoge"); Map dest = new HashMap(); searchDxo.convert(src, dest); assertEquals("%hoge%", dest.get("name_LIKE")); assertEquals(new Integer(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.name_LIKE = "%hoge%"; src.age_GT = new Integer(25); src.name = "foo"; src.age = new Integer(100); src.hoge = "hoge"; SearchPage dest = new SearchPage(); searchDxo.convert2(src, dest); assertEquals("%hoge%", dest.getSearch_name_LIKE()); assertEquals(new Integer(25), dest.getSearch_age_GT()); assertNull(dest.getName()); assertNull(dest.getAge()); assertNull(dest.getHoge()); } /** * @throws Exception */ public void testDestPrefix_MapToBean() throws Exception { Map src = new HashMap(); src.put("name_LIKE", "%hoge%"); src.put("age_GT", new Integer(25)); src.put("name", "foo"); src.put("age", new Integer(100)); src.put("hoge", "hoge"); SearchPage dest = new SearchPage(); searchDxo.convert2(src, dest); assertEquals("%hoge%", dest.getSearch_name_LIKE()); assertEquals(new Integer(25), dest.getSearch_age_GT()); assertNull(dest.getName()); assertNull(dest.getAge()); assertNull(dest.getHoge()); } /** * @throws Exception */ public void testDestPrefix_BeanToMap() throws Exception { SearchDto src = new SearchDto(); src.name_LIKE = "%hoge%"; src.age_GT = new Integer(25); src.name = "foo"; src.age = new Integer(100); src.hoge = "hoge"; Map dest = new HashMap(); searchDxo.convert2(src, dest); assertEquals("%hoge%", dest.get("search_name_LIKE")); assertEquals(new Integer(25), dest.get("search_age_GT")); assertNull(dest.get("name")); assertNull(dest.get("age")); assertNull(dest.get("hoge")); } /** * */ public interface BeanDxo { /** * */ String DATE_PATTERN = "yyyy/MM/dd"; /** * @param src * @return */ Hoge convert1(Hoge src); /** * @param src * @return */ HogeHoge convert2(Hoge src); /** * @param src * @return */ Hoge convert3(HogeHoge src); /** * @param src * @return */ HogeHoge convert4(HogeHoge src); /** * @param src * @return */ HogeHoge[] convert(Hoge[] src); /** * */ String convert_Employee_CONVERSION_RULE = "mname : mgr.ename"; /** * @param emp * @return */ EmpDto convert(Employee emp); /** * @param empDto * @return */ Employee convert(EmpDto empDto); /** * */ String convertExcludeNull_EXCLUDE_NULL = null; /** * @param employee * @param empDto */ void convertExcludeNull(Employee employee, EmpDto empDto); /** * */ String convertExcludeWhitespace_EXCLUDE_WHITESPACE = null; /** * @param employee * @param empDto */ void convertExcludeWhitespace(Employee employee, EmpDto empDto); } /** * */ public interface FromMapDxo { /** * @param src * @return */ Hoge convert(Map src); /** * @param src * @return */ Hoge[] convert(Map[] src); /** * */ String convertExcludeWhitespace_EXCLUDE_WHITESPACE = null; /** * @param src * @param empDto */ void convertExcludeWhitespace(Map src, EmpDto empDto); } /** * */ public interface ToMapDxo { /** * */ String convert_Hoge_CONVERSION_RULE = "'one' : foo, 'two' : bar, 'three' : baz, 'four' : foo+bar+baz"; /** * */ String convert_Hoge$_CONVERSION_RULE = "'one' : foo, 'two' : bar, 'three' : baz, 'four' : foo+bar+baz"; /** * @param src * @return */ Map convert(Hoge src); /** * @param src * @return */ Map[] convert(Hoge[] src); /** * */ String convertExcludeWhitespace_EXCLUDE_NULL = null; /** * */ String convertExcludeWhitespace_EXCLUDE_WHITESPACE = null; /** * @param empDto * @param dest */ void convertExcludeWhitespace(EmpDto empDto, Map dest); } /** * */ public interface SearchDxo { /** */ public static final String convert_SOURCE_PREFIX = "search_"; /** * @param src * @return */ SearchDto convert(SearchPage src); /** * @param src * @return */ SearchDto convert(Map src); /** * @param src * @param dest * @return */ void convert(SearchPage src, Map dest); /** */ public static final String convert2_DEST_PREFIX = "search_"; /** * @param src * @param dest * @return */ void convert2(SearchDto src, SearchPage dest); /** * @param src * @param dest * @return */ void convert2(Map src, SearchPage dest); /** * @param src * @param dest * @return */ void convert2(SearchDto src, Map dest); } }