/*
* 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.gen.internal.desc;
import java.util.Arrays;
import org.junit.Test;
import org.seasar.extension.jdbc.gen.desc.AssociationDesc;
import org.seasar.extension.jdbc.gen.desc.AssociationType;
import org.seasar.extension.jdbc.gen.desc.AttributeDesc;
import org.seasar.extension.jdbc.gen.desc.EntityDesc;
import org.seasar.extension.jdbc.gen.desc.EntitySetDesc;
import org.seasar.extension.jdbc.gen.meta.DbForeignKeyMeta;
import org.seasar.extension.jdbc.gen.meta.DbTableMeta;
import org.seasar.framework.convention.impl.PersistenceConventionImpl;
import static org.junit.Assert.*;
/**
* @author taedium
*
*/
public class AssociationResolverTest {
/**
*
* @throws Exception
*/
@Test
public void test_OneToMany() throws Exception {
EntityDesc entityDesc = new EntityDesc();
entityDesc.setCatalogName("AAA");
entityDesc.setSchemaName("BBB");
entityDesc.setTableName("CCC");
entityDesc.setName("Ccc");
EntityDesc entityDesc2 = new EntityDesc();
entityDesc2.setCatalogName("DDD");
entityDesc2.setSchemaName("EEE");
entityDesc2.setTableName("FFF");
entityDesc2.setName("Fff");
EntitySetDesc entitySetDesc = new EntitySetDesc();
entitySetDesc.addEntityDesc(entityDesc);
entitySetDesc.addEntityDesc(entityDesc2);
DbTableMeta tableMeta = new DbTableMeta();
tableMeta.setCatalogName("DDD");
tableMeta.setSchemaName("EEE");
tableMeta.setName("FFF");
DbForeignKeyMeta fkMeta = new DbForeignKeyMeta();
fkMeta.setPrimaryKeyCatalogName("AAA");
fkMeta.setPrimaryKeySchemaName("BBB");
fkMeta.setPrimaryKeyTableName("CCC");
fkMeta.addPrimaryKeyColumnName("GGG_ID");
fkMeta.addPrimaryKeyColumnName("HHH_ID");
fkMeta.addForeignKeyColumnName("GGG");
fkMeta.addForeignKeyColumnName("HHH");
AssociationResolver resolver = new AssociationResolver(entitySetDesc,
new PluralFormDictinary(), new PersistenceConventionImpl());
resolver.resolve(tableMeta, fkMeta);
assertEquals(1, entityDesc.getAssociationDescList().size());
AssociationDesc assoDesc = entityDesc.getAssociationDescList().get(0);
assertSame(entityDesc2, assoDesc.getReferencedEntityDesc());
assertEquals(AssociationType.ONE_TO_MANY, assoDesc.getAssociationType());
assertEquals("fffList", assoDesc.getName());
assertEquals("ccc", assoDesc.getMappedBy());
assertTrue(assoDesc.getColumnNameList().isEmpty());
assertNull(assoDesc.getReferencedCatalogName());
assertNull(assoDesc.getReferencedSchemaName());
assertNull(assoDesc.getReferencedTableName());
assertTrue(assoDesc.getReferencedColumnNameList().isEmpty());
assertEquals(1, entityDesc2.getAssociationDescList().size());
assoDesc = entityDesc2.getAssociationDescList().get(0);
assertSame(entityDesc, assoDesc.getReferencedEntityDesc());
assertEquals(AssociationType.MANY_TO_ONE, assoDesc.getAssociationType());
assertEquals("ccc", assoDesc.getName());
assertNull(assoDesc.getMappedBy());
assertEquals(Arrays.asList("GGG", "HHH"), assoDesc.getColumnNameList());
assertEquals("AAA", assoDesc.getReferencedCatalogName());
assertEquals("BBB", assoDesc.getReferencedSchemaName());
assertEquals("CCC", assoDesc.getReferencedTableName());
assertEquals(Arrays.asList("GGG_ID", "HHH_ID"), assoDesc
.getReferencedColumnNameList());
}
/**
*
* @throws Exception
*/
@Test
public void test_OneToOne() throws Exception {
EntityDesc entityDesc = new EntityDesc();
entityDesc.setCatalogName("AAA");
entityDesc.setSchemaName("BBB");
entityDesc.setTableName("CCC");
entityDesc.setName("Ccc");
EntityDesc entityDesc2 = new EntityDesc();
entityDesc2.setCatalogName("DDD");
entityDesc2.setSchemaName("EEE");
entityDesc2.setTableName("FFF");
entityDesc2.setName("Fff");
EntitySetDesc entitySetDesc = new EntitySetDesc();
entitySetDesc.addEntityDesc(entityDesc);
entitySetDesc.addEntityDesc(entityDesc2);
DbTableMeta tableMeta = new DbTableMeta();
tableMeta.setCatalogName("DDD");
tableMeta.setSchemaName("EEE");
tableMeta.setName("FFF");
DbForeignKeyMeta fkMeta = new DbForeignKeyMeta();
fkMeta.setPrimaryKeyCatalogName("AAA");
fkMeta.setPrimaryKeySchemaName("BBB");
fkMeta.setPrimaryKeyTableName("CCC");
fkMeta.addPrimaryKeyColumnName("GGG_ID");
fkMeta.addPrimaryKeyColumnName("HHH_ID");
fkMeta.addForeignKeyColumnName("GGG");
fkMeta.addForeignKeyColumnName("HHH");
fkMeta.setUnique(true);
AssociationResolver resolver = new AssociationResolver(entitySetDesc,
new PluralFormDictinary(), new PersistenceConventionImpl());
resolver.resolve(tableMeta, fkMeta);
assertEquals(1, entityDesc.getAssociationDescList().size());
AssociationDesc assoDesc = entityDesc.getAssociationDescList().get(0);
assertSame(entityDesc2, assoDesc.getReferencedEntityDesc());
assertEquals(AssociationType.ONE_TO_ONE, assoDesc.getAssociationType());
assertEquals("fff", assoDesc.getName());
assertEquals("ccc", assoDesc.getMappedBy());
assertTrue(assoDesc.getColumnNameList().isEmpty());
assertNull(assoDesc.getReferencedCatalogName());
assertNull(assoDesc.getReferencedSchemaName());
assertNull(assoDesc.getReferencedTableName());
assertTrue(assoDesc.getReferencedColumnNameList().isEmpty());
assertEquals(1, entityDesc2.getAssociationDescList().size());
assoDesc = entityDesc2.getAssociationDescList().get(0);
assertSame(entityDesc, assoDesc.getReferencedEntityDesc());
assertEquals(AssociationType.ONE_TO_ONE, assoDesc.getAssociationType());
assertEquals("ccc", assoDesc.getName());
assertNull(assoDesc.getMappedBy());
assertEquals(Arrays.asList("GGG", "HHH"), assoDesc.getColumnNameList());
assertEquals("AAA", assoDesc.getReferencedCatalogName());
assertEquals("BBB", assoDesc.getReferencedSchemaName());
assertEquals("CCC", assoDesc.getReferencedTableName());
assertEquals(Arrays.asList("GGG_ID", "HHH_ID"), assoDesc
.getReferencedColumnNameList());
}
/**
*
* @throws Exception
*/
@Test
public void testMultiAssociations() throws Exception {
EntityDesc entityDesc = new EntityDesc();
entityDesc.setCatalogName("AAA");
entityDesc.setSchemaName("BBB");
entityDesc.setTableName("CCC");
entityDesc.setName("Ccc");
EntityDesc entityDesc2 = new EntityDesc();
entityDesc2.setCatalogName("DDD");
entityDesc2.setSchemaName("EEE");
entityDesc2.setTableName("FFF");
entityDesc2.setName("Fff");
EntitySetDesc entitySetDesc = new EntitySetDesc();
entitySetDesc.addEntityDesc(entityDesc);
entitySetDesc.addEntityDesc(entityDesc2);
DbTableMeta tableMeta = new DbTableMeta();
tableMeta.setCatalogName("DDD");
tableMeta.setSchemaName("EEE");
tableMeta.setName("FFF");
DbForeignKeyMeta fkMeta = new DbForeignKeyMeta();
fkMeta.setPrimaryKeyCatalogName("AAA");
fkMeta.setPrimaryKeySchemaName("BBB");
fkMeta.setPrimaryKeyTableName("CCC");
fkMeta.addPrimaryKeyColumnName("GGG_ID");
fkMeta.addPrimaryKeyColumnName("HHH_ID");
fkMeta.addForeignKeyColumnName("GGG");
fkMeta.addForeignKeyColumnName("HHH");
DbForeignKeyMeta fkMeta2 = new DbForeignKeyMeta();
fkMeta2.setPrimaryKeyCatalogName("AAA");
fkMeta2.setPrimaryKeySchemaName("BBB");
fkMeta2.setPrimaryKeyTableName("CCC");
fkMeta2.addPrimaryKeyColumnName("GGG_ID");
fkMeta2.addPrimaryKeyColumnName("HHH_ID");
fkMeta2.addForeignKeyColumnName("III");
fkMeta2.addForeignKeyColumnName("JJJ");
AssociationResolver resolver = new AssociationResolver(entitySetDesc,
new PluralFormDictinary(), new PersistenceConventionImpl());
resolver.resolve(tableMeta, fkMeta);
resolver.resolve(tableMeta, fkMeta2);
assertEquals(2, entityDesc.getAssociationDescList().size());
AssociationDesc assoDesc = entityDesc.getAssociationDescList().get(0);
assertEquals(AssociationType.ONE_TO_MANY, assoDesc.getAssociationType());
assertEquals("fffList", assoDesc.getName());
assoDesc = entityDesc.getAssociationDescList().get(1);
assertEquals(AssociationType.ONE_TO_MANY, assoDesc.getAssociationType());
assertEquals("fffList2", assoDesc.getName());
assertEquals(2, entityDesc2.getAssociationDescList().size());
assoDesc = entityDesc2.getAssociationDescList().get(0);
assertEquals("ccc", assoDesc.getName());
assoDesc = entityDesc2.getAssociationDescList().get(1);
assertEquals("ccc2", assoDesc.getName());
}
/**
*
* @throws Exception
*/
@Test
public void testAssociationName_fkColumnName_endsWith_pkColumnName()
throws Exception {
EntityDesc entityDesc = new EntityDesc();
entityDesc.setCatalogName("AAA");
entityDesc.setSchemaName("BBB");
entityDesc.setTableName("CCC");
entityDesc.setName("Ccc");
EntityDesc entityDesc2 = new EntityDesc();
entityDesc2.setCatalogName("DDD");
entityDesc2.setSchemaName("EEE");
entityDesc2.setTableName("FFF");
entityDesc2.setName("Fff");
AttributeDesc attributeDesc = new AttributeDesc();
attributeDesc.setName("gggId");
entityDesc2.addAttributeDesc(attributeDesc);
EntitySetDesc entitySetDesc = new EntitySetDesc();
entitySetDesc.addEntityDesc(entityDesc);
entitySetDesc.addEntityDesc(entityDesc2);
DbTableMeta tableMeta = new DbTableMeta();
tableMeta.setCatalogName("DDD");
tableMeta.setSchemaName("EEE");
tableMeta.setName("FFF");
DbForeignKeyMeta fkMeta = new DbForeignKeyMeta();
fkMeta.setPrimaryKeyCatalogName("AAA");
fkMeta.setPrimaryKeySchemaName("BBB");
fkMeta.setPrimaryKeyTableName("CCC");
fkMeta.addPrimaryKeyColumnName("ID");
fkMeta.addForeignKeyColumnName("GGG_ID");
AssociationResolver resolver = new AssociationResolver(entitySetDesc,
new PluralFormDictinary(), new PersistenceConventionImpl());
resolver.resolve(tableMeta, fkMeta);
assertEquals(1, entityDesc.getAssociationDescList().size());
AssociationDesc assoDesc = entityDesc.getAssociationDescList().get(0);
assertEquals(AssociationType.ONE_TO_MANY, assoDesc.getAssociationType());
assertEquals("fffList", assoDesc.getName());
assertEquals(1, entityDesc2.getAssociationDescList().size());
assoDesc = entityDesc2.getAssociationDescList().get(0);
assertEquals("ggg", assoDesc.getName());
assertEquals("gggId", attributeDesc.getName());
}
/**
*
* @throws Exception
*/
@Test
public void testAssociationName_fkColumnName_endsWith_pkColumnName_and_pkColumnName_startsWith_pkTableName()
throws Exception {
EntityDesc entityDesc = new EntityDesc();
entityDesc.setCatalogName("AAA");
entityDesc.setSchemaName("BBB");
entityDesc.setTableName("CCC");
entityDesc.setName("Ccc");
EntityDesc entityDesc2 = new EntityDesc();
entityDesc2.setCatalogName("DDD");
entityDesc2.setSchemaName("EEE");
entityDesc2.setTableName("FFF");
entityDesc2.setName("Fff");
AttributeDesc attributeDesc = new AttributeDesc();
attributeDesc.setName("gggCccId");
entityDesc2.addAttributeDesc(attributeDesc);
EntitySetDesc entitySetDesc = new EntitySetDesc();
entitySetDesc.addEntityDesc(entityDesc);
entitySetDesc.addEntityDesc(entityDesc2);
DbTableMeta tableMeta = new DbTableMeta();
tableMeta.setCatalogName("DDD");
tableMeta.setSchemaName("EEE");
tableMeta.setName("FFF");
DbForeignKeyMeta fkMeta = new DbForeignKeyMeta();
fkMeta.setPrimaryKeyCatalogName("AAA");
fkMeta.setPrimaryKeySchemaName("BBB");
fkMeta.setPrimaryKeyTableName("CCC");
fkMeta.addPrimaryKeyColumnName("CCC_ID");
fkMeta.addForeignKeyColumnName("GGG_CCC_ID");
AssociationResolver resolver = new AssociationResolver(entitySetDesc,
new PluralFormDictinary(), new PersistenceConventionImpl());
resolver.resolve(tableMeta, fkMeta);
assertEquals(1, entityDesc.getAssociationDescList().size());
AssociationDesc assoDesc = entityDesc.getAssociationDescList().get(0);
assertEquals(AssociationType.ONE_TO_MANY, assoDesc.getAssociationType());
assertEquals("fffList", assoDesc.getName());
assertEquals(1, entityDesc2.getAssociationDescList().size());
assoDesc = entityDesc2.getAssociationDescList().get(0);
assertEquals("gggCcc", assoDesc.getName());
assertEquals("gggCccId", attributeDesc.getName());
}
/**
*
* @throws Exception
*/
@Test
public void testAssociationName_fkColumnName_equals_pkColumnName()
throws Exception {
EntityDesc entityDesc = new EntityDesc();
entityDesc.setCatalogName("AAA");
entityDesc.setSchemaName("BBB");
entityDesc.setTableName("CCC");
entityDesc.setName("Ccc");
EntityDesc entityDesc2 = new EntityDesc();
entityDesc2.setCatalogName("DDD");
entityDesc2.setSchemaName("EEE");
entityDesc2.setTableName("FFF");
entityDesc2.setName("Fff");
AttributeDesc attributeDesc = new AttributeDesc();
attributeDesc.setName("id");
entityDesc2.addAttributeDesc(attributeDesc);
EntitySetDesc entitySetDesc = new EntitySetDesc();
entitySetDesc.addEntityDesc(entityDesc);
entitySetDesc.addEntityDesc(entityDesc2);
DbTableMeta tableMeta = new DbTableMeta();
tableMeta.setCatalogName("DDD");
tableMeta.setSchemaName("EEE");
tableMeta.setName("FFF");
DbForeignKeyMeta fkMeta = new DbForeignKeyMeta();
fkMeta.setPrimaryKeyCatalogName("AAA");
fkMeta.setPrimaryKeySchemaName("BBB");
fkMeta.setPrimaryKeyTableName("CCC");
fkMeta.addPrimaryKeyColumnName("ID");
fkMeta.addForeignKeyColumnName("ID");
AssociationResolver resolver = new AssociationResolver(entitySetDesc,
new PluralFormDictinary(), new PersistenceConventionImpl());
resolver.resolve(tableMeta, fkMeta);
assertEquals(1, entityDesc.getAssociationDescList().size());
AssociationDesc assoDesc = entityDesc.getAssociationDescList().get(0);
assertEquals(AssociationType.ONE_TO_MANY, assoDesc.getAssociationType());
assertEquals("fffList", assoDesc.getName());
assertEquals(1, entityDesc2.getAssociationDescList().size());
assoDesc = entityDesc2.getAssociationDescList().get(0);
assertEquals("ccc", assoDesc.getName());
assertEquals("id", attributeDesc.getName());
}
/**
*
* @throws Exception
*/
@Test
public void testAssociationName_fkColumnName_equals_pkTableName()
throws Exception {
EntityDesc entityDesc = new EntityDesc();
entityDesc.setCatalogName("AAA");
entityDesc.setSchemaName("BBB");
entityDesc.setTableName("CCC");
entityDesc.setName("Ccc");
EntityDesc entityDesc2 = new EntityDesc();
entityDesc2.setCatalogName("DDD");
entityDesc2.setSchemaName("EEE");
entityDesc2.setTableName("FFF");
entityDesc2.setName("Fff");
AttributeDesc attributeDesc = new AttributeDesc();
attributeDesc.setName("ccc");
entityDesc2.addAttributeDesc(attributeDesc);
EntitySetDesc entitySetDesc = new EntitySetDesc();
entitySetDesc.addEntityDesc(entityDesc);
entitySetDesc.addEntityDesc(entityDesc2);
DbTableMeta tableMeta = new DbTableMeta();
tableMeta.setCatalogName("DDD");
tableMeta.setSchemaName("EEE");
tableMeta.setName("FFF");
DbForeignKeyMeta fkMeta = new DbForeignKeyMeta();
fkMeta.setPrimaryKeyCatalogName("AAA");
fkMeta.setPrimaryKeySchemaName("BBB");
fkMeta.setPrimaryKeyTableName("CCC");
fkMeta.addPrimaryKeyColumnName("ID");
fkMeta.addForeignKeyColumnName("CCC");
AssociationResolver resolver = new AssociationResolver(entitySetDesc,
new PluralFormDictinary(), new PersistenceConventionImpl());
resolver.resolve(tableMeta, fkMeta);
assertEquals(1, entityDesc.getAssociationDescList().size());
AssociationDesc assoDesc = entityDesc.getAssociationDescList().get(0);
assertEquals(AssociationType.ONE_TO_MANY, assoDesc.getAssociationType());
assertEquals("fffList", assoDesc.getName());
assertEquals(1, entityDesc2.getAssociationDescList().size());
assoDesc = entityDesc2.getAssociationDescList().get(0);
assertEquals("ccc", assoDesc.getName());
assertEquals("cccId", attributeDesc.getName());
}
}