// $HeadURL$ // $Id$ // // Copyright © 2006, 2010, 2011, 2012 by the President and Fellows of Harvard College. // // Screensaver is an open-source project developed by the ICCB-L and NSRB labs // at Harvard Medical School. This software is distributed under the terms of // the GNU General Public License. package edu.harvard.med.screensaver.model.entitytesters; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import javax.persistence.Column; import javax.persistence.EntityManagerFactory; import javax.persistence.Version; import org.apache.log4j.Logger; import org.hibernate.annotations.Immutable; import edu.harvard.med.screensaver.model.AbstractEntity; /** * Test version accessor methods: modifiers, arguments, annotations, and return types: * <ul> * <li>getter and setter are both instance methods * <li>getter and setter are both private methods * <li>getter return type is integer * <li>setter return type is void * <li>getter has javax.persistence.Column annotation with nullable=false * <li>getter has javax.persistence.Version annotation * </ul> */ public class VersionAccessorsTester<E extends AbstractEntity> extends AbstractEntityTester<E> { private static Logger log = Logger.getLogger(VersionAccessorsTester.class); public VersionAccessorsTester(Class<E> entityClass, EntityManagerFactory sessionFactory) { super(entityClass, sessionFactory); } @Override public void testEntity() { testVersionAccessors(); } /** * Test version accessor methods: modifiers, arguments, annotations, and return types. */ private void testVersionAccessors() { // skip classes that have a getVersion from a superclass if (! _entityClass.getSuperclass().equals(AbstractEntity.class)) { return; } org.hibernate.annotations.Entity entityAnnotation = _entityClass.getAnnotation(org.hibernate.annotations.Entity.class); if (entityAnnotation != null && ! entityAnnotation.mutable()) { return; } if (_entityClass.getAnnotation(Immutable.class) != null) { return; } // getVersion try { Method getVersionMethod = _entityClass.getDeclaredMethod("getVersion"); assertTrue("private getVersion for " + _entityClass, Modifier.isPrivate(getVersionMethod.getModifiers())); assertFalse("instance getVersion for " + _entityClass, Modifier.isStatic(getVersionMethod.getModifiers())); assertEquals("getVersion return type for " + _entityClass, getVersionMethod.getReturnType(), Integer.class); Column column = getVersionMethod.getAnnotation(Column.class); assertNotNull("getVersion has @javax.persistence.Column", column); assertFalse("getVersion has @javax.persistence.Column(nullable=false)", column.nullable()); Version version = getVersionMethod.getAnnotation(Version.class); assertNotNull("getVersion has @javax.persistence.Version", version); } catch (SecurityException e) { e.printStackTrace(); fail("getting declared method getVersion for " + _entityClass + ": " + e); } catch (NoSuchMethodException e) { fail("getting declared method getVersion for " + _entityClass + ": " + e); } // setVersion try { Method setVersionMethod = _entityClass.getDeclaredMethod("setVersion", Integer.class); assertTrue("private setVersion for " + _entityClass, Modifier.isPrivate(setVersionMethod.getModifiers())); assertFalse("instance setVersion for " + _entityClass, Modifier.isStatic(setVersionMethod.getModifiers())); assertEquals("setVersion return type for " + _entityClass, setVersionMethod.getReturnType(), void.class); } catch (SecurityException e) { e.printStackTrace(); fail("getting declared method getVersion for " + _entityClass + ": " + e); } catch (NoSuchMethodException e) { fail("getting declared method getVersion for " + _entityClass + ": " + e); } } }