From jboss-envers-commits at lists.jboss.org Thu Jul 3 07:35:49 2008 From: jboss-envers-commits at lists.jboss.org (jboss-envers-commits at lists.jboss.org) Date: Thu, 03 Jul 2008 07:35:49 -0400 Subject: [jboss-envers-commits] JBoss Envers SVN: r88 - in trunk: src and 11 other directories. Message-ID: Author: adamw Date: 2008-07-03 07:35:48 -0400 (Thu, 03 Jul 2008) New Revision: 88 Added: trunk/src/main-3.2/ trunk/src/main-3.2/org/ trunk/src/main-3.2/org/jboss/ trunk/src/main-3.2/org/jboss/envers/ trunk/src/main-3.2/org/jboss/envers/entity/ trunk/src/main-3.2/org/jboss/envers/entity/VersionsInheritanceEntityPersisterFor32.java trunk/src/main-3.3/org/jboss/envers/entity/VersionsInheritanceEntityPersisterFor33.java trunk/src/main/org/jboss/envers/log/ trunk/src/main/org/jboss/envers/log/YLog.java trunk/src/main/org/jboss/envers/log/YLogManager.java Removed: trunk/src/main-3.3/org/jboss/envers/entity/VersionsInheritanceEntityPersisterFor330.java Modified: trunk/build.xml trunk/envers.iml trunk/src/main/org/jboss/envers/configuration/VersionsConfiguration.java trunk/src/main/org/jboss/envers/metadata/VersionsMetadataGenerator.java trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java trunk/src/test/org/jboss/envers/test/working/WorkingMain.java trunk/src/test/org/jboss/envers/test/working/test.hbm.xml Log: ENVERS-27: separate builds for 3.2 and 3.3 Configuration option to suppress excpetions on unsupported types Modified: trunk/build.xml =================================================================== --- trunk/build.xml 2008-06-24 14:06:27 UTC (rev 87) +++ trunk/build.xml 2008-07-03 11:35:48 UTC (rev 88) @@ -1,11 +1,15 @@ - + - + + + + + @@ -24,6 +28,7 @@ + @@ -60,15 +65,19 @@ + + + + - + - + @@ -85,8 +94,7 @@ - - + @@ -95,24 +103,19 @@ + + + + + - - - - - - + - - - - - - + @@ -122,17 +125,32 @@ + + + + - + - + + + + + + + + - + + + - @@ -151,7 +171,13 @@ - + + + + + + + - + - + @@ -184,7 +210,19 @@ - + + + + + + + + + + + + + @@ -252,7 +290,7 @@ - + @@ -260,7 +298,7 @@ - + @@ -268,7 +306,7 @@ - + Modified: trunk/envers.iml =================================================================== --- trunk/envers.iml 2008-06-24 14:06:27 UTC (rev 87) +++ trunk/envers.iml 2008-07-03 11:35:48 UTC (rev 88) @@ -7,6 +7,7 @@ + Modified: trunk/src/main/org/jboss/envers/configuration/VersionsConfiguration.java =================================================================== --- trunk/src/main/org/jboss/envers/configuration/VersionsConfiguration.java 2008-06-24 14:06:27 UTC (rev 87) +++ trunk/src/main/org/jboss/envers/configuration/VersionsConfiguration.java 2008-07-03 11:35:48 UTC (rev 88) @@ -56,6 +56,9 @@ // Should a revision be generated when a not-owned relation field changes private boolean generateRevisionsForCollections; + // Should a warning, instead of an error and an exception, be logged, when an unsupported type is versioned + private boolean warnOnUnsupportedTypes; + // public VersionsEntitiesConfiguration getEntitiesCfg() { @@ -103,6 +106,10 @@ String generateRevisionsForCollectionsStr = properties.getProperty("org.jboss.envers.revisionOnCollectionChange", "true"); generateRevisionsForCollections = Boolean.parseBoolean(generateRevisionsForCollectionsStr); + + String warnOnUnsupportedTypesStr = properties.getProperty("org.jboss.envers.warnOnUnsupportedTypes", + "false"); + warnOnUnsupportedTypes = Boolean.parseBoolean(warnOnUnsupportedTypesStr); } @SuppressWarnings({"unchecked"}) @@ -115,7 +122,7 @@ versionsSyncManager = new VersionsSyncManager(verEntCfg); - VersionsMetadataGenerator versionsMetaGen = new VersionsMetadataGenerator(verEntCfg); + VersionsMetadataGenerator versionsMetaGen = new VersionsMetadataGenerator(this, verEntCfg); DOMWriter writer = new DOMWriter(); // Sorting the persistent class topologically - superclass always before subclass @@ -126,11 +133,12 @@ Map documents = new HashMap(); // First pass + AnnotationsMetadataReader annotationsMetadataReader = new AnnotationsMetadataReader(); while (classes.hasNext()) { PersistentClass pc = classes.next(); // Collecting information from annotations on the persistent class pc PersistentClassVersioningData versioningData = - new AnnotationsMetadataReader().getVersioningData(pc, reflectionManager); + annotationsMetadataReader.getVersioningData(pc, reflectionManager); if (isVersioned(versioningData)) { pcDatas.put(pc, versioningData); @@ -207,6 +215,10 @@ return generateRevisionsForCollections; } + public boolean isWarnOnUnsupportedTypes() { + return warnOnUnsupportedTypes; + } + public RelationDescription getRelationDescription(String entityName, String propertyName) { return entitiesConfigurations.getRelationDescription(entityName, propertyName); } Added: trunk/src/main/org/jboss/envers/log/YLog.java =================================================================== --- trunk/src/main/org/jboss/envers/log/YLog.java (rev 0) +++ trunk/src/main/org/jboss/envers/log/YLog.java 2008-07-03 11:35:48 UTC (rev 88) @@ -0,0 +1,90 @@ +/* + * Envers. http://www.jboss.org/envers + * + * Copyright 2008 Red Hat Middleware, LLC. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT A WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License, v.2.1 along with this distribution; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + * Red Hat Author(s): Adam Warski + */ +package org.jboss.envers.log; + +import org.jboss.envers.exception.VersionsException; + +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; + +/** + * A simple logger facade which delegates through reflection to a logging delegate. + * @author Adam Warski (adam at warski dot org) + */ +public class YLog { + private Object delegate; + private Method errorMethod; + private Method warnMethod; + private Method infoMethod; + + public YLog(Object delegate, Class argClass) { + this.delegate = delegate; + + try { + errorMethod = delegate.getClass().getMethod("error", argClass); + } catch (NoSuchMethodException e) { + throw new VersionsException(e); + } + + try { + warnMethod = delegate.getClass().getMethod("warn", argClass); + } catch (NoSuchMethodException e) { + throw new VersionsException(e); + } + + try { + infoMethod = delegate.getClass().getMethod("info", argClass); + } catch (NoSuchMethodException e) { + throw new VersionsException(e); + } + } + + public void error(String message) { + try { + errorMethod.invoke(delegate, message); + } catch (IllegalAccessException e) { + throw new VersionsException(e); + } catch (InvocationTargetException e) { + throw new VersionsException(e); + } + } + + public void warn(String message) { + try { + warnMethod.invoke(delegate, message); + } catch (IllegalAccessException e) { + throw new VersionsException(e); + } catch (InvocationTargetException e) { + throw new VersionsException(e); + } + } + + public void info(String message) { + try { + infoMethod.invoke(delegate, message); + } catch (IllegalAccessException e) { + throw new VersionsException(e); + } catch (InvocationTargetException e) { + throw new VersionsException(e); + } + } +} Added: trunk/src/main/org/jboss/envers/log/YLogManager.java =================================================================== --- trunk/src/main/org/jboss/envers/log/YLogManager.java (rev 0) +++ trunk/src/main/org/jboss/envers/log/YLogManager.java 2008-07-03 11:35:48 UTC (rev 88) @@ -0,0 +1,90 @@ +/* + * Envers. http://www.jboss.org/envers + * + * Copyright 2008 Red Hat Middleware, LLC. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT A WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License, v.2.1 along with this distribution; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + * Red Hat Author(s): Adam Warski + */ +package org.jboss.envers.log; + +import org.jboss.envers.exception.VersionsException; + +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; + +/** + * A class for creating logging facades either to loggers obtained from + * org.apache.commons.logging.LogFactory (in Hibernate 3.2.x) or from + * org.slf4j.LoggerFactory (in Hibernate 3.3.x). + * @author Adam Warski (adam at warski dot org) + */ +public class YLogManager { + private Method getLogMethod; + private Class argClass; + + private YLogManager() { + initMethod(); + } + + private void initMethod() { + ClassLoader cl = YLogManager.class.getClassLoader(); + + try { + Class logFactoryClass = cl.loadClass("org.apache.commons.logging.LogFactory"); + try { + getLogMethod = logFactoryClass.getMethod("getLog", Class.class); + argClass = Object.class; + } catch (NoSuchMethodException e) { + throw new VersionsException("No 'getLog' method in org.apache.commons.logging.LogFactory."); + } + } catch (ClassNotFoundException e) { + try { + Class loggerFactoryClass = cl.loadClass("org.slf4j.LoggerFactory"); + try { + getLogMethod = loggerFactoryClass.getMethod("getLogger", Class.class); + argClass = String.class; + } catch (NoSuchMethodException e1) { + throw new VersionsException("No 'getLogger' method in org.slf4j.LoggerFactory."); + } + } catch (ClassNotFoundException e1) { + throw new VersionsException("No org.apache.commons.logging.LogFactory or org.slf4j.LoggerFactory found."); + } + } + } + + public YLog getLog(Class cls) { + try { + return new YLog(getLogMethod.invoke(null, cls), argClass); + } catch (IllegalAccessException e) { + throw new VersionsException(e); + } catch (InvocationTargetException e) { + throw new VersionsException(e); + } + } + + // + + private static YLogManager instance; + + public static synchronized YLogManager getLogManager() { + if (instance == null) { + instance = new YLogManager(); + } + + return instance; + } +} Modified: trunk/src/main/org/jboss/envers/metadata/VersionsMetadataGenerator.java =================================================================== --- trunk/src/main/org/jboss/envers/metadata/VersionsMetadataGenerator.java 2008-06-24 14:06:27 UTC (rev 87) +++ trunk/src/main/org/jboss/envers/metadata/VersionsMetadataGenerator.java 2008-07-03 11:35:48 UTC (rev 88) @@ -32,6 +32,7 @@ import org.dom4j.tree.DefaultElement; import org.jboss.envers.configuration.VersionsEntitiesConfiguration; import org.jboss.envers.configuration.EntityConfiguration; +import org.jboss.envers.configuration.VersionsConfiguration; import org.jboss.envers.mapper.*; import org.jboss.envers.mapper.id.*; import org.jboss.envers.mapper.id.relation.ToOneIdMapper; @@ -41,6 +42,8 @@ import org.jboss.envers.tools.Tools; import org.jboss.envers.tools.HibernateVersion; import org.jboss.envers.ModificationStore; +import org.jboss.envers.log.YLog; +import org.jboss.envers.log.YLogManager; import org.jboss.envers.metadata.data.IdMappingData; import org.jboss.envers.metadata.data.PersistentClassVersioningData; import org.jboss.envers.metadata.data.PropertyStoreInfo; @@ -57,13 +60,17 @@ public class VersionsMetadataGenerator { private final static Map EMPTY_STORE = Collections.emptyMap(); + private VersionsConfiguration verCfg; private VersionsEntitiesConfiguration verEntCfg; private Map entitiesConfigurations; // Map entity name -> (join descriptor -> element describing the "versioned" join) private Map> entitiesJoins; - public VersionsMetadataGenerator(VersionsEntitiesConfiguration verEntCfg) { + private YLog log = YLogManager.getLogManager().getLog(VersionsMetadataGenerator.class); + + public VersionsMetadataGenerator(VersionsConfiguration verCfg, VersionsEntitiesConfiguration verEntCfg) { + this.verCfg = verCfg; this.verEntCfg = verEntCfg; entitiesConfigurations = new HashMap(); @@ -377,13 +384,20 @@ if (firstPass) { addSimpleProperty(parent, property, currentMapper, store, false); } - } else if (propertyType instanceof BagType || propertyType instanceof SetType) { + } else if ((propertyType instanceof BagType || propertyType instanceof SetType) && + ((((Collection) property.getValue()).getElement() instanceof OneToMany))) { // only second pass if (!firstPass) { addOneToMany(property, currentMapper, entityName); } } else { - throw new MappingException("Type not supported for versioning: " + propertyType.getClass().getName()); + String message = "Type not supported for versioning: " + propertyType.getClass().getName() + + ", on entity " + entityName + ", property '" + property.getName() + "'."; + if (verCfg.isWarnOnUnsupportedTypes()) { + log.warn(message); + } else { + throw new MappingException(message); + } } } } @@ -489,9 +503,9 @@ private void addPersisterHack(Element class_mapping) { String persisterClassName; if (HibernateVersion.get().startsWith("3.3")) { - persisterClassName = "org.jboss.envers.entity.VersionsInheritanceEntityPersisterFor330"; + persisterClassName = "org.jboss.envers.entity.VersionsInheritanceEntityPersisterFor33"; } else { - persisterClassName = "org.jboss.envers.entity.VersionsInheritanceEntityPersister"; + persisterClassName = "org.jboss.envers.entity.VersionsInheritanceEntityPersisterFor32"; } class_mapping.addAttribute("persister", persisterClassName); Copied: trunk/src/main-3.2/org/jboss/envers/entity/VersionsInheritanceEntityPersisterFor32.java (from rev 87, trunk/src/main/org/jboss/envers/entity/VersionsInheritanceEntityPersister.java) =================================================================== --- trunk/src/main-3.2/org/jboss/envers/entity/VersionsInheritanceEntityPersisterFor32.java (rev 0) +++ trunk/src/main-3.2/org/jboss/envers/entity/VersionsInheritanceEntityPersisterFor32.java 2008-07-03 11:35:48 UTC (rev 88) @@ -0,0 +1,45 @@ +/* + * Envers. http://www.jboss.org/envers + * + * Copyright 2008 Red Hat Middleware, LLC. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT A WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License, v.2.1 along with this distribution; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + * Red Hat Author(s): Adam Warski + */ +package org.jboss.envers.entity; + +import org.hibernate.persister.entity.SingleTableEntityPersister; +import org.hibernate.persister.entity.EntityPersister; +import org.hibernate.mapping.PersistentClass; +import org.hibernate.cache.CacheConcurrencyStrategy; +import org.hibernate.engine.SessionFactoryImplementor; +import org.hibernate.engine.Mapping; +import org.hibernate.HibernateException; +import org.hibernate.EntityMode; + +/** + * @author Adam Warski (adam at warski dot org) + */ +public class VersionsInheritanceEntityPersisterFor32 extends SingleTableEntityPersister { + public VersionsInheritanceEntityPersisterFor32(PersistentClass persistentClass, CacheConcurrencyStrategy cache, SessionFactoryImplementor factory, Mapping mapping) throws HibernateException { + super(persistentClass, cache, factory, mapping); + } + + // A hack for http://opensource.atlassian.com/projects/hibernate/browse/HHH-3351 + public EntityPersister getSubclassEntityPersister(Object instance, SessionFactoryImplementor factory, EntityMode entityMode) { + return this; + } +} \ No newline at end of file Copied: trunk/src/main-3.3/org/jboss/envers/entity/VersionsInheritanceEntityPersisterFor33.java (from rev 87, trunk/src/main-3.3/org/jboss/envers/entity/VersionsInheritanceEntityPersisterFor330.java) =================================================================== --- trunk/src/main-3.3/org/jboss/envers/entity/VersionsInheritanceEntityPersisterFor33.java (rev 0) +++ trunk/src/main-3.3/org/jboss/envers/entity/VersionsInheritanceEntityPersisterFor33.java 2008-07-03 11:35:48 UTC (rev 88) @@ -0,0 +1,45 @@ +/* + * Envers. http://www.jboss.org/envers + * + * Copyright 2008 Red Hat Middleware, LLC. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT A WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License, v.2.1 along with this distribution; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + * Red Hat Author(s): Adam Warski + */ +package org.jboss.envers.entity; + +import org.hibernate.persister.entity.SingleTableEntityPersister; +import org.hibernate.persister.entity.EntityPersister; +import org.hibernate.mapping.PersistentClass; +import org.hibernate.cache.access.EntityRegionAccessStrategy; +import org.hibernate.engine.SessionFactoryImplementor; +import org.hibernate.engine.Mapping; +import org.hibernate.HibernateException; +import org.hibernate.EntityMode; + +/** + * @author Adam Warski (adam at warski dot org) + */ +public class VersionsInheritanceEntityPersisterFor33 extends SingleTableEntityPersister { + public VersionsInheritanceEntityPersisterFor33(PersistentClass persistentClass, EntityRegionAccessStrategy entityRegionAccessStrategy, SessionFactoryImplementor factory, Mapping mapping) throws HibernateException { + super(persistentClass, entityRegionAccessStrategy, factory, mapping); + } + + // A hack for http://opensource.atlassian.com/projects/hibernate/browse/HHH-3351 + public EntityPersister getSubclassEntityPersister(Object instance, SessionFactoryImplementor factory, EntityMode entityMode) { + return this; + } +} \ No newline at end of file Deleted: trunk/src/main-3.3/org/jboss/envers/entity/VersionsInheritanceEntityPersisterFor330.java =================================================================== --- trunk/src/main-3.3/org/jboss/envers/entity/VersionsInheritanceEntityPersisterFor330.java 2008-06-24 14:06:27 UTC (rev 87) +++ trunk/src/main-3.3/org/jboss/envers/entity/VersionsInheritanceEntityPersisterFor330.java 2008-07-03 11:35:48 UTC (rev 88) @@ -1,45 +0,0 @@ -/* - * Envers. http://www.jboss.org/envers - * - * Copyright 2008 Red Hat Middleware, LLC. All rights reserved. - * - * This copyrighted material is made available to anyone wishing to use, - * modify, copy, or redistribute it subject to the terms and conditions - * of the GNU Lesser General Public License, v. 2.1. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT A WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License, v.2.1 along with this distribution; if not, write to the Free - * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA. - * - * Red Hat Author(s): Adam Warski - */ -package org.jboss.envers.entity; - -import org.hibernate.persister.entity.SingleTableEntityPersister; -import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.cache.access.EntityRegionAccessStrategy; -import org.hibernate.engine.SessionFactoryImplementor; -import org.hibernate.engine.Mapping; -import org.hibernate.HibernateException; -import org.hibernate.EntityMode; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class VersionsInheritanceEntityPersisterFor330 extends SingleTableEntityPersister { - public VersionsInheritanceEntityPersisterFor330(PersistentClass persistentClass, EntityRegionAccessStrategy entityRegionAccessStrategy, SessionFactoryImplementor factory, Mapping mapping) throws HibernateException { - super(persistentClass, entityRegionAccessStrategy, factory, mapping); - } - - // A hack for http://opensource.atlassian.com/projects/hibernate/browse/HHH-3351 - public EntityPersister getSubclassEntityPersister(Object instance, SessionFactoryImplementor factory, EntityMode entityMode) { - return this; - } -} \ No newline at end of file Modified: trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java =================================================================== --- trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java 2008-06-24 14:06:27 UTC (rev 87) +++ trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java 2008-07-03 11:35:48 UTC (rev 88) @@ -25,10 +25,10 @@ //@Column(table = "second_table", name = "cc_second") private String cc; - @Versioned + //@Versioned //@OneToOne - @ManyToOne - //@Transient + //@ManyToOne + @Transient private WorkingEntity2 we2; public WorkingEntity1() { Modified: trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java =================================================================== --- trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java 2008-06-24 14:06:27 UTC (rev 87) +++ trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java 2008-07-03 11:35:48 UTC (rev 88) @@ -22,7 +22,8 @@ @Versioned //@OneToMany(mappedBy = "we2") - @Transient + @ManyToMany + //@Transient private Set we1s; //@Versioned Modified: trunk/src/test/org/jboss/envers/test/working/WorkingMain.java =================================================================== --- trunk/src/test/org/jboss/envers/test/working/WorkingMain.java 2008-06-24 14:06:27 UTC (rev 87) +++ trunk/src/test/org/jboss/envers/test/working/WorkingMain.java 2008-07-03 11:35:48 UTC (rev 88) @@ -50,7 +50,7 @@ cfg.configure("hibernate.test.cfg.xml"); cfg.addAnnotatedClass(WorkingEntity1.class); cfg.addAnnotatedClass(WorkingEntity2.class); - cfg.addAnnotatedClass(RevEntity.class); + //cfg.addAnnotatedClass(RevEntity.class); //cfg.addAnnotatedClass(PostalAddress.class); //cfg.addAnnotatedClass(ContactMech.class); Modified: trunk/src/test/org/jboss/envers/test/working/test.hbm.xml =================================================================== --- trunk/src/test/org/jboss/envers/test/working/test.hbm.xml 2008-06-24 14:06:27 UTC (rev 87) +++ trunk/src/test/org/jboss/envers/test/working/test.hbm.xml 2008-07-03 11:35:48 UTC (rev 88) @@ -3,7 +3,7 @@ "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> - + From jboss-envers-commits at lists.jboss.org Thu Jul 3 07:36:38 2008 From: jboss-envers-commits at lists.jboss.org (jboss-envers-commits at lists.jboss.org) Date: Thu, 03 Jul 2008 07:36:38 -0400 Subject: [jboss-envers-commits] JBoss Envers SVN: r89 - trunk/src/main/org/jboss/envers/entity. Message-ID: Author: adamw Date: 2008-07-03 07:36:38 -0400 (Thu, 03 Jul 2008) New Revision: 89 Removed: trunk/src/main/org/jboss/envers/entity/VersionsInheritanceEntityPersister.java Log: ENVERS-27: separating builds for hibernate 3.2 and 3.3 Deleted: trunk/src/main/org/jboss/envers/entity/VersionsInheritanceEntityPersister.java =================================================================== --- trunk/src/main/org/jboss/envers/entity/VersionsInheritanceEntityPersister.java 2008-07-03 11:35:48 UTC (rev 88) +++ trunk/src/main/org/jboss/envers/entity/VersionsInheritanceEntityPersister.java 2008-07-03 11:36:38 UTC (rev 89) @@ -1,45 +0,0 @@ -/* - * Envers. http://www.jboss.org/envers - * - * Copyright 2008 Red Hat Middleware, LLC. All rights reserved. - * - * This copyrighted material is made available to anyone wishing to use, - * modify, copy, or redistribute it subject to the terms and conditions - * of the GNU Lesser General Public License, v. 2.1. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT A WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License, v.2.1 along with this distribution; if not, write to the Free - * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA. - * - * Red Hat Author(s): Adam Warski - */ -package org.jboss.envers.entity; - -import org.hibernate.persister.entity.SingleTableEntityPersister; -import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.cache.CacheConcurrencyStrategy; -import org.hibernate.engine.SessionFactoryImplementor; -import org.hibernate.engine.Mapping; -import org.hibernate.HibernateException; -import org.hibernate.EntityMode; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class VersionsInheritanceEntityPersister extends SingleTableEntityPersister { - public VersionsInheritanceEntityPersister(PersistentClass persistentClass, CacheConcurrencyStrategy cache, SessionFactoryImplementor factory, Mapping mapping) throws HibernateException { - super(persistentClass, cache, factory, mapping); - } - - // A hack for http://opensource.atlassian.com/projects/hibernate/browse/HHH-3351 - public EntityPersister getSubclassEntityPersister(Object instance, SessionFactoryImplementor factory, EntityMode entityMode) { - return this; - } -} \ No newline at end of file From jboss-envers-commits at lists.jboss.org Fri Jul 4 03:04:46 2008 From: jboss-envers-commits at lists.jboss.org (jboss-envers-commits at lists.jboss.org) Date: Fri, 04 Jul 2008 03:04:46 -0400 Subject: [jboss-envers-commits] JBoss Envers SVN: r90 - trunk/src/main/org/jboss/envers/event. Message-ID: Author: adamw Date: 2008-07-04 03:04:46 -0400 (Fri, 04 Jul 2008) New Revision: 90 Modified: trunk/src/main/org/jboss/envers/event/VersionsEventListener.java Log: Fixing a bug with generating collection revisions - only the owning side is checked Modified: trunk/src/main/org/jboss/envers/event/VersionsEventListener.java =================================================================== --- trunk/src/main/org/jboss/envers/event/VersionsEventListener.java 2008-07-03 11:36:38 UTC (rev 89) +++ trunk/src/main/org/jboss/envers/event/VersionsEventListener.java 2008-07-04 07:04:46 UTC (rev 90) @@ -58,7 +58,7 @@ for (int i=0; i Author: adamw Date: 2008-07-16 03:22:43 -0400 (Wed, 16 Jul 2008) New Revision: 91 Modified: trunk/build.xml trunk/src/main/org/jboss/envers/entity/EntityInstantiator.java trunk/src/main/org/jboss/envers/query/impl/EntitiesAtRevisionQuery.java trunk/src/main/org/jboss/envers/query/impl/RevisionsOfEntityQuery.java Log: Fixing a bug with using JPA, not Hibernate (then, the $type$ property isn't always present) Modified: trunk/build.xml =================================================================== --- trunk/build.xml 2008-07-04 07:04:46 UTC (rev 90) +++ trunk/build.xml 2008-07-16 07:22:43 UTC (rev 91) @@ -10,7 +10,7 @@ - + Modified: trunk/src/main/org/jboss/envers/entity/EntityInstantiator.java =================================================================== --- trunk/src/main/org/jboss/envers/entity/EntityInstantiator.java 2008-07-04 07:04:46 UTC (rev 90) +++ trunk/src/main/org/jboss/envers/entity/EntityInstantiator.java 2008-07-16 07:22:43 UTC (rev 91) @@ -46,12 +46,13 @@ /** * Creates an entity instance based on an entry from the versions table. + * @param entityName Name of the entity, which instances should be read * @param versionsEntity An entry in the versions table, from which data should be mapped. * @param revision Revision at which this entity was read. * @return An entity instance, with versioned properties set as in the versionsEntity map, and proxies * created for collections. */ - public Object createInstanceFromVersionsEntity(Map versionsEntity, Number revision) { + public Object createInstanceFromVersionsEntity(String entityName, Map versionsEntity, Number revision) { if (versionsEntity == null) { return null; } @@ -62,10 +63,14 @@ } // The $type$ property holds the name of the (versions) entity - String entityName = verCfg.getEntityNameForVersionsEntityName((String) versionsEntity.get("$type$")); + String type = verCfg.getEntityNameForVersionsEntityName((String) versionsEntity.get("$type$")); + if (type != null) { + entityName = type; + } + Object ret; - try { + try { Class cls = ReflectionTools.loadClass(entityName); ret = cls.newInstance(); } catch (Exception e) { @@ -84,9 +89,9 @@ } @SuppressWarnings({"unchecked"}) - public void addInstancesFromVersionsEntities(List list, List versionsEntities, Number revision) { + public void addInstancesFromVersionsEntities(String entityName, List list, List versionsEntities, Number revision) { for (Map versionsEntity : versionsEntities) { - list.add(createInstanceFromVersionsEntity(versionsEntity, revision)); + list.add(createInstanceFromVersionsEntity(entityName, versionsEntity, revision)); } } } Modified: trunk/src/main/org/jboss/envers/query/impl/EntitiesAtRevisionQuery.java =================================================================== --- trunk/src/main/org/jboss/envers/query/impl/EntitiesAtRevisionQuery.java 2008-07-04 07:04:46 UTC (rev 90) +++ trunk/src/main/org/jboss/envers/query/impl/EntitiesAtRevisionQuery.java 2008-07-16 07:22:43 UTC (rev 91) @@ -75,7 +75,7 @@ return queryResult; } else { List result = new ArrayList(); - entityInstantiator.addInstancesFromVersionsEntities(result, queryResult, revision); + entityInstantiator.addInstancesFromVersionsEntities(entityName, result, queryResult, revision); return result; } Modified: trunk/src/main/org/jboss/envers/query/impl/RevisionsOfEntityQuery.java =================================================================== --- trunk/src/main/org/jboss/envers/query/impl/RevisionsOfEntityQuery.java 2008-07-04 07:04:46 UTC (rev 90) +++ trunk/src/main/org/jboss/envers/query/impl/RevisionsOfEntityQuery.java 2008-07-16 07:22:43 UTC (rev 91) @@ -71,7 +71,7 @@ for (Map versionsEntity : queryResult) { Number revision = (Number) ((Map) versionsEntity.get(originalId)).get(revisionPropertyName); - Object entity = entityInstantiator.createInstanceFromVersionsEntity(versionsEntity, revision); + Object entity = entityInstantiator.createInstanceFromVersionsEntity(entityName, versionsEntity, revision); if (!selectEntitiesOnly) { entities.add(new Object[] { entity, revision }); From jboss-envers-commits at lists.jboss.org Wed Jul 16 03:25:28 2008 From: jboss-envers-commits at lists.jboss.org (jboss-envers-commits at lists.jboss.org) Date: Wed, 16 Jul 2008 03:25:28 -0400 Subject: [jboss-envers-commits] JBoss Envers SVN: r92 - trunk/src/test/org/jboss/envers/test/working. Message-ID: Author: adamw Date: 2008-07-16 03:25:27 -0400 (Wed, 16 Jul 2008) New Revision: 92 Modified: trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java trunk/src/test/org/jboss/envers/test/working/WorkingMain.java Log: Cleanup Modified: trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java =================================================================== --- trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java 2008-07-16 07:22:43 UTC (rev 91) +++ trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java 2008-07-16 07:25:27 UTC (rev 92) @@ -25,10 +25,10 @@ //@Column(table = "second_table", name = "cc_second") private String cc; - //@Versioned + @Versioned //@OneToOne - //@ManyToOne - @Transient + @ManyToOne + //@Transient private WorkingEntity2 we2; public WorkingEntity1() { Modified: trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java =================================================================== --- trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java 2008-07-16 07:22:43 UTC (rev 91) +++ trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java 2008-07-16 07:25:27 UTC (rev 92) @@ -21,8 +21,8 @@ private String str2; @Versioned - //@OneToMany(mappedBy = "we2") - @ManyToMany + @OneToMany(mappedBy = "we2") + //@ManyToMany //@Transient private Set we1s; Modified: trunk/src/test/org/jboss/envers/test/working/WorkingMain.java =================================================================== --- trunk/src/test/org/jboss/envers/test/working/WorkingMain.java 2008-07-16 07:22:43 UTC (rev 91) +++ trunk/src/test/org/jboss/envers/test/working/WorkingMain.java 2008-07-16 07:25:27 UTC (rev 92) @@ -20,10 +20,7 @@ import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.HashMap; -import java.util.HashSet; +import java.util.*; /** * @author Adam Warski (adam at warski dot org) @@ -60,58 +57,9 @@ // Rev 1 entityManager.getTransaction().begin(); - WorkingEntity2 we2 = new WorkingEntity2(); - entityManager.persist(we2); - entityManager.getTransaction().commit(); - // Rev 2 - entityManager.getTransaction().begin(); - - we2 = entityManager.find(WorkingEntity2.class, we2.getId2()); - - WorkingEntity1 we1 = new WorkingEntity1(); - we1.setWe2(we2); - entityManager.persist(we1); - - entityManager.getTransaction().commit(); - - /* - // Rev 2 - entityManager.getTransaction().begin(); - - se1 = entityManager.find(SubEntity.class, se1.getId()); - se1.setData("y"); - se1.setNumber(20l); - - entityManager.getTransaction().commit(); - - // Test - VersionsReader vr = VersionsReaderFactory.get(entityManager);*/ - //System.out.println(vr.find(SubEntity.class, se1.getId(), 1)); - - /* - cfg.addResource("org/jboss/envers/test/working/test.hbm.xml"); - Session session = getSession(entityManager); - - session.getTransaction().begin(); - - Map test1 = new HashMap(); - test1.put("dataA", "a"); - session.persist("Superclass", test1); - - Map test2 = new HashMap(); - test2.put("dataB", "b"); - session.persist("Subclass", test2); - - session.getTransaction().commit(); - - session.getTransaction().begin(); - - System.out.println(session.createQuery("select s from Superclass s").list()); - System.out.println(session.createQuery("select s from Subclass s").list()); - - session.getTransaction().commit(); */ + entityManager.getTransaction().commit(); } } From jboss-envers-commits at lists.jboss.org Wed Jul 16 03:32:13 2008 From: jboss-envers-commits at lists.jboss.org (jboss-envers-commits at lists.jboss.org) Date: Wed, 16 Jul 2008 03:32:13 -0400 Subject: [jboss-envers-commits] JBoss Envers SVN: r93 - in demos/seam: lib and 1 other directory. Message-ID: Author: adamw Date: 2008-07-16 03:32:13 -0400 (Wed, 16 Jul 2008) New Revision: 93 Added: demos/seam/lib/envers-1.0.0.ga.jar Removed: demos/seam/lib/envers-preview-dev.jar Modified: demos/seam/ Log: New Envers lib Property changes on: demos/seam ___________________________________________________________________ Name: svn:ignore - *.iml + dist demo exploded-archives *.iml Added: demos/seam/lib/envers-1.0.0.ga.jar =================================================================== (Binary files differ) Property changes on: demos/seam/lib/envers-1.0.0.ga.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Deleted: demos/seam/lib/envers-preview-dev.jar =================================================================== (Binary files differ) From jboss-envers-commits at lists.jboss.org Wed Jul 16 05:38:13 2008 From: jboss-envers-commits at lists.jboss.org (jboss-envers-commits at lists.jboss.org) Date: Wed, 16 Jul 2008 05:38:13 -0400 Subject: [jboss-envers-commits] JBoss Envers SVN: r94 - trunk. Message-ID: Author: adamw Date: 2008-07-16 05:38:13 -0400 (Wed, 16 Jul 2008) New Revision: 94 Modified: trunk/build.xml Log: Source code package now zips to a directory Modified: trunk/build.xml =================================================================== --- trunk/build.xml 2008-07-16 07:32:13 UTC (rev 93) +++ trunk/build.xml 2008-07-16 09:38:13 UTC (rev 94) @@ -3,7 +3,7 @@ - + @@ -277,12 +277,12 @@ - + - + From jboss-envers-commits at lists.jboss.org Wed Jul 16 05:40:38 2008 From: jboss-envers-commits at lists.jboss.org (jboss-envers-commits at lists.jboss.org) Date: Wed, 16 Jul 2008 05:40:38 -0400 Subject: [jboss-envers-commits] JBoss Envers SVN: r95 - tags. Message-ID: Author: adamw Date: 2008-07-16 05:40:37 -0400 (Wed, 16 Jul 2008) New Revision: 95 Added: tags/1.0.0-ga/ Log: Taggin the 1.0.0.GA release Copied: tags/1.0.0-ga (from rev 94, trunk) From jboss-envers-commits at lists.jboss.org Mon Jul 28 11:19:50 2008 From: jboss-envers-commits at lists.jboss.org (jboss-envers-commits at lists.jboss.org) Date: Mon, 28 Jul 2008 11:19:50 -0400 Subject: [jboss-envers-commits] JBoss Envers SVN: r96 - in trunk/src: test/org/jboss/envers/test/integration/inheritance/single and 1 other directories. Message-ID: Author: adamw Date: 2008-07-28 11:19:50 -0400 (Mon, 28 Jul 2008) New Revision: 96 Added: trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ChildIngEntity.java trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ChildReferencing.java trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ParentNotIngEntity.java trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ReferencedEntity.java Modified: trunk/src/main/org/jboss/envers/metadata/VersionsMetadataGenerator.java Log: ENVERS-29: bug fix with test Modified: trunk/src/main/org/jboss/envers/metadata/VersionsMetadataGenerator.java =================================================================== --- trunk/src/main/org/jboss/envers/metadata/VersionsMetadataGenerator.java 2008-07-16 09:40:37 UTC (rev 95) +++ trunk/src/main/org/jboss/envers/metadata/VersionsMetadataGenerator.java 2008-07-28 15:19:50 UTC (rev 96) @@ -609,7 +609,12 @@ CompositeMapperBuilder propertyMapper = entitiesConfigurations.get(entityName).getPropertyMapper(); // Mapping unjoined properties - addProperties(document.getRootElement().element("class"), (Iterator) pc.getUnjoinedPropertyIterator(), + Element parent = document.getRootElement().element("class"); + if (parent == null) { + parent = document.getRootElement().element("subclass"); + } + + addProperties(parent, (Iterator) pc.getUnjoinedPropertyIterator(), propertyMapper, versioningData.propertyStoreInfo, entityName, false); // Mapping joins (second pass) Copied: trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ChildIngEntity.java (from rev 95, trunk/src/test/org/jboss/envers/test/integration/inheritance/single/relation/ChildIngEntity.java) =================================================================== --- trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ChildIngEntity.java (rev 0) +++ trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ChildIngEntity.java 2008-07-28 15:19:50 UTC (rev 96) @@ -0,0 +1,70 @@ +package org.jboss.envers.test.integration.inheritance.single.childrelation; + +import org.jboss.envers.Versioned; + +import javax.persistence.*; + +/** + * @author Adam Warski (adam at warski dot org) + */ + at Entity + at DiscriminatorValue("2") + at Versioned +public class ChildIngEntity extends ParentNotIngEntity { + @Basic + private Long number; + + @ManyToOne + private ReferencedEntity referenced; + + public ChildIngEntity() { + } + + public ChildIngEntity(String data, Long number) { + super(data); + this.number = number; + } + + public ChildIngEntity(Integer id, String data, Long number) { + super(id, data); + this.number = number; + } + + public Long getNumber() { + return number; + } + + public void setNumber(Long number) { + this.number = number; + } + + public ReferencedEntity getReferenced() { + return referenced; + } + + public void setReferenced(ReferencedEntity referenced) { + this.referenced = referenced; + } + + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ChildIngEntity)) return false; + if (!super.equals(o)) return false; + + ChildIngEntity childEntity = (ChildIngEntity) o; + + if (number != null ? !number.equals(childEntity.number) : childEntity.number != null) return false; + + return true; + } + + public int hashCode() { + int result = super.hashCode(); + result = 31 * result + (number != null ? number.hashCode() : 0); + return result; + } + + public String toString() { + return "ChildIngEntity(id = " + getId() + ", data = " + getData() + ", number = " + number + ")"; + } +} \ No newline at end of file Copied: trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ChildReferencing.java (from rev 95, trunk/src/test/org/jboss/envers/test/integration/inheritance/single/relation/PolymorphicCollection.java) =================================================================== --- trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ChildReferencing.java (rev 0) +++ trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ChildReferencing.java 2008-07-28 15:19:50 UTC (rev 96) @@ -0,0 +1,98 @@ +package org.jboss.envers.test.integration.inheritance.single.childrelation; + +import org.hibernate.ejb.Ejb3Configuration; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import org.jboss.envers.test.integration.AbstractEntityTest; +import org.jboss.envers.test.tools.TestTools; + +import javax.persistence.EntityManager; +import java.util.Arrays; + +/** + * @author Adam Warski (adam at warski dot org) + */ +public class ChildReferencing extends AbstractEntityTest { + private Integer re_id1; + private Integer re_id2; + private Integer c_id; + + public void configure(Ejb3Configuration cfg) { + cfg.addAnnotatedClass(ChildIngEntity.class); + cfg.addAnnotatedClass(ParentNotIngEntity.class); + cfg.addAnnotatedClass(ReferencedEntity.class); + } + + @BeforeClass(dependsOnMethods = "init") + public void initData() { + EntityManager em = getEntityManager(); + + // Rev 1 + em.getTransaction().begin(); + + ReferencedEntity re1 = new ReferencedEntity(); + em.persist(re1); + re_id1 = re1.getId(); + + ReferencedEntity re2 = new ReferencedEntity(); + em.persist(re2); + re_id2 = re2.getId(); + + em.getTransaction().commit(); + + // Rev 2 + em.getTransaction().begin(); + + re1 = em.find(ReferencedEntity.class, re_id1); + + ChildIngEntity cie = new ChildIngEntity("y", 1l); + cie.setReferenced(re1); + em.persist(cie); + c_id = cie.getId(); + + em.getTransaction().commit(); + + // Rev 3 + em.getTransaction().begin(); + + re2 = em.find(ReferencedEntity.class, re_id2); + cie = em.find(ChildIngEntity.class, c_id); + + System.out.println(re2.getId()); + cie.setReferenced(re2); + + em.getTransaction().commit(); + } + + @Test + public void testRevisionsCounts() { + assert Arrays.asList(1, 2, 3).equals(getVersionsReader().getRevisions(ReferencedEntity.class, re_id1)); + assert Arrays.asList(1, 3).equals(getVersionsReader().getRevisions(ReferencedEntity.class, re_id2)); + assert Arrays.asList(2, 3).equals(getVersionsReader().getRevisions(ChildIngEntity.class, c_id)); + } + + @Test + public void testHistoryOfReferencedCollection1() { + assert getVersionsReader().find(ReferencedEntity.class, re_id1, 1).getReferencing().size() == 0; + assert getVersionsReader().find(ReferencedEntity.class, re_id1, 2).getReferencing().equals( + TestTools.makeSet(new ChildIngEntity(c_id, "y", 1l))); + assert getVersionsReader().find(ReferencedEntity.class, re_id1, 3).getReferencing().size() == 0; + } + + @Test + public void testHistoryOfReferencedCollection2() { + assert getVersionsReader().find(ReferencedEntity.class, re_id2, 1).getReferencing().size() == 0; + assert getVersionsReader().find(ReferencedEntity.class, re_id2, 2).getReferencing().size() == 0; + assert getVersionsReader().find(ReferencedEntity.class, re_id2, 3).getReferencing().equals( + TestTools.makeSet(new ChildIngEntity(c_id, "y", 1l))); + } + + @Test + public void testChildHistory() { + assert getVersionsReader().find(ChildIngEntity.class, c_id, 1) == null; + assert getVersionsReader().find(ChildIngEntity.class, c_id, 2).getReferenced().equals( + new ReferencedEntity(re_id1)); + assert getVersionsReader().find(ChildIngEntity.class, c_id, 3).getReferenced().equals( + new ReferencedEntity(re_id2)); + } +} \ No newline at end of file Copied: trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ParentNotIngEntity.java (from rev 95, trunk/src/test/org/jboss/envers/test/integration/inheritance/single/relation/ParentIngEntity.java) =================================================================== --- trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ParentNotIngEntity.java (rev 0) +++ trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ParentNotIngEntity.java 2008-07-28 15:19:50 UTC (rev 96) @@ -0,0 +1,73 @@ +package org.jboss.envers.test.integration.inheritance.single.childrelation; + +import org.jboss.envers.Versioned; + +import javax.persistence.*; + +/** + * @author Adam Warski (adam at warski dot org) + */ + at Entity + at Inheritance(strategy = InheritanceType.SINGLE_TABLE) + at DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.INTEGER) + at DiscriminatorValue("1") + at Versioned +public class ParentNotIngEntity { + @Id + @GeneratedValue + private Integer id; + + @Basic + private String data; + + public ParentNotIngEntity() { + } + + public ParentNotIngEntity(String data) { + this.data = data; + } + + public ParentNotIngEntity(Integer id, String data) { + this.id = id; + this.data = data; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ParentNotIngEntity)) return false; + + ParentNotIngEntity that = (ParentNotIngEntity) o; + + if (data != null ? !data.equals(that.data) : that.data != null) return false; + if (id != null ? !id.equals(that.id) : that.id != null) return false; + + return true; + } + + public int hashCode() { + int result; + result = (id != null ? id.hashCode() : 0); + result = 31 * result + (data != null ? data.hashCode() : 0); + return result; + } + + public String toString() { + return "ParentNotIngEntity(id = " + getId() + ", data = " + getData() + ")"; + } +} \ No newline at end of file Copied: trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ReferencedEntity.java (from rev 95, trunk/src/test/org/jboss/envers/test/integration/inheritance/single/relation/ReferencedEntity.java) =================================================================== --- trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ReferencedEntity.java (rev 0) +++ trunk/src/test/org/jboss/envers/test/integration/inheritance/single/childrelation/ReferencedEntity.java 2008-07-28 15:19:50 UTC (rev 96) @@ -0,0 +1,61 @@ +package org.jboss.envers.test.integration.inheritance.single.childrelation; + +import org.jboss.envers.Versioned; + +import javax.persistence.Entity; +import javax.persistence.OneToMany; +import javax.persistence.Id; +import javax.persistence.GeneratedValue; +import java.util.Set; + +/** + * @author Adam Warski (adam at warski dot org) + */ + at Entity + at Versioned +public class ReferencedEntity { + @Id + @GeneratedValue + private Integer id; + + @OneToMany(mappedBy = "referenced") + private Set referencing; + + public ReferencedEntity(Integer id) { + this.id = id; + } + + public ReferencedEntity() { + } + + public Set getReferencing() { + return referencing; + } + + public void setReferencing(Set referencing) { + this.referencing = referencing; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ReferencedEntity)) return false; + + ReferencedEntity that = (ReferencedEntity) o; + + if (id != null ? !id.equals(that.id) : that.id != null) return false; + + return true; + } + + public int hashCode() { + return id; + } +} \ No newline at end of file From jboss-envers-commits at lists.jboss.org Tue Jul 29 04:45:00 2008 From: jboss-envers-commits at lists.jboss.org (jboss-envers-commits at lists.jboss.org) Date: Tue, 29 Jul 2008 04:45:00 -0400 Subject: [jboss-envers-commits] JBoss Envers SVN: r97 - in trunk/src: main/org/jboss/envers/entity and 5 other directories. Message-ID: Author: adamw Date: 2008-07-29 04:44:59 -0400 (Tue, 29 Jul 2008) New Revision: 97 Added: trunk/src/main/org/jboss/envers/RevisionType.java trunk/src/main/org/jboss/envers/entity/RevisionTypeType.java trunk/src/main/org/jboss/envers/query/RevisionTypeProperty.java Removed: trunk/src/main/org/jboss/envers/metadata/RevisionType.java Modified: trunk/src/main/org/jboss/envers/entity/EntityInstantiator.java trunk/src/main/org/jboss/envers/metadata/VersionsMetadataGenerator.java trunk/src/main/org/jboss/envers/query/VersionsQueryCreator.java trunk/src/main/org/jboss/envers/query/impl/RevisionsOfEntityQuery.java trunk/src/main/org/jboss/envers/synchronization/work/AbstractVersionsWorkUnit.java trunk/src/main/org/jboss/envers/synchronization/work/AddWorkUnit.java trunk/src/main/org/jboss/envers/synchronization/work/CollectionChangeWorkUnit.java trunk/src/main/org/jboss/envers/synchronization/work/DelWorkUnit.java trunk/src/main/org/jboss/envers/synchronization/work/ModWorkUnit.java trunk/src/test/org/jboss/envers/test/integration/query/SimpleQuery.java Log: ENVERS-32: revision type returned by the query for revisions Copied: trunk/src/main/org/jboss/envers/RevisionType.java (from rev 95, trunk/src/main/org/jboss/envers/metadata/RevisionType.java) =================================================================== --- trunk/src/main/org/jboss/envers/RevisionType.java (rev 0) +++ trunk/src/main/org/jboss/envers/RevisionType.java 2008-07-29 08:44:59 UTC (rev 97) @@ -0,0 +1,65 @@ +/* + * Envers. http://www.jboss.org/envers + * + * Copyright 2008 Red Hat Middleware, LLC. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT A WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License, v.2.1 along with this distribution; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + * Red Hat Author(s): Adam Warski + */ +package org.jboss.envers; + +/** + * Type of the revision. + * @author Adam Warski (adam at warski dot org) + */ +public enum RevisionType { + /** + * Indicates that the entity was added (persisted) at that revision. + */ + ADD((byte) 0), + /** + * Indicates that the entity was modified (one or more of its fields) at that revision. + */ + MOD((byte) 1), + /** + * Indicates that the entity was deleted (removed) at that revision. + */ + DEL((byte) 2); + + private Byte representation; + + RevisionType(byte representation) { + this.representation = representation; + } + + public Byte getRepresentation() { + return representation; + } + + public static RevisionType fromRepresentation(Object representation) { + if (representation == null || !(representation instanceof Byte)) { + return null; + } + + switch ((Byte) representation) { + case 0: return ADD; + case 1: return MOD; + case 2: return DEL; + } + + throw new IllegalArgumentException("Unknown representation: " + representation); + } +} Modified: trunk/src/main/org/jboss/envers/entity/EntityInstantiator.java =================================================================== --- trunk/src/main/org/jboss/envers/entity/EntityInstantiator.java 2008-07-28 15:19:50 UTC (rev 96) +++ trunk/src/main/org/jboss/envers/entity/EntityInstantiator.java 2008-07-29 08:44:59 UTC (rev 97) @@ -21,7 +21,7 @@ */ package org.jboss.envers.entity; -import org.jboss.envers.metadata.RevisionType; +import org.jboss.envers.RevisionType; import org.jboss.envers.exception.VersionsException; import org.jboss.envers.configuration.VersionsConfiguration; import org.jboss.envers.mapper.id.IdMapper; Added: trunk/src/main/org/jboss/envers/entity/RevisionTypeType.java =================================================================== --- trunk/src/main/org/jboss/envers/entity/RevisionTypeType.java (rev 0) +++ trunk/src/main/org/jboss/envers/entity/RevisionTypeType.java 2008-07-29 08:44:59 UTC (rev 97) @@ -0,0 +1,85 @@ +package org.jboss.envers.entity; + +import org.hibernate.usertype.UserType; +import org.hibernate.HibernateException; +import org.jboss.envers.RevisionType; + +import java.sql.ResultSet; +import java.sql.Types; +import java.sql.SQLException; +import java.sql.PreparedStatement; +import java.io.Serializable; + +/** + * A hibernate type for the {@link RevisionType} enum. + * @author Adam Warski (adam at warski dot org) + */ +public class RevisionTypeType implements UserType { + private static final int[] SQL_TYPES = { Types.TINYINT }; + + public int[] sqlTypes() { + return SQL_TYPES; + } + + public Class returnedClass() { + return RevisionType.class; + } + + public RevisionType nullSafeGet(ResultSet resultSet, String[] names, Object owner) throws HibernateException, SQLException { + byte representation = (byte) resultSet.getInt(names[0]); + RevisionType result = null; + + if (!resultSet.wasNull()) { + result = RevisionType.fromRepresentation(representation); + } + + return result; + } + + public void nullSafeSet(PreparedStatement preparedStatement, Object value, int index) throws HibernateException, SQLException { + if (null == value) { + preparedStatement.setNull(index, Types.TINYINT); + } else { + preparedStatement.setInt(index, ((RevisionType) value).getRepresentation()); + } + } + + public Object deepCopy(Object value) throws HibernateException{ + return value; + } + + public boolean isMutable() { + return false; + } + + public Object assemble(Serializable cached, Object owner) throws HibernateException { + return cached; + } + + public Serializable disassemble(Object value) throws HibernateException { + return (Serializable)value; + } + + public Object replace(Object original, Object target, Object owner) throws HibernateException { + return original; + } + + public int hashCode(Object x) throws HibernateException { + return x.hashCode(); + } + + public boolean equals(Object x, Object y) throws HibernateException { + //noinspection ObjectEquality + if (x == y) { + return true; + } + + if (null == x || null == y) { + return false; + } + + return x.equals(y); + } +} + + Deleted: trunk/src/main/org/jboss/envers/metadata/RevisionType.java =================================================================== --- trunk/src/main/org/jboss/envers/metadata/RevisionType.java 2008-07-28 15:19:50 UTC (rev 96) +++ trunk/src/main/org/jboss/envers/metadata/RevisionType.java 2008-07-29 08:44:59 UTC (rev 97) @@ -1,33 +0,0 @@ -/* - * Envers. http://www.jboss.org/envers - * - * Copyright 2008 Red Hat Middleware, LLC. All rights reserved. - * - * This copyrighted material is made available to anyone wishing to use, - * modify, copy, or redistribute it subject to the terms and conditions - * of the GNU Lesser General Public License, v. 2.1. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT A WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License, v.2.1 along with this distribution; if not, write to the Free - * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA. - * - * Red Hat Author(s): Adam Warski - */ -package org.jboss.envers.metadata; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class RevisionType { - private RevisionType() { } - - public final static Byte ADD = 0; - public final static Byte MOD = 1; - public final static Byte DEL = 2; -} Modified: trunk/src/main/org/jboss/envers/metadata/VersionsMetadataGenerator.java =================================================================== --- trunk/src/main/org/jboss/envers/metadata/VersionsMetadataGenerator.java 2008-07-28 15:19:50 UTC (rev 96) +++ trunk/src/main/org/jboss/envers/metadata/VersionsMetadataGenerator.java 2008-07-29 08:44:59 UTC (rev 97) @@ -558,8 +558,9 @@ class_mapping.add((Element) idMapper.getXmlMapping().clone()); // Adding the "revision type" property - MetadataTools.addProperty(class_mapping, verEntCfg.getRevisionTypePropName(), + Element revTypeProperty = MetadataTools.addProperty(class_mapping, verEntCfg.getRevisionTypePropName(), verEntCfg.getRevisionTypePropType(), false); + revTypeProperty.addAttribute("type", "org.jboss.envers.entity.RevisionTypeType"); break; case SINGLE: Copied: trunk/src/main/org/jboss/envers/query/RevisionTypeProperty.java (from rev 95, trunk/src/main/org/jboss/envers/query/RevisionProperty.java) =================================================================== --- trunk/src/main/org/jboss/envers/query/RevisionTypeProperty.java (rev 0) +++ trunk/src/main/org/jboss/envers/query/RevisionTypeProperty.java 2008-07-29 08:44:59 UTC (rev 97) @@ -0,0 +1,46 @@ +/* + * Envers. http://www.jboss.org/envers + * + * Copyright 2008 Red Hat Middleware, LLC. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License, v. 2.1. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT A WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License, v.2.1 along with this distribution; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + * Red Hat Author(s): Adam Warski + */ +package org.jboss.envers.query; + +import org.jboss.envers.query.projection.VersionsProjection; +import org.jboss.envers.reader.VersionsReaderImplementor; +import org.hibernate.criterion.Projection; +import org.hibernate.criterion.Projections; + +/** + * @author Adam Warski (adam at warski dot org) + */ + at SuppressWarnings({"JavaDoc"}) +public class RevisionTypeProperty implements VersionsProjection { + private RevisionTypeProperty() { } + + /** + * Select the revision type + */ + public static VersionsProjection revisionType() { + return new RevisionTypeProperty(); + } + + public Projection getProjection(String entityName, VersionsReaderImplementor versionsReader) { + return Projections.property(versionsReader.getEntitiesCfg().getRevisionTypePropName()); + } +} \ No newline at end of file Modified: trunk/src/main/org/jboss/envers/query/VersionsQueryCreator.java =================================================================== --- trunk/src/main/org/jboss/envers/query/VersionsQueryCreator.java 2008-07-28 15:19:50 UTC (rev 96) +++ trunk/src/main/org/jboss/envers/query/VersionsQueryCreator.java 2008-07-29 08:44:59 UTC (rev 97) @@ -52,11 +52,12 @@ } /** - * Creates a query, which will return a list of two-element arrays, containing the entity instance and the number - * of the revision (unless a projection is set), at which instances of the given entity were modified, and which - * satisfy some conditions. + * Creates a query, which will return a list of three-element arrays, containing the entity instance, the number + * of the revision (unless a projection is set), at which instances of the given entity were modified, and the type + * of the revision ({@link org.jboss.envers.RevisionType}). Additional conditions that the results must satisfy + * may be specified. * @param c Class of the entities for which to query. - * @param selectEntitiesOnly If true, instead of a list of two-element arrays, a list of entites will be + * @param selectEntitiesOnly If true, instead of a list of three-element arrays, a list of entites will be * returned as a result of executing this query. * @return A query for revisions at which instances of the given entity were modified, to which * conditions can be added (for example - a specific id of an entity of class c), and which Modified: trunk/src/main/org/jboss/envers/query/impl/RevisionsOfEntityQuery.java =================================================================== --- trunk/src/main/org/jboss/envers/query/impl/RevisionsOfEntityQuery.java 2008-07-28 15:19:50 UTC (rev 96) +++ trunk/src/main/org/jboss/envers/query/impl/RevisionsOfEntityQuery.java 2008-07-29 08:44:59 UTC (rev 97) @@ -24,6 +24,7 @@ import org.jboss.envers.exception.VersionsException; import org.jboss.envers.reader.VersionsReaderImplementor; import org.jboss.envers.query.criteria.VersionsCriterion; +import org.jboss.envers.RevisionType; import org.hibernate.criterion.Order; import java.util.List; @@ -68,13 +69,15 @@ List entities = new ArrayList(); String originalId = versionsReader.getEntitiesCfg().getOriginalIdPropName(); String revisionPropertyName = versionsReader.getEntitiesCfg().getRevisionPropName(); + String revisionTypePropertyName = versionsReader.getEntitiesCfg().getRevisionTypePropName(); for (Map versionsEntity : queryResult) { Number revision = (Number) ((Map) versionsEntity.get(originalId)).get(revisionPropertyName); + Object entity = entityInstantiator.createInstanceFromVersionsEntity(entityName, versionsEntity, revision); if (!selectEntitiesOnly) { - entities.add(new Object[] { entity, revision }); + entities.add(new Object[] { entity, revision, versionsEntity.get(revisionTypePropertyName) }); } else { entities.add(entity); } Modified: trunk/src/main/org/jboss/envers/synchronization/work/AbstractVersionsWorkUnit.java =================================================================== --- trunk/src/main/org/jboss/envers/synchronization/work/AbstractVersionsWorkUnit.java 2008-07-28 15:19:50 UTC (rev 96) +++ trunk/src/main/org/jboss/envers/synchronization/work/AbstractVersionsWorkUnit.java 2008-07-29 08:44:59 UTC (rev 97) @@ -23,6 +23,7 @@ import org.jboss.envers.configuration.VersionsEntitiesConfiguration; import org.jboss.envers.configuration.VersionsConfiguration; +import org.jboss.envers.RevisionType; import org.hibernate.Session; import java.util.Map; @@ -45,7 +46,7 @@ this.entityName = entityName; } - protected void fillDataWithId(Map data, Number revision, Byte revisionType) { + protected void fillDataWithId(Map data, Number revision, RevisionType revisionType) { VersionsEntitiesConfiguration entitiesCfg = verCfg.getEntitiesCfg(); Map originalId = new HashMap(); Modified: trunk/src/main/org/jboss/envers/synchronization/work/AddWorkUnit.java =================================================================== --- trunk/src/main/org/jboss/envers/synchronization/work/AddWorkUnit.java 2008-07-28 15:19:50 UTC (rev 96) +++ trunk/src/main/org/jboss/envers/synchronization/work/AddWorkUnit.java 2008-07-29 08:44:59 UTC (rev 97) @@ -22,7 +22,7 @@ package org.jboss.envers.synchronization.work; import org.jboss.envers.configuration.VersionsConfiguration; -import org.jboss.envers.metadata.RevisionType; +import org.jboss.envers.RevisionType; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.Session; Modified: trunk/src/main/org/jboss/envers/synchronization/work/CollectionChangeWorkUnit.java =================================================================== --- trunk/src/main/org/jboss/envers/synchronization/work/CollectionChangeWorkUnit.java 2008-07-28 15:19:50 UTC (rev 96) +++ trunk/src/main/org/jboss/envers/synchronization/work/CollectionChangeWorkUnit.java 2008-07-29 08:44:59 UTC (rev 97) @@ -23,7 +23,7 @@ import org.hibernate.Session; import org.jboss.envers.configuration.VersionsConfiguration; -import org.jboss.envers.metadata.RevisionType; +import org.jboss.envers.RevisionType; import java.io.Serializable; import java.util.Map; Modified: trunk/src/main/org/jboss/envers/synchronization/work/DelWorkUnit.java =================================================================== --- trunk/src/main/org/jboss/envers/synchronization/work/DelWorkUnit.java 2008-07-28 15:19:50 UTC (rev 96) +++ trunk/src/main/org/jboss/envers/synchronization/work/DelWorkUnit.java 2008-07-29 08:44:59 UTC (rev 97) @@ -22,7 +22,7 @@ package org.jboss.envers.synchronization.work; import org.jboss.envers.configuration.VersionsConfiguration; -import org.jboss.envers.metadata.RevisionType; +import org.jboss.envers.RevisionType; import org.hibernate.Session; import java.io.Serializable; Modified: trunk/src/main/org/jboss/envers/synchronization/work/ModWorkUnit.java =================================================================== --- trunk/src/main/org/jboss/envers/synchronization/work/ModWorkUnit.java 2008-07-28 15:19:50 UTC (rev 96) +++ trunk/src/main/org/jboss/envers/synchronization/work/ModWorkUnit.java 2008-07-29 08:44:59 UTC (rev 97) @@ -22,7 +22,7 @@ package org.jboss.envers.synchronization.work; import org.jboss.envers.configuration.VersionsConfiguration; -import org.jboss.envers.metadata.RevisionType; +import org.jboss.envers.RevisionType; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.Session; Modified: trunk/src/test/org/jboss/envers/test/integration/query/SimpleQuery.java =================================================================== --- trunk/src/test/org/jboss/envers/test/integration/query/SimpleQuery.java 2008-07-28 15:19:50 UTC (rev 96) +++ trunk/src/test/org/jboss/envers/test/integration/query/SimpleQuery.java 2008-07-29 08:44:59 UTC (rev 97) @@ -5,6 +5,8 @@ import org.jboss.envers.test.tools.TestTools; import org.jboss.envers.query.VersionsRestrictions; import org.jboss.envers.query.RevisionProperty; +import org.jboss.envers.query.RevisionTypeProperty; +import org.jboss.envers.RevisionType; import org.hibernate.ejb.Ejb3Configuration; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -66,6 +68,15 @@ site3.setStr1("a"); em.getTransaction().commit(); + + // Revision 4 + em.getTransaction().begin(); + + site1 = em.find(StrIntTestEntity.class, id1); + + em.remove(site1); + + em.getTransaction().commit(); } @Test @@ -175,8 +186,27 @@ assert ((Object []) result.get(0))[0].equals(new StrIntTestEntity("a", 10, id1)); assert ((Object []) result.get(1))[0].equals(new StrIntTestEntity("c", 10, id1)); + assert ((Object []) result.get(2))[0] == null; assert ((Object []) result.get(0))[1].equals(1); assert ((Object []) result.get(1))[1].equals(2); + assert ((Object []) result.get(2))[1].equals(4); + + assert ((Object []) result.get(0))[2].equals(RevisionType.ADD); + assert ((Object []) result.get(1))[2].equals(RevisionType.MOD); + assert ((Object []) result.get(2))[2].equals(RevisionType.DEL); } + + @Test + public void testSelectRevisionTypeQuery() { + List result = getVersionsReader().createQuery() + .forRevisionsOfEntity(StrIntTestEntity.class, false) + .setProjection(RevisionTypeProperty.revisionType()) + .add(VersionsRestrictions.idEq(id1)) + .getResultList(); + + assert result.get(0).equals(RevisionType.ADD); + assert result.get(1).equals(RevisionType.MOD); + assert result.get(2).equals(RevisionType.DEL); + } }