/* * 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.jdbc.handler; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Date; import javax.persistence.Column; import javax.persistence.Lob; import javax.persistence.Temporal; import javax.persistence.TemporalType; import junit.framework.TestCase; import org.seasar.extension.jdbc.DbmsDialect; import org.seasar.extension.jdbc.PropertyType; import org.seasar.extension.jdbc.dialect.StandardDialect; import org.seasar.extension.jdbc.dto.AaaDto; import org.seasar.extension.jdbc.types.ValueTypes; import org.seasar.framework.beans.BeanDesc; import org.seasar.framework.beans.PropertyDesc; import org.seasar.framework.beans.factory.BeanDescFactory; import org.seasar.framework.convention.PersistenceConvention; import org.seasar.framework.convention.impl.PersistenceConventionImpl; import org.seasar.framework.mock.sql.MockColumnMetaData; import org.seasar.framework.mock.sql.MockResultSet; import org.seasar.framework.mock.sql.MockResultSetMetaData; import org.seasar.framework.util.ArrayMap; import org.seasar.framework.util.CaseInsensitiveMap; /** * @author higa * */ public class AbstBeanResultSetHandlerTest extends TestCase { /** * */ public void testCreatePropertyDescMapWithColumn_publicfield() { MyHandler handler = new MyHandler(AaaDto.class, new StandardDialect(), new PersistenceConventionImpl()); CaseInsensitiveMap map = handler.createPropertyDescMapWithColumn(); assertNotNull(map.get("foo2")); } /** * */ public void testCreatePropertyDescMapWithColumn_property() { MyHandler handler = new MyHandler(Aaa2Dto.class, new StandardDialect(), new PersistenceConventionImpl()); CaseInsensitiveMap map = handler.createPropertyDescMapWithColumn(); assertNotNull(map.get("foo2")); } /** * */ public void testCreatePropertyDescMapWithColumn_nothing() { MyHandler handler = new MyHandler(Aaa3Dto.class, new StandardDialect(), new PersistenceConventionImpl()); CaseInsensitiveMap map = handler.createPropertyDescMapWithColumn(); assertEquals(0, map.size()); } /** * */ public void testCreatePropertyDescMapWithColumn_emptyName() { MyHandler handler = new MyHandler(Aaa4Dto.class, new StandardDialect(), new PersistenceConventionImpl()); CaseInsensitiveMap map = handler.createPropertyDescMapWithColumn(); assertEquals(0, map.size()); } /** * @throws Exception * */ public void testCreatePropertyTypes() throws Exception { MyHandler handler = new MyHandler(AaaDto.class, new StandardDialect(), new PersistenceConventionImpl()); MockResultSetMetaData rsMeta = new MockResultSetMetaData(); MockColumnMetaData columnMeta = new MockColumnMetaData(); columnMeta.setColumnLabel("FOO2"); rsMeta.addColumnMetaData(columnMeta); columnMeta = new MockColumnMetaData(); columnMeta.setColumnLabel("AAA_BBB"); rsMeta.addColumnMetaData(columnMeta); PropertyType[] ptypes = handler.createPropertyTypes(rsMeta); assertEquals(2, ptypes.length); assertEquals("FOO2", ptypes[0].getColumnName()); assertEquals("foo", ptypes[0].getPropertyName()); assertEquals("AAA_BBB", ptypes[1].getColumnName()); assertEquals("aaaBbb", ptypes[1].getPropertyName()); } /** * @throws Exception * */ public void testCreatePropertyTypes_noNameConversion() throws Exception { PersistenceConventionImpl persistenceConvention = new PersistenceConventionImpl(); persistenceConvention.setNoNameConversion(true); MyHandler handler = new MyHandler(Aaa7Dto.class, new StandardDialect(), persistenceConvention); MockResultSetMetaData rsMeta = new MockResultSetMetaData(); MockColumnMetaData columnMeta = new MockColumnMetaData(); columnMeta.setColumnLabel("AAA_BBB"); rsMeta.addColumnMetaData(columnMeta); columnMeta = new MockColumnMetaData(); columnMeta.setColumnLabel("CCC_DDD"); rsMeta.addColumnMetaData(columnMeta); columnMeta = new MockColumnMetaData(); columnMeta.setColumnLabel("EEE_FFF"); rsMeta.addColumnMetaData(columnMeta); PropertyType[] ptypes = handler.createPropertyTypes(rsMeta); assertEquals(3, ptypes.length); assertEquals("AAA_BBB", ptypes[0].getColumnName()); assertEquals("AAA_BBB", ptypes[0].getPropertyName()); assertEquals("CCC_DDD", ptypes[1].getColumnName()); assertEquals("cccDdd", ptypes[1].getPropertyName()); assertNull(ptypes[2]); } /** * @throws Exception * */ public void testCreatePropertyTypes_propertyNotExists() throws Exception { MyHandler handler = new MyHandler(Aaa5Dto.class, new StandardDialect(), new PersistenceConventionImpl()); MockResultSetMetaData rsMeta = new MockResultSetMetaData(); MockColumnMetaData columnMeta = new MockColumnMetaData(); columnMeta.setColumnLabel("FOO2"); rsMeta.addColumnMetaData(columnMeta); columnMeta = new MockColumnMetaData(); columnMeta.setColumnLabel("AAA_BBB"); rsMeta.addColumnMetaData(columnMeta); PropertyType[] ptypes = handler.createPropertyTypes(rsMeta); assertEquals(2, ptypes.length); assertEquals("FOO2", ptypes[0].getColumnName()); assertEquals("foo2", ptypes[0].getPropertyName()); assertNull(ptypes[1]); } /** * @throws Exception * */ public void testCreateRow() throws Exception { MyHandler handler = new MyHandler(AaaDto.class, new StandardDialect(), new PersistenceConventionImpl()); MockResultSetMetaData rsMeta = new MockResultSetMetaData(); MockColumnMetaData columnMeta = new MockColumnMetaData(); columnMeta.setColumnLabel("FOO2"); rsMeta.addColumnMetaData(columnMeta); columnMeta = new MockColumnMetaData(); columnMeta.setColumnLabel("AAA_BBB"); rsMeta.addColumnMetaData(columnMeta); MockResultSet rs = new MockResultSet(rsMeta); ArrayMap data = new ArrayMap(); data.put("FOO2", "111"); data.put("AAA_BBB", "222"); rs.addRowData(data); rs.next(); PropertyType[] ptypes = handler.createPropertyTypes(rsMeta); AaaDto dto = (AaaDto) handler.createRow(rs, ptypes); assertEquals("111", dto.foo); assertEquals("222", dto.aaaBbb); } /** * @throws Exception * */ public void testCreateRow_propertyNotExists() throws Exception { MyHandler handler = new MyHandler(AaaDto.class, new StandardDialect(), new PersistenceConventionImpl()); MockResultSetMetaData rsMeta = new MockResultSetMetaData(); MockColumnMetaData columnMeta = new MockColumnMetaData(); columnMeta.setColumnLabel("FOO2"); rsMeta.addColumnMetaData(columnMeta); columnMeta = new MockColumnMetaData(); columnMeta.setColumnLabel("AAA_BBB"); rsMeta.addColumnMetaData(columnMeta); columnMeta = new MockColumnMetaData(); columnMeta.setColumnLabel("_rownum"); rsMeta.addColumnMetaData(columnMeta); MockResultSet rs = new MockResultSet(rsMeta); ArrayMap data = new ArrayMap(); data.put("FOO2", "111"); data.put("AAA_BBB", "222"); rs.addRowData(data); rs.next(); PropertyType[] ptypes = handler.createPropertyTypes(rsMeta); AaaDto dto = (AaaDto) handler.createRow(rs, ptypes); assertEquals("111", dto.foo); assertEquals("222", dto.aaaBbb); } /** * * @throws Exception */ public void testGetValueType() throws Exception { MyHandler handler = new MyHandler(Aaa6Dto.class, new StandardDialect(), new PersistenceConventionImpl()); BeanDesc beanDesc = BeanDescFactory.getBeanDesc(Aaa6Dto.class); PropertyDesc propertyDesc = beanDesc.getPropertyDesc("aaa"); assertEquals(ValueTypes.STRING, handler.getValueType(propertyDesc)); propertyDesc = beanDesc.getPropertyDesc("bbb"); assertEquals(ValueTypes.CLOB, handler.getValueType(propertyDesc)); propertyDesc = beanDesc.getPropertyDesc("ccc"); assertEquals(ValueTypes.DATE_TIME, handler.getValueType(propertyDesc)); } private static class MyHandler extends AbstractBeanResultSetHandler { /** * @param beanClass * @param dialect * @param persistenceConvention */ public MyHandler(Class<?> beanClass, DbmsDialect dialect, PersistenceConvention persistenceConvention) { super(beanClass, dialect, persistenceConvention, "select * from aaa"); } public Object handle(ResultSet resultSet) throws SQLException { return null; } } private static class Aaa2Dto { /** * */ @Column(name = "foo2") private String foo; /** * @return the foo */ public String getFoo() { return foo; } /** * @param foo * the foo to set */ public void setFoo(String foo) { this.foo = foo; } } private static class Aaa3Dto { /** * */ public String foo; } private static class Aaa4Dto { /** * */ @Column(name = "") public String foo; } private static class Aaa5Dto { /** * */ public String foo2; } private static class Aaa6Dto { /** * */ public String aaa; /** * */ @Lob public String bbb; /** * */ @Temporal(TemporalType.TIME) public Date ccc; } private static class Aaa7Dto { /** * */ public String AAA_BBB; /** * */ @Column(name = "CCC_DDD") public String cccDdd; /** * */ public String eeeFff; } }