/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.envers.test.integration.modifiedflags; import java.util.List; import java.util.Map; import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.query.AuditQuery; import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase; /** * Base test for modified flags feature * * @author Michal Skowronek (mskowr at o2 dot pl) */ public abstract class AbstractModifiedFlagsEntityTest extends BaseEnversJPAFunctionalTestCase { @Override protected void addConfigOptions(Map options) { super.addConfigOptions( options ); if ( forceModifiedFlags() ) { options.put( EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, "true" ); } } public boolean forceModifiedFlags() { return true; } protected List queryForPropertyHasChanged( Class<?> clazz, Object id, String... propertyNames) { AuditQuery query = createForRevisionsQuery( clazz, id, false ); addHasChangedProperties( query, propertyNames ); return query.getResultList(); } protected List queryForPropertyHasChangedWithDeleted( Class<?> clazz, Object id, String... propertyNames) { AuditQuery query = createForRevisionsQuery( clazz, id, true ); addHasChangedProperties( query, propertyNames ); return query.getResultList(); } protected List queryForPropertyHasNotChanged( Class<?> clazz, Object id, String... propertyNames) { AuditQuery query = createForRevisionsQuery( clazz, id, false ); addHasNotChangedProperties( query, propertyNames ); return query.getResultList(); } protected List queryForPropertyHasNotChangedWithDeleted( Class<?> clazz, Object id, String... propertyNames) { AuditQuery query = createForRevisionsQuery( clazz, id, true ); addHasNotChangedProperties( query, propertyNames ); return query.getResultList(); } private void addHasChangedProperties( AuditQuery query, String[] propertyNames) { for ( String propertyName : propertyNames ) { query.add( AuditEntity.property( propertyName ).hasChanged() ); } } private void addHasNotChangedProperties( AuditQuery query, String[] propertyNames) { for ( String propertyName : propertyNames ) { query.add( AuditEntity.property( propertyName ).hasNotChanged() ); } } private AuditQuery createForRevisionsQuery(Class<?> clazz, Object id, boolean withDeleted) { return getAuditReader().createQuery() .forRevisionsOfEntity( clazz, false, withDeleted ) .add( AuditEntity.id().eq( id ) ); } }