Author: adamw
Date: 2008-08-31 04:46:36 -0400 (Sun, 31 Aug 2008)
New Revision: 136
Added:
trunk/src/main/org/jboss/envers/revisioninfo/DefaultRevisionInfoGenerator.java
trunk/src/main/org/jboss/envers/revisioninfo/RevisionInfoNumberReader.java
Removed:
trunk/src/main/org/jboss/envers/revisioninfo/AbstractRevisionInfoGenerator.java
trunk/src/main/org/jboss/envers/revisioninfo/CustomRevisionInfoGenerator.java
trunk/src/main/org/jboss/envers/revisioninfo/DefaultRevisionInfoGenerator.java
trunk/src/main/org/jboss/envers/revisioninfo/RevisionNumberGenerator.java
Modified:
trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java
trunk/src/main/org/jboss/envers/configuration/RevisionInfoConfiguration.java
trunk/src/main/org/jboss/envers/configuration/VersionsConfiguration.java
trunk/src/main/org/jboss/envers/configuration/VersionsEntitiesConfiguration.java
trunk/src/main/org/jboss/envers/configuration/metadata/MetadataTools.java
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java
trunk/src/main/org/jboss/envers/query/impl/RevisionsOfEntityQuery.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
Log:
ENVERS-47: revision info always mapped to a class, not as a dynamic model when a custom
revision entity is missing
Modified: trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java 2008-08-30
14:41:47 UTC (rev 135)
+++ trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java 2008-08-31
08:46:36 UTC (rev 136)
@@ -1,3 +1,24 @@
+/*
+ * 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.configuration;
import org.jboss.envers.entities.EntitiesConfigurations;
@@ -12,6 +33,7 @@
import org.dom4j.io.OutputFormat;
import org.dom4j.Document;
import org.dom4j.DocumentException;
+import org.dom4j.Element;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.MappingException;
import org.hibernate.cfg.Configuration;
@@ -30,8 +52,9 @@
public class EntitiesConfigurator {
public EntitiesConfigurations configure(Configuration cfg, YReflectionManager
reflectionManager,
GlobalConfiguration globalCfg,
VersionsEntitiesConfiguration verEntCfg,
- Document revisionInfoXmlMapping) {
- VersionsMetadataGenerator versionsMetaGen = new VersionsMetadataGenerator(cfg,
globalCfg, verEntCfg);
+ Document revisionInfoXmlMapping, Element
revisionInfoRelationMapping) {
+ VersionsMetadataGenerator versionsMetaGen = new VersionsMetadataGenerator(cfg,
globalCfg, verEntCfg,
+ revisionInfoRelationMapping);
DOMWriter writer = new DOMWriter();
// Sorting the persistent class topologically - superclass always before
subclass
Modified: trunk/src/main/org/jboss/envers/configuration/RevisionInfoConfiguration.java
===================================================================
---
trunk/src/main/org/jboss/envers/configuration/RevisionInfoConfiguration.java 2008-08-30
14:41:47 UTC (rev 135)
+++
trunk/src/main/org/jboss/envers/configuration/RevisionInfoConfiguration.java 2008-08-31
08:46:36 UTC (rev 136)
@@ -4,10 +4,7 @@
import org.jboss.envers.tools.reflection.YReflectionManager;
import org.jboss.envers.tools.reflection.YProperty;
import org.jboss.envers.tools.MutableBoolean;
-import org.jboss.envers.RevisionNumber;
-import org.jboss.envers.RevisionTimestamp;
-import org.jboss.envers.RevisionEntity;
-import org.jboss.envers.Versioned;
+import org.jboss.envers.*;
import org.jboss.envers.configuration.metadata.MetadataTools;
import org.jboss.envers.revisioninfo.*;
import org.hibernate.MappingException;
@@ -31,9 +28,9 @@
private String revisionPropType;
public RevisionInfoConfiguration() {
- revisionInfoEntityName = "_revisions_info";
- revisionInfoIdName = "revision_id";
- revisionInfoTimestampName = "revision_timestamp";
+ revisionInfoEntityName = "org.jboss.envers.DefaultRevisionEntity";
+ revisionInfoIdName = "id";
+ revisionInfoTimestampName = "timestamp";
revisionInfoTimestampType = "long";
revisionPropType = "integer";
@@ -42,18 +39,31 @@
private Document generateDefaultRevisionInfoXmlMapping() {
Document document = DocumentHelper.createDocument();
- Element class_mapping = MetadataTools.createEntity(document,
revisionInfoEntityName,
- null, null, null, null);
+ Element class_mapping = MetadataTools.createEntity(document, null, null, null,
null, null);
- MetadataTools.addNativelyGeneratedId(class_mapping, revisionInfoIdName,
+ class_mapping.addAttribute("name", revisionInfoEntityName);
+ class_mapping.addAttribute("table", "_revisions_info");
+
+ Element idProperty = MetadataTools.addNativelyGeneratedId(class_mapping,
revisionInfoIdName,
revisionPropType);
+ MetadataTools.addColumn(idProperty, "revision_id", null);
- MetadataTools.addProperty(class_mapping, revisionInfoTimestampName,
+ Element timestampProperty = MetadataTools.addProperty(class_mapping,
revisionInfoTimestampName,
revisionInfoTimestampType, false);
+ MetadataTools.addColumn(timestampProperty, "revision_timestamp",
null);
return document;
}
+ private Element generateRevisionInfoRelationMapping() {
+ Document document = DocumentHelper.createDocument();
+ Element rev_rel_mapping =document.addElement("key-many-to-one");
+ rev_rel_mapping.addAttribute("type", revisionPropType);
+ rev_rel_mapping.addAttribute("class", revisionInfoEntityName);
+
+ return rev_rel_mapping;
+ }
+
private void searchForRevisionInfoCfg(YClass clazz, YReflectionManager
reflectionManager,
MutableBoolean revisionNumberFound,
MutableBoolean revisionTimestampFound) {
YClass superclazz = clazz.getSuperclass();
@@ -112,6 +122,8 @@
boolean revisionEntityFound = false;
RevisionInfoGenerator revisionInfoGenerator = null;
+ Class<?> revisionInfoClass = null;
+
while (classes.hasNext()) {
PersistentClass pc = classes.next();
YClass clazz;
@@ -151,7 +163,8 @@
revisionInfoEntityName = pc.getEntityName();
- revisionInfoGenerator = new
CustomRevisionInfoGenerator(revisionInfoEntityName, pc.getMappedClass(),
+ revisionInfoClass = pc.getMappedClass();
+ revisionInfoGenerator = new
DefaultRevisionInfoGenerator(revisionInfoEntityName, pc.getMappedClass(),
revisionEntity.value(), revisionInfoTimestampName);
}
}
@@ -160,14 +173,19 @@
Document revisionInfoXmlMapping = null;
if (revisionInfoGenerator == null) {
- revisionInfoGenerator = new
DefaultRevisionInfoGenerator(revisionInfoEntityName, revisionInfoTimestampName);
+ // TODO - remove default
+ //revisionInfoGenerator = new
DefaultRevisionInfoGenerator(revisionInfoEntityName, revisionInfoTimestampName);
+ revisionInfoClass = DefaultRevisionEntity.class;
+ revisionInfoGenerator = new
DefaultRevisionInfoGenerator(revisionInfoEntityName, DefaultRevisionEntity.class,
+ RevisionListener.class, revisionInfoTimestampName);
revisionInfoXmlMapping = generateDefaultRevisionInfoXmlMapping();
}
return new RevisionInfoConfigurationResult(
revisionInfoGenerator, revisionPropType, revisionInfoXmlMapping,
new RevisionInfoQueryCreator(revisionInfoEntityName, revisionInfoIdName,
revisionInfoTimestampName),
- revisionInfoEntityName, revisionInfoIdName);
+ generateRevisionInfoRelationMapping(), revisionInfoIdName,
+ new RevisionInfoNumberReader(revisionInfoClass, revisionInfoIdName));
}
}
@@ -176,18 +194,22 @@
private final String revisionPropType;
private final Document revisionInfoXmlMapping;
private final RevisionInfoQueryCreator revisionInfoQueryCreator;
- private final String revisionInfoEntityName;
+ private final Element revisionInfoRelationMapping;
+ // TODO - remove ?
private final String revisionInfoIdName;
+ private final RevisionInfoNumberReader revisionInfoNumberReader;
RevisionInfoConfigurationResult(RevisionInfoGenerator revisionInfoGenerator, String
revisionPropType,
Document revisionInfoXmlMapping,
RevisionInfoQueryCreator revisionInfoQueryCreator,
- String revisionInfoEntityName, String
revisionInfoIdName) {
+ Element revisionInfoRelationMapping, String
revisionInfoIdName,
+ RevisionInfoNumberReader revisionInfoNumberReader) {
this.revisionInfoGenerator = revisionInfoGenerator;
this.revisionPropType = revisionPropType;
this.revisionInfoXmlMapping = revisionInfoXmlMapping;
this.revisionInfoQueryCreator = revisionInfoQueryCreator;
- this.revisionInfoEntityName = revisionInfoEntityName;
+ this.revisionInfoRelationMapping = revisionInfoRelationMapping;
this.revisionInfoIdName = revisionInfoIdName;
+ this.revisionInfoNumberReader = revisionInfoNumberReader;
}
public RevisionInfoGenerator getRevisionInfoGenerator() {
@@ -206,11 +228,15 @@
return revisionInfoQueryCreator;
}
- public String getRevisionInfoEntityName() {
- return revisionInfoEntityName;
+ public Element getRevisionInfoRelationMapping() {
+ return revisionInfoRelationMapping;
}
public String getRevisionInfoIdName() {
return revisionInfoIdName;
}
+
+ public RevisionInfoNumberReader getRevisionInfoNumberReader() {
+ return revisionInfoNumberReader;
+ }
}
\ No newline at end of file
Modified: trunk/src/main/org/jboss/envers/configuration/VersionsConfiguration.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/VersionsConfiguration.java 2008-08-30
14:41:47 UTC (rev 135)
+++ trunk/src/main/org/jboss/envers/configuration/VersionsConfiguration.java 2008-08-31
08:46:36 UTC (rev 136)
@@ -26,6 +26,7 @@
import org.jboss.envers.synchronization.VersionsSyncManager;
import org.jboss.envers.tools.reflection.YReflectionManager;
import org.jboss.envers.revisioninfo.RevisionInfoQueryCreator;
+import org.jboss.envers.revisioninfo.RevisionInfoNumberReader;
import java.util.*;
@@ -38,6 +39,7 @@
private final VersionsSyncManager versionsSyncManager;
private final EntitiesConfigurations entCfg;
private final RevisionInfoQueryCreator revisionInfoQueryCreator;
+ private final RevisionInfoNumberReader revisionInfoNumberReader;
public VersionsEntitiesConfiguration getVerEntCfg() {
return verEntCfg;
@@ -59,6 +61,10 @@
return revisionInfoQueryCreator;
}
+ public RevisionInfoNumberReader getRevisionInfoNumberReader() {
+ return revisionInfoNumberReader;
+ }
+
@SuppressWarnings({"unchecked"})
public VersionsConfiguration(Configuration cfg) {
Properties properties = cfg.getProperties();
@@ -67,12 +73,13 @@
RevisionInfoConfiguration revInfoCfg = new RevisionInfoConfiguration();
RevisionInfoConfigurationResult revInfoCfgResult = revInfoCfg.configure(cfg,
reflectionManager);
verEntCfg = new VersionsEntitiesConfiguration(properties,
revInfoCfgResult.getRevisionPropType(),
- revInfoCfgResult.getRevisionInfoEntityName(),
revInfoCfgResult.getRevisionInfoIdName());
+ revInfoCfgResult.getRevisionInfoIdName());
globalCfg = new GlobalConfiguration(properties);
versionsSyncManager = new
VersionsSyncManager(revInfoCfgResult.getRevisionInfoGenerator());
revisionInfoQueryCreator = revInfoCfgResult.getRevisionInfoQueryCreator();
+ revisionInfoNumberReader = revInfoCfgResult.getRevisionInfoNumberReader();
entCfg = new EntitiesConfigurator().configure(cfg, reflectionManager, globalCfg,
verEntCfg,
- revInfoCfgResult.getRevisionInfoXmlMapping());
+ revInfoCfgResult.getRevisionInfoXmlMapping(),
revInfoCfgResult.getRevisionInfoRelationMapping());
}
//
Modified:
trunk/src/main/org/jboss/envers/configuration/VersionsEntitiesConfiguration.java
===================================================================
---
trunk/src/main/org/jboss/envers/configuration/VersionsEntitiesConfiguration.java 2008-08-30
14:41:47 UTC (rev 135)
+++
trunk/src/main/org/jboss/envers/configuration/VersionsEntitiesConfiguration.java 2008-08-31
08:46:36 UTC (rev 136)
@@ -37,17 +37,16 @@
private final String revisionPropType;
private final String revisionPropPath;
+ private final String revisionEntityPath;
+
private final String revisionTypePropName;
private final String revisionTypePropType;
- private final String revisionInfoEntityName;
private final String revisionInfoIdName;
private final Map<String, String> customVersionsTablesNames;
- public VersionsEntitiesConfiguration(Properties properties, String revisionPropType,
String revisionInfoEntityName,
- String revisionInfoIdName) {
- this.revisionInfoEntityName = revisionInfoEntityName;
+ public VersionsEntitiesConfiguration(Properties properties, String revisionPropType,
String revisionInfoIdName) {
this.revisionInfoIdName = revisionInfoIdName;
versionsTablePrefix =
properties.getProperty("org.jboss.envers.versionsTablePrefix", "");
@@ -63,7 +62,8 @@
customVersionsTablesNames = new HashMap<String, String>();
- revisionPropPath = originalIdPropName + "." + revisionPropName +
".id";
+ revisionEntityPath = originalIdPropName + "." + revisionPropName;
+ revisionPropPath = revisionEntityPath + ".id";
}
public String getOriginalIdPropName() {
@@ -90,14 +90,14 @@
return revisionTypePropType;
}
- public String getRevisionInfoEntityName() {
- return revisionInfoEntityName;
- }
-
public String getRevisionInfoIdName() {
return revisionInfoIdName;
}
+ public String getRevisionEntityPath() {
+ return revisionEntityPath;
+ }
+
//
public void addCustomVersionsTableName(String entityName, String tableName) {
Modified: trunk/src/main/org/jboss/envers/configuration/metadata/MetadataTools.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/metadata/MetadataTools.java 2008-08-30
14:41:47 UTC (rev 135)
+++ trunk/src/main/org/jboss/envers/configuration/metadata/MetadataTools.java 2008-08-31
08:46:36 UTC (rev 136)
@@ -70,8 +70,11 @@
hibernate_mapping.addAttribute("auto-import", "false");
Element class_mapping = hibernate_mapping.addElement(type);
- class_mapping.addAttribute("entity-name", entityName);
+ if (entityName != null) {
+ class_mapping.addAttribute("entity-name", entityName);
+ }
+
if (discriminatorValue != null) {
class_mapping.addAttribute("discriminator-value",
discriminatorValue);
}
Modified:
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java
===================================================================
---
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-30
14:41:47 UTC (rev 135)
+++
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-31
08:46:36 UTC (rev 136)
@@ -59,6 +59,7 @@
private final Configuration cfg;
private final GlobalConfiguration globalCfg;
private final VersionsEntitiesConfiguration verEntCfg;
+ private final Element revisionInfoRelationMapping;
private Map<String, EntityConfiguration> entitiesConfigurations;
@@ -68,10 +69,12 @@
private YLog log =
YLogManager.getLogManager().getLog(VersionsMetadataGenerator.class);
public VersionsMetadataGenerator(Configuration cfg, GlobalConfiguration globalCfg,
- VersionsEntitiesConfiguration verEntCfg) {
+ VersionsEntitiesConfiguration verEntCfg,
+ Element revisionInfoRelationMapping) {
this.cfg = cfg;
this.globalCfg = globalCfg;
this.verEntCfg = verEntCfg;
+ this.revisionInfoRelationMapping = revisionInfoRelationMapping;
entitiesConfigurations = new HashMap<String, EntityConfiguration>();
entitiesJoins = new HashMap<String, Map<Join, Element>>();
@@ -91,13 +94,11 @@
}
private void addRevisionInfoRelation(Element any_mapping) {
- Element rev_mapping = /*MetadataTools.addProperty(any_mapping,
verEntCfg.getRevisionPropName(),
- verEntCfg.getRevisionPropType(), true); */
- any_mapping.addElement("key-many-to-one");
+ Element rev_mapping = (Element) revisionInfoRelationMapping.clone();
rev_mapping.addAttribute("name", verEntCfg.getRevisionPropName());
- rev_mapping.addAttribute("type", verEntCfg.getRevisionPropType());
- rev_mapping.addAttribute("entity-name",
verEntCfg.getRevisionInfoEntityName());
MetadataTools.addColumn(rev_mapping, verEntCfg.getRevisionPropName(), null);
+
+ any_mapping.add(rev_mapping);
}
private void addRevisionType(Element any_mapping) {
Modified: trunk/src/main/org/jboss/envers/query/impl/RevisionsOfEntityQuery.java
===================================================================
--- trunk/src/main/org/jboss/envers/query/impl/RevisionsOfEntityQuery.java 2008-08-30
14:41:47 UTC (rev 135)
+++ trunk/src/main/org/jboss/envers/query/impl/RevisionsOfEntityQuery.java 2008-08-31
08:46:36 UTC (rev 136)
@@ -63,7 +63,8 @@
if (revisionInfoObject instanceof HibernateProxy) {
return (Number) ((HibernateProxy)
revisionInfoObject).getHibernateLazyInitializer().getIdentifier();
} else {
- return (Number) ((Map)
revisionInfoObject).get(verEntCfg.getRevisionInfoIdName());
+ // Not a proxy - must be read from cache or with a join
+ return
verCfg.getRevisionInfoNumberReader().getRevisionNumber(revisionInfoObject);
}
}
@@ -76,10 +77,8 @@
SELECT e (unless another projection is specified) FROM ent_ver e WHERE
e.revision_type != DEL AND (if selectDeletedEntities == false)
(all specified conditions, transformed, on the "e" entity)
- ORDER BY e.revision ASC (unless another order is specified)
- */
- String revisionPropertyPath = verEntCfg.getRevisionPropPath();
-
+ ORDER BY e.revision ASC (unless another order or projection is specified)
+ */
if (!selectDeletedEntities) {
// e.revision_type != DEL AND
versionsCriteria.add(Property.forName(verEntCfg.getRevisionTypePropName()).ne(RevisionType.DEL));
@@ -91,16 +90,21 @@
}
if (!hasProjection && !hasOrder) {
+ String revisionPropertyPath = verEntCfg.getRevisionPropPath();
versionsCriteria.addOrder(Order.asc(revisionPropertyPath));
}
+ // TODO
+ if (!selectEntitiesOnly) {
+ //versionsCriteria.setFetchMode("e._revision", FetchMode.JOIN);
+
//versionsCriteria.createCriteria("e.originalId._revision").add(Property.forName("revision_id").eq(1));
+ }
+
List<Map> queryResult = versionsCriteria.list();
if (hasProjection) {
return queryResult;
} else {
List entities = new ArrayList();
- String originalId = verEntCfg.getOriginalIdPropName();
- String revisionPropertyName = verEntCfg.getRevisionPropName();
String revisionTypePropertyName = verEntCfg.getRevisionTypePropName();
for (Map versionsEntity : queryResult) {
Deleted: trunk/src/main/org/jboss/envers/revisioninfo/AbstractRevisionInfoGenerator.java
===================================================================
---
trunk/src/main/org/jboss/envers/revisioninfo/AbstractRevisionInfoGenerator.java 2008-08-30
14:41:47 UTC (rev 135)
+++
trunk/src/main/org/jboss/envers/revisioninfo/AbstractRevisionInfoGenerator.java 2008-08-31
08:46:36 UTC (rev 136)
@@ -1,22 +0,0 @@
-package org.jboss.envers.revisioninfo;
-
-import org.hibernate.Session;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public abstract class AbstractRevisionInfoGenerator implements RevisionInfoGenerator {
- private final String revisionInfoEntityName;
-
- protected AbstractRevisionInfoGenerator(String revisionInfoEntityName) {
- this.revisionInfoEntityName = revisionInfoEntityName;
- }
-
- protected abstract Object newRevision();
-
- public Object generate(Session session) {
- Object revisionData = newRevision();
- session.save(revisionInfoEntityName, revisionData);
- return revisionData;
- }
-}
Deleted: trunk/src/main/org/jboss/envers/revisioninfo/CustomRevisionInfoGenerator.java
===================================================================
---
trunk/src/main/org/jboss/envers/revisioninfo/CustomRevisionInfoGenerator.java 2008-08-30
14:41:47 UTC (rev 135)
+++
trunk/src/main/org/jboss/envers/revisioninfo/CustomRevisionInfoGenerator.java 2008-08-31
08:46:36 UTC (rev 136)
@@ -1,77 +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.revisioninfo;
-
-import org.jboss.envers.RevisionListener;
-import org.jboss.envers.tools.reflection.ReflectionTools;
-import org.hibernate.MappingException;
-import org.hibernate.property.Setter;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class CustomRevisionInfoGenerator extends AbstractRevisionInfoGenerator implements
RevisionInfoGenerator {
- private final RevisionListener listener;
- private final Setter revisionTimestampSetter;
- private final Class<?> entityClass;
-
- public CustomRevisionInfoGenerator(String revisionInfoEntityName, Class<?>
entityClass,
- Class<? extends RevisionListener>
listenerClass,
- String revisionInfoTimestampName) {
- super(revisionInfoEntityName);
-
- this.entityClass = entityClass;
-
- revisionTimestampSetter = ReflectionTools.getSetter(entityClass,
revisionInfoTimestampName);
-
- if (!listenerClass.equals(RevisionListener.class)) {
- // This is not the default value.
- try {
- listener = listenerClass.newInstance();
- } catch (InstantiationException e) {
- throw new MappingException(e);
- } catch (IllegalAccessException e) {
- throw new MappingException(e);
- }
- } else {
- // Default listener - none
- listener = null;
- }
- }
-
- public Object newRevision() {
- Object entity;
- try {
- entity = entityClass.newInstance();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
-
- revisionTimestampSetter.set(entity, System.currentTimeMillis(), null);
-
- if (listener != null) {
- listener.newRevision(entity);
- }
-
- return entity;
- }
-}
Deleted: trunk/src/main/org/jboss/envers/revisioninfo/DefaultRevisionInfoGenerator.java
===================================================================
---
trunk/src/main/org/jboss/envers/revisioninfo/DefaultRevisionInfoGenerator.java 2008-08-30
14:41:47 UTC (rev 135)
+++
trunk/src/main/org/jboss/envers/revisioninfo/DefaultRevisionInfoGenerator.java 2008-08-31
08:46:36 UTC (rev 136)
@@ -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.revisioninfo;
-
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class DefaultRevisionInfoGenerator extends AbstractRevisionInfoGenerator
implements RevisionInfoGenerator {
- private final String revisionInfoTimestampName;
-
- public DefaultRevisionInfoGenerator(String revisionInfoEntityName, String
revisionInfoTimestampName) {
- super(revisionInfoEntityName);
-
- this.revisionInfoTimestampName = revisionInfoTimestampName;
- }
-
- public Object newRevision() {
- Map<String, Object> revisionInfo = new HashMap<String, Object>();
- revisionInfo.put(revisionInfoTimestampName, System.currentTimeMillis());
-
- return revisionInfo;
- }
-}
Copied: trunk/src/main/org/jboss/envers/revisioninfo/DefaultRevisionInfoGenerator.java
(from rev 135,
trunk/src/main/org/jboss/envers/revisioninfo/CustomRevisionInfoGenerator.java)
===================================================================
--- trunk/src/main/org/jboss/envers/revisioninfo/DefaultRevisionInfoGenerator.java
(rev 0)
+++
trunk/src/main/org/jboss/envers/revisioninfo/DefaultRevisionInfoGenerator.java 2008-08-31
08:46:36 UTC (rev 136)
@@ -0,0 +1,84 @@
+/*
+ * 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.revisioninfo;
+
+import org.jboss.envers.RevisionListener;
+import org.jboss.envers.tools.reflection.ReflectionTools;
+import org.hibernate.MappingException;
+import org.hibernate.Session;
+import org.hibernate.property.Setter;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class DefaultRevisionInfoGenerator implements RevisionInfoGenerator {
+ private final String revisionInfoEntityName;
+ private final RevisionListener listener;
+ private final Setter revisionTimestampSetter;
+ private final Class<?> revisionInfoClass;
+
+ public DefaultRevisionInfoGenerator(String revisionInfoEntityName, Class<?>
revisionInfoClass,
+ Class<? extends RevisionListener>
listenerClass,
+ String revisionInfoTimestampName) {
+ this.revisionInfoEntityName = revisionInfoEntityName;
+ this.revisionInfoClass = revisionInfoClass;
+
+ revisionTimestampSetter = ReflectionTools.getSetter(revisionInfoClass,
revisionInfoTimestampName);
+
+ if (!listenerClass.equals(RevisionListener.class)) {
+ // This is not the default value.
+ try {
+ listener = listenerClass.newInstance();
+ } catch (InstantiationException e) {
+ throw new MappingException(e);
+ } catch (IllegalAccessException e) {
+ throw new MappingException(e);
+ }
+ } else {
+ // Default listener - none
+ listener = null;
+ }
+ }
+
+ private Object newRevision() {
+ Object revisionInfo;
+ try {
+ revisionInfo = revisionInfoClass.newInstance();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ revisionTimestampSetter.set(revisionInfo, System.currentTimeMillis(), null);
+
+ if (listener != null) {
+ listener.newRevision(revisionInfo);
+ }
+
+ return revisionInfo;
+ }
+
+ public Object generate(Session session) {
+ Object revisionData = newRevision();
+ session.save(revisionInfoEntityName, revisionData);
+ return revisionData;
+ }
+}
Property changes on:
trunk/src/main/org/jboss/envers/revisioninfo/DefaultRevisionInfoGenerator.java
___________________________________________________________________
Name: svn:mergeinfo
+
Added: trunk/src/main/org/jboss/envers/revisioninfo/RevisionInfoNumberReader.java
===================================================================
--- trunk/src/main/org/jboss/envers/revisioninfo/RevisionInfoNumberReader.java
(rev 0)
+++ trunk/src/main/org/jboss/envers/revisioninfo/RevisionInfoNumberReader.java 2008-08-31
08:46:36 UTC (rev 136)
@@ -0,0 +1,40 @@
+/*
+ * 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.revisioninfo;
+
+import org.jboss.envers.tools.reflection.ReflectionTools;
+import org.hibernate.property.Getter;
+
+/**
+ * Gets a revision number from a persisted revision info entity.
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class RevisionInfoNumberReader {
+ private final Getter revisionIdGetter;
+ public RevisionInfoNumberReader(Class<?> revisionInfoClass, String
revisionInfoIdName) {
+ revisionIdGetter = ReflectionTools.getGetter(revisionInfoClass,
revisionInfoIdName);
+ }
+
+ public Number getRevisionNumber(Object revision) {
+ return (Number) revisionIdGetter.get(revision);
+ }
+}
Deleted: trunk/src/main/org/jboss/envers/revisioninfo/RevisionNumberGenerator.java
===================================================================
--- trunk/src/main/org/jboss/envers/revisioninfo/RevisionNumberGenerator.java 2008-08-30
14:41:47 UTC (rev 135)
+++ trunk/src/main/org/jboss/envers/revisioninfo/RevisionNumberGenerator.java 2008-08-31
08:46:36 UTC (rev 136)
@@ -1,20 +0,0 @@
-package org.jboss.envers.revisioninfo;
-
-import org.hibernate.Session;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class RevisionNumberGenerator {
- private final String revisionInfoEntityName;
- private final RevisionInfoGenerator revisionInfoGenerator;
-
- public RevisionNumberGenerator(String revisionInfoEntityName, RevisionInfoGenerator
revisionInfoGenerator) {
- this.revisionInfoEntityName = revisionInfoEntityName;
- this.revisionInfoGenerator = revisionInfoGenerator;
- }
-
- public Number generate(Session session) {
- return (Number) session.save(revisionInfoEntityName,
revisionInfoGenerator.newRevision());
- }
-}
Modified: trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java 2008-08-30 14:41:47
UTC (rev 135)
+++ trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java 2008-08-31 08:46:36
UTC (rev 136)
@@ -3,6 +3,7 @@
import org.jboss.envers.Versioned;
import org.jboss.envers.SecondaryVersionsTable;
import org.jboss.envers.SecondaryVersionsTables;
+import org.hibernate.annotations.CollectionOfElements;
import javax.persistence.*;
import java.util.Set;
@@ -33,10 +34,16 @@
@Transient
private WorkingEntity2 we2;
- @ManyToMany(mappedBy="we1s")
- @Versioned
+ //@ManyToMany(mappedBy="we1s")
+ //@Versioned
+ @Transient
private Set<WorkingEntity2> we2s;
+ //@CollectionOfElements
+ //@Versioned
+ @Transient
+ private Set<String> strs;
+
public WorkingEntity1() {
}
@@ -94,6 +101,14 @@
this.we2s = we2s;
}
+ public Set<String> getStrs() {
+ return strs;
+ }
+
+ public void setStrs(Set<String> strs) {
+ this.strs = strs;
+ }
+
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof WorkingEntity1)) return false;
Modified: trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java 2008-08-30 14:41:47
UTC (rev 135)
+++ trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java 2008-08-31 08:46:36
UTC (rev 136)
@@ -21,10 +21,10 @@
@Column
private String str2;
- @Versioned
- //@OneToMany //(mappedBy="we2")
- @ManyToMany
- //@Transient
+ //@Versioned
+ @OneToMany //(mappedBy="we2")
+ //@ManyToMany
+ @JoinColumn(name = "ID_2")
private Set<WorkingEntity1> we1s;
//@Versioned
Modified: trunk/src/test/org/jboss/envers/test/working/WorkingMain.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/working/WorkingMain.java 2008-08-30 14:41:47 UTC
(rev 135)
+++ trunk/src/test/org/jboss/envers/test/working/WorkingMain.java 2008-08-31 08:46:36 UTC
(rev 136)
@@ -49,7 +49,7 @@
Ejb3Configuration cfg = new Ejb3Configuration();
cfg.configure("hibernate.test.cfg.xml");
cfg.addAnnotatedClass(WorkingEntity1.class);
- cfg.addAnnotatedClass(WorkingEntity2.class);
+ //cfg.addAnnotatedClass(WorkingEntity2.class);
//cfg.addAnnotatedClass(RevEntity.class);
//cfg.addAnnotatedClass(PostalAddress.class);
//cfg.addAnnotatedClass(ContactMech.class);
@@ -63,30 +63,30 @@
WorkingEntity1 we1 = new WorkingEntity1("b", "c");
entityManager.persist(we1);
- WorkingEntity1 we1_2 = new WorkingEntity1("b2", "c2");
+ /*WorkingEntity1 we1_2 = new WorkingEntity1("b2", "c2");
entityManager.persist(we1_2);
WorkingEntity1 we1_3 = new WorkingEntity1("b3", "c3");
- entityManager.persist(we1_3);
+ entityManager.persist(we1_3);*/
- WorkingEntity2 we2 = new WorkingEntity2("s");
+ /*WorkingEntity2 we2 = new WorkingEntity2("s");
Set<WorkingEntity1> we1s = new HashSet<WorkingEntity1>();
we1s.add(we1_3);
we2.setWe1s(we1s);
- entityManager.persist(we2);
+ entityManager.persist(we2); */
entityManager.getTransaction().commit();
// Rev 2
entityManager.getTransaction().begin();
- we1_3 = entityManager.find(WorkingEntity1.class, we1_3.getId1());
+ /*we1_3 = entityManager.find(WorkingEntity1.class, we1_3.getId1());
WorkingEntity2 we2_1 = new WorkingEntity2("s2");
we1s = new HashSet<WorkingEntity1>();
we1s.add(we1_3);
we2_1.setWe1s(we1s);
- entityManager.persist(we2_1);
+ entityManager.persist(we2_1);*/
entityManager.getTransaction().commit();
@@ -94,11 +94,12 @@
entityManager.getTransaction().begin();
VersionsReader vr = VersionsReaderFactory.get(entityManager);
- System.out.println("1: " + vr.find(WorkingEntity1.class,
we1_3.getId1(), 1).getWe2s());
- System.out.println("2: " + vr.find(WorkingEntity1.class,
we1_3.getId1(), 2).getWe2s());
+ System.out.println("Revisions: ");
+ List results = vr.createQuery().forRevisionsOfEntity(WorkingEntity1.class, false,
true).getResultList();
+ for (Object result : results) {
+ System.out.println(Arrays.toString((Object[]) result));
+ }
- System.out.println("Revs we1_3: " +
vr.getRevisions(WorkingEntity1.class, we1_3.getId1()));
-
entityManager.getTransaction().commit();
}
}