/******************************************************************************* * Copyright (c) 2010 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributor: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.hibernate.jpt.core.test; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertTrue; import static junit.framework.Assert.fail; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; import org.eclipse.jpt.common.utility.internal.iterable.IterableTools; import org.eclipse.jpt.jpa.core.JpaProject; import org.eclipse.jpt.jpa.core.JpaProject.Reference; import org.eclipse.jpt.jpa.core.context.JpaContextRoot; import org.eclipse.jpt.jpa.core.context.java.JavaPersistentType; import org.eclipse.jpt.jpa.core.context.java.JavaSpecifiedJoinTable; import org.eclipse.jpt.jpa.core.context.java.JavaSpecifiedJoinTableRelationshipStrategy; import org.eclipse.jpt.jpa.core.context.java.JavaSpecifiedPersistentAttribute; import org.eclipse.jpt.jpa.core.context.java.JavaTypeMapping; import org.eclipse.jpt.jpa.core.context.persistence.ClassRef; import org.eclipse.jpt.jpa.core.context.persistence.Persistence; import org.hibernate.console.ConsoleConfiguration; import org.hibernate.console.KnownConfigurations; import org.jboss.tools.hibernate.jpt.core.internal.context.HibernatePersistenceUnit; import org.jboss.tools.hibernate.jpt.core.internal.context.java.HibernateJavaBasicMapping; import org.jboss.tools.hibernate.jpt.core.internal.context.java.HibernateJavaColumn; import org.jboss.tools.hibernate.jpt.core.internal.context.java.HibernateJavaEntity; import org.jboss.tools.hibernate.jpt.core.internal.context.java.HibernateJavaIdMapping; import org.jboss.tools.hibernate.jpt.core.internal.context.java.HibernateJavaJoinTable; import org.jboss.tools.hibernate.jpt.core.internal.context.java.HibernateJavaManyToManyMapping; import org.jboss.tools.hibernate.jpt.core.internal.context.java.HibernateJavaTable; import org.jboss.tools.hibernate.runtime.spi.IConfiguration; import org.jboss.tools.test.util.ResourcesUtils; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; /** * @author Dmitry Geraskov * */ public class HibernateJpaModelTests { private static final String PROJECT_NAME = "testHibernateJpaProject"; private static final String PROJECT_PATH = "res/" + PROJECT_NAME; static IProject project = null; static JpaProject jpaProject = null; @BeforeClass public static void setUpBeforeClass() throws Exception { project = ResourcesUtils.importProject(Platform.getBundle("org.jboss.tools.hibernate.jpt.core.test"), PROJECT_PATH, new NullProgressMonitor()); project.refreshLocal(IResource.DEPTH_INFINITE, null); jpaProject = ((Reference) project.getAdapter(Reference.class)).getValue(); } @Test public void testDefaultMapping(){ assertNotNull(jpaProject); JpaContextRoot rootContextNode = jpaProject.getContextRoot(); Persistence p = rootContextNode.getPersistenceXml().getRoot(); assertTrue(p.getPersistenceUnitsSize() > 0); assertTrue(p.getPersistenceUnits().iterator().next() instanceof HibernatePersistenceUnit); HibernatePersistenceUnit hpu = (HibernatePersistenceUnit) p.getPersistenceUnits().iterator().next(); List<ClassRef> crs = IterableTools.list(hpu.getClassRefs()); assertTrue(crs.size() == 2); if (crs.get(0).isFor("entity.ManyToMany1")){ checkManyToMany1(crs.get(0)); checkManyToMany2(crs.get(1)); } else { checkManyToMany1(crs.get(1)); checkManyToMany2(crs.get(0)); } } @Test public void testNamigStrategyMapping(){ ConsoleConfiguration cc = KnownConfigurations.getInstance().find(PROJECT_NAME); assertNotNull("Console configuration not found for project " + PROJECT_NAME, cc); cc.build(); assertNotNull("Console configuration build problem", cc.getConfiguration()); IConfiguration configuration = cc.getConfiguration(); assertNotNull("Naming Strategy not found", cc.getConfiguration().getNamingStrategy()); assertEquals("ns.NamingStrategy", cc.getConfiguration().getNamingStrategy().getStrategyClassName()); try { jpaProject = ((Reference) project.getAdapter(Reference.class)).getValue(); } catch (InterruptedException e) { fail(e.getMessage()); } assertNotNull(jpaProject); JpaContextRoot rootContextNode = jpaProject.getContextRoot(); Persistence p = rootContextNode.getPersistenceXml().getRoot(); assertTrue(p.getPersistenceUnits().iterator().hasNext()); assertTrue(p.getPersistenceUnits().iterator().next() instanceof HibernatePersistenceUnit); HibernatePersistenceUnit hpu = (HibernatePersistenceUnit) p.getPersistenceUnits().iterator().next(); List<ClassRef> crs = IterableTools.list(hpu.getClassRefs()); assertTrue(crs.size() == 2); if (crs.get(0).isFor("entity.ManyToMany1")){ checkManyToManyNS1(crs.get(0)); checkManyToManyNS2(crs.get(1)); } else { checkManyToManyNS1(crs.get(1)); checkManyToManyNS2(crs.get(0)); } cc.reset(); } public void checkManyToMany1(ClassRef crs){ JavaPersistentType javaPersistentType = crs.getJavaPersistentType(); JavaTypeMapping mapping = javaPersistentType.getMapping(); assertTrue(mapping instanceof HibernateJavaEntity); HibernateJavaEntity entity = (HibernateJavaEntity) mapping; HibernateJavaTable table = entity.getTable(); assertEquals("ManyToMany1", table.getDBTableName()); ArrayList<JavaSpecifiedPersistentAttribute> attrs = IterableTools.list(javaPersistentType.getAttributes()); assertTrue(attrs.size() == 3); //id assertTrue(attrs.get(0).getMapping() instanceof HibernateJavaIdMapping); HibernateJavaIdMapping hjidm = (HibernateJavaIdMapping)attrs.get(0).getMapping(); HibernateJavaColumn hjc = (HibernateJavaColumn)hjidm.getColumn(); assertEquals("id1", hjc.getDBColumnName()); //justData assertTrue(attrs.get(1).getMapping() instanceof HibernateJavaBasicMapping); HibernateJavaBasicMapping hjbm = (HibernateJavaBasicMapping)attrs.get(1).getMapping(); hjc = (HibernateJavaColumn)hjbm.getColumn(); assertEquals("justData1", hjc.getDBColumnName()); //mtm assertTrue(attrs.get(2).getMapping() instanceof HibernateJavaManyToManyMapping); HibernateJavaManyToManyMapping hjmtmm = (HibernateJavaManyToManyMapping)attrs.get(2).getMapping(); assertEquals("entity.ManyToMany2", hjmtmm.getTargetEntity()); } public void checkManyToMany2(ClassRef crs){ JavaPersistentType javaPersistentType = crs.getJavaPersistentType(); JavaTypeMapping mapping = javaPersistentType.getMapping(); assertTrue(mapping instanceof HibernateJavaEntity); HibernateJavaEntity entity = (HibernateJavaEntity) mapping; HibernateJavaTable table = entity.getTable(); assertEquals("ManyToMany22", table.getDBTableName()); ArrayList<JavaSpecifiedPersistentAttribute> attrs = IterableTools.list(javaPersistentType.getAttributes()); assertTrue(attrs.size() == 3); //id assertTrue(attrs.get(0).getMapping() instanceof HibernateJavaIdMapping); HibernateJavaIdMapping hjidm = (HibernateJavaIdMapping)attrs.get(0).getMapping(); HibernateJavaColumn hjc = (HibernateJavaColumn)hjidm.getColumn(); assertEquals("id", hjc.getDBColumnName()); //justData assertTrue(attrs.get(1).getMapping() instanceof HibernateJavaBasicMapping); HibernateJavaBasicMapping hjbm = (HibernateJavaBasicMapping)attrs.get(1).getMapping(); hjc = (HibernateJavaColumn)hjbm.getColumn(); assertEquals("justData", hjc.getDBColumnName()); //mtm assertTrue(attrs.get(2).getMapping() instanceof HibernateJavaManyToManyMapping); HibernateJavaManyToManyMapping hjmtmm = (HibernateJavaManyToManyMapping)attrs.get(2).getMapping(); assertEquals("entity.ManyToMany1", hjmtmm.getTargetEntity()); JavaSpecifiedJoinTableRelationshipStrategy jtJoiningStrategy = hjmtmm.getRelationship().getJoinTableStrategy(); JavaSpecifiedJoinTable joinTable = jtJoiningStrategy.getJoinTable(); assertTrue(joinTable instanceof HibernateJavaJoinTable); HibernateJavaJoinTable hjjt = (HibernateJavaJoinTable)joinTable; assertEquals("ManyToMany22_ManyToMany1", hjjt.getDBTableName()); } public void checkManyToManyNS1(ClassRef crs){ JavaPersistentType javaPersistentType = crs.getJavaPersistentType(); JavaTypeMapping mapping = javaPersistentType.getMapping(); assertTrue(mapping instanceof HibernateJavaEntity); HibernateJavaEntity entity = (HibernateJavaEntity) mapping; HibernateJavaTable table = entity.getTable(); assertEquals("ctn_ManyToMany1", table.getDBTableName()); ArrayList<JavaSpecifiedPersistentAttribute> attrs = IterableTools.list(javaPersistentType.getAttributes()); assertTrue(attrs.size() == 3); //id assertTrue(attrs.get(0).getMapping() instanceof HibernateJavaIdMapping); HibernateJavaIdMapping hjidm = (HibernateJavaIdMapping)attrs.get(0).getMapping(); HibernateJavaColumn hjc = (HibernateJavaColumn)hjidm.getColumn(); assertEquals("pc_id1", hjc.getDBColumnName()); //justData assertTrue(attrs.get(1).getMapping() instanceof HibernateJavaBasicMapping); HibernateJavaBasicMapping hjbm = (HibernateJavaBasicMapping)attrs.get(1).getMapping(); hjc = (HibernateJavaColumn)hjbm.getColumn(); assertEquals("pc_justData1", hjc.getDBColumnName()); //mtm assertTrue(attrs.get(2).getMapping() instanceof HibernateJavaManyToManyMapping); HibernateJavaManyToManyMapping hjmtmm = (HibernateJavaManyToManyMapping)attrs.get(2).getMapping(); assertEquals("entity.ManyToMany2", hjmtmm.getTargetEntity()); } public void checkManyToManyNS2(ClassRef crs){ JavaPersistentType javaPersistentType = crs.getJavaPersistentType(); JavaTypeMapping mapping = javaPersistentType.getMapping(); assertTrue(mapping instanceof HibernateJavaEntity); HibernateJavaEntity entity = (HibernateJavaEntity) mapping; HibernateJavaTable table = entity.getTable(); assertEquals("tn_ManyToMany22", table.getDBTableName()); ArrayList<JavaSpecifiedPersistentAttribute> attrs = IterableTools.list(javaPersistentType.getAttributes()); assertTrue(attrs.size() == 3); //id assertTrue(attrs.get(0).getMapping() instanceof HibernateJavaIdMapping); HibernateJavaIdMapping hjidm = (HibernateJavaIdMapping)attrs.get(0).getMapping(); HibernateJavaColumn hjc = (HibernateJavaColumn)hjidm.getColumn(); assertEquals("cn_id", hjc.getDBColumnName()); //justData assertTrue(attrs.get(1).getMapping() instanceof HibernateJavaBasicMapping); HibernateJavaBasicMapping hjbm = (HibernateJavaBasicMapping)attrs.get(1).getMapping(); hjc = (HibernateJavaColumn)hjbm.getColumn(); assertEquals("cn_justData", hjc.getDBColumnName()); //mtm assertTrue(attrs.get(2).getMapping() instanceof HibernateJavaManyToManyMapping); HibernateJavaManyToManyMapping hjmtmm = (HibernateJavaManyToManyMapping)attrs.get(2).getMapping(); assertEquals("entity.ManyToMany1", hjmtmm.getTargetEntity()); JavaSpecifiedJoinTableRelationshipStrategy jtJoiningStrategy = hjmtmm.getRelationship().getJoinTableStrategy(); JavaSpecifiedJoinTable joinTable = jtJoiningStrategy.getJoinTable(); assertTrue(joinTable instanceof HibernateJavaJoinTable); HibernateJavaJoinTable hjjt = (HibernateJavaJoinTable)joinTable; hjjt.getDbTable(); assertEquals("col_entity.ManyToMany2_entity.ManyToMany1_ManyToMany1_entity.ManyToMany1_mtm1", hjjt.getDBTableName()); } @AfterClass public static void tearDownAfterClass() throws Exception { if(project != null) { boolean saveAutoBuild = ResourcesUtils.setBuildAutomatically(false); try { project.delete(true,true, null); } finally { ResourcesUtils.setBuildAutomatically(saveAutoBuild); } } } }