JBoss Envers SVN: r126 - in trunk/src: main/org/jboss/envers/entities/mapper and 5 other directories.
by jboss-envers-commits@lists.jboss.org
Author: adamw
Date: 2008-08-25 03:04:48 -0400 (Mon, 25 Aug 2008)
New Revision: 126
Removed:
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyDetachedInitializor.java
Modified:
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java
trunk/src/main/org/jboss/envers/entities/mapper/PersistentCollectionChangeData.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java
trunk/src/main/org/jboss/envers/event/VersionsEventListener.java
trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java
trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java
Log:
ENVERS-24: generating revision numbers for bidirectional many-to-many relations
Modified: trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-23 10:59:58 UTC (rev 125)
+++ trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-25 07:04:48 UTC (rev 126)
@@ -384,8 +384,6 @@
versionsMiddleEntityName, referencingIdMapping.getIdMapper().prefixMappedProperties(referencingPrefix),
referencedIdMapping.getIdMapper().prefixMappedProperties(referencedPrefix),
entitiesConfigurations.get(referencedEntityName).getIdMapper()));
-
- // TODO: ???
}
@SuppressWarnings({"unchecked"})
@@ -405,8 +403,7 @@
return null;
}
- private void addManyToManyNotOwning(Property property, CompositeMapperBuilder mapper, String entityName,
- EntityMappingData mappingData) {
+ private void addManyToManyNotOwning(Property property, CompositeMapperBuilder mapper, String entityName) {
Collection propertyValue = (Collection) property.getValue();
ManyToOne mto = (ManyToOne) propertyValue.getElement();
@@ -448,8 +445,6 @@
versionsMiddleEntityName, referencingIdMapping.getIdMapper().prefixMappedProperties(referencingPrefix),
referencedIdMapping.getIdMapper().prefixMappedProperties(referencedPrefix),
entitiesConfigurations.get(referencedEntityName).getIdMapper()));
-
- // TODO
}
private ModificationStore getStoreForProperty(Property property, PropertyStoreInfo propertyStoreInfo,
@@ -558,7 +553,7 @@
((Collection) property.getValue()).isInverse()) {
// only second pass
if (!firstPass) {
- addManyToManyNotOwning(property, currentMapper, entityName, mappingData);
+ addManyToManyNotOwning(property, currentMapper, entityName);
}
} else {
String message = "Type not supported for versioning: " + propertyType.getClass().getName() +
Modified: trunk/src/main/org/jboss/envers/entities/mapper/PersistentCollectionChangeData.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/PersistentCollectionChangeData.java 2008-08-23 10:59:58 UTC (rev 125)
+++ trunk/src/main/org/jboss/envers/entities/mapper/PersistentCollectionChangeData.java 2008-08-25 07:04:48 UTC (rev 126)
@@ -6,12 +6,14 @@
* @author Adam Warski (adam at warski dot org)
*/
public class PersistentCollectionChangeData {
- private String entityName;
- private Map<String, Object> data;
+ private final String entityName;
+ private final Map<String, Object> data;
+ private final Object obj;
- public PersistentCollectionChangeData(String entityName, Map<String, Object> data) {
+ public PersistentCollectionChangeData(String entityName, Map<String, Object> data, Object obj) {
this.entityName = entityName;
this.data = data;
+ this.obj = obj;
}
public String getEntityName() {
@@ -21,4 +23,8 @@
public Map<String, Object> getData() {
return data;
}
+
+ public Object getObj() {
+ return obj;
+ }
}
Modified: trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java 2008-08-23 10:59:58 UTC (rev 125)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java 2008-08-25 07:04:48 UTC (rev 126)
@@ -69,7 +69,7 @@
Map<String, Object> originalId = new HashMap<String, Object>();
entityData.put(verEntCfg.getOriginalIdPropName(), originalId);
- collectionChanges.add(new PersistentCollectionChangeData(versionsMiddleEntityName, entityData));
+ collectionChanges.add(new PersistentCollectionChangeData(versionsMiddleEntityName, entityData, changedEntity));
referencingMiddleIdMapper.mapToMapFromId(originalId, id);
referencedMiddleIdMapper.mapToMapFromEntity(originalId, changedEntity);
Deleted: trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyDetachedInitializor.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyDetachedInitializor.java 2008-08-23 10:59:58 UTC (rev 125)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyDetachedInitializor.java 2008-08-25 07:04:48 UTC (rev 126)
@@ -1,55 +0,0 @@
-package org.jboss.envers.entities.mapper.relation.lazy;
-
-import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
-import org.jboss.envers.entities.mapper.relation.DetachedRelationQueryGenerator;
-import org.jboss.envers.entities.EntityInstantiator;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.exception.VersionsException;
-import org.jboss.envers.configuration.VersionsConfiguration;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToManyDetachedInitializor<T extends Collection> implements Initializor<T> {
- private final VersionsConfiguration verCfg;
- private final String entityName;
- private final DetachedRelationQueryGenerator queryGenerator;
- private final VersionsReaderImplementor versionsReader;
- private final Object primaryKey;
- private final Number revision;
- private final Class<T> collectionClass;
-
- public OneToManyDetachedInitializor(VersionsConfiguration verCfg, String entityName,
- DetachedRelationQueryGenerator queryGenerator,
- VersionsReaderImplementor versionsReader, Object primaryKey,
- Number revision, Class<T> collectionClass) {
- this.verCfg = verCfg;
- this.entityName = entityName;
- this.queryGenerator = queryGenerator;
- this.versionsReader = versionsReader;
- this.primaryKey = primaryKey;
- this.revision = revision;
- this.collectionClass = collectionClass;
- }
-
- @SuppressWarnings({"unchecked"})
- public T initialize() {
- EntityInstantiator entityInstantiator = new EntityInstantiator(verCfg, versionsReader);
-
- List queryResult = queryGenerator.getQuery(versionsReader, primaryKey, revision).list();
-
- T result;
- try {
- result = collectionClass.newInstance();
- } catch (Exception e) {
- throw new VersionsException(e);
- }
-
- entityInstantiator.addInstancesFromVersionsEntities(entityName, result, queryResult, revision);
-
- return result;
- }
-}
Modified: trunk/src/main/org/jboss/envers/event/VersionsEventListener.java
===================================================================
--- trunk/src/main/org/jboss/envers/event/VersionsEventListener.java 2008-08-23 10:59:58 UTC (rev 125)
+++ trunk/src/main/org/jboss/envers/event/VersionsEventListener.java 2008-08-25 07:04:48 UTC (rev 126)
@@ -33,6 +33,7 @@
import org.jboss.envers.synchronization.work.*;
import org.jboss.envers.tools.Tools;
import org.jboss.envers.entities.mapper.id.IdMapper;
+import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
import java.io.Serializable;
@@ -121,6 +122,30 @@
}
}
+ private void generateBidirectionalCollectionChangeWorkUnits(VersionsSync verSync, AbstractCollectionEvent event,
+ PersistentCollectionChangeWorkUnit workUnit) {
+ // Checking if this is enabled in configuration ...
+ if (!verCfg.getGlobalCfg().isGenerateRevisionsForCollections()) {
+ return;
+ }
+
+ // Checking if this is not a bidirectional relation - then, a revision needs also be generated for
+ // the other side of the relation.
+ RelationDescription relDesc = verCfg.getEntCfg().getRelationDescription(event.getAffectedOwnerEntityName(),
+ workUnit.getReferencingPropertyName());
+ String relatedEntityName = relDesc.getToEntityName();
+ IdMapper relatedIdMapper = verCfg.getEntCfg().get(relatedEntityName).getIdMapper();
+
+ if (relDesc.isBidirectional()) {
+ for (PersistentCollectionChangeData changeData : workUnit.getCollectionChanges()) {
+ Object relatedObj = changeData.getObj();
+ Serializable relatedId = (Serializable) relatedIdMapper.mapToIdFromEntity(relatedObj);
+
+ verSync.addWorkUnit(new CollectionChangeWorkUnit(relatedEntityName, verCfg, relatedId, relatedObj));
+ }
+ }
+ }
+
private void onCollectionAction(AbstractCollectionEvent event, PersistentCollection newColl, Serializable oldColl,
CollectionEntry collectionEntry) {
String entityName = event.getAffectedOwnerEntityName();
@@ -137,13 +162,7 @@
verSync.addWorkUnit(new CollectionChangeWorkUnit(event.getAffectedOwnerEntityName(), verCfg,
event.getAffectedOwnerIdOrNull(), event.getAffectedOwnerOrNull()));
- // Checking if this is not a bidirectional relation - then, a revision needs also be generated for
- // the other side of the relation.
- RelationDescription relDesc = verCfg.getEntCfg().getRelationDescription(event.getAffectedOwnerEntityName(),
- workUnit.getReferencingPropertyName());
- if (relDesc.isBidirectional()) {
- // TODO: we have to add a revision for each changed element of the collection
- }
+ generateBidirectionalCollectionChangeWorkUnits(verSync, event, workUnit);
}
}
}
Modified: trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java
===================================================================
--- trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java 2008-08-23 10:59:58 UTC (rev 125)
+++ trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java 2008-08-25 07:04:48 UTC (rev 126)
@@ -49,6 +49,10 @@
return referencingPropertyName;
}
+ public List<PersistentCollectionChangeData> getCollectionChanges() {
+ return collectionChanges;
+ }
+
public KeepCheckResult check(AddWorkUnit second) {
return null;
}
Modified: trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java 2008-08-23 10:59:58 UTC (rev 125)
+++ trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java 2008-08-25 07:04:48 UTC (rev 126)
@@ -86,7 +86,7 @@
@Test
public void testJoinColumnName() {
Iterator<Column> columns =
- getCfg().getClassMapping("org.jboss.envers.test.integration.naming..DetachedNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
+ getCfg().getClassMapping("org.jboss.envers.test.integration.naming.DetachedNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
.getTable().getColumnIterator();
boolean id1Found = false;
16 years, 6 months
JBoss Envers SVN: r125 - in trunk/src: main/org/jboss/envers/configuration/metadata and 8 other directories.
by jboss-envers-commits@lists.jboss.org
Author: adamw
Date: 2008-08-23 06:59:58 -0400 (Sat, 23 Aug 2008)
New Revision: 125
Added:
trunk/src/main/org/jboss/envers/entities/mapper/relation/ManyToManyNotOwningMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/DetachedRelationInitializor.java
Removed:
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToOneIdMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java
trunk/src/test/org/jboss/envers/test/integration/naming/UnidirectionalNamingTestEntity.java
Modified:
trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java
trunk/src/main/org/jboss/envers/entities/EntitiesConfigurations.java
trunk/src/main/org/jboss/envers/entities/EntityConfiguration.java
trunk/src/main/org/jboss/envers/entities/RelationType.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java
trunk/src/main/org/jboss/envers/event/VersionsEventListener.java
trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java
trunk/src/test/org/jboss/envers/test/integration/manytomany/BasicSet.java
trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java
trunk/src/test/org/jboss/envers/test/working/WorkingMain.java
Log:
ENVERS-24: support for many-to-many bidirectional relations, without generating revision numbers
Modified: trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -31,7 +31,7 @@
public EntitiesConfigurations configure(Configuration cfg, YReflectionManager reflectionManager,
GlobalConfiguration globalCfg, VersionsEntitiesConfiguration verEntCfg,
Document revisionInfoXmlMapping) {
- VersionsMetadataGenerator versionsMetaGen = new VersionsMetadataGenerator(globalCfg, verEntCfg);
+ VersionsMetadataGenerator versionsMetaGen = new VersionsMetadataGenerator(cfg, globalCfg, verEntCfg);
DOMWriter writer = new DOMWriter();
// Sorting the persistent class topologically - superclass always before subclass
@@ -71,10 +71,12 @@
try {
cfg.addDocument(writer.write(mappingData.getMainMapping()));
+ // TODO
//writeDocument(mappingData.getMainMapping());
for (Document additionalMapping : mappingData.getAdditionalMappings()) {
cfg.addDocument(writer.write(additionalMapping));
+ // TODO
//writeDocument(additionalMapping);
}
} catch (DocumentException e) {
Modified: trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -24,6 +24,7 @@
import org.hibernate.type.*;
import org.hibernate.util.StringHelper;
import org.hibernate.MappingException;
+import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.*;
import org.hibernate.mapping.Collection;
import org.dom4j.Element;
@@ -35,10 +36,7 @@
import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
import org.jboss.envers.entities.mapper.*;
import org.jboss.envers.entities.mapper.id.*;
-import org.jboss.envers.entities.mapper.relation.ToOneIdMapper;
-import org.jboss.envers.entities.mapper.relation.OneToOneNotOwningIdMapper;
-import org.jboss.envers.entities.mapper.relation.OneToManyAttachedMapper;
-import org.jboss.envers.entities.mapper.relation.OneToManyDetachedMapper;
+import org.jboss.envers.entities.mapper.relation.*;
import org.jboss.envers.tools.StringTools;
import org.jboss.envers.tools.Tools;
import org.jboss.envers.tools.HibernateVersion;
@@ -58,6 +56,7 @@
public class VersionsMetadataGenerator {
private final static Map<String, ModificationStore> EMPTY_STORE = Collections.emptyMap();
+ private final Configuration cfg;
private final GlobalConfiguration globalCfg;
private final VersionsEntitiesConfiguration verEntCfg;
@@ -68,7 +67,9 @@
private YLog log = YLogManager.getLogManager().getLog(VersionsMetadataGenerator.class);
- public VersionsMetadataGenerator(GlobalConfiguration globalCfg, VersionsEntitiesConfiguration verEntCfg) {
+ public VersionsMetadataGenerator(Configuration cfg, GlobalConfiguration globalCfg,
+ VersionsEntitiesConfiguration verEntCfg) {
+ this.cfg = cfg;
this.globalCfg = globalCfg;
this.verEntCfg = verEntCfg;
@@ -323,7 +324,7 @@
@SuppressWarnings({"unchecked"})
private void addOneToManyDetached(Property property, CompositeMapperBuilder mapper, String entityName,
- EntityMappingData mappingData) {
+ EntityMappingData mappingData) {
Collection propertyValue = (Collection) property.getValue();
ManyToOne mto = (ManyToOne) propertyValue.getElement();
@@ -346,7 +347,7 @@
String referencedPrefix = property.getName() + "_";
// Name of the entity that will be used to store the relation between the two entities.
- String middleEntityName = referencingPrefix + referencedEntityName;
+ String middleEntityName = entityName + "_" + referencedEntityName;
String versionsMiddleEntityName = verEntCfg.getVersionsEntityName(middleEntityName);
String versionsMiddleTableName = verEntCfg.getVersionsTableName(middleEntityName, mto.getTable().getName());
@@ -375,9 +376,7 @@
addRevisionNumber(middleEntityId);
addRevisionType(middleEntity);
- // TODO storing information about this relation
- //entitiesConfigurations.get(entityName).addOneToManyAttachedRelation(propertyName, owningReferencePropertyName,
- // owningEntityName, ownedIdMapper);
+ entitiesConfigurations.get(entityName).addOneToManyDetachedRelation(property.getName(), referencedEntityName);
// Adding the property mapper
mapper.addComposite(property.getName(), new OneToManyDetachedMapper(verEntCfg, entityName,
@@ -389,9 +388,68 @@
// TODO: ???
}
+ @SuppressWarnings({"unchecked"})
+ private String getMappedBy(Table collectionTable, PersistentClass referencedClass) {
+ Iterator<Property> properties = referencedClass.getPropertyIterator();
+ while (properties.hasNext()) {
+ Property property = properties.next();
+ if (property.getValue() instanceof Collection) {
+ // The equality is intentional. We want to find a collection property with the same collection table.
+ //noinspection ObjectEquality
+ if (((Collection) property.getValue()).getCollectionTable() == collectionTable) {
+ return property.getName();
+ }
+ }
+ }
+
+ return null;
+ }
+
private void addManyToManyNotOwning(Property property, CompositeMapperBuilder mapper, String entityName,
EntityMappingData mappingData) {
- System.out.println("XXX");
+ Collection propertyValue = (Collection) property.getValue();
+ ManyToOne mto = (ManyToOne) propertyValue.getElement();
+
+ String referencedEntityName = mto.getReferencedEntityName();
+
+ EntityConfiguration configuration = entitiesConfigurations.get(entityName);
+ if (configuration == null) {
+ throw new MappingException("A versioned relation to a non-versioned entity " + entityName + "!");
+ }
+
+ EntityConfiguration referencedConfiguration = entitiesConfigurations.get(referencedEntityName);
+ if (referencedConfiguration == null) {
+ throw new MappingException("A versioned relation to a non-versioned entity " + referencedEntityName + "!");
+ }
+
+ String mappedBy = getMappedBy(propertyValue.getCollectionTable(), cfg.getClassMapping(referencedEntityName));
+ if (mappedBy == null) {
+ throw new MappingException("Unable to read the mapped by attribute for " + property.getName());
+ }
+
+ IdMappingData referencingIdMapping = configuration.getIdMappingData();
+ IdMappingData referencedIdMapping = referencedConfiguration.getIdMappingData();
+
+ String referencingPrefix = mappedBy + "_";
+ String referencedPrefix = StringTools.getLastComponent(referencedEntityName) + "_";
+
+ // Name of the entity that will be used to store the relation between the two entities.
+ // The order is inverse, as the referenced and referencing entity names are swapped with respect to the
+ // name of the entity that was created on the owning side in <code>addOneToManyDetached</code>.
+ String middleEntityName = referencedEntityName + "_" + entityName;
+ String versionsMiddleEntityName = verEntCfg.getVersionsEntityName(middleEntityName);
+
+ entitiesConfigurations.get(entityName).addManyToManyNotOwningRelation(property.getName(), mappedBy,
+ referencedEntityName);
+
+ // Adding the property mapper
+ mapper.addComposite(property.getName(), new ManyToManyNotOwningMapper(verEntCfg, entityName,
+ referencedEntityName, property.getName(), verEntCfg.getVersionsEntityName(referencedEntityName),
+ versionsMiddleEntityName, referencingIdMapping.getIdMapper().prefixMappedProperties(referencingPrefix),
+ referencedIdMapping.getIdMapper().prefixMappedProperties(referencedPrefix),
+ entitiesConfigurations.get(referencedEntityName).getIdMapper()));
+
+ // TODO
}
private ModificationStore getStoreForProperty(Property property, PropertyStoreInfo propertyStoreInfo,
Modified: trunk/src/main/org/jboss/envers/entities/EntitiesConfigurations.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/EntitiesConfigurations.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/entities/EntitiesConfigurations.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -58,7 +58,8 @@
for (RelationDescription relDesc : entCfg.getRelationsIterator()) {
// If this is an "owned" relation, checking the related entity, if it has a relation that has
// a mapped-by attribute to the currently checked. If so, this is a bidirectional relation.
- if (relDesc.getRelationType() == RelationType.TO_ONE) {
+ if (relDesc.getRelationType() == RelationType.TO_ONE ||
+ relDesc.getRelationType() == RelationType.ONE_TO_MANY_DETACHED) {
for (RelationDescription other : entitiesConfigurations.get(relDesc.getToEntityName()).getRelationsIterator()) {
if (relDesc.getFromPropertyName().equals(other.getMappedByPropertyName()) &&
(entityName.equals(other.getToEntityName()))) {
Modified: trunk/src/main/org/jboss/envers/entities/EntityConfiguration.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/EntityConfiguration.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/entities/EntityConfiguration.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -67,6 +67,17 @@
toEntityName, mappedByPropertyName, idMapper));
}
+ public void addOneToManyDetachedRelation(String fromPropertyName, String toEntityName) {
+ relations.put(fromPropertyName, new RelationDescription(fromPropertyName, RelationType.ONE_TO_MANY_DETACHED,
+ toEntityName, null, null));
+ }
+
+ public void addManyToManyNotOwningRelation(String fromPropertyName, String mappedByPropertyName,
+ String toEntityName) {
+ relations.put(fromPropertyName, new RelationDescription(fromPropertyName, RelationType.MANY_TO_MANY_NOT_OWNING,
+ toEntityName, mappedByPropertyName, null));
+ }
+
public boolean isRelation(String propertyName) {
return relations.get(propertyName) != null;
}
Modified: trunk/src/main/org/jboss/envers/entities/RelationType.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/RelationType.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/entities/RelationType.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -6,5 +6,7 @@
public enum RelationType {
TO_ONE,
ONE_TO_ONE,
- ONE_TO_MANY
+ ONE_TO_MANY,
+ ONE_TO_MANY_DETACHED,
+ MANY_TO_MANY_NOT_OWNING
}
Copied: trunk/src/main/org/jboss/envers/entities/mapper/relation/ManyToManyNotOwningMapper.java (from rev 124, trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java)
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/ManyToManyNotOwningMapper.java (rev 0)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/ManyToManyNotOwningMapper.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -0,0 +1,59 @@
+package org.jboss.envers.entities.mapper.relation;
+
+import org.jboss.envers.entities.mapper.PropertyMapper;
+import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
+import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
+import org.jboss.envers.entities.mapper.relation.lazy.DetachedRelationInitializor;
+import org.jboss.envers.entities.mapper.id.IdMapper;
+import org.jboss.envers.reader.VersionsReaderImplementor;
+import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
+import org.jboss.envers.configuration.VersionsConfiguration;
+import org.hibernate.collection.PersistentCollection;
+
+import java.util.*;
+import java.io.Serializable;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class ManyToManyNotOwningMapper extends AbstractOneToManyMapper implements PropertyMapper {
+ /**
+ * Name of the entity that declares the relation.
+ */
+ private final String referencedEntityName;
+
+ private final DetachedRelationQueryGenerator queryGenerator;
+
+ public ManyToManyNotOwningMapper(VersionsEntitiesConfiguration verEntCfg, String referencingEntityName,
+ String referencedEntityName, String collectionReferencingPropertyName,
+ String versionsReferencedEntityName, String versionsMiddleEntityName,
+ IdMapper referencingMiddleIdMapper, IdMapper referencedMiddleIdMapper,
+ IdMapper referencedIdMapper) {
+ super(referencingEntityName, collectionReferencingPropertyName);
+
+ this.referencedEntityName = referencedEntityName;
+
+ queryGenerator = new DetachedRelationQueryGenerator(verEntCfg, versionsReferencedEntityName,
+ versionsMiddleEntityName, referencingMiddleIdMapper, referencedMiddleIdMapper, referencedIdMapper);
+ }
+
+ public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName,
+ PersistentCollection newColl,
+ Serializable oldColl, Serializable id) {
+ // This is the not-owning side of the collection.
+ return null;
+ }
+
+ public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj, Object oldObj) {
+ // This is the not-owning side of the collection.
+ return false;
+ }
+
+ protected <T extends Collection> Initializor<T> getInitializator(VersionsConfiguration verCfg,
+ VersionsReaderImplementor versionsReader,
+ Class<?> entityClass, Object primaryKey,
+ Number revision, Class<T> collectionClass) {
+ return new DetachedRelationInitializor<T>(verCfg, referencedEntityName, queryGenerator,
+ versionsReader, primaryKey, revision, collectionClass);
+ }
+}
\ No newline at end of file
Property changes on: trunk/src/main/org/jboss/envers/entities/mapper/relation/ManyToManyNotOwningMapper.java
___________________________________________________________________
Name: svn:mergeinfo
+
Deleted: trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -1,64 +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.entities.mapper.relation;
-
-import org.jboss.envers.entities.mapper.PropertyMapper;
-import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.entities.mapper.relation.lazy.OneToManyBidirectionalInitializor;
-import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
-import org.jboss.envers.configuration.VersionsConfiguration;
-import org.hibernate.collection.PersistentCollection;
-
-import java.util.*;
-import java.io.Serializable;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToManyBidirectionalMapper extends AbstractOneToManyMapper implements PropertyMapper {
- private final String owningReferencePropertyName;
-
- public OneToManyBidirectionalMapper(String owningReferencePropertyName, String owningEntityName, String propertyName) {
- super(owningEntityName, propertyName);
-
- this.owningReferencePropertyName = owningReferencePropertyName;
- }
-
- public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj, Object oldObj) {
- return false;
- }
-
- protected <T extends Collection> Initializor<T> getInitializator(VersionsConfiguration verCfg,
- VersionsReaderImplementor versionsReader,
- Class<?> entityClass, Object primaryKey,
- Number revision,
- Class<T> collectionClass) {
- return new OneToManyBidirectionalInitializor<T>(versionsReader, entityClass, owningReferencePropertyName, primaryKey,
- revision, collectionClass);
- }
-
- public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName, PersistentCollection newColl,
- Serializable oldColl, Serializable id) {
- return null;
- }
-}
\ No newline at end of file
Modified: trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -3,7 +3,7 @@
import org.jboss.envers.entities.mapper.PropertyMapper;
import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
-import org.jboss.envers.entities.mapper.relation.lazy.OneToManyDetachedInitializor;
+import org.jboss.envers.entities.mapper.relation.lazy.DetachedRelationInitializor;
import org.jboss.envers.entities.mapper.id.IdMapper;
import org.jboss.envers.reader.VersionsReaderImplementor;
import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
@@ -37,10 +37,10 @@
private final DetachedRelationQueryGenerator queryGenerator;
public OneToManyDetachedMapper(VersionsEntitiesConfiguration verEntCfg, String referencingEntityName,
- String referencedEntityName, String collectionReferencingPropertyName,
- String versionsReferencedEntityName, String versionsMiddleEntityName,
- IdMapper referencingMiddleIdMapper, IdMapper referencedMiddleIdMapper,
- IdMapper referencedIdMapper) {
+ String referencedEntityName, String collectionReferencingPropertyName,
+ String versionsReferencedEntityName, String versionsMiddleEntityName,
+ IdMapper referencingMiddleIdMapper, IdMapper referencedMiddleIdMapper,
+ IdMapper referencedIdMapper) {
super(referencingEntityName, collectionReferencingPropertyName);
this.verEntCfg = verEntCfg;
@@ -115,7 +115,7 @@
VersionsReaderImplementor versionsReader,
Class<?> entityClass, Object primaryKey,
Number revision, Class<T> collectionClass) {
- return new OneToManyDetachedInitializor<T>(verCfg, referencedEntityName, queryGenerator,
+ return new DetachedRelationInitializor<T>(verCfg, referencedEntityName, queryGenerator,
versionsReader, primaryKey, revision, collectionClass);
}
}
Deleted: trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -1,112 +0,0 @@
-package org.jboss.envers.entities.mapper.relation;
-
-import org.jboss.envers.entities.mapper.PropertyMapper;
-import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
-import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
-import org.jboss.envers.entities.mapper.relation.lazy.OneToManyUnidirectionalInitializor;
-import org.jboss.envers.entities.mapper.id.IdMapper;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
-import org.jboss.envers.configuration.VersionsConfiguration;
-import org.jboss.envers.RevisionType;
-import org.hibernate.collection.PersistentCollection;
-
-import java.util.*;
-import java.io.Serializable;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToManyUnidirectionalMapper extends AbstractOneToManyMapper implements PropertyMapper {
- private final VersionsEntitiesConfiguration verEntCfg;
- private final String referencedEntityName;
- private final String collectionReferencingPropertyName;
- private final String versionsMiddleEntityName;
- private final IdMapper referencingMiddleIdMapper;
- private final IdMapper referencedMiddleIdMapper;
-
- private final UnidirectionalRelationQueryGenerator queryGenerator;
-
- public OneToManyUnidirectionalMapper(VersionsEntitiesConfiguration verEntCfg, String referencingEntityName,
- String referencedEntityName, String collectionReferencingPropertyName,
- String versionsReferencedEntityName, String versionsMiddleEntityName,
- IdMapper referencingMiddleIdMapper, IdMapper referencedMiddleIdMapper,
- IdMapper referencedIdMapper) {
- super(referencingEntityName, collectionReferencingPropertyName);
-
- this.verEntCfg = verEntCfg;
- this.referencedEntityName = referencedEntityName;
- this.collectionReferencingPropertyName = collectionReferencingPropertyName;
- this.versionsMiddleEntityName = versionsMiddleEntityName;
- this.referencingMiddleIdMapper = referencingMiddleIdMapper;
- this.referencedMiddleIdMapper = referencedMiddleIdMapper;
-
- queryGenerator = new UnidirectionalRelationQueryGenerator(verEntCfg, versionsReferencedEntityName,
- versionsMiddleEntityName, referencingMiddleIdMapper, referencedMiddleIdMapper, referencedIdMapper);
- }
-
- private Collection getOldCollection(Serializable oldColl) {
- if (oldColl instanceof Map) {
- return ((Map) oldColl).keySet();
- } else {
- return (Collection) oldColl;
- }
- }
-
- private void addCollectionChanges(List<PersistentCollectionChangeData> collectionChanges, Set<Object> changed,
- RevisionType revisionType, Serializable id) {
- for (Object changedEntity : changed) {
- Map<String, Object> entityData = new HashMap<String, Object>();
- Map<String, Object> originalId = new HashMap<String, Object>();
- entityData.put(verEntCfg.getOriginalIdPropName(), originalId);
-
- collectionChanges.add(new PersistentCollectionChangeData(versionsMiddleEntityName, entityData));
- referencingMiddleIdMapper.mapToMapFromId(originalId, id);
- referencedMiddleIdMapper.mapToMapFromEntity(originalId, changedEntity);
-
- entityData.put(verEntCfg.getRevisionTypePropName(), revisionType);
- }
- }
-
- @SuppressWarnings({"unchecked"})
- public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName,
- PersistentCollection newColl,
- Serializable oldColl, Serializable id) {
- if (!collectionReferencingPropertyName.equals(referencingPropertyName)) {
- return null;
- }
-
- List<PersistentCollectionChangeData> collectionChanges = new ArrayList<PersistentCollectionChangeData>();
-
- Collection newCollection = (Collection) newColl;
- Collection oldCollection = getOldCollection(oldColl);
-
- Set<Object> added = new HashSet<Object>();
- if (newColl != null) { added.addAll(newCollection); }
- if (oldColl != null) { added.removeAll(oldCollection); }
-
- addCollectionChanges(collectionChanges, added, RevisionType.ADD, id);
-
- Set<Object> deleted = new HashSet<Object>();
- if (oldColl != null) { deleted.addAll(oldCollection); }
- if (newColl != null) { deleted.removeAll(newCollection); }
-
- addCollectionChanges(collectionChanges, deleted, RevisionType.DEL, id);
-
- return collectionChanges;
- }
-
- @SuppressWarnings({"unchecked"})
- public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj, Object oldObj) {
- // Changes are mapped in the "mapCollectionChanges" method.
- return false;
- }
-
- protected <T extends Collection> Initializor<T> getInitializator(VersionsConfiguration verCfg,
- VersionsReaderImplementor versionsReader,
- Class<?> entityClass, Object primaryKey,
- Number revision, Class<T> collectionClass) {
- return new OneToManyUnidirectionalInitializor<T>(verCfg, referencedEntityName, queryGenerator,
- versionsReader, primaryKey, revision, collectionClass);
- }
-}
Deleted: trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToOneIdMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToOneIdMapper.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToOneIdMapper.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -1,87 +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.entities.mapper.relation;
-
-import org.jboss.envers.entities.mapper.PropertyMapper;
-import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.tools.reflection.ReflectionTools;
-import org.jboss.envers.query.VersionsRestrictions;
-import org.jboss.envers.exception.VersionsException;
-import org.jboss.envers.configuration.VersionsConfiguration;
-import org.hibernate.property.Setter;
-import org.hibernate.NonUniqueResultException;
-import org.hibernate.collection.PersistentCollection;
-
-import javax.persistence.NoResultException;
-import java.util.Map;
-import java.util.List;
-import java.io.Serializable;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToOneIdMapper implements PropertyMapper {
- private String owningReferencePropertyName;
- private String owningEntityName;
- private String propertyName;
-
- public OneToOneIdMapper(String owningReferencePropertyName, String owningEntityName, String propertyName) {
- this.owningReferencePropertyName = owningReferencePropertyName;
- this.owningEntityName = owningEntityName;
- this.propertyName = propertyName;
- }
-
- public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj, Object oldObj) {
- return false;
- }
-
- public void mapToEntityFromMap(VersionsConfiguration verCfg, Object obj, Map data, Object primaryKey, VersionsReaderImplementor versionsReader, Number revision) {
- if (obj == null) {
- return;
- }
-
- Class<?> entityClass = ReflectionTools.loadClass(owningEntityName);
-
- Object value;
-
- try {
- value = versionsReader.createQuery().forEntitiesAtRevision(entityClass, revision)
- .add(VersionsRestrictions.relatedIdEq(owningReferencePropertyName, primaryKey)).getSingleResult();
- } catch (NoResultException e) {
- value = null;
- } catch (NonUniqueResultException e) {
- throw new VersionsException("Many versions results for one-to-one relationship: (" + owningEntityName +
- ", " + owningReferencePropertyName + ")");
- }
-
- Setter setter = ReflectionTools.getSetter(obj.getClass(), propertyName);
- setter.set(obj, value, null);
- }
-
- public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName,
- PersistentCollection newColl,
- Serializable oldColl,
- Serializable id) {
- return null;
- }
-}
Deleted: trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -1,93 +0,0 @@
-package org.jboss.envers.entities.mapper.relation;
-
-import org.jboss.envers.entities.mapper.id.QueryParameterData;
-import org.jboss.envers.entities.mapper.id.IdMapper;
-import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
-import org.jboss.envers.RevisionType;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.hibernate.Query;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class UnidirectionalRelationQueryGenerator {
- private final String queryString;
- private final IdMapper referencingMiddleIdMapper;
-
- public UnidirectionalRelationQueryGenerator(VersionsEntitiesConfiguration verEntCfg,
- String versionsReferencedEntityName, String versionsMiddleEntityName,
- IdMapper referencingMiddleIdMapper, IdMapper referencedMiddleIdMapper,
- IdMapper referencedIdMapper) {
- this.referencingMiddleIdMapper = referencingMiddleIdMapper;
-
- /*
- * The query that we need to create:
- * SELECT e FROM versionsReferencedEntity e, middleEntity ee
- * WHERE
- * (selecting e entities at revision :revision)
- * e.revision = (SELECT max(e2.revision) FROM referencedEntity e2
- * WHERE e2.revision <= :revision AND e2.id1 = e.id1) AND
- * (only entities referenced by the association)
- * ee.id1 = e.id1 AND
- * ee.id2 = :id2 AND
- * (the association at revision :revision)
- * ee.revision = (SELECT max(ee2.revision) FROM middleEntity ee2
- * WHERE ee2.revision <= :revision AND ee2.id2 = :id2 AND ee2.id1 = ee.id1) AND
- * (only non-deleted entities and associations)
- * ee.revision_type != DEL AND
- * e.revision_type != DEL
- */
- String revisionPropertyPath = verEntCfg.getRevisionPropPath();
- String originalIdPropertyName = verEntCfg.getOriginalIdPropName();
-
- StringBuilder querySB = new StringBuilder();
- querySB
- .append("SELECT e FROM ").append(versionsReferencedEntityName).append(" e")
- .append(", ").append(versionsMiddleEntityName).append(" ee ")
- .append("WHERE ")
- // e.revision = (SELECT max(e2.revision) ...
- .append("e.").append(revisionPropertyPath).append(" = (SELECT max(e2.").append(revisionPropertyPath)
- .append(") FROM ").append(versionsReferencedEntityName).append(" e2 ")
- // e2.revision <= :revision
- .append("WHERE e2.").append(revisionPropertyPath).append(" <= :revision AND ")
- // e2.id1 = e.id1)
- .append(referencedIdMapper.getIdsEqualQuery("e." + originalIdPropertyName, "e2." + originalIdPropertyName))
- .append(") AND ")
- // ee.id1 = e.id1
- .append(referencedMiddleIdMapper.getIdsEqualQuery("ee." + originalIdPropertyName,
- referencedIdMapper, "e." + originalIdPropertyName))
- .append(" AND ")
- // ee.id2 = :id2
- .append(referencingMiddleIdMapper.getIdEqualsQuery("ee." + originalIdPropertyName, true))
- .append(" AND ")
- // ee.revision = (SELECT max(ee2.revision) ...
- .append("ee.").append(revisionPropertyPath).append(" = (SELECT max(ee2.").append(revisionPropertyPath)
- .append(") FROM ").append(versionsMiddleEntityName).append(" ee2 ")
- // ee2.revision <= :revision
- .append("WHERE ee2.").append(revisionPropertyPath).append(" <= :revision AND ")
- // ee2.id2 = :id2)
- .append(referencingMiddleIdMapper.getIdEqualsQuery("ee2." + originalIdPropertyName, true))
- .append(" AND ")
- // ee2.id1 = ee.id1)
- .append(referencedMiddleIdMapper.getIdsEqualQuery("ee." + originalIdPropertyName, "ee2." + originalIdPropertyName))
- .append(") AND ")
- // e.revision_type != DEL AND
- .append("e.").append(verEntCfg.getRevisionTypePropName()).append(" != ").append(":delrevisiontype")
- .append(" AND ")
- // ee.revision_type != DEL
- .append("ee.").append(verEntCfg.getRevisionTypePropName()).append(" != ").append(":delrevisiontype");
-
- queryString = querySB.toString();
- }
-
- public Query getQuery(VersionsReaderImplementor versionsReader, Object primaryKey, Number revision) {
- Query query = versionsReader.getSession().createQuery(queryString);
- query.setParameter("revision", revision);
- query.setParameter("delrevisiontype", RevisionType.DEL);
- for (QueryParameterData paramData: referencingMiddleIdMapper.mapToQueryParametersFromId(primaryKey)) {
- paramData.setParameterValue(query);
- }
-
- return query;
- }
-}
Copied: trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/DetachedRelationInitializor.java (from rev 124, trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyDetachedInitializor.java)
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/DetachedRelationInitializor.java (rev 0)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/DetachedRelationInitializor.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -0,0 +1,55 @@
+package org.jboss.envers.entities.mapper.relation.lazy;
+
+import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
+import org.jboss.envers.entities.mapper.relation.DetachedRelationQueryGenerator;
+import org.jboss.envers.entities.EntityInstantiator;
+import org.jboss.envers.reader.VersionsReaderImplementor;
+import org.jboss.envers.exception.VersionsException;
+import org.jboss.envers.configuration.VersionsConfiguration;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class DetachedRelationInitializor<T extends Collection> implements Initializor<T> {
+ private final VersionsConfiguration verCfg;
+ private final String entityName;
+ private final DetachedRelationQueryGenerator queryGenerator;
+ private final VersionsReaderImplementor versionsReader;
+ private final Object primaryKey;
+ private final Number revision;
+ private final Class<T> collectionClass;
+
+ public DetachedRelationInitializor(VersionsConfiguration verCfg, String entityName,
+ DetachedRelationQueryGenerator queryGenerator,
+ VersionsReaderImplementor versionsReader, Object primaryKey,
+ Number revision, Class<T> collectionClass) {
+ this.verCfg = verCfg;
+ this.entityName = entityName;
+ this.queryGenerator = queryGenerator;
+ this.versionsReader = versionsReader;
+ this.primaryKey = primaryKey;
+ this.revision = revision;
+ this.collectionClass = collectionClass;
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public T initialize() {
+ EntityInstantiator entityInstantiator = new EntityInstantiator(verCfg, versionsReader);
+
+ List queryResult = queryGenerator.getQuery(versionsReader, primaryKey, revision).list();
+
+ T result;
+ try {
+ result = collectionClass.newInstance();
+ } catch (Exception e) {
+ throw new VersionsException(e);
+ }
+
+ entityInstantiator.addInstancesFromVersionsEntities(entityName, result, queryResult, revision);
+
+ return result;
+ }
+}
Deleted: trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -1,74 +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.entities.mapper.relation.lazy;
-
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
-import org.jboss.envers.query.VersionsRestrictions;
-import org.jboss.envers.exception.VersionsException;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToManyBidirectionalInitializor<T extends Collection> implements Initializor<T> {
- private VersionsReaderImplementor versionsReader;
- private Class<?> entityClass;
- private String owningReferencePropertyName;
- private Object primaryKey;
- private Number revision;
- private Class<T> collectionClass;
-
- public OneToManyBidirectionalInitializor(VersionsReaderImplementor versionsReader, Class<?> entityClass,
- String owningReferencePropertyName, Object primaryKey, Number revision,
- Class<T> collectionClass) {
- this.versionsReader = versionsReader;
- this.entityClass = entityClass;
- this.owningReferencePropertyName = owningReferencePropertyName;
- this.primaryKey = primaryKey;
- this.revision = revision;
- this.collectionClass = collectionClass;
- }
-
- @SuppressWarnings({"unchecked"})
- public T initialize() {
- List queryResult = versionsReader.createQuery().forEntitiesAtRevision(entityClass, revision)
- .add(VersionsRestrictions.relatedIdEq(owningReferencePropertyName, primaryKey)).getResultList();
-
- if (collectionClass.isAssignableFrom(queryResult.getClass())) {
- return (T) queryResult;
- } else {
- Collection result;
- try {
- result = collectionClass.newInstance();
- } catch (Exception e) {
- throw new VersionsException(e);
- }
-
- result.addAll(queryResult);
-
- return (T) result;
- }
- }
-}
Deleted: trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -1,55 +0,0 @@
-package org.jboss.envers.entities.mapper.relation.lazy;
-
-import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
-import org.jboss.envers.entities.mapper.relation.UnidirectionalRelationQueryGenerator;
-import org.jboss.envers.entities.EntityInstantiator;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.exception.VersionsException;
-import org.jboss.envers.configuration.VersionsConfiguration;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToManyUnidirectionalInitializor<T extends Collection> implements Initializor<T> {
- private final VersionsConfiguration verCfg;
- private final String entityName;
- private final UnidirectionalRelationQueryGenerator queryGenerator;
- private final VersionsReaderImplementor versionsReader;
- private final Object primaryKey;
- private final Number revision;
- private final Class<T> collectionClass;
-
- public OneToManyUnidirectionalInitializor(VersionsConfiguration verCfg, String entityName,
- UnidirectionalRelationQueryGenerator queryGenerator,
- VersionsReaderImplementor versionsReader, Object primaryKey,
- Number revision, Class<T> collectionClass) {
- this.verCfg = verCfg;
- this.entityName = entityName;
- this.queryGenerator = queryGenerator;
- this.versionsReader = versionsReader;
- this.primaryKey = primaryKey;
- this.revision = revision;
- this.collectionClass = collectionClass;
- }
-
- @SuppressWarnings({"unchecked"})
- public T initialize() {
- EntityInstantiator entityInstantiator = new EntityInstantiator(verCfg, versionsReader);
-
- List queryResult = queryGenerator.getQuery(versionsReader, primaryKey, revision).list();
-
- T result;
- try {
- result = collectionClass.newInstance();
- } catch (Exception e) {
- throw new VersionsException(e);
- }
-
- entityInstantiator.addInstancesFromVersionsEntities(entityName, result, queryResult, revision);
-
- return result;
- }
-}
Modified: trunk/src/main/org/jboss/envers/event/VersionsEventListener.java
===================================================================
--- trunk/src/main/org/jboss/envers/event/VersionsEventListener.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/event/VersionsEventListener.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -45,7 +45,7 @@
private VersionsConfiguration verCfg;
private void generateBidirectionalCollectionChangeWorkUnits(VersionsSync verSync, EntityPersister entityPersister,
- String entityName, Object[] newState, Object[] oldState) {
+ String entityName, Object[] newState, Object[] oldState) {
// Checking if this is enabled in configuration ...
if (!verCfg.getGlobalCfg().isGenerateRevisionsForCollections()) {
return;
@@ -73,7 +73,7 @@
Serializable id = (Serializable) idMapper.mapToIdFromEntity(newValue);
verSync.addWorkUnit(new CollectionChangeWorkUnit(relDesc.getToEntityName(), verCfg, id, newValue));
}
-
+
if (oldValue != null) {
Serializable id = (Serializable) idMapper.mapToIdFromEntity(oldValue);
verSync.addWorkUnit(new CollectionChangeWorkUnit(relDesc.getToEntityName(), verCfg, id, oldValue));
@@ -128,14 +128,22 @@
if (verCfg.getEntCfg().isVersioned(entityName)) {
VersionsSync verSync = verCfg.getSyncManager().get(event.getSession());
- VersionsWorkUnit workUnit = new PersistentCollectionChangeWorkUnit(entityName, verCfg, newColl,
- collectionEntry.getRole(), oldColl, event.getAffectedOwnerIdOrNull());
+ PersistentCollectionChangeWorkUnit workUnit = new PersistentCollectionChangeWorkUnit(entityName, verCfg,
+ newColl, collectionEntry.getRole(), oldColl, event.getAffectedOwnerIdOrNull());
verSync.addWorkUnit(workUnit);
if (workUnit.containsWork()) {
// There are some changes: a revision needs also be generated for the collection owner
verSync.addWorkUnit(new CollectionChangeWorkUnit(event.getAffectedOwnerEntityName(), verCfg,
event.getAffectedOwnerIdOrNull(), event.getAffectedOwnerOrNull()));
+
+ // Checking if this is not a bidirectional relation - then, a revision needs also be generated for
+ // the other side of the relation.
+ RelationDescription relDesc = verCfg.getEntCfg().getRelationDescription(event.getAffectedOwnerEntityName(),
+ workUnit.getReferencingPropertyName());
+ if (relDesc.isBidirectional()) {
+ // TODO: we have to add a revision for each changed element of the collection
+ }
}
}
}
Modified: trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java
===================================================================
--- trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -15,13 +15,14 @@
*/
public class PersistentCollectionChangeWorkUnit extends AbstractVersionsWorkUnit implements VersionsWorkUnit {
private final List<PersistentCollectionChangeData> collectionChanges;
+ private final String referencingPropertyName;
public PersistentCollectionChangeWorkUnit(String entityName, VersionsConfiguration verCfg,
PersistentCollection collection, String role,
Serializable snapshot, Serializable id) {
super(entityName, verCfg, null);
- String referencingPropertyName = role.substring(entityName.length() + 1);
+ referencingPropertyName = role.substring(entityName.length() + 1);
collectionChanges = verCfg.getEntCfg().get(getEntityName()).getPropertyMapper()
.mapCollectionChanges(referencingPropertyName, collection, snapshot, id);
@@ -44,6 +45,10 @@
}
}
+ public String getReferencingPropertyName() {
+ return referencingPropertyName;
+ }
+
public KeepCheckResult check(AddWorkUnit second) {
return null;
}
Modified: trunk/src/test/org/jboss/envers/test/integration/manytomany/BasicSet.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/manytomany/BasicSet.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/test/org/jboss/envers/test/integration/manytomany/BasicSet.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -103,7 +103,7 @@
ed2_id = ed2.getId();
ing1_id = ing1.getId();
- ing2_id = ing1.getId();
+ ing2_id = ing2.getId();
}
@Test
Modified: trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -78,7 +78,7 @@
@Test
public void testTableName() {
assert "UNI_NAMING_TEST_versions".equals(
- getCfg().getClassMapping("DetachedNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
+ getCfg().getClassMapping("org.jboss.envers.test.integration.naming.DetachedNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
.getTable().getName());
}
@@ -86,7 +86,7 @@
@Test
public void testJoinColumnName() {
Iterator<Column> columns =
- getCfg().getClassMapping("DetachedNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
+ getCfg().getClassMapping("org.jboss.envers.test.integration.naming..DetachedNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
.getTable().getColumnIterator();
boolean id1Found = false;
Deleted: trunk/src/test/org/jboss/envers/test/integration/naming/UnidirectionalNamingTestEntity.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/naming/UnidirectionalNamingTestEntity.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/test/org/jboss/envers/test/integration/naming/UnidirectionalNamingTestEntity.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -1,85 +0,0 @@
-package org.jboss.envers.test.integration.naming;
-
-import org.jboss.envers.Versioned;
-import org.jboss.envers.test.entities.StrTestEntity;
-
-import javax.persistence.*;
-import java.util.Set;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-@Entity
-public class UnidirectionalNamingTestEntity {
- @Id
- private Integer id;
-
- @Versioned
- private String data;
-
- @Versioned
- @OneToMany
- @JoinTable(name = "UNI_NAMING_TEST",
- joinColumns = @JoinColumn(name = "ID_1"),
- inverseJoinColumns = @JoinColumn(name = "ID_2"))
- private Set<StrTestEntity> collection;
-
- public UnidirectionalNamingTestEntity() {
- }
-
- public UnidirectionalNamingTestEntity(Integer id, String data) {
- this.id = id;
- this.data = data;
- }
-
- public UnidirectionalNamingTestEntity(String data) {
- 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 Set<StrTestEntity> getCollection() {
- return collection;
- }
-
- public void setCollection(Set<StrTestEntity> collection) {
- this.collection = collection;
- }
-
- public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof UnidirectionalNamingTestEntity)) return false;
-
- UnidirectionalNamingTestEntity that = (UnidirectionalNamingTestEntity) 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 "UnidirectionalNamingTestEntity(id = " + id + ", data = " + data + ")";
- }
-}
Modified: trunk/src/test/org/jboss/envers/test/working/WorkingMain.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/working/WorkingMain.java 2008-08-22 16:24:06 UTC (rev 124)
+++ trunk/src/test/org/jboss/envers/test/working/WorkingMain.java 2008-08-23 10:59:58 UTC (rev 125)
@@ -77,11 +77,28 @@
entityManager.getTransaction().commit();
+ // Rev 2
+ entityManager.getTransaction().begin();
+
+ 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.getTransaction().commit();
+
//
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("Revs we1_3: " + vr.getRevisions(WorkingEntity1.class, we1_3.getId1()));
+
entityManager.getTransaction().commit();
}
}
16 years, 6 months
JBoss Envers SVN: r124 - in trunk: src/main/org/jboss/envers/configuration and 12 other directories.
by jboss-envers-commits@lists.jboss.org
Author: adamw
Date: 2008-08-22 12:24:06 -0400 (Fri, 22 Aug 2008)
New Revision: 124
Added:
trunk/src/main/org/jboss/envers/entities/mapper/relation/DetachedRelationQueryGenerator.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyAttachedMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToOneNotOwningIdMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyAttachedInitializor.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyDetachedInitializor.java
trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/
trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/ListRefCollEntity.java
trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/ids/
trunk/src/test/org/jboss/envers/test/integration/naming/DetachedNamingTestEntity.java
trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/
trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedList.java
trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedSet.java
trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedSetWithEmbId.java
trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedSetWithMulId.java
trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/DataChangesNotOwnedSet.java
Removed:
trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/
trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedSet.java
trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/
Modified:
trunk/resources/test/testng.xml
trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java
trunk/src/main/org/jboss/envers/entities/EntityConfiguration.java
trunk/src/test/org/jboss/envers/test/entities/manytomany/SetOwnedEntity.java
trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/SetRefCollEntity.java
trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/ids/SetRefCollEntityEmbId.java
trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/ids/SetRefCollEntityMulId.java
trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java
trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java
trunk/src/test/org/jboss/envers/test/working/WorkingMain.java
Log:
ENVERS-24: renaming
Modified: trunk/resources/test/testng.xml
===================================================================
--- trunk/resources/test/testng.xml 2008-08-22 15:22:20 UTC (rev 123)
+++ trunk/resources/test/testng.xml 2008-08-22 16:24:06 UTC (rev 124)
@@ -11,10 +11,12 @@
<package name="org.jboss.envers.test.integration.inheritance.single" />
<package name="org.jboss.envers.test.integration.inheritance.single.childrelation" />
<package name="org.jboss.envers.test.integration.inheritance.single.relation" />
+ <package name="org.jboss.envers.test.integration.manytomany" />
+ <package name="org.jboss.envers.test.integration.manytomany.unidirectional" />
<package name="org.jboss.envers.test.integration.naming" />
<package name="org.jboss.envers.test.integration.naming.ids" />
<package name="org.jboss.envers.test.integration.onetomany" />
- <package name="org.jboss.envers.test.integration.onetomany.unidirectional" />
+ <package name="org.jboss.envers.test.integration.onetomany.detached" />
<package name="org.jboss.envers.test.integration.onetoone.bidirectional" />
<package name="org.jboss.envers.test.integration.onetoone.bidirectional.ids" />
<package name="org.jboss.envers.test.integration.onetoone.unidirectional" />
Modified: trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java 2008-08-22 15:22:20 UTC (rev 123)
+++ trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -75,7 +75,7 @@
for (Document additionalMapping : mappingData.getAdditionalMappings()) {
cfg.addDocument(writer.write(additionalMapping));
- writeDocument(additionalMapping);
+ //writeDocument(additionalMapping);
}
} catch (DocumentException e) {
throw new MappingException(e);
Modified: trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-22 15:22:20 UTC (rev 123)
+++ trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -36,9 +36,9 @@
import org.jboss.envers.entities.mapper.*;
import org.jboss.envers.entities.mapper.id.*;
import org.jboss.envers.entities.mapper.relation.ToOneIdMapper;
-import org.jboss.envers.entities.mapper.relation.OneToOneIdMapper;
-import org.jboss.envers.entities.mapper.relation.OneToManyBidirectionalMapper;
-import org.jboss.envers.entities.mapper.relation.OneToManyUnidirectionalMapper;
+import org.jboss.envers.entities.mapper.relation.OneToOneNotOwningIdMapper;
+import org.jboss.envers.entities.mapper.relation.OneToManyAttachedMapper;
+import org.jboss.envers.entities.mapper.relation.OneToManyDetachedMapper;
import org.jboss.envers.tools.StringTools;
import org.jboss.envers.tools.Tools;
import org.jboss.envers.tools.HibernateVersion;
@@ -240,7 +240,7 @@
}
@SuppressWarnings({"unchecked"})
- private void addOneToOneBidirectional(Property property, CompositeMapperBuilder mapper, String entityName) {
+ private void addOneToOneNotOwning(Property property, CompositeMapperBuilder mapper, String entityName) {
OneToOne propertyValue = (OneToOne) property.getValue();
String owningReferencePropertyName = propertyValue.getReferencedPropertyName(); // mappedBy
@@ -264,11 +264,11 @@
IdMapper ownedIdMapper = ownedIdMapping.getIdMapper().prefixMappedProperties(lastPropertyPrefix);
// Storing information about this relation
- entitiesConfigurations.get(entityName).addOneToOneRelation(propertyName, owningReferencePropertyName,
+ entitiesConfigurations.get(entityName).addOneToOneNotOwningRelation(propertyName, owningReferencePropertyName,
referencedEntityName, ownedIdMapper);
// Adding mapper for the id
- mapper.addComposite(propertyName, new OneToOneIdMapper(owningReferencePropertyName,
+ mapper.addComposite(propertyName, new OneToOneNotOwningIdMapper(owningReferencePropertyName,
referencedEntityName, propertyName));
}
@@ -290,7 +290,7 @@
}
@SuppressWarnings({"unchecked"})
- private void addOneToManyBidirectional(Property property, CompositeMapperBuilder mapper, String entityName) {
+ private void addOneToManyAttached(Property property, CompositeMapperBuilder mapper, String entityName) {
Collection propertyValue = (Collection) property.getValue();
String owningReferencePropertyName = getMappedBy(propertyValue);
@@ -313,16 +313,16 @@
IdMapper ownedIdMapper = referencingIdMapping.getIdMapper().prefixMappedProperties(lastPropertyPrefix);
// Storing information about this relation
- entitiesConfigurations.get(entityName).addOneToManyRelation(propertyName, owningReferencePropertyName,
+ entitiesConfigurations.get(entityName).addOneToManyAttachedRelation(propertyName, owningReferencePropertyName,
owningEntityName, ownedIdMapper);
// Adding mapper for the id
- mapper.addComposite(propertyName, new OneToManyBidirectionalMapper(owningReferencePropertyName, owningEntityName,
+ mapper.addComposite(propertyName, new OneToManyAttachedMapper(owningReferencePropertyName, owningEntityName,
propertyName));
}
@SuppressWarnings({"unchecked"})
- private void addOneToManyUnidirectional(Property property, CompositeMapperBuilder mapper, String entityName,
+ private void addOneToManyDetached(Property property, CompositeMapperBuilder mapper, String entityName,
EntityMappingData mappingData) {
Collection propertyValue = (Collection) property.getValue();
ManyToOne mto = (ManyToOne) propertyValue.getElement();
@@ -375,8 +375,12 @@
addRevisionNumber(middleEntityId);
addRevisionType(middleEntity);
+ // TODO storing information about this relation
+ //entitiesConfigurations.get(entityName).addOneToManyAttachedRelation(propertyName, owningReferencePropertyName,
+ // owningEntityName, ownedIdMapper);
+
// Adding the property mapper
- mapper.addComposite(property.getName(), new OneToManyUnidirectionalMapper(verEntCfg, entityName,
+ mapper.addComposite(property.getName(), new OneToManyDetachedMapper(verEntCfg, entityName,
referencedEntityName, property.getName(), verEntCfg.getVersionsEntityName(referencedEntityName),
versionsMiddleEntityName, referencingIdMapping.getIdMapper().prefixMappedProperties(referencingPrefix),
referencedIdMapping.getIdMapper().prefixMappedProperties(referencedPrefix),
@@ -385,6 +389,11 @@
// TODO: ???
}
+ private void addManyToManyNotOwning(Property property, CompositeMapperBuilder mapper, String entityName,
+ EntityMappingData mappingData) {
+ System.out.println("XXX");
+ }
+
private ModificationStore getStoreForProperty(Property property, PropertyStoreInfo propertyStoreInfo,
List<String> unversionedProperties) {
/*
@@ -458,7 +467,7 @@
} else if (propertyType instanceof OneToOneType) {
// only second pass
if (!firstPass) {
- addOneToOneBidirectional(property, currentMapper, entityName);
+ addOneToOneNotOwning(property, currentMapper, entityName);
}
} else if ("org.hibernate.type.PrimitiveByteArrayBlobType".equals(
propertyType.getClass().getName())) {
@@ -477,14 +486,22 @@
((((Collection) property.getValue()).getElement() instanceof OneToMany))) {
// only second pass
if (!firstPass) {
- addOneToManyBidirectional(property, currentMapper, entityName);
+ addOneToManyAttached(property, currentMapper, entityName);
}
} else if ((propertyType instanceof BagType || propertyType instanceof SetType) &&
- ((((Collection) property.getValue()).getElement() instanceof ManyToOne))) {
+ ((((Collection) property.getValue()).getElement() instanceof ManyToOne)) &&
+ !((Collection) property.getValue()).isInverse()) {
// only second pass
if (!firstPass) {
- addOneToManyUnidirectional(property, currentMapper, entityName, mappingData);
+ addOneToManyDetached(property, currentMapper, entityName, mappingData);
}
+ } else if ((propertyType instanceof BagType || propertyType instanceof SetType) &&
+ ((((Collection) property.getValue()).getElement() instanceof ManyToOne)) &&
+ ((Collection) property.getValue()).isInverse()) {
+ // only second pass
+ if (!firstPass) {
+ addManyToManyNotOwning(property, currentMapper, entityName, mappingData);
+ }
} else {
String message = "Type not supported for versioning: " + propertyType.getClass().getName() +
", on entity " + entityName + ", property '" + property.getName() + "'.";
Modified: trunk/src/main/org/jboss/envers/entities/EntityConfiguration.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/EntityConfiguration.java 2008-08-22 15:22:20 UTC (rev 123)
+++ trunk/src/main/org/jboss/envers/entities/EntityConfiguration.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -55,13 +55,13 @@
toEntityName, null, idMapper));
}
- public void addOneToOneRelation(String fromPropertyName, String mappedByPropertyName, String toEntityName,
+ public void addOneToOneNotOwningRelation(String fromPropertyName, String mappedByPropertyName, String toEntityName,
IdMapper idMapper) {
relations.put(fromPropertyName, new RelationDescription(fromPropertyName, RelationType.ONE_TO_ONE,
toEntityName, mappedByPropertyName, idMapper));
}
- public void addOneToManyRelation(String fromPropertyName, String mappedByPropertyName, String toEntityName,
+ public void addOneToManyAttachedRelation(String fromPropertyName, String mappedByPropertyName, String toEntityName,
IdMapper idMapper) {
relations.put(fromPropertyName, new RelationDescription(fromPropertyName, RelationType.ONE_TO_MANY,
toEntityName, mappedByPropertyName, idMapper));
Copied: trunk/src/main/org/jboss/envers/entities/mapper/relation/DetachedRelationQueryGenerator.java (from rev 117, trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java)
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/DetachedRelationQueryGenerator.java (rev 0)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/DetachedRelationQueryGenerator.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -0,0 +1,93 @@
+package org.jboss.envers.entities.mapper.relation;
+
+import org.jboss.envers.entities.mapper.id.QueryParameterData;
+import org.jboss.envers.entities.mapper.id.IdMapper;
+import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
+import org.jboss.envers.RevisionType;
+import org.jboss.envers.reader.VersionsReaderImplementor;
+import org.hibernate.Query;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class DetachedRelationQueryGenerator {
+ private final String queryString;
+ private final IdMapper referencingMiddleIdMapper;
+
+ public DetachedRelationQueryGenerator(VersionsEntitiesConfiguration verEntCfg,
+ String versionsReferencedEntityName, String versionsMiddleEntityName,
+ IdMapper referencingMiddleIdMapper, IdMapper referencedMiddleIdMapper,
+ IdMapper referencedIdMapper) {
+ this.referencingMiddleIdMapper = referencingMiddleIdMapper;
+
+ /*
+ * The query that we need to create:
+ * SELECT e FROM versionsReferencedEntity e, middleEntity ee
+ * WHERE
+ * (selecting e entities at revision :revision)
+ * e.revision = (SELECT max(e2.revision) FROM referencedEntity e2
+ * WHERE e2.revision <= :revision AND e2.id1 = e.id1) AND
+ * (only entities referenced by the association)
+ * ee.id1 = e.id1 AND
+ * ee.id2 = :id2 AND
+ * (the association at revision :revision)
+ * ee.revision = (SELECT max(ee2.revision) FROM middleEntity ee2
+ * WHERE ee2.revision <= :revision AND ee2.id2 = :id2 AND ee2.id1 = ee.id1) AND
+ * (only non-deleted entities and associations)
+ * ee.revision_type != DEL AND
+ * e.revision_type != DEL
+ */
+ String revisionPropertyPath = verEntCfg.getRevisionPropPath();
+ String originalIdPropertyName = verEntCfg.getOriginalIdPropName();
+
+ StringBuilder querySB = new StringBuilder();
+ querySB
+ .append("SELECT e FROM ").append(versionsReferencedEntityName).append(" e")
+ .append(", ").append(versionsMiddleEntityName).append(" ee ")
+ .append("WHERE ")
+ // e.revision = (SELECT max(e2.revision) ...
+ .append("e.").append(revisionPropertyPath).append(" = (SELECT max(e2.").append(revisionPropertyPath)
+ .append(") FROM ").append(versionsReferencedEntityName).append(" e2 ")
+ // e2.revision <= :revision
+ .append("WHERE e2.").append(revisionPropertyPath).append(" <= :revision AND ")
+ // e2.id1 = e.id1)
+ .append(referencedIdMapper.getIdsEqualQuery("e." + originalIdPropertyName, "e2." + originalIdPropertyName))
+ .append(") AND ")
+ // ee.id1 = e.id1
+ .append(referencedMiddleIdMapper.getIdsEqualQuery("ee." + originalIdPropertyName,
+ referencedIdMapper, "e." + originalIdPropertyName))
+ .append(" AND ")
+ // ee.id2 = :id2
+ .append(referencingMiddleIdMapper.getIdEqualsQuery("ee." + originalIdPropertyName, true))
+ .append(" AND ")
+ // ee.revision = (SELECT max(ee2.revision) ...
+ .append("ee.").append(revisionPropertyPath).append(" = (SELECT max(ee2.").append(revisionPropertyPath)
+ .append(") FROM ").append(versionsMiddleEntityName).append(" ee2 ")
+ // ee2.revision <= :revision
+ .append("WHERE ee2.").append(revisionPropertyPath).append(" <= :revision AND ")
+ // ee2.id2 = :id2)
+ .append(referencingMiddleIdMapper.getIdEqualsQuery("ee2." + originalIdPropertyName, true))
+ .append(" AND ")
+ // ee2.id1 = ee.id1)
+ .append(referencedMiddleIdMapper.getIdsEqualQuery("ee." + originalIdPropertyName, "ee2." + originalIdPropertyName))
+ .append(") AND ")
+ // e.revision_type != DEL AND
+ .append("e.").append(verEntCfg.getRevisionTypePropName()).append(" != ").append(":delrevisiontype")
+ .append(" AND ")
+ // ee.revision_type != DEL
+ .append("ee.").append(verEntCfg.getRevisionTypePropName()).append(" != ").append(":delrevisiontype");
+
+ queryString = querySB.toString();
+ }
+
+ public Query getQuery(VersionsReaderImplementor versionsReader, Object primaryKey, Number revision) {
+ Query query = versionsReader.getSession().createQuery(queryString);
+ query.setParameter("revision", revision);
+ query.setParameter("delrevisiontype", RevisionType.DEL);
+ for (QueryParameterData paramData: referencingMiddleIdMapper.mapToQueryParametersFromId(primaryKey)) {
+ paramData.setParameterValue(query);
+ }
+
+ return query;
+ }
+}
Copied: trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyAttachedMapper.java (from rev 117, trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java)
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyAttachedMapper.java (rev 0)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyAttachedMapper.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -0,0 +1,64 @@
+/*
+ * 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.entities.mapper.relation;
+
+import org.jboss.envers.entities.mapper.PropertyMapper;
+import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
+import org.jboss.envers.reader.VersionsReaderImplementor;
+import org.jboss.envers.entities.mapper.relation.lazy.OneToManyAttachedInitializor;
+import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
+import org.jboss.envers.configuration.VersionsConfiguration;
+import org.hibernate.collection.PersistentCollection;
+
+import java.util.*;
+import java.io.Serializable;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class OneToManyAttachedMapper extends AbstractOneToManyMapper implements PropertyMapper {
+ private final String owningReferencePropertyName;
+
+ public OneToManyAttachedMapper(String owningReferencePropertyName, String owningEntityName, String propertyName) {
+ super(owningEntityName, propertyName);
+
+ this.owningReferencePropertyName = owningReferencePropertyName;
+ }
+
+ public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj, Object oldObj) {
+ return false;
+ }
+
+ protected <T extends Collection> Initializor<T> getInitializator(VersionsConfiguration verCfg,
+ VersionsReaderImplementor versionsReader,
+ Class<?> entityClass, Object primaryKey,
+ Number revision,
+ Class<T> collectionClass) {
+ return new OneToManyAttachedInitializor<T>(versionsReader, entityClass, owningReferencePropertyName, primaryKey,
+ revision, collectionClass);
+ }
+
+ public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName, PersistentCollection newColl,
+ Serializable oldColl, Serializable id) {
+ return null;
+ }
+}
\ No newline at end of file
Copied: trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java (from rev 117, trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java)
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java (rev 0)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyDetachedMapper.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -0,0 +1,121 @@
+package org.jboss.envers.entities.mapper.relation;
+
+import org.jboss.envers.entities.mapper.PropertyMapper;
+import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
+import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
+import org.jboss.envers.entities.mapper.relation.lazy.OneToManyDetachedInitializor;
+import org.jboss.envers.entities.mapper.id.IdMapper;
+import org.jboss.envers.reader.VersionsReaderImplementor;
+import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
+import org.jboss.envers.configuration.VersionsConfiguration;
+import org.jboss.envers.RevisionType;
+import org.hibernate.collection.PersistentCollection;
+
+import java.util.*;
+import java.io.Serializable;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class OneToManyDetachedMapper extends AbstractOneToManyMapper implements PropertyMapper {
+ private final VersionsEntitiesConfiguration verEntCfg;
+ /**
+ * Name of the entity that declares the relation.
+ */
+ private final String referencedEntityName;
+ /**
+ * Name of the property in <code>referencedEntityName</code> that holds the value of the relation.
+ */
+ private final String collectionReferencingPropertyName;
+ /**
+ * Generated middle entity, which stores the bindings of the relation.
+ */
+ private final String versionsMiddleEntityName;
+ private final IdMapper referencingMiddleIdMapper;
+ private final IdMapper referencedMiddleIdMapper;
+
+ private final DetachedRelationQueryGenerator queryGenerator;
+
+ public OneToManyDetachedMapper(VersionsEntitiesConfiguration verEntCfg, String referencingEntityName,
+ String referencedEntityName, String collectionReferencingPropertyName,
+ String versionsReferencedEntityName, String versionsMiddleEntityName,
+ IdMapper referencingMiddleIdMapper, IdMapper referencedMiddleIdMapper,
+ IdMapper referencedIdMapper) {
+ super(referencingEntityName, collectionReferencingPropertyName);
+
+ this.verEntCfg = verEntCfg;
+ this.referencedEntityName = referencedEntityName;
+ this.collectionReferencingPropertyName = collectionReferencingPropertyName;
+ this.versionsMiddleEntityName = versionsMiddleEntityName;
+ this.referencingMiddleIdMapper = referencingMiddleIdMapper;
+ this.referencedMiddleIdMapper = referencedMiddleIdMapper;
+
+ queryGenerator = new DetachedRelationQueryGenerator(verEntCfg, versionsReferencedEntityName,
+ versionsMiddleEntityName, referencingMiddleIdMapper, referencedMiddleIdMapper, referencedIdMapper);
+ }
+
+ private Collection getOldCollection(Serializable oldColl) {
+ if (oldColl instanceof Map) {
+ return ((Map) oldColl).keySet();
+ } else {
+ return (Collection) oldColl;
+ }
+ }
+
+ private void addCollectionChanges(List<PersistentCollectionChangeData> collectionChanges, Set<Object> changed,
+ RevisionType revisionType, Serializable id) {
+ for (Object changedEntity : changed) {
+ Map<String, Object> entityData = new HashMap<String, Object>();
+ Map<String, Object> originalId = new HashMap<String, Object>();
+ entityData.put(verEntCfg.getOriginalIdPropName(), originalId);
+
+ collectionChanges.add(new PersistentCollectionChangeData(versionsMiddleEntityName, entityData));
+ referencingMiddleIdMapper.mapToMapFromId(originalId, id);
+ referencedMiddleIdMapper.mapToMapFromEntity(originalId, changedEntity);
+
+ entityData.put(verEntCfg.getRevisionTypePropName(), revisionType);
+ }
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName,
+ PersistentCollection newColl,
+ Serializable oldColl, Serializable id) {
+ if (!collectionReferencingPropertyName.equals(referencingPropertyName)) {
+ return null;
+ }
+
+ List<PersistentCollectionChangeData> collectionChanges = new ArrayList<PersistentCollectionChangeData>();
+
+ Collection newCollection = (Collection) newColl;
+ Collection oldCollection = getOldCollection(oldColl);
+
+ Set<Object> added = new HashSet<Object>();
+ if (newColl != null) { added.addAll(newCollection); }
+ if (oldColl != null) { added.removeAll(oldCollection); }
+
+ addCollectionChanges(collectionChanges, added, RevisionType.ADD, id);
+
+ Set<Object> deleted = new HashSet<Object>();
+ if (oldColl != null) { deleted.addAll(oldCollection); }
+ if (newColl != null) { deleted.removeAll(newCollection); }
+
+ addCollectionChanges(collectionChanges, deleted, RevisionType.DEL, id);
+
+ return collectionChanges;
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj, Object oldObj) {
+ // Changes are mapped in the "mapCollectionChanges" method.
+ return false;
+ }
+
+ protected <T extends Collection> Initializor<T> getInitializator(VersionsConfiguration verCfg,
+ VersionsReaderImplementor versionsReader,
+ Class<?> entityClass, Object primaryKey,
+ Number revision, Class<T> collectionClass) {
+ return new OneToManyDetachedInitializor<T>(verCfg, referencedEntityName, queryGenerator,
+ versionsReader, primaryKey, revision, collectionClass);
+ }
+}
Copied: trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToOneNotOwningIdMapper.java (from rev 116, trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToOneIdMapper.java)
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToOneNotOwningIdMapper.java (rev 0)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToOneNotOwningIdMapper.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -0,0 +1,87 @@
+/*
+ * 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.entities.mapper.relation;
+
+import org.jboss.envers.entities.mapper.PropertyMapper;
+import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
+import org.jboss.envers.reader.VersionsReaderImplementor;
+import org.jboss.envers.tools.reflection.ReflectionTools;
+import org.jboss.envers.query.VersionsRestrictions;
+import org.jboss.envers.exception.VersionsException;
+import org.jboss.envers.configuration.VersionsConfiguration;
+import org.hibernate.property.Setter;
+import org.hibernate.NonUniqueResultException;
+import org.hibernate.collection.PersistentCollection;
+
+import javax.persistence.NoResultException;
+import java.util.Map;
+import java.util.List;
+import java.io.Serializable;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class OneToOneNotOwningIdMapper implements PropertyMapper {
+ private String owningReferencePropertyName;
+ private String owningEntityName;
+ private String propertyName;
+
+ public OneToOneNotOwningIdMapper(String owningReferencePropertyName, String owningEntityName, String propertyName) {
+ this.owningReferencePropertyName = owningReferencePropertyName;
+ this.owningEntityName = owningEntityName;
+ this.propertyName = propertyName;
+ }
+
+ public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj, Object oldObj) {
+ return false;
+ }
+
+ public void mapToEntityFromMap(VersionsConfiguration verCfg, Object obj, Map data, Object primaryKey, VersionsReaderImplementor versionsReader, Number revision) {
+ if (obj == null) {
+ return;
+ }
+
+ Class<?> entityClass = ReflectionTools.loadClass(owningEntityName);
+
+ Object value;
+
+ try {
+ value = versionsReader.createQuery().forEntitiesAtRevision(entityClass, revision)
+ .add(VersionsRestrictions.relatedIdEq(owningReferencePropertyName, primaryKey)).getSingleResult();
+ } catch (NoResultException e) {
+ value = null;
+ } catch (NonUniqueResultException e) {
+ throw new VersionsException("Many versions results for one-to-one relationship: (" + owningEntityName +
+ ", " + owningReferencePropertyName + ")");
+ }
+
+ Setter setter = ReflectionTools.getSetter(obj.getClass(), propertyName);
+ setter.set(obj, value, null);
+ }
+
+ public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName,
+ PersistentCollection newColl,
+ Serializable oldColl,
+ Serializable id) {
+ return null;
+ }
+}
Copied: trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyAttachedInitializor.java (from rev 117, trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java)
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyAttachedInitializor.java (rev 0)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyAttachedInitializor.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -0,0 +1,74 @@
+/*
+ * 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.entities.mapper.relation.lazy;
+
+import org.jboss.envers.reader.VersionsReaderImplementor;
+import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
+import org.jboss.envers.query.VersionsRestrictions;
+import org.jboss.envers.exception.VersionsException;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class OneToManyAttachedInitializor<T extends Collection> implements Initializor<T> {
+ private VersionsReaderImplementor versionsReader;
+ private Class<?> entityClass;
+ private String owningReferencePropertyName;
+ private Object primaryKey;
+ private Number revision;
+ private Class<T> collectionClass;
+
+ public OneToManyAttachedInitializor(VersionsReaderImplementor versionsReader, Class<?> entityClass,
+ String owningReferencePropertyName, Object primaryKey, Number revision,
+ Class<T> collectionClass) {
+ this.versionsReader = versionsReader;
+ this.entityClass = entityClass;
+ this.owningReferencePropertyName = owningReferencePropertyName;
+ this.primaryKey = primaryKey;
+ this.revision = revision;
+ this.collectionClass = collectionClass;
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public T initialize() {
+ List queryResult = versionsReader.createQuery().forEntitiesAtRevision(entityClass, revision)
+ .add(VersionsRestrictions.relatedIdEq(owningReferencePropertyName, primaryKey)).getResultList();
+
+ if (collectionClass.isAssignableFrom(queryResult.getClass())) {
+ return (T) queryResult;
+ } else {
+ Collection result;
+ try {
+ result = collectionClass.newInstance();
+ } catch (Exception e) {
+ throw new VersionsException(e);
+ }
+
+ result.addAll(queryResult);
+
+ return (T) result;
+ }
+ }
+}
Copied: trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyDetachedInitializor.java (from rev 117, trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java)
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyDetachedInitializor.java (rev 0)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyDetachedInitializor.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -0,0 +1,55 @@
+package org.jboss.envers.entities.mapper.relation.lazy;
+
+import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
+import org.jboss.envers.entities.mapper.relation.DetachedRelationQueryGenerator;
+import org.jboss.envers.entities.EntityInstantiator;
+import org.jboss.envers.reader.VersionsReaderImplementor;
+import org.jboss.envers.exception.VersionsException;
+import org.jboss.envers.configuration.VersionsConfiguration;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class OneToManyDetachedInitializor<T extends Collection> implements Initializor<T> {
+ private final VersionsConfiguration verCfg;
+ private final String entityName;
+ private final DetachedRelationQueryGenerator queryGenerator;
+ private final VersionsReaderImplementor versionsReader;
+ private final Object primaryKey;
+ private final Number revision;
+ private final Class<T> collectionClass;
+
+ public OneToManyDetachedInitializor(VersionsConfiguration verCfg, String entityName,
+ DetachedRelationQueryGenerator queryGenerator,
+ VersionsReaderImplementor versionsReader, Object primaryKey,
+ Number revision, Class<T> collectionClass) {
+ this.verCfg = verCfg;
+ this.entityName = entityName;
+ this.queryGenerator = queryGenerator;
+ this.versionsReader = versionsReader;
+ this.primaryKey = primaryKey;
+ this.revision = revision;
+ this.collectionClass = collectionClass;
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public T initialize() {
+ EntityInstantiator entityInstantiator = new EntityInstantiator(verCfg, versionsReader);
+
+ List queryResult = queryGenerator.getQuery(versionsReader, primaryKey, revision).list();
+
+ T result;
+ try {
+ result = collectionClass.newInstance();
+ } catch (Exception e) {
+ throw new VersionsException(e);
+ }
+
+ entityInstantiator.addInstancesFromVersionsEntities(entityName, result, queryResult, revision);
+
+ return result;
+ }
+}
Modified: trunk/src/test/org/jboss/envers/test/entities/manytomany/SetOwnedEntity.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/manytomany/SetOwnedEntity.java 2008-08-22 15:22:20 UTC (rev 123)
+++ trunk/src/test/org/jboss/envers/test/entities/manytomany/SetOwnedEntity.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -20,7 +20,7 @@
private String data;
@Versioned
- @ManyToMany(mappedBy="referencing")
+ @ManyToMany(mappedBy="references")
private Set<SetOwningEntity> referencing;
public SetOwnedEntity() {
Copied: trunk/src/test/org/jboss/envers/test/entities/onetomany/detached (from rev 117, trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional)
Copied: trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/ListRefCollEntity.java (from rev 118, trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ListRefCollEntity.java)
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/ListRefCollEntity.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/ListRefCollEntity.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -0,0 +1,85 @@
+package org.jboss.envers.test.entities.onetomany.detached;
+
+import org.jboss.envers.Versioned;
+import org.jboss.envers.test.entities.StrTestEntity;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import java.util.List;
+
+/**
+ * Set collection of references entity
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+public class ListRefCollEntity {
+ @Id
+ private Integer id;
+
+ @Versioned
+ private String data;
+
+ @Versioned
+ @OneToMany
+ private List<StrTestEntity> collection;
+
+ public ListRefCollEntity() {
+ }
+
+ public ListRefCollEntity(Integer id, String data) {
+ this.id = id;
+ this.data = data;
+ }
+
+ public ListRefCollEntity(String data) {
+ 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 List<StrTestEntity> getCollection() {
+ return collection;
+ }
+
+ public void setCollection(List<StrTestEntity> collection) {
+ this.collection = collection;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof ListRefCollEntity)) return false;
+
+ ListRefCollEntity that = (ListRefCollEntity) 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 "SetRefEdEntity(id = " + id + ", data = " + data + ")";
+ }
+}
\ No newline at end of file
Modified: trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/SetRefCollEntity.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/SetRefCollEntity.java 2008-08-21 11:18:53 UTC (rev 117)
+++ trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/SetRefCollEntity.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -1,4 +1,4 @@
-package org.jboss.envers.test.entities.onetomany.unidirectional;
+package org.jboss.envers.test.entities.onetomany.detached;
import org.jboss.envers.Versioned;
import org.jboss.envers.test.entities.StrTestEntity;
Copied: trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/ids (from rev 119, trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ids)
Modified: trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/ids/SetRefCollEntityEmbId.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ids/SetRefCollEntityEmbId.java 2008-08-21 13:56:27 UTC (rev 119)
+++ trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/ids/SetRefCollEntityEmbId.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -1,4 +1,4 @@
-package org.jboss.envers.test.entities.onetomany.unidirectional.ids;
+package org.jboss.envers.test.entities.onetomany.detached.ids;
import org.jboss.envers.Versioned;
import org.jboss.envers.test.entities.ids.EmbId;
Modified: trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/ids/SetRefCollEntityMulId.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ids/SetRefCollEntityMulId.java 2008-08-21 13:56:27 UTC (rev 119)
+++ trunk/src/test/org/jboss/envers/test/entities/onetomany/detached/ids/SetRefCollEntityMulId.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -1,4 +1,4 @@
-package org.jboss.envers.test.entities.onetomany.unidirectional.ids;
+package org.jboss.envers.test.entities.onetomany.detached.ids;
import org.jboss.envers.Versioned;
import org.jboss.envers.test.entities.ids.MulIdTestEntity;
Copied: trunk/src/test/org/jboss/envers/test/integration/naming/DetachedNamingTestEntity.java (from rev 120, trunk/src/test/org/jboss/envers/test/integration/naming/UnidirectionalNamingTestEntity.java)
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/naming/DetachedNamingTestEntity.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/naming/DetachedNamingTestEntity.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -0,0 +1,85 @@
+package org.jboss.envers.test.integration.naming;
+
+import org.jboss.envers.Versioned;
+import org.jboss.envers.test.entities.StrTestEntity;
+
+import javax.persistence.*;
+import java.util.Set;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+public class DetachedNamingTestEntity {
+ @Id
+ private Integer id;
+
+ @Versioned
+ private String data;
+
+ @Versioned
+ @OneToMany
+ @JoinTable(name = "UNI_NAMING_TEST",
+ joinColumns = @JoinColumn(name = "ID_1"),
+ inverseJoinColumns = @JoinColumn(name = "ID_2"))
+ private Set<StrTestEntity> collection;
+
+ public DetachedNamingTestEntity() {
+ }
+
+ public DetachedNamingTestEntity(Integer id, String data) {
+ this.id = id;
+ this.data = data;
+ }
+
+ public DetachedNamingTestEntity(String data) {
+ 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 Set<StrTestEntity> getCollection() {
+ return collection;
+ }
+
+ public void setCollection(Set<StrTestEntity> collection) {
+ this.collection = collection;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof DetachedNamingTestEntity)) return false;
+
+ DetachedNamingTestEntity that = (DetachedNamingTestEntity) 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 "DetachedNamingTestEntity(id = " + id + ", data = " + data + ")";
+ }
+}
Modified: trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java 2008-08-22 15:22:20 UTC (rev 123)
+++ trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -21,13 +21,13 @@
private Integer str1_id;
public void configure(Ejb3Configuration cfg) {
- cfg.addAnnotatedClass(UnidirectionalNamingTestEntity.class);
+ cfg.addAnnotatedClass(DetachedNamingTestEntity.class);
cfg.addAnnotatedClass(StrTestEntity.class);
}
@BeforeClass(dependsOnMethods = "init")
public void initData() {
- UnidirectionalNamingTestEntity uni1 = new UnidirectionalNamingTestEntity(1, "data1");
+ DetachedNamingTestEntity uni1 = new DetachedNamingTestEntity(1, "data1");
StrTestEntity str1 = new StrTestEntity("str1");
// Revision 1
@@ -43,7 +43,7 @@
// Revision 2
em.getTransaction().begin();
- uni1 = em.find(UnidirectionalNamingTestEntity.class, uni1.getId());
+ uni1 = em.find(DetachedNamingTestEntity.class, uni1.getId());
str1 = em.find(StrTestEntity.class, str1.getId());
uni1.getCollection().add(str1);
@@ -57,7 +57,7 @@
@Test
public void testRevisionsCounts() {
- assert Arrays.asList(1, 2).equals(getVersionsReader().getRevisions(UnidirectionalNamingTestEntity.class, uni1_id));
+ assert Arrays.asList(1, 2).equals(getVersionsReader().getRevisions(DetachedNamingTestEntity.class, uni1_id));
assert Arrays.asList(1).equals(getVersionsReader().getRevisions(StrTestEntity.class, str1_id));
}
@@ -65,8 +65,8 @@
public void testHistoryOfUniId1() {
StrTestEntity str1 = getEntityManager().find(StrTestEntity.class, str1_id);
- UnidirectionalNamingTestEntity rev1 = getVersionsReader().find(UnidirectionalNamingTestEntity.class, uni1_id, 1);
- UnidirectionalNamingTestEntity rev2 = getVersionsReader().find(UnidirectionalNamingTestEntity.class, uni1_id, 2);
+ DetachedNamingTestEntity rev1 = getVersionsReader().find(DetachedNamingTestEntity.class, uni1_id, 1);
+ DetachedNamingTestEntity rev2 = getVersionsReader().find(DetachedNamingTestEntity.class, uni1_id, 2);
assert rev1.getCollection().equals(TestTools.makeSet());
assert rev2.getCollection().equals(TestTools.makeSet(str1));
@@ -78,7 +78,7 @@
@Test
public void testTableName() {
assert "UNI_NAMING_TEST_versions".equals(
- getCfg().getClassMapping("UnidirectionalNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
+ getCfg().getClassMapping("DetachedNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
.getTable().getName());
}
@@ -86,7 +86,7 @@
@Test
public void testJoinColumnName() {
Iterator<Column> columns =
- getCfg().getClassMapping("UnidirectionalNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
+ getCfg().getClassMapping("DetachedNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
.getTable().getColumnIterator();
boolean id1Found = false;
Copied: trunk/src/test/org/jboss/envers/test/integration/onetomany/detached (from rev 117, trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional)
Copied: trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedList.java (from rev 118, trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedList.java)
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedList.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedList.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -0,0 +1,115 @@
+package org.jboss.envers.test.integration.onetomany.detached;
+
+import org.jboss.envers.test.integration.AbstractEntityTest;
+import org.jboss.envers.test.entities.onetomany.detached.ListRefCollEntity;
+import org.jboss.envers.test.entities.StrTestEntity;
+import org.jboss.envers.test.tools.TestTools;
+import org.hibernate.ejb.Ejb3Configuration;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+import java.util.ArrayList;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class BasicNotOwnedList extends AbstractEntityTest {
+ private Integer str1_id;
+ private Integer str2_id;
+
+ private Integer coll1_id;
+
+ public void configure(Ejb3Configuration cfg) {
+ cfg.addAnnotatedClass(StrTestEntity.class);
+ cfg.addAnnotatedClass(ListRefCollEntity.class);
+ }
+
+ @BeforeClass(dependsOnMethods = "init")
+ public void initData() {
+ EntityManager em = getEntityManager();
+
+ StrTestEntity str1 = new StrTestEntity("str1");
+ StrTestEntity str2 = new StrTestEntity("str2");
+
+ ListRefCollEntity coll1 = new ListRefCollEntity(3, "coll1");
+
+ // Revision 1
+ em.getTransaction().begin();
+
+ em.persist(str1);
+ em.persist(str2);
+
+ coll1.setCollection(new ArrayList<StrTestEntity>());
+ coll1.getCollection().add(str1);
+ em.persist(coll1);
+
+ em.getTransaction().commit();
+
+ // Revision 2
+ em.getTransaction().begin();
+
+ str2 = em.find(StrTestEntity.class, str2.getId());
+ coll1 = em.find(ListRefCollEntity.class, coll1.getId());
+
+ coll1.getCollection().add(str2);
+
+ em.getTransaction().commit();
+
+ // Revision 3
+ em.getTransaction().begin();
+
+ str1 = em.find(StrTestEntity.class, str1.getId());
+ coll1 = em.find(ListRefCollEntity.class, coll1.getId());
+
+ coll1.getCollection().remove(str1);
+
+ em.getTransaction().commit();
+
+ // Revision 4
+ em.getTransaction().begin();
+
+ coll1 = em.find(ListRefCollEntity.class, coll1.getId());
+
+ coll1.getCollection().clear();
+
+ em.getTransaction().commit();
+
+ //
+
+ str1_id = str1.getId();
+ str2_id = str2.getId();
+
+ coll1_id = coll1.getId();
+ }
+
+ @Test
+ public void testRevisionsCounts() {
+ assert Arrays.asList(1, 2, 3, 4).equals(getVersionsReader().getRevisions(ListRefCollEntity.class, coll1_id));
+
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(StrTestEntity.class, str1_id));
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(StrTestEntity.class, str2_id));
+ }
+
+ @Test
+ public void testHistoryOfColl1() {
+ StrTestEntity str1 = getEntityManager().find(StrTestEntity.class, str1_id);
+ StrTestEntity str2 = getEntityManager().find(StrTestEntity.class, str2_id);
+
+ ListRefCollEntity rev1 = getVersionsReader().find(ListRefCollEntity.class, coll1_id, 1);
+ ListRefCollEntity rev2 = getVersionsReader().find(ListRefCollEntity.class, coll1_id, 2);
+ ListRefCollEntity rev3 = getVersionsReader().find(ListRefCollEntity.class, coll1_id, 3);
+ ListRefCollEntity rev4 = getVersionsReader().find(ListRefCollEntity.class, coll1_id, 4);
+
+ assert TestTools.checkList(rev1.getCollection(), str1);
+ assert TestTools.checkList(rev2.getCollection(), str1, str2);
+ assert TestTools.checkList(rev3.getCollection(), str2);
+ assert TestTools.checkList(rev4.getCollection());
+
+ assert "coll1".equals(rev1.getData());
+ assert "coll1".equals(rev2.getData());
+ assert "coll1".equals(rev3.getData());
+ assert "coll1".equals(rev4.getData());
+ }
+}
\ No newline at end of file
Deleted: trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedSet.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSet.java 2008-08-21 11:18:53 UTC (rev 117)
+++ trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedSet.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -1,123 +0,0 @@
-package org.jboss.envers.test.integration.onetomany.unidirectional;
-
-import org.jboss.envers.test.integration.AbstractEntityTest;
-import org.jboss.envers.test.entities.onetomany.unidirectional.SetRefCollEntity;
-import org.jboss.envers.test.entities.StrTestEntity;
-import org.hibernate.ejb.Ejb3Configuration;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import javax.persistence.EntityManager;
-import java.util.Arrays;
-import java.util.Set;
-import java.util.HashSet;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class BasicNotOwnedSet extends AbstractEntityTest {
- private Integer str1_id;
- private Integer str2_id;
-
- private Integer coll1_id;
-
- public void configure(Ejb3Configuration cfg) {
- cfg.addAnnotatedClass(StrTestEntity.class);
- cfg.addAnnotatedClass(SetRefCollEntity.class);
- }
-
- @BeforeClass(dependsOnMethods = "init")
- public void initData() {
- EntityManager em = getEntityManager();
-
- StrTestEntity str1 = new StrTestEntity("str1");
- StrTestEntity str2 = new StrTestEntity("str2");
-
- SetRefCollEntity coll1 = new SetRefCollEntity(3, "coll1");
-
- // Revision 1
- em.getTransaction().begin();
-
- em.persist(str1);
- em.persist(str2);
-
- coll1.setCollection(new HashSet<StrTestEntity>());
- coll1.getCollection().add(str1);
- em.persist(coll1);
-
- em.getTransaction().commit();
-
- // Revision 2
- em.getTransaction().begin();
-
- str2 = em.find(StrTestEntity.class, str2.getId());
- coll1 = em.find(SetRefCollEntity.class, coll1.getId());
-
- coll1.getCollection().add(str2);
-
- em.getTransaction().commit();
-
- // Revision 3
- em.getTransaction().begin();
-
- str1 = em.find(StrTestEntity.class, str1.getId());
- coll1 = em.find(SetRefCollEntity.class, coll1.getId());
-
- coll1.getCollection().remove(str1);
-
- em.getTransaction().commit();
-
- // Revision 4
- em.getTransaction().begin();
-
- coll1 = em.find(SetRefCollEntity.class, coll1.getId());
-
- coll1.getCollection().clear();
-
- em.getTransaction().commit();
-
- //
-
- str1_id = str1.getId();
- str2_id = str2.getId();
-
- coll1_id = coll1.getId();
- }
-
- @Test
- public void testRevisionsCounts() {
- assert Arrays.asList(1, 2, 3, 4).equals(getVersionsReader().getRevisions(SetRefCollEntity.class, coll1_id));
-
- assert Arrays.asList(1).equals(getVersionsReader().getRevisions(StrTestEntity.class, str1_id));
- assert Arrays.asList(1).equals(getVersionsReader().getRevisions(StrTestEntity.class, str2_id));
- }
-
- @SuppressWarnings({"ManualArrayToCollectionCopy"})
- private <T> Set<T> makeSet(T... objects) {
- Set<T> ret = new HashSet<T>();
- for (T obj : objects) { ret.add(obj); }
- return ret;
- }
-
- @Test
- public void testHistoryOfColl1() {
- StrTestEntity str1 = getEntityManager().find(StrTestEntity.class, str1_id);
- StrTestEntity str2 = getEntityManager().find(StrTestEntity.class, str2_id);
-
- SetRefCollEntity rev1 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 1);
- SetRefCollEntity rev2 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 2);
- SetRefCollEntity rev3 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 3);
- SetRefCollEntity rev4 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 4);
-
- assert rev1.getCollection().equals(makeSet(str1));
- assert rev2.getCollection().equals(makeSet(str1, str2));
- assert rev3.getCollection().equals(makeSet(str2));
- assert rev4.getCollection().equals(makeSet());
-
- assert "coll1".equals(rev1.getData());
- assert "coll1".equals(rev2.getData());
- assert "coll1".equals(rev3.getData());
- assert "coll1".equals(rev4.getData());
-
- }
-}
Copied: trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedSet.java (from rev 118, trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSet.java)
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedSet.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedSet.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -0,0 +1,115 @@
+package org.jboss.envers.test.integration.onetomany.detached;
+
+import org.jboss.envers.test.integration.AbstractEntityTest;
+import org.jboss.envers.test.entities.onetomany.detached.SetRefCollEntity;
+import org.jboss.envers.test.entities.StrTestEntity;
+import org.jboss.envers.test.tools.TestTools;
+import org.hibernate.ejb.Ejb3Configuration;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+import java.util.HashSet;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class BasicNotOwnedSet extends AbstractEntityTest {
+ private Integer str1_id;
+ private Integer str2_id;
+
+ private Integer coll1_id;
+
+ public void configure(Ejb3Configuration cfg) {
+ cfg.addAnnotatedClass(StrTestEntity.class);
+ cfg.addAnnotatedClass(SetRefCollEntity.class);
+ }
+
+ @BeforeClass(dependsOnMethods = "init")
+ public void initData() {
+ EntityManager em = getEntityManager();
+
+ StrTestEntity str1 = new StrTestEntity("str1");
+ StrTestEntity str2 = new StrTestEntity("str2");
+
+ SetRefCollEntity coll1 = new SetRefCollEntity(3, "coll1");
+
+ // Revision 1
+ em.getTransaction().begin();
+
+ em.persist(str1);
+ em.persist(str2);
+
+ coll1.setCollection(new HashSet<StrTestEntity>());
+ coll1.getCollection().add(str1);
+ em.persist(coll1);
+
+ em.getTransaction().commit();
+
+ // Revision 2
+ em.getTransaction().begin();
+
+ str2 = em.find(StrTestEntity.class, str2.getId());
+ coll1 = em.find(SetRefCollEntity.class, coll1.getId());
+
+ coll1.getCollection().add(str2);
+
+ em.getTransaction().commit();
+
+ // Revision 3
+ em.getTransaction().begin();
+
+ str1 = em.find(StrTestEntity.class, str1.getId());
+ coll1 = em.find(SetRefCollEntity.class, coll1.getId());
+
+ coll1.getCollection().remove(str1);
+
+ em.getTransaction().commit();
+
+ // Revision 4
+ em.getTransaction().begin();
+
+ coll1 = em.find(SetRefCollEntity.class, coll1.getId());
+
+ coll1.getCollection().clear();
+
+ em.getTransaction().commit();
+
+ //
+
+ str1_id = str1.getId();
+ str2_id = str2.getId();
+
+ coll1_id = coll1.getId();
+ }
+
+ @Test
+ public void testRevisionsCounts() {
+ assert Arrays.asList(1, 2, 3, 4).equals(getVersionsReader().getRevisions(SetRefCollEntity.class, coll1_id));
+
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(StrTestEntity.class, str1_id));
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(StrTestEntity.class, str2_id));
+ }
+
+ @Test
+ public void testHistoryOfColl1() {
+ StrTestEntity str1 = getEntityManager().find(StrTestEntity.class, str1_id);
+ StrTestEntity str2 = getEntityManager().find(StrTestEntity.class, str2_id);
+
+ SetRefCollEntity rev1 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 1);
+ SetRefCollEntity rev2 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 2);
+ SetRefCollEntity rev3 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 3);
+ SetRefCollEntity rev4 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 4);
+
+ assert rev1.getCollection().equals(TestTools.makeSet(str1));
+ assert rev2.getCollection().equals(TestTools.makeSet(str1, str2));
+ assert rev3.getCollection().equals(TestTools.makeSet(str2));
+ assert rev4.getCollection().equals(TestTools.makeSet());
+
+ assert "coll1".equals(rev1.getData());
+ assert "coll1".equals(rev2.getData());
+ assert "coll1".equals(rev3.getData());
+ assert "coll1".equals(rev4.getData());
+ }
+}
Copied: trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedSetWithEmbId.java (from rev 119, trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSetWithEmbId.java)
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedSetWithEmbId.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedSetWithEmbId.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -0,0 +1,114 @@
+package org.jboss.envers.test.integration.onetomany.detached;
+
+import org.jboss.envers.test.integration.AbstractEntityTest;
+import org.jboss.envers.test.entities.onetomany.detached.ids.SetRefCollEntityEmbId;
+import org.jboss.envers.test.entities.ids.EmbIdTestEntity;
+import org.jboss.envers.test.entities.ids.EmbId;
+import org.jboss.envers.test.tools.TestTools;
+import org.hibernate.ejb.Ejb3Configuration;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+import java.util.HashSet;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class BasicNotOwnedSetWithEmbId extends AbstractEntityTest {
+ private EmbId str1_id;
+ private EmbId str2_id;
+
+ private EmbId coll1_id;
+
+ public void configure(Ejb3Configuration cfg) {
+ cfg.addAnnotatedClass(EmbIdTestEntity.class);
+ cfg.addAnnotatedClass(SetRefCollEntityEmbId.class);
+ }
+
+ @BeforeClass(dependsOnMethods = "init")
+ public void initData() {
+ EntityManager em = getEntityManager();
+
+ str1_id = new EmbId(1, 2);
+ str2_id = new EmbId(3, 4);
+
+ coll1_id = new EmbId(5, 6);
+
+ EmbIdTestEntity str1 = new EmbIdTestEntity(str1_id, "str1");
+ EmbIdTestEntity str2 = new EmbIdTestEntity(str2_id, "str2");
+
+ SetRefCollEntityEmbId coll1 = new SetRefCollEntityEmbId(coll1_id, "coll1");
+
+ // Revision 1
+ em.getTransaction().begin();
+
+ em.persist(str1);
+ em.persist(str2);
+
+ coll1.setCollection(new HashSet<EmbIdTestEntity>());
+ coll1.getCollection().add(str1);
+ em.persist(coll1);
+
+ em.getTransaction().commit();
+
+ // Revision 2
+ em.getTransaction().begin();
+
+ str2 = em.find(EmbIdTestEntity.class, str2.getId());
+ coll1 = em.find(SetRefCollEntityEmbId.class, coll1.getId());
+
+ coll1.getCollection().add(str2);
+
+ em.getTransaction().commit();
+
+ // Revision 3
+ em.getTransaction().begin();
+
+ str1 = em.find(EmbIdTestEntity.class, str1.getId());
+ coll1 = em.find(SetRefCollEntityEmbId.class, coll1.getId());
+
+ coll1.getCollection().remove(str1);
+
+ em.getTransaction().commit();
+
+ // Revision 4
+ em.getTransaction().begin();
+
+ coll1 = em.find(SetRefCollEntityEmbId.class, coll1.getId());
+
+ coll1.getCollection().clear();
+
+ em.getTransaction().commit();
+ }
+
+ @Test
+ public void testRevisionsCounts() {
+ assert Arrays.asList(1, 2, 3, 4).equals(getVersionsReader().getRevisions(SetRefCollEntityEmbId.class, coll1_id));
+
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(EmbIdTestEntity.class, str1_id));
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(EmbIdTestEntity.class, str2_id));
+ }
+
+ @Test
+ public void testHistoryOfColl1() {
+ EmbIdTestEntity str1 = getEntityManager().find(EmbIdTestEntity.class, str1_id);
+ EmbIdTestEntity str2 = getEntityManager().find(EmbIdTestEntity.class, str2_id);
+
+ SetRefCollEntityEmbId rev1 = getVersionsReader().find(SetRefCollEntityEmbId.class, coll1_id, 1);
+ SetRefCollEntityEmbId rev2 = getVersionsReader().find(SetRefCollEntityEmbId.class, coll1_id, 2);
+ SetRefCollEntityEmbId rev3 = getVersionsReader().find(SetRefCollEntityEmbId.class, coll1_id, 3);
+ SetRefCollEntityEmbId rev4 = getVersionsReader().find(SetRefCollEntityEmbId.class, coll1_id, 4);
+
+ assert rev1.getCollection().equals(TestTools.makeSet(str1));
+ assert rev2.getCollection().equals(TestTools.makeSet(str1, str2));
+ assert rev3.getCollection().equals(TestTools.makeSet(str2));
+ assert rev4.getCollection().equals(TestTools.makeSet());
+
+ assert "coll1".equals(rev1.getData());
+ assert "coll1".equals(rev2.getData());
+ assert "coll1".equals(rev3.getData());
+ assert "coll1".equals(rev4.getData());
+ }
+}
\ No newline at end of file
Copied: trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedSetWithMulId.java (from rev 119, trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSetWithMulId.java)
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedSetWithMulId.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/BasicNotOwnedSetWithMulId.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -0,0 +1,114 @@
+package org.jboss.envers.test.integration.onetomany.detached;
+
+import org.jboss.envers.test.integration.AbstractEntityTest;
+import org.jboss.envers.test.entities.onetomany.detached.ids.SetRefCollEntityMulId;
+import org.jboss.envers.test.entities.ids.MulIdTestEntity;
+import org.jboss.envers.test.entities.ids.MulId;
+import org.jboss.envers.test.tools.TestTools;
+import org.hibernate.ejb.Ejb3Configuration;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+import java.util.HashSet;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class BasicNotOwnedSetWithMulId extends AbstractEntityTest {
+ private MulId str1_id;
+ private MulId str2_id;
+
+ private MulId coll1_id;
+
+ public void configure(Ejb3Configuration cfg) {
+ cfg.addAnnotatedClass(MulIdTestEntity.class);
+ cfg.addAnnotatedClass(SetRefCollEntityMulId.class);
+ }
+
+ @BeforeClass(dependsOnMethods = "init")
+ public void initData() {
+ EntityManager em = getEntityManager();
+
+ str1_id = new MulId(1, 2);
+ str2_id = new MulId(3, 4);
+
+ coll1_id = new MulId(5, 6);
+
+ MulIdTestEntity str1 = new MulIdTestEntity(str1_id.getId1(), str1_id.getId2(), "str1");
+ MulIdTestEntity str2 = new MulIdTestEntity(str2_id.getId1(), str2_id.getId2(), "str2");
+
+ SetRefCollEntityMulId coll1 = new SetRefCollEntityMulId(coll1_id.getId1(), coll1_id.getId2(), "coll1");
+
+ // Revision 1
+ em.getTransaction().begin();
+
+ em.persist(str1);
+ em.persist(str2);
+
+ coll1.setCollection(new HashSet<MulIdTestEntity>());
+ coll1.getCollection().add(str1);
+ em.persist(coll1);
+
+ em.getTransaction().commit();
+
+ // Revision 2
+ em.getTransaction().begin();
+
+ str2 = em.find(MulIdTestEntity.class, str2_id);
+ coll1 = em.find(SetRefCollEntityMulId.class, coll1_id);
+
+ coll1.getCollection().add(str2);
+
+ em.getTransaction().commit();
+
+ // Revision 3
+ em.getTransaction().begin();
+
+ str1 = em.find(MulIdTestEntity.class, str1_id);
+ coll1 = em.find(SetRefCollEntityMulId.class, coll1_id);
+
+ coll1.getCollection().remove(str1);
+
+ em.getTransaction().commit();
+
+ // Revision 4
+ em.getTransaction().begin();
+
+ coll1 = em.find(SetRefCollEntityMulId.class, coll1_id);
+
+ coll1.getCollection().clear();
+
+ em.getTransaction().commit();
+ }
+
+ @Test
+ public void testRevisionsCounts() {
+ assert Arrays.asList(1, 2, 3, 4).equals(getVersionsReader().getRevisions(SetRefCollEntityMulId.class, coll1_id));
+
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(MulIdTestEntity.class, str1_id));
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(MulIdTestEntity.class, str2_id));
+ }
+
+ @Test
+ public void testHistoryOfColl1() {
+ MulIdTestEntity str1 = getEntityManager().find(MulIdTestEntity.class, str1_id);
+ MulIdTestEntity str2 = getEntityManager().find(MulIdTestEntity.class, str2_id);
+
+ SetRefCollEntityMulId rev1 = getVersionsReader().find(SetRefCollEntityMulId.class, coll1_id, 1);
+ SetRefCollEntityMulId rev2 = getVersionsReader().find(SetRefCollEntityMulId.class, coll1_id, 2);
+ SetRefCollEntityMulId rev3 = getVersionsReader().find(SetRefCollEntityMulId.class, coll1_id, 3);
+ SetRefCollEntityMulId rev4 = getVersionsReader().find(SetRefCollEntityMulId.class, coll1_id, 4);
+
+ assert rev1.getCollection().equals(TestTools.makeSet(str1));
+ assert rev2.getCollection().equals(TestTools.makeSet(str1, str2));
+ assert rev3.getCollection().equals(TestTools.makeSet(str2));
+ assert rev4.getCollection().equals(TestTools.makeSet());
+
+ assert "coll1".equals(rev1.getData());
+ assert "coll1".equals(rev2.getData());
+ assert "coll1".equals(rev3.getData());
+ assert "coll1".equals(rev4.getData());
+ }
+}
\ No newline at end of file
Copied: trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/DataChangesNotOwnedSet.java (from rev 118, trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/DataChangesNotOwnedSet.java)
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/DataChangesNotOwnedSet.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/onetomany/detached/DataChangesNotOwnedSet.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -0,0 +1,84 @@
+package org.jboss.envers.test.integration.onetomany.detached;
+
+import org.jboss.envers.test.integration.AbstractEntityTest;
+import org.jboss.envers.test.entities.onetomany.detached.SetRefCollEntity;
+import org.jboss.envers.test.entities.StrTestEntity;
+import org.jboss.envers.test.tools.TestTools;
+import org.hibernate.ejb.Ejb3Configuration;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+import java.util.HashSet;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class DataChangesNotOwnedSet extends AbstractEntityTest {
+ private Integer str1_id;
+
+ private Integer coll1_id;
+
+ public void configure(Ejb3Configuration cfg) {
+ cfg.addAnnotatedClass(StrTestEntity.class);
+ cfg.addAnnotatedClass(SetRefCollEntity.class);
+ }
+
+ @BeforeClass(dependsOnMethods = "init")
+ public void initData() {
+ EntityManager em = getEntityManager();
+
+ StrTestEntity str1 = new StrTestEntity("str1");
+
+ SetRefCollEntity coll1 = new SetRefCollEntity(3, "coll1");
+
+ // Revision 1
+ em.getTransaction().begin();
+
+ em.persist(str1);
+
+ coll1.setCollection(new HashSet<StrTestEntity>());
+ em.persist(coll1);
+
+ em.getTransaction().commit();
+
+ // Revision 2
+ em.getTransaction().begin();
+
+ str1 = em.find(StrTestEntity.class, str1.getId());
+ coll1 = em.find(SetRefCollEntity.class, coll1.getId());
+
+ coll1.getCollection().add(str1);
+ coll1.setData("coll2");
+
+ em.getTransaction().commit();
+
+ //
+
+ str1_id = str1.getId();
+
+ coll1_id = coll1.getId();
+ }
+
+ @Test
+ public void testRevisionsCounts() {
+ assert Arrays.asList(1, 2).equals(getVersionsReader().getRevisions(SetRefCollEntity.class, coll1_id));
+
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(StrTestEntity.class, str1_id));
+ }
+
+ @Test
+ public void testHistoryOfColl1() {
+ StrTestEntity str1 = getEntityManager().find(StrTestEntity.class, str1_id);
+
+ SetRefCollEntity rev1 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 1);
+ SetRefCollEntity rev2 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 2);
+
+ assert rev1.getCollection().equals(TestTools.makeSet());
+ assert rev2.getCollection().equals(TestTools.makeSet(str1));
+
+ assert "coll1".equals(rev1.getData());
+ assert "coll2".equals(rev2.getData());
+ }
+}
\ 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-08-22 15:22:20 UTC (rev 123)
+++ trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -5,6 +5,7 @@
import org.jboss.envers.SecondaryVersionsTables;
import javax.persistence.*;
+import java.util.Set;
/**
* @author Adam Warski (adam at warski dot org)
@@ -32,6 +33,10 @@
@Transient
private WorkingEntity2 we2;
+ @ManyToMany(mappedBy="we1s")
+ @Versioned
+ private Set<WorkingEntity2> we2s;
+
public WorkingEntity1() {
}
@@ -81,6 +86,14 @@
this.we2 = we2;
}
+ public Set<WorkingEntity2> getWe2s() {
+ return we2s;
+ }
+
+ public void setWe2s(Set<WorkingEntity2> we2s) {
+ this.we2s = we2s;
+ }
+
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/WorkingMain.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/working/WorkingMain.java 2008-08-22 15:22:20 UTC (rev 123)
+++ trunk/src/test/org/jboss/envers/test/working/WorkingMain.java 2008-08-22 16:24:06 UTC (rev 124)
@@ -77,51 +77,10 @@
entityManager.getTransaction().commit();
- // Rev 2
+ //
entityManager.getTransaction().begin();
- we1 = entityManager.find(WorkingEntity1.class, we1.getId1());
- we2 = entityManager.find(WorkingEntity2.class, we2.getId2());
- we2.getWe1s().add(we1);
-
- entityManager.getTransaction().commit();
-
- // Rev 3
- entityManager.getTransaction().begin();
-
- we1_2 = entityManager.find(WorkingEntity1.class, we1_2.getId1());
- we2 = entityManager.find(WorkingEntity2.class, we2.getId2());
- we2.getWe1s().add(we1_2);
-
- entityManager.getTransaction().commit();
-
- // Rev 4
- entityManager.getTransaction().begin();
-
- we1_2 = entityManager.find(WorkingEntity1.class, we1_2.getId1());
- we2 = entityManager.find(WorkingEntity2.class, we2.getId2());
- we2.getWe1s().remove(we1_2);
-
- entityManager.getTransaction().commit();
-
- // Rev 5
- entityManager.getTransaction().begin();
-
- we2 = entityManager.find(WorkingEntity2.class, we2.getId2());
- we2.setWe1s(null);
-
- entityManager.getTransaction().commit();
-
- // Rev 6
- entityManager.getTransaction().begin();
-
VersionsReader vr = VersionsReaderFactory.get(entityManager);
- System.out.println("1 " + vr.find(WorkingEntity2.class, we2.getId2(), 1).getWe1s());
- System.out.println("2 " + vr.find(WorkingEntity2.class, we2.getId2(), 2).getWe1s());
- System.out.println("3 " + vr.find(WorkingEntity2.class, we2.getId2(), 3).getWe1s());
- System.out.println("4 " + vr.find(WorkingEntity2.class, we2.getId2(), 4).getWe1s());
- System.out.println("5 " + vr.find(WorkingEntity2.class, we2.getId2(), 5).getWe1s());
- System.out.println("6 " + vr.find(WorkingEntity2.class, we2.getId2(), 6).getWe1s());
entityManager.getTransaction().commit();
}
16 years, 6 months
JBoss Envers SVN: r123 - in trunk/src/test/org/jboss/envers/test: entities/manytomany and 5 other directories.
by jboss-envers-commits@lists.jboss.org
Author: adamw
Date: 2008-08-22 11:22:20 -0400 (Fri, 22 Aug 2008)
New Revision: 123
Added:
trunk/src/test/org/jboss/envers/test/entities/manytomany/
trunk/src/test/org/jboss/envers/test/entities/manytomany/ListOwnedEntity.java
trunk/src/test/org/jboss/envers/test/entities/manytomany/ListOwningEntity.java
trunk/src/test/org/jboss/envers/test/entities/manytomany/SetOwnedEntity.java
trunk/src/test/org/jboss/envers/test/entities/manytomany/SetOwningEntity.java
trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/
trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/ListOwnedUniEntity.java
trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/ListOwningUniEntity.java
trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/SetOwnedUniEntity.java
trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/SetOwningUniEntity.java
trunk/src/test/org/jboss/envers/test/integration/manytomany/
trunk/src/test/org/jboss/envers/test/integration/manytomany/BasicSet.java
trunk/src/test/org/jboss/envers/test/integration/manytomany/unidirectional/
trunk/src/test/org/jboss/envers/test/integration/manytomany/unidirectional/BasicUniList.java
trunk/src/test/org/jboss/envers/test/integration/manytomany/unidirectional/BasicUniSet.java
Modified:
trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java
Log:
ENVERS-24: tests for many-to-many relations
Added: trunk/src/test/org/jboss/envers/test/entities/manytomany/ListOwnedEntity.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/manytomany/ListOwnedEntity.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/entities/manytomany/ListOwnedEntity.java 2008-08-22 15:22:20 UTC (rev 123)
@@ -0,0 +1,84 @@
+package org.jboss.envers.test.entities.manytomany;
+
+import org.jboss.envers.Versioned;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import java.util.List;
+
+/**
+ * Many-to-many not-owning entity
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+public class ListOwnedEntity {
+ @Id
+ private Integer id;
+
+ @Versioned
+ private String data;
+
+ @Versioned
+ @ManyToMany(mappedBy="referencing")
+ private List<ListOwningEntity> referencing;
+
+ public ListOwnedEntity() {
+ }
+
+ public ListOwnedEntity(Integer id, String data) {
+ this.id = id;
+ this.data = data;
+ }
+
+ public ListOwnedEntity(String data) {
+ 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 List<ListOwningEntity> getReferencing() {
+ return referencing;
+ }
+
+ public void setReferencing(List<ListOwningEntity> referencing) {
+ this.referencing = referencing;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof ListOwnedEntity)) return false;
+
+ ListOwnedEntity that = (ListOwnedEntity) 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 "SetOwnedEntity(id = " + id + ", data = " + data + ")";
+ }
+}
\ No newline at end of file
Added: trunk/src/test/org/jboss/envers/test/entities/manytomany/ListOwningEntity.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/manytomany/ListOwningEntity.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/entities/manytomany/ListOwningEntity.java 2008-08-22 15:22:20 UTC (rev 123)
@@ -0,0 +1,81 @@
+package org.jboss.envers.test.entities.manytomany;
+
+import org.jboss.envers.Versioned;
+
+import javax.persistence.*;
+import java.util.List;
+
+/**
+ * Entity owning the many-to-many relation
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+public class ListOwningEntity {
+ @Id
+ private Integer id;
+
+ @Versioned
+ private String data;
+
+ @Versioned
+ @ManyToMany
+ private List<ListOwnedEntity> references;
+
+ public ListOwningEntity() { }
+
+ public ListOwningEntity(Integer id, String data) {
+ this.id = id;
+ this.data = data;
+ }
+
+ public ListOwningEntity(String data) {
+ 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 List<ListOwnedEntity> getReferences() {
+ return references;
+ }
+
+ public void setReferences(List<ListOwnedEntity> references) {
+ this.references = references;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof ListOwningEntity)) return false;
+
+ ListOwningEntity that = (ListOwningEntity) 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 "SetOwningEntity(id = " + id + ", data = " + data + ")";
+ }
+}
\ No newline at end of file
Copied: trunk/src/test/org/jboss/envers/test/entities/manytomany/SetOwnedEntity.java (from rev 112, trunk/src/test/org/jboss/envers/test/entities/onetomany/SetRefEdEntity.java)
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/manytomany/SetOwnedEntity.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/entities/manytomany/SetOwnedEntity.java 2008-08-22 15:22:20 UTC (rev 123)
@@ -0,0 +1,84 @@
+package org.jboss.envers.test.entities.manytomany;
+
+import org.jboss.envers.Versioned;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import java.util.Set;
+
+/**
+ * Many-to-many not-owning entity
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+public class SetOwnedEntity {
+ @Id
+ private Integer id;
+
+ @Versioned
+ private String data;
+
+ @Versioned
+ @ManyToMany(mappedBy="referencing")
+ private Set<SetOwningEntity> referencing;
+
+ public SetOwnedEntity() {
+ }
+
+ public SetOwnedEntity(Integer id, String data) {
+ this.id = id;
+ this.data = data;
+ }
+
+ public SetOwnedEntity(String data) {
+ 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 Set<SetOwningEntity> getReferencing() {
+ return referencing;
+ }
+
+ public void setReferencing(Set<SetOwningEntity> referencing) {
+ this.referencing = referencing;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof SetOwnedEntity)) return false;
+
+ SetOwnedEntity that = (SetOwnedEntity) 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 "SetOwnedEntity(id = " + id + ", data = " + data + ")";
+ }
+}
\ No newline at end of file
Property changes on: trunk/src/test/org/jboss/envers/test/entities/manytomany/SetOwnedEntity.java
___________________________________________________________________
Name: svn:mergeinfo
+
Copied: trunk/src/test/org/jboss/envers/test/entities/manytomany/SetOwningEntity.java (from rev 112, trunk/src/test/org/jboss/envers/test/entities/onetomany/SetRefIngEntity.java)
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/manytomany/SetOwningEntity.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/entities/manytomany/SetOwningEntity.java 2008-08-22 15:22:20 UTC (rev 123)
@@ -0,0 +1,81 @@
+package org.jboss.envers.test.entities.manytomany;
+
+import org.jboss.envers.Versioned;
+
+import javax.persistence.*;
+import java.util.Set;
+
+/**
+ * Entity owning the many-to-many relation
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+public class SetOwningEntity {
+ @Id
+ private Integer id;
+
+ @Versioned
+ private String data;
+
+ @Versioned
+ @ManyToMany
+ private Set<SetOwnedEntity> references;
+
+ public SetOwningEntity() { }
+
+ public SetOwningEntity(Integer id, String data) {
+ this.id = id;
+ this.data = data;
+ }
+
+ public SetOwningEntity(String data) {
+ 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 Set<SetOwnedEntity> getReferences() {
+ return references;
+ }
+
+ public void setReferences(Set<SetOwnedEntity> references) {
+ this.references = references;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof SetOwningEntity)) return false;
+
+ SetOwningEntity that = (SetOwningEntity) 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 "SetOwningEntity(id = " + id + ", data = " + data + ")";
+ }
+}
\ No newline at end of file
Property changes on: trunk/src/test/org/jboss/envers/test/entities/manytomany/SetOwningEntity.java
___________________________________________________________________
Name: svn:mergeinfo
+
Added: trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/ListOwnedUniEntity.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/ListOwnedUniEntity.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/ListOwnedUniEntity.java 2008-08-22 15:22:20 UTC (rev 123)
@@ -0,0 +1,70 @@
+package org.jboss.envers.test.entities.manytomany.unidirectional;
+
+import org.jboss.envers.Versioned;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * Many-to-many not-owning entity
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+public class ListOwnedUniEntity {
+ @Id
+ private Integer id;
+
+ @Versioned
+ private String data;
+
+ public ListOwnedUniEntity() {
+ }
+
+ public ListOwnedUniEntity(Integer id, String data) {
+ this.id = id;
+ this.data = data;
+ }
+
+ public ListOwnedUniEntity(String data) {
+ 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 ListOwnedUniEntity)) return false;
+
+ ListOwnedUniEntity that = (ListOwnedUniEntity) 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 "SetOwnedEntity(id = " + id + ", data = " + data + ")";
+ }
+}
\ No newline at end of file
Added: trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/ListOwningUniEntity.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/ListOwningUniEntity.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/ListOwningUniEntity.java 2008-08-22 15:22:20 UTC (rev 123)
@@ -0,0 +1,81 @@
+package org.jboss.envers.test.entities.manytomany.unidirectional;
+
+import org.jboss.envers.Versioned;
+
+import javax.persistence.*;
+import java.util.List;
+
+/**
+ * Entity owning the many-to-many relation
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+public class ListOwningUniEntity {
+ @Id
+ private Integer id;
+
+ @Versioned
+ private String data;
+
+ @Versioned
+ @ManyToMany
+ private List<ListOwnedUniEntity> references;
+
+ public ListOwningUniEntity() { }
+
+ public ListOwningUniEntity(Integer id, String data) {
+ this.id = id;
+ this.data = data;
+ }
+
+ public ListOwningUniEntity(String data) {
+ 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 List<ListOwnedUniEntity> getReferences() {
+ return references;
+ }
+
+ public void setReferences(List<ListOwnedUniEntity> references) {
+ this.references = references;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof ListOwningUniEntity)) return false;
+
+ ListOwningUniEntity that = (ListOwningUniEntity) 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 "SetOwningEntity(id = " + id + ", data = " + data + ")";
+ }
+}
\ No newline at end of file
Added: trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/SetOwnedUniEntity.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/SetOwnedUniEntity.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/SetOwnedUniEntity.java 2008-08-22 15:22:20 UTC (rev 123)
@@ -0,0 +1,70 @@
+package org.jboss.envers.test.entities.manytomany.unidirectional;
+
+import org.jboss.envers.Versioned;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+/**
+ * Many-to-many not-owning entity
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+public class SetOwnedUniEntity {
+ @Id
+ private Integer id;
+
+ @Versioned
+ private String data;
+
+ public SetOwnedUniEntity() {
+ }
+
+ public SetOwnedUniEntity(Integer id, String data) {
+ this.id = id;
+ this.data = data;
+ }
+
+ public SetOwnedUniEntity(String data) {
+ 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 SetOwnedUniEntity)) return false;
+
+ SetOwnedUniEntity that = (SetOwnedUniEntity) 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 "SetOwnedUniEntity(id = " + id + ", data = " + data + ")";
+ }
+}
\ No newline at end of file
Added: trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/SetOwningUniEntity.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/SetOwningUniEntity.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/entities/manytomany/unidirectional/SetOwningUniEntity.java 2008-08-22 15:22:20 UTC (rev 123)
@@ -0,0 +1,81 @@
+package org.jboss.envers.test.entities.manytomany.unidirectional;
+
+import org.jboss.envers.Versioned;
+
+import javax.persistence.*;
+import java.util.Set;
+
+/**
+ * Entity owning the many-to-many relation
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+public class SetOwningUniEntity {
+ @Id
+ private Integer id;
+
+ @Versioned
+ private String data;
+
+ @Versioned
+ @ManyToMany
+ private Set<SetOwnedUniEntity> references;
+
+ public SetOwningUniEntity() { }
+
+ public SetOwningUniEntity(Integer id, String data) {
+ this.id = id;
+ this.data = data;
+ }
+
+ public SetOwningUniEntity(String data) {
+ 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 Set<SetOwnedUniEntity> getReferences() {
+ return references;
+ }
+
+ public void setReferences(Set<SetOwnedUniEntity> references) {
+ this.references = references;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof SetOwningUniEntity)) return false;
+
+ SetOwningUniEntity that = (SetOwningUniEntity) 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 "SetOwningUniEntity(id = " + id + ", data = " + data + ")";
+ }
+}
\ No newline at end of file
Copied: trunk/src/test/org/jboss/envers/test/integration/manytomany/BasicSet.java (from rev 118, trunk/src/test/org/jboss/envers/test/integration/onetomany/BasicSet.java)
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/manytomany/BasicSet.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/manytomany/BasicSet.java 2008-08-22 15:22:20 UTC (rev 123)
@@ -0,0 +1,189 @@
+package org.jboss.envers.test.integration.manytomany;
+
+import org.jboss.envers.test.integration.AbstractEntityTest;
+import org.jboss.envers.test.entities.manytomany.SetOwningEntity;
+import org.jboss.envers.test.entities.manytomany.SetOwnedEntity;
+import org.jboss.envers.test.tools.TestTools;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.hibernate.ejb.Ejb3Configuration;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class BasicSet extends AbstractEntityTest {
+ private Integer ed1_id;
+ private Integer ed2_id;
+
+ private Integer ing1_id;
+ private Integer ing2_id;
+
+ public void configure(Ejb3Configuration cfg) {
+ cfg.addAnnotatedClass(SetOwningEntity.class);
+ cfg.addAnnotatedClass(SetOwnedEntity.class);
+ }
+
+ @BeforeClass(dependsOnMethods = "init")
+ public void initData() {
+ EntityManager em = getEntityManager();
+
+ SetOwnedEntity ed1 = new SetOwnedEntity(1, "data_ed_1");
+ SetOwnedEntity ed2 = new SetOwnedEntity(2, "data_ed_2");
+
+ SetOwningEntity ing1 = new SetOwningEntity(3, "data_ing_1");
+ SetOwningEntity ing2 = new SetOwningEntity(4, "data_ing_2");
+
+ // Revision 1
+ em.getTransaction().begin();
+
+ em.persist(ed1);
+ em.persist(ed2);
+ em.persist(ing1);
+ em.persist(ing2);
+
+ em.getTransaction().commit();
+
+ // Revision 2
+
+ em.getTransaction().begin();
+
+ ing1 = em.find(SetOwningEntity.class, ing1.getId());
+ ing2 = em.find(SetOwningEntity.class, ing2.getId());
+ ed1 = em.find(SetOwnedEntity.class, ed1.getId());
+ ed2 = em.find(SetOwnedEntity.class, ed2.getId());
+
+ ing1.setReferences(new HashSet<SetOwnedEntity>());
+ ing1.getReferences().add(ed1);
+
+ ing2.setReferences(new HashSet<SetOwnedEntity>());
+ ing2.getReferences().add(ed1);
+ ing2.getReferences().add(ed2);
+
+ em.getTransaction().commit();
+
+ // Revision 3
+ em.getTransaction().begin();
+
+ ing1 = em.find(SetOwningEntity.class, ing1.getId());
+ ed2 = em.find(SetOwnedEntity.class, ed2.getId());
+ ed1 = em.find(SetOwnedEntity.class, ed1.getId());
+
+ ing1.getReferences().add(ed2);
+
+ em.getTransaction().commit();
+
+ // Revision 4
+ em.getTransaction().begin();
+
+ ing1 = em.find(SetOwningEntity.class, ing1.getId());
+ ed2 = em.find(SetOwnedEntity.class, ed2.getId());
+ ed1 = em.find(SetOwnedEntity.class, ed1.getId());
+
+ ing1.getReferences().remove(ed1);
+
+ em.getTransaction().commit();
+
+ // Revision 5
+ em.getTransaction().begin();
+
+ ing1 = em.find(SetOwningEntity.class, ing1.getId());
+
+ ing1.setReferences(null);
+
+ em.getTransaction().commit();
+
+ //
+
+ ed1_id = ed1.getId();
+ ed2_id = ed2.getId();
+
+ ing1_id = ing1.getId();
+ ing2_id = ing1.getId();
+ }
+
+ @Test
+ public void testRevisionsCounts() {
+ assert Arrays.asList(1, 2, 4).equals(getVersionsReader().getRevisions(SetOwnedEntity.class, ed1_id));
+ assert Arrays.asList(1, 2, 3, 5).equals(getVersionsReader().getRevisions(SetOwnedEntity.class, ed2_id));
+
+ assert Arrays.asList(1, 2, 3, 4, 5).equals(getVersionsReader().getRevisions(SetOwningEntity.class, ing1_id));
+ assert Arrays.asList(1, 2).equals(getVersionsReader().getRevisions(SetOwningEntity.class, ing2_id));
+ }
+
+ @Test
+ public void testHistoryOfEdId1() {
+ SetOwningEntity ing1 = getEntityManager().find(SetOwningEntity.class, ing1_id);
+ SetOwningEntity ing2 = getEntityManager().find(SetOwningEntity.class, ing2_id);
+
+ SetOwnedEntity rev1 = getVersionsReader().find(SetOwnedEntity.class, ed1_id, 1);
+ SetOwnedEntity rev2 = getVersionsReader().find(SetOwnedEntity.class, ed1_id, 2);
+ SetOwnedEntity rev3 = getVersionsReader().find(SetOwnedEntity.class, ed1_id, 3);
+ SetOwnedEntity rev4 = getVersionsReader().find(SetOwnedEntity.class, ed1_id, 4);
+ SetOwnedEntity rev5 = getVersionsReader().find(SetOwnedEntity.class, ed1_id, 5);
+
+ assert rev1.getReferencing().equals(Collections.EMPTY_SET);
+ assert rev2.getReferencing().equals(TestTools.makeSet(ing1, ing2));
+ assert rev3.getReferencing().equals(TestTools.makeSet(ing1, ing2));
+ assert rev4.getReferencing().equals(TestTools.makeSet(ing2));
+ assert rev5.getReferencing().equals(TestTools.makeSet(ing2));
+ }
+
+ @Test
+ public void testHistoryOfEdId2() {
+ SetOwningEntity ing1 = getEntityManager().find(SetOwningEntity.class, ing1_id);
+ SetOwningEntity ing2 = getEntityManager().find(SetOwningEntity.class, ing2_id);
+
+ SetOwnedEntity rev1 = getVersionsReader().find(SetOwnedEntity.class, ed2_id, 1);
+ SetOwnedEntity rev2 = getVersionsReader().find(SetOwnedEntity.class, ed2_id, 2);
+ SetOwnedEntity rev3 = getVersionsReader().find(SetOwnedEntity.class, ed2_id, 3);
+ SetOwnedEntity rev4 = getVersionsReader().find(SetOwnedEntity.class, ed2_id, 4);
+ SetOwnedEntity rev5 = getVersionsReader().find(SetOwnedEntity.class, ed2_id, 5);
+
+ assert rev1.getReferencing().equals(Collections.EMPTY_SET);
+ assert rev2.getReferencing().equals(TestTools.makeSet(ing2));
+ assert rev3.getReferencing().equals(TestTools.makeSet(ing1, ing2));
+ assert rev4.getReferencing().equals(TestTools.makeSet(ing1, ing2));
+ assert rev5.getReferencing().equals(TestTools.makeSet(ing2));
+ }
+
+ @Test
+ public void testHistoryOfEdIng1() {
+ SetOwnedEntity ed1 = getEntityManager().find(SetOwnedEntity.class, ed1_id);
+ SetOwnedEntity ed2 = getEntityManager().find(SetOwnedEntity.class, ed2_id);
+
+ SetOwningEntity rev1 = getVersionsReader().find(SetOwningEntity.class, ing1_id, 1);
+ SetOwningEntity rev2 = getVersionsReader().find(SetOwningEntity.class, ing1_id, 2);
+ SetOwningEntity rev3 = getVersionsReader().find(SetOwningEntity.class, ing1_id, 3);
+ SetOwningEntity rev4 = getVersionsReader().find(SetOwningEntity.class, ing1_id, 4);
+ SetOwningEntity rev5 = getVersionsReader().find(SetOwningEntity.class, ing1_id, 5);
+
+ assert rev1.getReferences().equals(Collections.EMPTY_SET);
+ assert rev2.getReferences().equals(TestTools.makeSet(ed1));
+ assert rev3.getReferences().equals(TestTools.makeSet(ed1, ed2));
+ assert rev4.getReferences().equals(TestTools.makeSet(ed2));
+ assert rev5.getReferences().equals(Collections.EMPTY_SET);
+ }
+
+ @Test
+ public void testHistoryOfEdIng2() {
+ SetOwnedEntity ed1 = getEntityManager().find(SetOwnedEntity.class, ed1_id);
+ SetOwnedEntity ed2 = getEntityManager().find(SetOwnedEntity.class, ed2_id);
+
+ SetOwningEntity rev1 = getVersionsReader().find(SetOwningEntity.class, ing2_id, 1);
+ SetOwningEntity rev2 = getVersionsReader().find(SetOwningEntity.class, ing2_id, 2);
+ SetOwningEntity rev3 = getVersionsReader().find(SetOwningEntity.class, ing2_id, 3);
+ SetOwningEntity rev4 = getVersionsReader().find(SetOwningEntity.class, ing2_id, 4);
+ SetOwningEntity rev5 = getVersionsReader().find(SetOwningEntity.class, ing2_id, 5);
+
+ assert rev1.getReferences().equals(Collections.EMPTY_SET);
+ assert rev2.getReferences().equals(TestTools.makeSet(ed1, ed2));
+ assert rev3.getReferences().equals(TestTools.makeSet(ed1, ed2));
+ assert rev4.getReferences().equals(TestTools.makeSet(ed1, ed2));
+ assert rev5.getReferences().equals(TestTools.makeSet(ed1, ed2));
+ }
+}
\ No newline at end of file
Property changes on: trunk/src/test/org/jboss/envers/test/integration/manytomany/BasicSet.java
___________________________________________________________________
Name: svn:mergeinfo
+
Added: trunk/src/test/org/jboss/envers/test/integration/manytomany/unidirectional/BasicUniList.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/manytomany/unidirectional/BasicUniList.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/manytomany/unidirectional/BasicUniList.java 2008-08-22 15:22:20 UTC (rev 123)
@@ -0,0 +1,153 @@
+package org.jboss.envers.test.integration.manytomany.unidirectional;
+
+import org.jboss.envers.test.integration.AbstractEntityTest;
+import org.jboss.envers.test.entities.manytomany.unidirectional.ListOwnedUniEntity;
+import org.jboss.envers.test.entities.manytomany.unidirectional.ListOwningUniEntity;
+import org.jboss.envers.test.tools.TestTools;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.hibernate.ejb.Ejb3Configuration;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.ArrayList;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class BasicUniList extends AbstractEntityTest {
+ private Integer ed1_id;
+ private Integer ed2_id;
+
+ private Integer ing1_id;
+ private Integer ing2_id;
+
+ public void configure(Ejb3Configuration cfg) {
+ cfg.addAnnotatedClass(ListOwningUniEntity.class);
+ cfg.addAnnotatedClass(ListOwnedUniEntity.class);
+ }
+
+ @BeforeClass(dependsOnMethods = "init")
+ public void initData() {
+ EntityManager em = getEntityManager();
+
+ ListOwnedUniEntity ed1 = new ListOwnedUniEntity(1, "data_ed_1");
+ ListOwnedUniEntity ed2 = new ListOwnedUniEntity(2, "data_ed_2");
+
+ ListOwningUniEntity ing1 = new ListOwningUniEntity(3, "data_ing_1");
+ ListOwningUniEntity ing2 = new ListOwningUniEntity(4, "data_ing_2");
+
+ // Revision 1
+ em.getTransaction().begin();
+
+ em.persist(ed1);
+ em.persist(ed2);
+ em.persist(ing1);
+ em.persist(ing2);
+
+ em.getTransaction().commit();
+
+ // Revision 2
+
+ em.getTransaction().begin();
+
+ ing1 = em.find(ListOwningUniEntity.class, ing1.getId());
+ ing2 = em.find(ListOwningUniEntity.class, ing2.getId());
+ ed1 = em.find(ListOwnedUniEntity.class, ed1.getId());
+ ed2 = em.find(ListOwnedUniEntity.class, ed2.getId());
+
+ ing1.setReferences(new ArrayList<ListOwnedUniEntity>());
+ ing1.getReferences().add(ed1);
+
+ ing2.setReferences(new ArrayList<ListOwnedUniEntity>());
+ ing2.getReferences().add(ed1);
+ ing2.getReferences().add(ed2);
+
+ em.getTransaction().commit();
+
+ // Revision 3
+ em.getTransaction().begin();
+
+ ing1 = em.find(ListOwningUniEntity.class, ing1.getId());
+ ed2 = em.find(ListOwnedUniEntity.class, ed2.getId());
+ ed1 = em.find(ListOwnedUniEntity.class, ed1.getId());
+
+ ing1.getReferences().add(ed2);
+
+ em.getTransaction().commit();
+
+ // Revision 4
+ em.getTransaction().begin();
+
+ ing1 = em.find(ListOwningUniEntity.class, ing1.getId());
+ ed2 = em.find(ListOwnedUniEntity.class, ed2.getId());
+ ed1 = em.find(ListOwnedUniEntity.class, ed1.getId());
+
+ ing1.getReferences().remove(ed1);
+
+ em.getTransaction().commit();
+
+ // Revision 5
+ em.getTransaction().begin();
+
+ ing1 = em.find(ListOwningUniEntity.class, ing1.getId());
+
+ ing1.setReferences(null);
+
+ em.getTransaction().commit();
+
+ //
+
+ ed1_id = ed1.getId();
+ ed2_id = ed2.getId();
+
+ ing1_id = ing1.getId();
+ ing2_id = ing2.getId();
+ }
+
+ @Test
+ public void testRevisionsCounts() {
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(ListOwnedUniEntity.class, ed1_id));
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(ListOwnedUniEntity.class, ed2_id));
+
+ assert Arrays.asList(1, 2, 3, 4, 5).equals(getVersionsReader().getRevisions(ListOwningUniEntity.class, ing1_id));
+ assert Arrays.asList(1, 2).equals(getVersionsReader().getRevisions(ListOwningUniEntity.class, ing2_id));
+ }
+
+ @Test
+ public void testHistoryOfEdIng1() {
+ ListOwnedUniEntity ed1 = getEntityManager().find(ListOwnedUniEntity.class, ed1_id);
+ ListOwnedUniEntity ed2 = getEntityManager().find(ListOwnedUniEntity.class, ed2_id);
+
+ ListOwningUniEntity rev1 = getVersionsReader().find(ListOwningUniEntity.class, ing1_id, 1);
+ ListOwningUniEntity rev2 = getVersionsReader().find(ListOwningUniEntity.class, ing1_id, 2);
+ ListOwningUniEntity rev3 = getVersionsReader().find(ListOwningUniEntity.class, ing1_id, 3);
+ ListOwningUniEntity rev4 = getVersionsReader().find(ListOwningUniEntity.class, ing1_id, 4);
+ ListOwningUniEntity rev5 = getVersionsReader().find(ListOwningUniEntity.class, ing1_id, 5);
+
+ assert rev1.getReferences().equals(Collections.EMPTY_LIST);
+ assert TestTools.checkList(rev2.getReferences(), ed1);
+ assert TestTools.checkList(rev3.getReferences(), ed1, ed2);
+ assert TestTools.checkList(rev4.getReferences(), ed2);
+ assert rev5.getReferences().equals(Collections.EMPTY_LIST);
+ }
+
+ @Test
+ public void testHistoryOfEdIng2() {
+ ListOwnedUniEntity ed1 = getEntityManager().find(ListOwnedUniEntity.class, ed1_id);
+ ListOwnedUniEntity ed2 = getEntityManager().find(ListOwnedUniEntity.class, ed2_id);
+
+ ListOwningUniEntity rev1 = getVersionsReader().find(ListOwningUniEntity.class, ing2_id, 1);
+ ListOwningUniEntity rev2 = getVersionsReader().find(ListOwningUniEntity.class, ing2_id, 2);
+ ListOwningUniEntity rev3 = getVersionsReader().find(ListOwningUniEntity.class, ing2_id, 3);
+ ListOwningUniEntity rev4 = getVersionsReader().find(ListOwningUniEntity.class, ing2_id, 4);
+ ListOwningUniEntity rev5 = getVersionsReader().find(ListOwningUniEntity.class, ing2_id, 5);
+
+ assert rev1.getReferences().equals(Collections.EMPTY_LIST);
+ assert TestTools.checkList(rev2.getReferences(), ed1, ed2);
+ assert TestTools.checkList(rev3.getReferences(), ed1, ed2);
+ assert TestTools.checkList(rev4.getReferences(), ed1, ed2);
+ assert TestTools.checkList(rev5.getReferences(), ed1, ed2);
+ }
+}
\ No newline at end of file
Added: trunk/src/test/org/jboss/envers/test/integration/manytomany/unidirectional/BasicUniSet.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/manytomany/unidirectional/BasicUniSet.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/manytomany/unidirectional/BasicUniSet.java 2008-08-22 15:22:20 UTC (rev 123)
@@ -0,0 +1,153 @@
+package org.jboss.envers.test.integration.manytomany.unidirectional;
+
+import org.jboss.envers.test.integration.AbstractEntityTest;
+import org.jboss.envers.test.entities.manytomany.unidirectional.SetOwnedUniEntity;
+import org.jboss.envers.test.entities.manytomany.unidirectional.SetOwningUniEntity;
+import org.jboss.envers.test.tools.TestTools;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.hibernate.ejb.Ejb3Configuration;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class BasicUniSet extends AbstractEntityTest {
+ private Integer ed1_id;
+ private Integer ed2_id;
+
+ private Integer ing1_id;
+ private Integer ing2_id;
+
+ public void configure(Ejb3Configuration cfg) {
+ cfg.addAnnotatedClass(SetOwningUniEntity.class);
+ cfg.addAnnotatedClass(SetOwnedUniEntity.class);
+ }
+
+ @BeforeClass(dependsOnMethods = "init")
+ public void initData() {
+ EntityManager em = getEntityManager();
+
+ SetOwnedUniEntity ed1 = new SetOwnedUniEntity(1, "data_ed_1");
+ SetOwnedUniEntity ed2 = new SetOwnedUniEntity(2, "data_ed_2");
+
+ SetOwningUniEntity ing1 = new SetOwningUniEntity(3, "data_ing_1");
+ SetOwningUniEntity ing2 = new SetOwningUniEntity(4, "data_ing_2");
+
+ // Revision 1
+ em.getTransaction().begin();
+
+ em.persist(ed1);
+ em.persist(ed2);
+ em.persist(ing1);
+ em.persist(ing2);
+
+ em.getTransaction().commit();
+
+ // Revision 2
+
+ em.getTransaction().begin();
+
+ ing1 = em.find(SetOwningUniEntity.class, ing1.getId());
+ ing2 = em.find(SetOwningUniEntity.class, ing2.getId());
+ ed1 = em.find(SetOwnedUniEntity.class, ed1.getId());
+ ed2 = em.find(SetOwnedUniEntity.class, ed2.getId());
+
+ ing1.setReferences(new HashSet<SetOwnedUniEntity>());
+ ing1.getReferences().add(ed1);
+
+ ing2.setReferences(new HashSet<SetOwnedUniEntity>());
+ ing2.getReferences().add(ed1);
+ ing2.getReferences().add(ed2);
+
+ em.getTransaction().commit();
+
+ // Revision 3
+ em.getTransaction().begin();
+
+ ing1 = em.find(SetOwningUniEntity.class, ing1.getId());
+ ed2 = em.find(SetOwnedUniEntity.class, ed2.getId());
+ ed1 = em.find(SetOwnedUniEntity.class, ed1.getId());
+
+ ing1.getReferences().add(ed2);
+
+ em.getTransaction().commit();
+
+ // Revision 4
+ em.getTransaction().begin();
+
+ ing1 = em.find(SetOwningUniEntity.class, ing1.getId());
+ ed2 = em.find(SetOwnedUniEntity.class, ed2.getId());
+ ed1 = em.find(SetOwnedUniEntity.class, ed1.getId());
+
+ ing1.getReferences().remove(ed1);
+
+ em.getTransaction().commit();
+
+ // Revision 5
+ em.getTransaction().begin();
+
+ ing1 = em.find(SetOwningUniEntity.class, ing1.getId());
+
+ ing1.setReferences(null);
+
+ em.getTransaction().commit();
+
+ //
+
+ ed1_id = ed1.getId();
+ ed2_id = ed2.getId();
+
+ ing1_id = ing1.getId();
+ ing2_id = ing2.getId();
+ }
+
+ @Test
+ public void testRevisionsCounts() {
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(SetOwnedUniEntity.class, ed1_id));
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(SetOwnedUniEntity.class, ed2_id));
+
+ assert Arrays.asList(1, 2, 3, 4, 5).equals(getVersionsReader().getRevisions(SetOwningUniEntity.class, ing1_id));
+ assert Arrays.asList(1, 2).equals(getVersionsReader().getRevisions(SetOwningUniEntity.class, ing2_id));
+ }
+
+ @Test
+ public void testHistoryOfEdIng1() {
+ SetOwnedUniEntity ed1 = getEntityManager().find(SetOwnedUniEntity.class, ed1_id);
+ SetOwnedUniEntity ed2 = getEntityManager().find(SetOwnedUniEntity.class, ed2_id);
+
+ SetOwningUniEntity rev1 = getVersionsReader().find(SetOwningUniEntity.class, ing1_id, 1);
+ SetOwningUniEntity rev2 = getVersionsReader().find(SetOwningUniEntity.class, ing1_id, 2);
+ SetOwningUniEntity rev3 = getVersionsReader().find(SetOwningUniEntity.class, ing1_id, 3);
+ SetOwningUniEntity rev4 = getVersionsReader().find(SetOwningUniEntity.class, ing1_id, 4);
+ SetOwningUniEntity rev5 = getVersionsReader().find(SetOwningUniEntity.class, ing1_id, 5);
+
+ assert rev1.getReferences().equals(Collections.EMPTY_SET);
+ assert rev2.getReferences().equals(TestTools.makeSet(ed1));
+ assert rev3.getReferences().equals(TestTools.makeSet(ed1, ed2));
+ assert rev4.getReferences().equals(TestTools.makeSet(ed2));
+ assert rev5.getReferences().equals(Collections.EMPTY_SET);
+ }
+
+ @Test
+ public void testHistoryOfEdIng2() {
+ SetOwnedUniEntity ed1 = getEntityManager().find(SetOwnedUniEntity.class, ed1_id);
+ SetOwnedUniEntity ed2 = getEntityManager().find(SetOwnedUniEntity.class, ed2_id);
+
+ SetOwningUniEntity rev1 = getVersionsReader().find(SetOwningUniEntity.class, ing2_id, 1);
+ SetOwningUniEntity rev2 = getVersionsReader().find(SetOwningUniEntity.class, ing2_id, 2);
+ SetOwningUniEntity rev3 = getVersionsReader().find(SetOwningUniEntity.class, ing2_id, 3);
+ SetOwningUniEntity rev4 = getVersionsReader().find(SetOwningUniEntity.class, ing2_id, 4);
+ SetOwningUniEntity rev5 = getVersionsReader().find(SetOwningUniEntity.class, ing2_id, 5);
+
+ assert rev1.getReferences().equals(Collections.EMPTY_SET);
+ assert rev2.getReferences().equals(TestTools.makeSet(ed1, ed2));
+ assert rev3.getReferences().equals(TestTools.makeSet(ed1, ed2));
+ assert rev4.getReferences().equals(TestTools.makeSet(ed1, ed2));
+ assert rev5.getReferences().equals(TestTools.makeSet(ed1, ed2));
+ }
+}
\ No newline at end of file
Modified: trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java 2008-08-22 12:19:38 UTC (rev 122)
+++ trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java 2008-08-22 15:22:20 UTC (rev 123)
@@ -22,13 +22,13 @@
private String str2;
@Versioned
- @OneToMany //(mappedBy="we2")
- //@ManyToMany
+ //@OneToMany //(mappedBy="we2")
+ @ManyToMany
//@Transient
private Set<WorkingEntity1> we1s;
//@Versioned
- //@OneToOne(mappedBy = "we2")
+ //@OneToOne
@Transient
private WorkingEntity1 we1;
16 years, 6 months
JBoss Envers SVN: r122 - trunk/src/main/org/jboss/envers/configuration/metadata.
by jboss-envers-commits@lists.jboss.org
Author: adamw
Date: 2008-08-22 08:19:38 -0400 (Fri, 22 Aug 2008)
New Revision: 122
Modified:
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java
Log:
ENVERS-39: checking if a property is versioned in one place
Modified: trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-22 12:03:52 UTC (rev 121)
+++ trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-22 12:19:38 UTC (rev 122)
@@ -385,13 +385,19 @@
// TODO: ???
}
- private ModificationStore getStoreForProperty(Property property, PropertyStoreInfo propertyStoreInfo) {
+ private ModificationStore getStoreForProperty(Property property, PropertyStoreInfo propertyStoreInfo,
+ List<String> unversionedProperties) {
/*
* Checks if a property is versioned, which is when:
+ * - the property isn't unversioned
* - the whole entity is versioned, then the default store is not null
* - there is a store defined for this entity, which is when this property is annotated
*/
+ if (unversionedProperties.contains(property.getName())) {
+ return null;
+ }
+
ModificationStore store = propertyStoreInfo.propertyStores.get(property.getName());
if (store == null) {
@@ -424,10 +430,9 @@
Property property = properties.next();
Type propertyType = property.getType();
if (!"_identifierMapper".equals(property.getName())) {
- ModificationStore store = getStoreForProperty(property, propertyStoreInfo);
+ ModificationStore store = getStoreForProperty(property, propertyStoreInfo, unversionedProperties);
- // check if the store isn't empty and the property isn't unversioned
- if (store != null && !unversionedProperties.contains(property.getName())) {
+ if (store != null) {
if (propertyType instanceof ComponentType) {
// only first pass
if (firstPass) {
16 years, 6 months
JBoss Envers SVN: r121 - in trunk/src: main/org/jboss/envers/configuration/metadata and 3 other directories.
by jboss-envers-commits@lists.jboss.org
Author: adamw
Date: 2008-08-22 08:03:52 -0400 (Fri, 22 Aug 2008)
New Revision: 121
Added:
trunk/src/main/org/jboss/envers/Unversioned.java
trunk/src/test/org/jboss/envers/test/entities/UnversionedEntity.java
trunk/src/test/org/jboss/envers/test/integration/basic/UnversionedProperty.java
Removed:
trunk/src/main/org/jboss/envers/synchronization/work/BidirectionalCollectionChangeWorkUnit.java
Modified:
trunk/src/main/org/jboss/envers/configuration/metadata/AnnotationsMetadataReader.java
trunk/src/main/org/jboss/envers/configuration/metadata/PersistentClassVersioningData.java
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java
Log:
ENVERS-39: unversioned properties, test
Added: trunk/src/main/org/jboss/envers/Unversioned.java
===================================================================
--- trunk/src/main/org/jboss/envers/Unversioned.java (rev 0)
+++ trunk/src/main/org/jboss/envers/Unversioned.java 2008-08-22 12:03:52 UTC (rev 121)
@@ -0,0 +1,37 @@
+/*
+ * 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;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * When applied to a field, indicates that this field should not be versioned.
+ * @author Sebastian Komander
+ */
+(a)Retention(RetentionPolicy.RUNTIME)
+(a)Target({ElementType.METHOD, ElementType.FIELD})
+public @interface Unversioned {
+
+}
Modified: trunk/src/main/org/jboss/envers/configuration/metadata/AnnotationsMetadataReader.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/metadata/AnnotationsMetadataReader.java 2008-08-21 14:45:59 UTC (rev 120)
+++ trunk/src/main/org/jboss/envers/configuration/metadata/AnnotationsMetadataReader.java 2008-08-22 12:03:52 UTC (rev 121)
@@ -24,40 +24,42 @@
import org.jboss.envers.tools.reflection.YClass;
import org.jboss.envers.tools.reflection.YProperty;
import org.jboss.envers.tools.reflection.YReflectionManager;
-import org.jboss.envers.configuration.metadata.PersistentClassVersioningData;
-import org.jboss.envers.Versioned;
-import org.jboss.envers.VersionsTable;
-import org.jboss.envers.SecondaryVersionsTable;
-import org.jboss.envers.SecondaryVersionsTables;
+import org.jboss.envers.*;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.MappingException;
/**
* A helper class to read versioning meta-data from annotations on persistent classes.
* @author Adam Warski (adam at warski dot org)
+ * @author Sebastian Komander
*/
public class AnnotationsMetadataReader {
- private void addPropertiesFromClass(YClass clazz, PersistentClassVersioningData versioningData) {
- YClass superclazz = clazz.getSuperclass();
- if (!"java.lang.Object".equals(superclazz.getName())) {
- addPropertiesFromClass(superclazz, versioningData);
- }
-
- for (YProperty property : clazz.getDeclaredProperties("field")) {
+ private void addFromProperties(Iterable<YProperty> properties, PersistentClassVersioningData versioningData) {
+ for (YProperty property : properties) {
Versioned ver = property.getAnnotation(Versioned.class);
if (ver != null) {
versioningData.propertyStoreInfo.propertyStores.put(property.getName(), ver.modStore());
}
- }
- for (YProperty property : clazz.getDeclaredProperties("property")) {
- Versioned ver = property.getAnnotation(Versioned.class);
- if (ver != null) {
- versioningData.propertyStoreInfo.propertyStores.put(property.getName(), ver.modStore());
+ // check if a property is declared as unversioned to exclude it
+ // useful if a class is versioned but some properties should be excluded
+ Unversioned unVer = property.getAnnotation(Unversioned.class);
+ if (unVer != null) {
+ versioningData.unversionedProperties.add(property.getName());
}
}
}
+ private void addPropertiesFromClass(YClass clazz, PersistentClassVersioningData versioningData) {
+ YClass superclazz = clazz.getSuperclass();
+ if (!"java.lang.Object".equals(superclazz.getName())) {
+ addPropertiesFromClass(superclazz, versioningData);
+ }
+
+ addFromProperties(clazz.getDeclaredProperties("field"), versioningData);
+ addFromProperties(clazz.getDeclaredProperties("property"), versioningData);
+ }
+
public PersistentClassVersioningData getVersioningData(PersistentClass pc, YReflectionManager reflectionManager) {
PersistentClassVersioningData versioningData = new PersistentClassVersioningData();
Modified: trunk/src/main/org/jboss/envers/configuration/metadata/PersistentClassVersioningData.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/metadata/PersistentClassVersioningData.java 2008-08-21 14:45:59 UTC (rev 120)
+++ trunk/src/main/org/jboss/envers/configuration/metadata/PersistentClassVersioningData.java 2008-08-22 12:03:52 UTC (rev 121)
@@ -25,14 +25,18 @@
import java.util.HashMap;
import java.util.Map;
+import java.util.List;
+import java.util.ArrayList;
/**
* @author Adam Warski (adam at warski dot org)
+ * @author Sebastian Komander
*/
public class PersistentClassVersioningData {
public PersistentClassVersioningData() {
propertyStoreInfo = new PropertyStoreInfo(new HashMap<String, ModificationStore>());
secondaryTableDictionary = new HashMap<String, String>();
+ unversionedProperties = new ArrayList<String>();
}
public PropertyStoreInfo propertyStoreInfo;
@@ -40,6 +44,7 @@
public String schema;
public String catalog;
public Map<String, String> secondaryTableDictionary;
+ public List<String> unversionedProperties;
public boolean isVersioned() {
if (propertyStoreInfo.propertyStores.size() > 0) { return true; }
Modified: trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-21 14:45:59 UTC (rev 120)
+++ trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-22 12:03:52 UTC (rev 121)
@@ -53,6 +53,7 @@
/**
* @author Adam Warski (adam at warski dot org)
+ * @author Sebastian Komander
*/
public class VersionsMetadataGenerator {
private final static Map<String, ModificationStore> EMPTY_STORE = Collections.emptyMap();
@@ -139,7 +140,8 @@
@SuppressWarnings({"unchecked"})
private void addComponent(Element parent, Property property, CompositeMapperBuilder mapper, ModificationStore store,
- String entityName, EntityMappingData mappingData, boolean firstPass) {
+ String entityName, EntityMappingData mappingData, List<String> unversionedProperties,
+ boolean firstPass) {
Element component_mapping = null;
Component prop_component = (Component) property.getValue();
@@ -166,7 +168,7 @@
addProperties(component_mapping, (Iterator<Property>) prop_component.getPropertyIterator(),
mapper.addComposite(property.getName()), new PropertyStoreInfo(store, EMPTY_STORE), entityName,
- mappingData, firstPass);
+ mappingData, unversionedProperties, firstPass);
}
@SuppressWarnings({"unchecked"})
@@ -417,18 +419,20 @@
@SuppressWarnings({"unchecked"})
private void addProperties(Element parent, Iterator<Property> properties, CompositeMapperBuilder currentMapper,
PropertyStoreInfo propertyStoreInfo, String entityName, EntityMappingData mappingData,
- boolean firstPass) {
+ List<String> unversionedProperties, boolean firstPass) {
while (properties.hasNext()) {
Property property = properties.next();
Type propertyType = property.getType();
if (!"_identifierMapper".equals(property.getName())) {
ModificationStore store = getStoreForProperty(property, propertyStoreInfo);
- if (store != null) {
+ // check if the store isn't empty and the property isn't unversioned
+ if (store != null && !unversionedProperties.contains(property.getName())) {
if (propertyType instanceof ComponentType) {
// only first pass
if (firstPass) {
- addComponent(parent, property, currentMapper, store, entityName, mappingData, firstPass);
+ addComponent(parent, property, currentMapper, store, entityName, mappingData,
+ unversionedProperties, firstPass);
}
} else if (propertyType instanceof ImmutableType || propertyType instanceof MutableType) {
// only first pass
@@ -529,7 +533,8 @@
@SuppressWarnings({"unchecked"})
private void addJoins(PersistentClass pc, CompositeMapperBuilder currentMapper, PropertyStoreInfo propertyStoreInfo,
- String entityName, EntityMappingData mappingData, boolean firstPass) {
+ String entityName, EntityMappingData mappingData, List<String> unversionedProperties,
+ boolean firstPass) {
Iterator<Join> joins = pc.getJoinIterator();
while (joins.hasNext()) {
@@ -537,7 +542,7 @@
Element joinElement = entitiesJoins.get(entityName).get(join);
addProperties(joinElement, join.getPropertyIterator(), currentMapper, propertyStoreInfo, entityName,
- mappingData, firstPass);
+ mappingData, unversionedProperties, firstPass);
}
}
@@ -668,11 +673,13 @@
// Mapping unjoined properties
addProperties(class_mapping, (Iterator<Property>) pc.getUnjoinedPropertyIterator(), propertyMapper,
- versioningData.propertyStoreInfo, pc.getEntityName(), mappingData, true);
+ versioningData.propertyStoreInfo, pc.getEntityName(), mappingData, versioningData.unversionedProperties,
+ true);
// Creating and mapping joins (first pass)
createJoins(pc, class_mapping, versioningData);
- addJoins(pc, propertyMapper, versioningData.propertyStoreInfo, pc.getEntityName(), mappingData, true);
+ addJoins(pc, propertyMapper, versioningData.propertyStoreInfo, pc.getEntityName(), mappingData,
+ versioningData.unversionedProperties, true);
// Storing the generated configuration
EntityConfiguration entityCfg = new EntityConfiguration(entityName, versionsEntityName, idMapper,
@@ -694,10 +701,12 @@
}
addProperties(parent, (Iterator<Property>) pc.getUnjoinedPropertyIterator(),
- propertyMapper, versioningData.propertyStoreInfo, entityName, mappingData, false);
+ propertyMapper, versioningData.propertyStoreInfo, entityName, mappingData,
+ versioningData.unversionedProperties, false);
// Mapping joins (second pass)
- addJoins(pc, propertyMapper, versioningData.propertyStoreInfo, entityName, mappingData, false);
+ addJoins(pc, propertyMapper, versioningData.propertyStoreInfo, entityName, mappingData,
+ versioningData.unversionedProperties, false);
}
public Map<String, EntityConfiguration> getEntitiesConfigurations() {
Deleted: trunk/src/main/org/jboss/envers/synchronization/work/BidirectionalCollectionChangeWorkUnit.java
===================================================================
--- trunk/src/main/org/jboss/envers/synchronization/work/BidirectionalCollectionChangeWorkUnit.java 2008-08-21 14:45:59 UTC (rev 120)
+++ trunk/src/main/org/jboss/envers/synchronization/work/BidirectionalCollectionChangeWorkUnit.java 2008-08-22 12:03:52 UTC (rev 121)
@@ -1,78 +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.synchronization.work;
-
-import org.hibernate.Session;
-import org.jboss.envers.configuration.VersionsConfiguration;
-import org.jboss.envers.RevisionType;
-
-import java.io.Serializable;
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class BidirectionalCollectionChangeWorkUnit extends AbstractVersionsWorkUnit implements VersionsWorkUnit {
- private final Object entity;
-
- public BidirectionalCollectionChangeWorkUnit(String entityName, VersionsConfiguration verCfg, Serializable id, Object entity) {
- super(entityName, verCfg, id);
-
- this.entity = entity;
- }
-
- public boolean containsWork() {
- return true;
- }
-
- public void perform(Session session, Number revision) {
- Map<String, Object> data = new HashMap<String, Object>();
- fillDataWithId(data, revision, RevisionType.MOD);
-
- verCfg.getEntCfg().get(getEntityName()).getPropertyMapper().mapToMapFromEntity(data, entity, null);
-
- session.save(verCfg.getVerEntCfg().getVersionsEntityName(getEntityName()), data);
-
- setPerformed(data);
- }
-
- public KeepCheckResult check(AddWorkUnit second) {
- return KeepCheckResult.SECOND;
- }
-
- public KeepCheckResult check(ModWorkUnit second) {
- return KeepCheckResult.SECOND;
- }
-
- public KeepCheckResult check(DelWorkUnit second) {
- return KeepCheckResult.SECOND;
- }
-
- public KeepCheckResult check(BidirectionalCollectionChangeWorkUnit second) {
- return KeepCheckResult.FIRST;
- }
-
- public KeepCheckResult dispatch(KeepCheckVisitor first) {
- return first.check(this);
- }
-}
Added: trunk/src/test/org/jboss/envers/test/entities/UnversionedEntity.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/UnversionedEntity.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/entities/UnversionedEntity.java 2008-08-22 12:03:52 UTC (rev 121)
@@ -0,0 +1,86 @@
+package org.jboss.envers.test.entities;
+
+import org.jboss.envers.Versioned;
+import org.jboss.envers.Unversioned;
+
+import javax.persistence.Id;
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+@Versioned
+public class UnversionedEntity {
+ @Id
+ @GeneratedValue
+ private Integer id;
+
+ @Basic
+ private String data1;
+
+ @Basic
+ @Unversioned
+ private String data2;
+
+ public UnversionedEntity() {
+ }
+
+ public UnversionedEntity(String data1, String data2) {
+ this.data1 = data1;
+ this.data2 = data2;
+ }
+
+ public UnversionedEntity(Integer id, String data1, String data2) {
+ this.id = id;
+ this.data1 = data1;
+ this.data2 = data2;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getData1() {
+ return data1;
+ }
+
+ public void setData1(String data1) {
+ this.data1 = data1;
+ }
+
+ public String getData2() {
+ return data2;
+ }
+
+ public void setData2(String data2) {
+ this.data2 = data2;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof UnversionedEntity)) return false;
+
+ UnversionedEntity that = (UnversionedEntity) o;
+
+ if (data1 != null ? !data1.equals(that.data1) : that.data1 != null) return false;
+ if (data2 != null ? !data2.equals(that.data2) : that.data2 != 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 + (data1 != null ? data1.hashCode() : 0);
+ result = 31 * result + (data2 != null ? data2.hashCode() : 0);
+ return result;
+ }
+}
Added: trunk/src/test/org/jboss/envers/test/integration/basic/UnversionedProperty.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/basic/UnversionedProperty.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/basic/UnversionedProperty.java 2008-08-22 12:03:52 UTC (rev 121)
@@ -0,0 +1,54 @@
+package org.jboss.envers.test.integration.basic;
+
+import org.hibernate.ejb.Ejb3Configuration;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.jboss.envers.test.entities.UnversionedEntity;
+import org.jboss.envers.test.integration.AbstractEntityTest;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class UnversionedProperty extends AbstractEntityTest {
+ private Integer id1;
+
+ public void configure(Ejb3Configuration cfg) {
+ cfg.addAnnotatedClass(UnversionedEntity.class);
+ }
+
+ @BeforeClass(dependsOnMethods = "init")
+ public void initData() {
+ EntityManager em = getEntityManager();
+
+ // Rev 1
+ em.getTransaction().begin();
+ UnversionedEntity ue1 = new UnversionedEntity("a1", "b1");
+ em.persist(ue1);
+ id1 = ue1.getId();
+ em.getTransaction().commit();
+
+ // Rev 2
+ em.getTransaction().begin();
+ ue1 = em.find(UnversionedEntity.class, id1);
+ ue1.setData1("a2");
+ ue1.setData2("b2");
+ em.getTransaction().commit();
+ }
+
+ @Test
+ public void testRevisionsCounts() {
+ assert Arrays.asList(1, 2).equals(getVersionsReader().getRevisions(UnversionedEntity.class, id1));
+ }
+
+ @Test
+ public void testHistoryOfId1() {
+ UnversionedEntity rev1 = new UnversionedEntity(id1, "a1", null);
+ UnversionedEntity rev2 = new UnversionedEntity(id1, "a2", null);
+
+ assert getVersionsReader().find(UnversionedEntity.class, id1, 1).equals(rev1);
+ assert getVersionsReader().find(UnversionedEntity.class, id1, 2).equals(rev2);
+ }
+}
16 years, 6 months
JBoss Envers SVN: r120 - in trunk: src/main/org/jboss/envers/configuration and 1 other directories.
by jboss-envers-commits@lists.jboss.org
Author: adamw
Date: 2008-08-21 10:45:59 -0400 (Thu, 21 Aug 2008)
New Revision: 120
Added:
trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java
trunk/src/test/org/jboss/envers/test/integration/naming/UnidirectionalNamingTestEntity.java
Modified:
trunk/resources/test/testng.xml
trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java
Log:
ENVERS-26: tests
Modified: trunk/resources/test/testng.xml
===================================================================
--- trunk/resources/test/testng.xml 2008-08-21 13:56:27 UTC (rev 119)
+++ trunk/resources/test/testng.xml 2008-08-21 14:45:59 UTC (rev 120)
@@ -9,10 +9,12 @@
<package name="org.jboss.envers.test.integration.flush" />
<package name="org.jboss.envers.test.integration.ids" />
<package name="org.jboss.envers.test.integration.inheritance.single" />
+ <package name="org.jboss.envers.test.integration.inheritance.single.childrelation" />
<package name="org.jboss.envers.test.integration.inheritance.single.relation" />
<package name="org.jboss.envers.test.integration.naming" />
<package name="org.jboss.envers.test.integration.naming.ids" />
<package name="org.jboss.envers.test.integration.onetomany" />
+ <package name="org.jboss.envers.test.integration.onetomany.unidirectional" />
<package name="org.jboss.envers.test.integration.onetoone.bidirectional" />
<package name="org.jboss.envers.test.integration.onetoone.bidirectional.ids" />
<package name="org.jboss.envers.test.integration.onetoone.unidirectional" />
Modified: trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java 2008-08-21 13:56:27 UTC (rev 119)
+++ trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java 2008-08-21 14:45:59 UTC (rev 120)
@@ -75,7 +75,7 @@
for (Document additionalMapping : mappingData.getAdditionalMappings()) {
cfg.addDocument(writer.write(additionalMapping));
- //writeDocument(additionalMapping);
+ writeDocument(additionalMapping);
}
} catch (DocumentException e) {
throw new MappingException(e);
Added: trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/naming/OneToManyUnidirectionalNaming.java 2008-08-21 14:45:59 UTC (rev 120)
@@ -0,0 +1,107 @@
+package org.jboss.envers.test.integration.naming;
+
+import org.jboss.envers.test.integration.AbstractEntityTest;
+import org.jboss.envers.test.entities.StrTestEntity;
+import org.jboss.envers.test.tools.TestTools;
+import org.hibernate.ejb.Ejb3Configuration;
+import org.hibernate.mapping.Column;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.HashSet;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class OneToManyUnidirectionalNaming extends AbstractEntityTest {
+ private Integer uni1_id;
+ private Integer str1_id;
+
+ public void configure(Ejb3Configuration cfg) {
+ cfg.addAnnotatedClass(UnidirectionalNamingTestEntity.class);
+ cfg.addAnnotatedClass(StrTestEntity.class);
+ }
+
+ @BeforeClass(dependsOnMethods = "init")
+ public void initData() {
+ UnidirectionalNamingTestEntity uni1 = new UnidirectionalNamingTestEntity(1, "data1");
+ StrTestEntity str1 = new StrTestEntity("str1");
+
+ // Revision 1
+ EntityManager em = getEntityManager();
+ em.getTransaction().begin();
+
+ uni1.setCollection(new HashSet<StrTestEntity>());
+ em.persist(uni1);
+ em.persist(str1);
+
+ em.getTransaction().commit();
+
+ // Revision 2
+ em.getTransaction().begin();
+
+ uni1 = em.find(UnidirectionalNamingTestEntity.class, uni1.getId());
+ str1 = em.find(StrTestEntity.class, str1.getId());
+ uni1.getCollection().add(str1);
+
+ em.getTransaction().commit();
+
+ //
+
+ uni1_id = uni1.getId();
+ str1_id = str1.getId();
+ }
+
+ @Test
+ public void testRevisionsCounts() {
+ assert Arrays.asList(1, 2).equals(getVersionsReader().getRevisions(UnidirectionalNamingTestEntity.class, uni1_id));
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(StrTestEntity.class, str1_id));
+ }
+
+ @Test
+ public void testHistoryOfUniId1() {
+ StrTestEntity str1 = getEntityManager().find(StrTestEntity.class, str1_id);
+
+ UnidirectionalNamingTestEntity rev1 = getVersionsReader().find(UnidirectionalNamingTestEntity.class, uni1_id, 1);
+ UnidirectionalNamingTestEntity rev2 = getVersionsReader().find(UnidirectionalNamingTestEntity.class, uni1_id, 2);
+
+ assert rev1.getCollection().equals(TestTools.makeSet());
+ assert rev2.getCollection().equals(TestTools.makeSet(str1));
+
+ assert "data1".equals(rev1.getData());
+ assert "data1".equals(rev2.getData());
+ }
+
+ @Test
+ public void testTableName() {
+ assert "UNI_NAMING_TEST_versions".equals(
+ getCfg().getClassMapping("UnidirectionalNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
+ .getTable().getName());
+ }
+
+ @SuppressWarnings({"unchecked"})
+ @Test
+ public void testJoinColumnName() {
+ Iterator<Column> columns =
+ getCfg().getClassMapping("UnidirectionalNamingTestEntity_org.jboss.envers.test.entities.StrTestEntity_versions")
+ .getTable().getColumnIterator();
+
+ boolean id1Found = false;
+ boolean id2Found = false;
+
+ while (columns.hasNext()) {
+ if ("ID_1".equals(columns.next().getName())) {
+ id1Found = true;
+ }
+
+ if ("ID_2".equals(columns.next().getName())) {
+ id2Found = true;
+ }
+ }
+
+ assert id1Found && id2Found;
+ }
+}
Added: trunk/src/test/org/jboss/envers/test/integration/naming/UnidirectionalNamingTestEntity.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/naming/UnidirectionalNamingTestEntity.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/naming/UnidirectionalNamingTestEntity.java 2008-08-21 14:45:59 UTC (rev 120)
@@ -0,0 +1,85 @@
+package org.jboss.envers.test.integration.naming;
+
+import org.jboss.envers.Versioned;
+import org.jboss.envers.test.entities.StrTestEntity;
+
+import javax.persistence.*;
+import java.util.Set;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+public class UnidirectionalNamingTestEntity {
+ @Id
+ private Integer id;
+
+ @Versioned
+ private String data;
+
+ @Versioned
+ @OneToMany
+ @JoinTable(name = "UNI_NAMING_TEST",
+ joinColumns = @JoinColumn(name = "ID_1"),
+ inverseJoinColumns = @JoinColumn(name = "ID_2"))
+ private Set<StrTestEntity> collection;
+
+ public UnidirectionalNamingTestEntity() {
+ }
+
+ public UnidirectionalNamingTestEntity(Integer id, String data) {
+ this.id = id;
+ this.data = data;
+ }
+
+ public UnidirectionalNamingTestEntity(String data) {
+ 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 Set<StrTestEntity> getCollection() {
+ return collection;
+ }
+
+ public void setCollection(Set<StrTestEntity> collection) {
+ this.collection = collection;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof UnidirectionalNamingTestEntity)) return false;
+
+ UnidirectionalNamingTestEntity that = (UnidirectionalNamingTestEntity) 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 "UnidirectionalNamingTestEntity(id = " + id + ", data = " + data + ")";
+ }
+}
16 years, 6 months
JBoss Envers SVN: r119 - in trunk/src: main/org/jboss/envers/entities/mapper/id and 3 other directories.
by jboss-envers-commits@lists.jboss.org
Author: adamw
Date: 2008-08-21 09:56:27 -0400 (Thu, 21 Aug 2008)
New Revision: 119
Added:
trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ids/
trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ids/SetRefCollEntityEmbId.java
trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ids/SetRefCollEntityMulId.java
trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSetWithEmbId.java
trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSetWithMulId.java
Modified:
trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java
trunk/src/main/org/jboss/envers/entities/mapper/id/AbstractCompositeIdMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/id/AbstractIdMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/id/EmbeddedIdMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/id/IdMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/id/MultipleIdMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/id/SingleIdMapper.java
Log:
ENVERS-26: tests + bug fix
Modified: trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java 2008-08-21 11:30:54 UTC (rev 118)
+++ trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java 2008-08-21 13:56:27 UTC (rev 119)
@@ -71,11 +71,11 @@
try {
cfg.addDocument(writer.write(mappingData.getMainMapping()));
- writeDocument(mappingData.getMainMapping());
+ //writeDocument(mappingData.getMainMapping());
for (Document additionalMapping : mappingData.getAdditionalMappings()) {
cfg.addDocument(writer.write(additionalMapping));
- writeDocument(additionalMapping);
+ //writeDocument(additionalMapping);
}
} catch (DocumentException e) {
throw new MappingException(e);
Modified: trunk/src/main/org/jboss/envers/entities/mapper/id/AbstractCompositeIdMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/id/AbstractCompositeIdMapper.java 2008-08-21 11:30:54 UTC (rev 118)
+++ trunk/src/main/org/jboss/envers/entities/mapper/id/AbstractCompositeIdMapper.java 2008-08-21 13:56:27 UTC (rev 119)
@@ -25,7 +25,7 @@
import org.jboss.envers.exception.VersionsException;
import java.util.Map;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
/**
* @author Adam Warski (adam at warski dot org)
@@ -35,7 +35,7 @@
protected String compositeIdClass;
protected AbstractCompositeIdMapper(String compositeIdClass) {
- ids = new HashMap<String, SingleIdMapper>();
+ ids = new LinkedHashMap<String, SingleIdMapper>();
this.compositeIdClass = compositeIdClass;
}
Modified: trunk/src/main/org/jboss/envers/entities/mapper/id/AbstractIdMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/id/AbstractIdMapper.java 2008-08-21 11:30:54 UTC (rev 118)
+++ trunk/src/main/org/jboss/envers/entities/mapper/id/AbstractIdMapper.java 2008-08-21 13:56:27 UTC (rev 119)
@@ -25,15 +25,15 @@
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Conjunction;
-import java.util.Set;
import java.util.Iterator;
+import java.util.List;
/**
* @author Adam Warski (adam at warski dot org)
*/
public abstract class AbstractIdMapper implements IdMapper {
public Criterion getIdsEqualCriterion(String prefix1, String prefix2) {
- Set<QueryParameterData> paramDatas = mapToQueryParametersFromId(null);
+ List<QueryParameterData> paramDatas = mapToQueryParametersFromId(null);
if (paramDatas.size() == 1) {
QueryParameterData paramData = paramDatas.iterator().next();
@@ -52,7 +52,7 @@
}
public String getIdsEqualQuery(String prefix1, String prefix2) {
- Set<QueryParameterData> paramDatas = mapToQueryParametersFromId(null);
+ List<QueryParameterData> paramDatas = mapToQueryParametersFromId(null);
StringBuilder query = new StringBuilder();
@@ -70,8 +70,8 @@
}
public String getIdsEqualQuery(String prefix1, IdMapper mapper2, String prefix2) {
- Set<QueryParameterData> paramDatas1 = mapToQueryParametersFromId(null);
- Set<QueryParameterData> paramDatas2 = mapper2.mapToQueryParametersFromId(null);
+ List<QueryParameterData> paramDatas1 = mapToQueryParametersFromId(null);
+ List<QueryParameterData> paramDatas2 = mapper2.mapToQueryParametersFromId(null);
StringBuilder query = new StringBuilder();
@@ -91,7 +91,7 @@
}
public String getIdEqualsQuery(String prefix, boolean equals) {
- Set<QueryParameterData> paramDatas = mapToQueryParametersFromId(null);
+ List<QueryParameterData> paramDatas = mapToQueryParametersFromId(null);
StringBuilder query = new StringBuilder();
@@ -117,7 +117,7 @@
}
public Criterion getIdEqualsCriterion(Object id, String prefix, boolean equals) {
- Set<QueryParameterData> paramDatas = mapToQueryParametersFromId(id);
+ List<QueryParameterData> paramDatas = mapToQueryParametersFromId(id);
if (paramDatas.size() == 1) {
QueryParameterData paramData = paramDatas.iterator().next();
Modified: trunk/src/main/org/jboss/envers/entities/mapper/id/EmbeddedIdMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/id/EmbeddedIdMapper.java 2008-08-21 11:30:54 UTC (rev 118)
+++ trunk/src/main/org/jboss/envers/entities/mapper/id/EmbeddedIdMapper.java 2008-08-21 13:56:27 UTC (rev 119)
@@ -27,10 +27,7 @@
import org.jboss.envers.exception.VersionsException;
import org.jboss.envers.tools.reflection.ReflectionTools;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashMap;
-import java.util.HashSet;
+import java.util.*;
/**
* @author Adam Warski (adam at warski dot org)
@@ -98,11 +95,11 @@
return getter.get(data);
}
- public Set<QueryParameterData> mapToQueryParametersFromId(Object obj) {
- Map<String, Object> data = new HashMap<String, Object>();
+ public List<QueryParameterData> mapToQueryParametersFromId(Object obj) {
+ Map<String, Object> data = new LinkedHashMap<String, Object>();
mapToMapFromId(data, obj);
- Set<QueryParameterData> ret = new HashSet<QueryParameterData>();
+ List<QueryParameterData> ret = new ArrayList<QueryParameterData>();
for (String propertyName : data.keySet()) {
ret.add(new QueryParameterData(propertyName, data.get(propertyName)));
Modified: trunk/src/main/org/jboss/envers/entities/mapper/id/IdMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/id/IdMapper.java 2008-08-21 11:30:54 UTC (rev 118)
+++ trunk/src/main/org/jboss/envers/entities/mapper/id/IdMapper.java 2008-08-21 13:56:27 UTC (rev 119)
@@ -24,13 +24,12 @@
import org.hibernate.criterion.Criterion;
import java.util.Map;
-import java.util.Set;
+import java.util.List;
/**
* @author Adam Warski (adam at warski dot org)
*/
public interface IdMapper {
-
public void mapToMapFromId(Map<String, Object> data, Object obj);
public void mapToMapFromEntity(Map<String, Object> data, Object obj);
@@ -53,7 +52,7 @@
* @param obj Id from which to map.
* @return A set parameter data, needed to build a query basing on the given id.
*/
- public Set<QueryParameterData> mapToQueryParametersFromId(Object obj);
+ public List<QueryParameterData> mapToQueryParametersFromId(Object obj);
/**
* Gets a criteria object, which contains restrictions, which express the property that the id of the entity
Modified: trunk/src/main/org/jboss/envers/entities/mapper/id/MultipleIdMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/id/MultipleIdMapper.java 2008-08-21 11:30:54 UTC (rev 118)
+++ trunk/src/main/org/jboss/envers/entities/mapper/id/MultipleIdMapper.java 2008-08-21 13:56:27 UTC (rev 119)
@@ -23,10 +23,7 @@
import org.jboss.envers.exception.VersionsException;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashMap;
-import java.util.HashSet;
+import java.util.*;
/**
* @author Adam Warski (adam at warski dot org)
@@ -81,11 +78,11 @@
return ret;
}
- public Set<QueryParameterData> mapToQueryParametersFromId(Object obj) {
- Map<String, Object> data = new HashMap<String, Object>();
+ public List<QueryParameterData> mapToQueryParametersFromId(Object obj) {
+ Map<String, Object> data = new LinkedHashMap<String, Object>();
mapToMapFromId(data, obj);
- Set<QueryParameterData> ret = new HashSet<QueryParameterData>();
+ List<QueryParameterData> ret = new ArrayList<QueryParameterData>();
for (String propertyName : data.keySet()) {
ret.add(new QueryParameterData(propertyName, data.get(propertyName)));
Modified: trunk/src/main/org/jboss/envers/entities/mapper/id/SingleIdMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/id/SingleIdMapper.java 2008-08-21 11:30:54 UTC (rev 118)
+++ trunk/src/main/org/jboss/envers/entities/mapper/id/SingleIdMapper.java 2008-08-21 13:56:27 UTC (rev 119)
@@ -27,9 +27,7 @@
import org.hibernate.property.Setter;
import org.hibernate.property.Getter;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashSet;
+import java.util.*;
/**
* @author Adam Warski (adam at warski dot org)
@@ -115,8 +113,8 @@
return new SingleIdMapper(propertyName, prefix + propertyName);
}
- public Set<QueryParameterData> mapToQueryParametersFromId(Object obj) {
- Set<QueryParameterData> ret = new HashSet<QueryParameterData>();
+ public List<QueryParameterData> mapToQueryParametersFromId(Object obj) {
+ List<QueryParameterData> ret = new ArrayList<QueryParameterData>();
ret.add(new QueryParameterData(propertyName, obj));
Copied: trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ids/SetRefCollEntityEmbId.java (from rev 117, trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/SetRefCollEntity.java)
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ids/SetRefCollEntityEmbId.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ids/SetRefCollEntityEmbId.java 2008-08-21 13:56:27 UTC (rev 119)
@@ -0,0 +1,86 @@
+package org.jboss.envers.test.entities.onetomany.unidirectional.ids;
+
+import org.jboss.envers.Versioned;
+import org.jboss.envers.test.entities.ids.EmbId;
+import org.jboss.envers.test.entities.ids.EmbIdTestEntity;
+
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.EmbeddedId;
+import java.util.Set;
+
+/**
+ * Set collection of references entity
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+public class SetRefCollEntityEmbId {
+ @EmbeddedId
+ private EmbId id;
+
+ @Versioned
+ private String data;
+
+ @Versioned
+ @OneToMany
+ private Set<EmbIdTestEntity> collection;
+
+ public SetRefCollEntityEmbId() {
+ }
+
+ public SetRefCollEntityEmbId(EmbId id, String data) {
+ this.id = id;
+ this.data = data;
+ }
+
+ public SetRefCollEntityEmbId(String data) {
+ this.data = data;
+ }
+
+ public EmbId getId() {
+ return id;
+ }
+
+ public void setId(EmbId id) {
+ this.id = id;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public Set<EmbIdTestEntity> getCollection() {
+ return collection;
+ }
+
+ public void setCollection(Set<EmbIdTestEntity> collection) {
+ this.collection = collection;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof SetRefCollEntityEmbId)) return false;
+
+ SetRefCollEntityEmbId that = (SetRefCollEntityEmbId) 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 "SetRefCollEntityEmbId(id = " + id + ", data = " + data + ")";
+ }
+}
\ No newline at end of file
Property changes on: trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ids/SetRefCollEntityEmbId.java
___________________________________________________________________
Name: svn:mergeinfo
+
Added: trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ids/SetRefCollEntityMulId.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ids/SetRefCollEntityMulId.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ids/SetRefCollEntityMulId.java 2008-08-21 13:56:27 UTC (rev 119)
@@ -0,0 +1,99 @@
+package org.jboss.envers.test.entities.onetomany.unidirectional.ids;
+
+import org.jboss.envers.Versioned;
+import org.jboss.envers.test.entities.ids.MulIdTestEntity;
+import org.jboss.envers.test.entities.ids.MulId;
+
+import javax.persistence.*;
+import java.util.Set;
+
+/**
+ * Set collection of references entity
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+(a)IdClass(MulId.class)
+public class SetRefCollEntityMulId {
+ @Id
+ private Integer id1;
+
+ @Id
+ private Integer id2;
+
+ @Versioned
+ private String data;
+
+ @Versioned
+ @OneToMany
+ private Set<MulIdTestEntity> collection;
+
+ public SetRefCollEntityMulId() {
+ }
+
+ public SetRefCollEntityMulId(Integer id1, Integer id2, String data) {
+ this.id1 = id1;
+ this.id2 = id2;
+ this.data = data;
+ }
+
+ public SetRefCollEntityMulId(String data) {
+ this.data = data;
+ }
+
+ public Integer getId1() {
+ return id1;
+ }
+
+ public void setId1(Integer id1) {
+ this.id1 = id1;
+ }
+
+ public Integer getId2() {
+ return id2;
+ }
+
+ public void setId2(Integer id2) {
+ this.id2 = id2;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public Set<MulIdTestEntity> getCollection() {
+ return collection;
+ }
+
+ public void setCollection(Set<MulIdTestEntity> collection) {
+ this.collection = collection;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof SetRefCollEntityMulId)) return false;
+
+ SetRefCollEntityMulId that = (SetRefCollEntityMulId) o;
+
+ if (data != null ? !data.equals(that.data) : that.data != null) return false;
+ if (id1 != null ? !id1.equals(that.id1) : that.id1 != null) return false;
+ if (id2 != null ? !id2.equals(that.id2) : that.id2 != null) return false;
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result;
+ result = (id1 != null ? id1.hashCode() : 0);
+ result = 31 * result + (id2 != null ? id2.hashCode() : 0);
+ result = 31 * result + (data != null ? data.hashCode() : 0);
+ return result;
+ }
+
+ public String toString() {
+ return "SetRefCollEntityMulId(id1 = " + id1 + ", id2 = " + id2 + ", data = " + data + ")";
+ }
+}
\ No newline at end of file
Copied: trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSetWithEmbId.java (from rev 118, trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSet.java)
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSetWithEmbId.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSetWithEmbId.java 2008-08-21 13:56:27 UTC (rev 119)
@@ -0,0 +1,114 @@
+package org.jboss.envers.test.integration.onetomany.unidirectional;
+
+import org.jboss.envers.test.integration.AbstractEntityTest;
+import org.jboss.envers.test.entities.onetomany.unidirectional.ids.SetRefCollEntityEmbId;
+import org.jboss.envers.test.entities.ids.EmbIdTestEntity;
+import org.jboss.envers.test.entities.ids.EmbId;
+import org.jboss.envers.test.tools.TestTools;
+import org.hibernate.ejb.Ejb3Configuration;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+import java.util.HashSet;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class BasicNotOwnedSetWithEmbId extends AbstractEntityTest {
+ private EmbId str1_id;
+ private EmbId str2_id;
+
+ private EmbId coll1_id;
+
+ public void configure(Ejb3Configuration cfg) {
+ cfg.addAnnotatedClass(EmbIdTestEntity.class);
+ cfg.addAnnotatedClass(SetRefCollEntityEmbId.class);
+ }
+
+ @BeforeClass(dependsOnMethods = "init")
+ public void initData() {
+ EntityManager em = getEntityManager();
+
+ str1_id = new EmbId(1, 2);
+ str2_id = new EmbId(3, 4);
+
+ coll1_id = new EmbId(5, 6);
+
+ EmbIdTestEntity str1 = new EmbIdTestEntity(str1_id, "str1");
+ EmbIdTestEntity str2 = new EmbIdTestEntity(str2_id, "str2");
+
+ SetRefCollEntityEmbId coll1 = new SetRefCollEntityEmbId(coll1_id, "coll1");
+
+ // Revision 1
+ em.getTransaction().begin();
+
+ em.persist(str1);
+ em.persist(str2);
+
+ coll1.setCollection(new HashSet<EmbIdTestEntity>());
+ coll1.getCollection().add(str1);
+ em.persist(coll1);
+
+ em.getTransaction().commit();
+
+ // Revision 2
+ em.getTransaction().begin();
+
+ str2 = em.find(EmbIdTestEntity.class, str2.getId());
+ coll1 = em.find(SetRefCollEntityEmbId.class, coll1.getId());
+
+ coll1.getCollection().add(str2);
+
+ em.getTransaction().commit();
+
+ // Revision 3
+ em.getTransaction().begin();
+
+ str1 = em.find(EmbIdTestEntity.class, str1.getId());
+ coll1 = em.find(SetRefCollEntityEmbId.class, coll1.getId());
+
+ coll1.getCollection().remove(str1);
+
+ em.getTransaction().commit();
+
+ // Revision 4
+ em.getTransaction().begin();
+
+ coll1 = em.find(SetRefCollEntityEmbId.class, coll1.getId());
+
+ coll1.getCollection().clear();
+
+ em.getTransaction().commit();
+ }
+
+ @Test
+ public void testRevisionsCounts() {
+ assert Arrays.asList(1, 2, 3, 4).equals(getVersionsReader().getRevisions(SetRefCollEntityEmbId.class, coll1_id));
+
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(EmbIdTestEntity.class, str1_id));
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(EmbIdTestEntity.class, str2_id));
+ }
+
+ @Test
+ public void testHistoryOfColl1() {
+ EmbIdTestEntity str1 = getEntityManager().find(EmbIdTestEntity.class, str1_id);
+ EmbIdTestEntity str2 = getEntityManager().find(EmbIdTestEntity.class, str2_id);
+
+ SetRefCollEntityEmbId rev1 = getVersionsReader().find(SetRefCollEntityEmbId.class, coll1_id, 1);
+ SetRefCollEntityEmbId rev2 = getVersionsReader().find(SetRefCollEntityEmbId.class, coll1_id, 2);
+ SetRefCollEntityEmbId rev3 = getVersionsReader().find(SetRefCollEntityEmbId.class, coll1_id, 3);
+ SetRefCollEntityEmbId rev4 = getVersionsReader().find(SetRefCollEntityEmbId.class, coll1_id, 4);
+
+ assert rev1.getCollection().equals(TestTools.makeSet(str1));
+ assert rev2.getCollection().equals(TestTools.makeSet(str1, str2));
+ assert rev3.getCollection().equals(TestTools.makeSet(str2));
+ assert rev4.getCollection().equals(TestTools.makeSet());
+
+ assert "coll1".equals(rev1.getData());
+ assert "coll1".equals(rev2.getData());
+ assert "coll1".equals(rev3.getData());
+ assert "coll1".equals(rev4.getData());
+ }
+}
\ No newline at end of file
Property changes on: trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSetWithEmbId.java
___________________________________________________________________
Name: svn:mergeinfo
+
Added: trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSetWithMulId.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSetWithMulId.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSetWithMulId.java 2008-08-21 13:56:27 UTC (rev 119)
@@ -0,0 +1,114 @@
+package org.jboss.envers.test.integration.onetomany.unidirectional;
+
+import org.jboss.envers.test.integration.AbstractEntityTest;
+import org.jboss.envers.test.entities.onetomany.unidirectional.ids.SetRefCollEntityMulId;
+import org.jboss.envers.test.entities.ids.MulIdTestEntity;
+import org.jboss.envers.test.entities.ids.MulId;
+import org.jboss.envers.test.tools.TestTools;
+import org.hibernate.ejb.Ejb3Configuration;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+import java.util.HashSet;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class BasicNotOwnedSetWithMulId extends AbstractEntityTest {
+ private MulId str1_id;
+ private MulId str2_id;
+
+ private MulId coll1_id;
+
+ public void configure(Ejb3Configuration cfg) {
+ cfg.addAnnotatedClass(MulIdTestEntity.class);
+ cfg.addAnnotatedClass(SetRefCollEntityMulId.class);
+ }
+
+ @BeforeClass(dependsOnMethods = "init")
+ public void initData() {
+ EntityManager em = getEntityManager();
+
+ str1_id = new MulId(1, 2);
+ str2_id = new MulId(3, 4);
+
+ coll1_id = new MulId(5, 6);
+
+ MulIdTestEntity str1 = new MulIdTestEntity(str1_id.getId1(), str1_id.getId2(), "str1");
+ MulIdTestEntity str2 = new MulIdTestEntity(str2_id.getId1(), str2_id.getId2(), "str2");
+
+ SetRefCollEntityMulId coll1 = new SetRefCollEntityMulId(coll1_id.getId1(), coll1_id.getId2(), "coll1");
+
+ // Revision 1
+ em.getTransaction().begin();
+
+ em.persist(str1);
+ em.persist(str2);
+
+ coll1.setCollection(new HashSet<MulIdTestEntity>());
+ coll1.getCollection().add(str1);
+ em.persist(coll1);
+
+ em.getTransaction().commit();
+
+ // Revision 2
+ em.getTransaction().begin();
+
+ str2 = em.find(MulIdTestEntity.class, str2_id);
+ coll1 = em.find(SetRefCollEntityMulId.class, coll1_id);
+
+ coll1.getCollection().add(str2);
+
+ em.getTransaction().commit();
+
+ // Revision 3
+ em.getTransaction().begin();
+
+ str1 = em.find(MulIdTestEntity.class, str1_id);
+ coll1 = em.find(SetRefCollEntityMulId.class, coll1_id);
+
+ coll1.getCollection().remove(str1);
+
+ em.getTransaction().commit();
+
+ // Revision 4
+ em.getTransaction().begin();
+
+ coll1 = em.find(SetRefCollEntityMulId.class, coll1_id);
+
+ coll1.getCollection().clear();
+
+ em.getTransaction().commit();
+ }
+
+ @Test
+ public void testRevisionsCounts() {
+ assert Arrays.asList(1, 2, 3, 4).equals(getVersionsReader().getRevisions(SetRefCollEntityMulId.class, coll1_id));
+
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(MulIdTestEntity.class, str1_id));
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(MulIdTestEntity.class, str2_id));
+ }
+
+ @Test
+ public void testHistoryOfColl1() {
+ MulIdTestEntity str1 = getEntityManager().find(MulIdTestEntity.class, str1_id);
+ MulIdTestEntity str2 = getEntityManager().find(MulIdTestEntity.class, str2_id);
+
+ SetRefCollEntityMulId rev1 = getVersionsReader().find(SetRefCollEntityMulId.class, coll1_id, 1);
+ SetRefCollEntityMulId rev2 = getVersionsReader().find(SetRefCollEntityMulId.class, coll1_id, 2);
+ SetRefCollEntityMulId rev3 = getVersionsReader().find(SetRefCollEntityMulId.class, coll1_id, 3);
+ SetRefCollEntityMulId rev4 = getVersionsReader().find(SetRefCollEntityMulId.class, coll1_id, 4);
+
+ assert rev1.getCollection().equals(TestTools.makeSet(str1));
+ assert rev2.getCollection().equals(TestTools.makeSet(str1, str2));
+ assert rev3.getCollection().equals(TestTools.makeSet(str2));
+ assert rev4.getCollection().equals(TestTools.makeSet());
+
+ assert "coll1".equals(rev1.getData());
+ assert "coll1".equals(rev2.getData());
+ assert "coll1".equals(rev3.getData());
+ assert "coll1".equals(rev4.getData());
+ }
+}
\ No newline at end of file
16 years, 6 months
JBoss Envers SVN: r118 - in trunk/src/test/org/jboss/envers/test: integration/onetomany and 2 other directories.
by jboss-envers-commits@lists.jboss.org
Author: adamw
Date: 2008-08-21 07:30:54 -0400 (Thu, 21 Aug 2008)
New Revision: 118
Added:
trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ListRefCollEntity.java
trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedList.java
trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/DataChangesNotOwnedSet.java
Modified:
trunk/src/test/org/jboss/envers/test/integration/onetomany/BasicList.java
trunk/src/test/org/jboss/envers/test/integration/onetomany/BasicSet.java
trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSet.java
trunk/src/test/org/jboss/envers/test/tools/TestTools.java
Log:
ENVERS-26: more tests
Copied: trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ListRefCollEntity.java (from rev 117, trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/SetRefCollEntity.java)
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ListRefCollEntity.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ListRefCollEntity.java 2008-08-21 11:30:54 UTC (rev 118)
@@ -0,0 +1,85 @@
+package org.jboss.envers.test.entities.onetomany.unidirectional;
+
+import org.jboss.envers.Versioned;
+import org.jboss.envers.test.entities.StrTestEntity;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import java.util.List;
+
+/**
+ * Set collection of references entity
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+public class ListRefCollEntity {
+ @Id
+ private Integer id;
+
+ @Versioned
+ private String data;
+
+ @Versioned
+ @OneToMany
+ private List<StrTestEntity> collection;
+
+ public ListRefCollEntity() {
+ }
+
+ public ListRefCollEntity(Integer id, String data) {
+ this.id = id;
+ this.data = data;
+ }
+
+ public ListRefCollEntity(String data) {
+ 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 List<StrTestEntity> getCollection() {
+ return collection;
+ }
+
+ public void setCollection(List<StrTestEntity> collection) {
+ this.collection = collection;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof ListRefCollEntity)) return false;
+
+ ListRefCollEntity that = (ListRefCollEntity) 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 "SetRefEdEntity(id = " + id + ", data = " + data + ")";
+ }
+}
\ No newline at end of file
Property changes on: trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/ListRefCollEntity.java
___________________________________________________________________
Name: svn:mergeinfo
+
Modified: trunk/src/test/org/jboss/envers/test/integration/onetomany/BasicList.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/onetomany/BasicList.java 2008-08-21 11:18:53 UTC (rev 117)
+++ trunk/src/test/org/jboss/envers/test/integration/onetomany/BasicList.java 2008-08-21 11:30:54 UTC (rev 118)
@@ -3,6 +3,7 @@
import org.jboss.envers.test.integration.AbstractEntityTest;
import org.jboss.envers.test.entities.onetomany.ListRefEdEntity;
import org.jboss.envers.test.entities.onetomany.ListRefIngEntity;
+import org.jboss.envers.test.tools.TestTools;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.hibernate.ejb.Ejb3Configuration;
@@ -83,21 +84,6 @@
assert Arrays.asList(1, 2).equals(getVersionsReader().getRevisions(ListRefIngEntity.class, ing1_id));
assert Arrays.asList(1, 3).equals(getVersionsReader().getRevisions(ListRefIngEntity.class, ing2_id));
}
-
- private <T> boolean checkList(List<T> list, T... objects) {
- if (list.size() != objects.length) {
- return false;
- }
-
- for (T obj : objects) {
- if (!list.contains(obj)) {
- return false;
- }
- }
-
- return true;
- }
-
@Test
public void testHistoryOfEdId1() {
ListRefIngEntity ing1 = getEntityManager().find(ListRefIngEntity.class, ing1_id);
@@ -107,9 +93,9 @@
ListRefEdEntity rev2 = getVersionsReader().find(ListRefEdEntity.class, ed1_id, 2);
ListRefEdEntity rev3 = getVersionsReader().find(ListRefEdEntity.class, ed1_id, 3);
- assert checkList(rev1.getReffering(), ing1, ing2);
- assert checkList(rev2.getReffering(), ing2);
- assert checkList(rev3.getReffering());
+ assert TestTools.checkList(rev1.getReffering(), ing1, ing2);
+ assert TestTools.checkList(rev2.getReffering(), ing2);
+ assert TestTools.checkList(rev3.getReffering());
}
@Test
@@ -121,9 +107,9 @@
ListRefEdEntity rev2 = getVersionsReader().find(ListRefEdEntity.class, ed2_id, 2);
ListRefEdEntity rev3 = getVersionsReader().find(ListRefEdEntity.class, ed2_id, 3);
- assert checkList(rev1.getReffering());
- assert checkList(rev2.getReffering(), ing1);
- assert checkList(rev3.getReffering(), ing1, ing2);
+ assert TestTools.checkList(rev1.getReffering());
+ assert TestTools.checkList(rev2.getReffering(), ing1);
+ assert TestTools.checkList(rev3.getReffering(), ing1, ing2);
}
@Test
Modified: trunk/src/test/org/jboss/envers/test/integration/onetomany/BasicSet.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/onetomany/BasicSet.java 2008-08-21 11:18:53 UTC (rev 117)
+++ trunk/src/test/org/jboss/envers/test/integration/onetomany/BasicSet.java 2008-08-21 11:30:54 UTC (rev 118)
@@ -3,14 +3,13 @@
import org.jboss.envers.test.integration.AbstractEntityTest;
import org.jboss.envers.test.entities.onetomany.SetRefEdEntity;
import org.jboss.envers.test.entities.onetomany.SetRefIngEntity;
+import org.jboss.envers.test.tools.TestTools;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.hibernate.ejb.Ejb3Configuration;
import javax.persistence.EntityManager;
import java.util.Arrays;
-import java.util.Set;
-import java.util.HashSet;
import java.util.Collections;
/**
@@ -98,13 +97,6 @@
assert Arrays.asList(2, 4).equals(getVersionsReader().getRevisions(SetRefIngEntity.class, ing2_id));
}
- private <T> Set<T> makeSet(T... objects) {
- Set<T> ret = new HashSet<T>();
- //noinspection ManualArrayToCollectionCopy
- for (T obj : objects) { ret.add(obj); }
- return ret;
- }
-
@Test
public void testHistoryOfEdId1() {
SetRefIngEntity ing1 = getEntityManager().find(SetRefIngEntity.class, ing1_id);
@@ -116,8 +108,8 @@
SetRefEdEntity rev4 = getVersionsReader().find(SetRefEdEntity.class, ed1_id, 4);
assert rev1.getReffering().equals(Collections.EMPTY_SET);
- assert rev2.getReffering().equals(makeSet(ing1, ing2));
- assert rev3.getReffering().equals(makeSet(ing2));
+ assert rev2.getReffering().equals(TestTools.makeSet(ing1, ing2));
+ assert rev3.getReffering().equals(TestTools.makeSet(ing2));
assert rev4.getReffering().equals(Collections.EMPTY_SET);
}
@@ -133,8 +125,8 @@
assert rev1.getReffering().equals(Collections.EMPTY_SET);
assert rev2.getReffering().equals(Collections.EMPTY_SET);
- assert rev3.getReffering().equals(makeSet(ing1));
- assert rev4.getReffering().equals(makeSet(ing1, ing2));
+ assert rev3.getReffering().equals(TestTools.makeSet(ing1));
+ assert rev4.getReffering().equals(TestTools.makeSet(ing1, ing2));
}
@Test
Copied: trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedList.java (from rev 117, trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSet.java)
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedList.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedList.java 2008-08-21 11:30:54 UTC (rev 118)
@@ -0,0 +1,115 @@
+package org.jboss.envers.test.integration.onetomany.unidirectional;
+
+import org.jboss.envers.test.integration.AbstractEntityTest;
+import org.jboss.envers.test.entities.onetomany.unidirectional.ListRefCollEntity;
+import org.jboss.envers.test.entities.StrTestEntity;
+import org.jboss.envers.test.tools.TestTools;
+import org.hibernate.ejb.Ejb3Configuration;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+import java.util.ArrayList;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class BasicNotOwnedList extends AbstractEntityTest {
+ private Integer str1_id;
+ private Integer str2_id;
+
+ private Integer coll1_id;
+
+ public void configure(Ejb3Configuration cfg) {
+ cfg.addAnnotatedClass(StrTestEntity.class);
+ cfg.addAnnotatedClass(ListRefCollEntity.class);
+ }
+
+ @BeforeClass(dependsOnMethods = "init")
+ public void initData() {
+ EntityManager em = getEntityManager();
+
+ StrTestEntity str1 = new StrTestEntity("str1");
+ StrTestEntity str2 = new StrTestEntity("str2");
+
+ ListRefCollEntity coll1 = new ListRefCollEntity(3, "coll1");
+
+ // Revision 1
+ em.getTransaction().begin();
+
+ em.persist(str1);
+ em.persist(str2);
+
+ coll1.setCollection(new ArrayList<StrTestEntity>());
+ coll1.getCollection().add(str1);
+ em.persist(coll1);
+
+ em.getTransaction().commit();
+
+ // Revision 2
+ em.getTransaction().begin();
+
+ str2 = em.find(StrTestEntity.class, str2.getId());
+ coll1 = em.find(ListRefCollEntity.class, coll1.getId());
+
+ coll1.getCollection().add(str2);
+
+ em.getTransaction().commit();
+
+ // Revision 3
+ em.getTransaction().begin();
+
+ str1 = em.find(StrTestEntity.class, str1.getId());
+ coll1 = em.find(ListRefCollEntity.class, coll1.getId());
+
+ coll1.getCollection().remove(str1);
+
+ em.getTransaction().commit();
+
+ // Revision 4
+ em.getTransaction().begin();
+
+ coll1 = em.find(ListRefCollEntity.class, coll1.getId());
+
+ coll1.getCollection().clear();
+
+ em.getTransaction().commit();
+
+ //
+
+ str1_id = str1.getId();
+ str2_id = str2.getId();
+
+ coll1_id = coll1.getId();
+ }
+
+ @Test
+ public void testRevisionsCounts() {
+ assert Arrays.asList(1, 2, 3, 4).equals(getVersionsReader().getRevisions(ListRefCollEntity.class, coll1_id));
+
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(StrTestEntity.class, str1_id));
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(StrTestEntity.class, str2_id));
+ }
+
+ @Test
+ public void testHistoryOfColl1() {
+ StrTestEntity str1 = getEntityManager().find(StrTestEntity.class, str1_id);
+ StrTestEntity str2 = getEntityManager().find(StrTestEntity.class, str2_id);
+
+ ListRefCollEntity rev1 = getVersionsReader().find(ListRefCollEntity.class, coll1_id, 1);
+ ListRefCollEntity rev2 = getVersionsReader().find(ListRefCollEntity.class, coll1_id, 2);
+ ListRefCollEntity rev3 = getVersionsReader().find(ListRefCollEntity.class, coll1_id, 3);
+ ListRefCollEntity rev4 = getVersionsReader().find(ListRefCollEntity.class, coll1_id, 4);
+
+ assert TestTools.checkList(rev1.getCollection(), str1);
+ assert TestTools.checkList(rev2.getCollection(), str1, str2);
+ assert TestTools.checkList(rev3.getCollection(), str2);
+ assert TestTools.checkList(rev4.getCollection());
+
+ assert "coll1".equals(rev1.getData());
+ assert "coll1".equals(rev2.getData());
+ assert "coll1".equals(rev3.getData());
+ assert "coll1".equals(rev4.getData());
+ }
+}
\ No newline at end of file
Property changes on: trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedList.java
___________________________________________________________________
Name: svn:mergeinfo
+
Modified: trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSet.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSet.java 2008-08-21 11:18:53 UTC (rev 117)
+++ trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSet.java 2008-08-21 11:30:54 UTC (rev 118)
@@ -3,13 +3,13 @@
import org.jboss.envers.test.integration.AbstractEntityTest;
import org.jboss.envers.test.entities.onetomany.unidirectional.SetRefCollEntity;
import org.jboss.envers.test.entities.StrTestEntity;
+import org.jboss.envers.test.tools.TestTools;
import org.hibernate.ejb.Ejb3Configuration;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import javax.persistence.EntityManager;
import java.util.Arrays;
-import java.util.Set;
import java.util.HashSet;
/**
@@ -92,13 +92,6 @@
assert Arrays.asList(1).equals(getVersionsReader().getRevisions(StrTestEntity.class, str2_id));
}
- @SuppressWarnings({"ManualArrayToCollectionCopy"})
- private <T> Set<T> makeSet(T... objects) {
- Set<T> ret = new HashSet<T>();
- for (T obj : objects) { ret.add(obj); }
- return ret;
- }
-
@Test
public void testHistoryOfColl1() {
StrTestEntity str1 = getEntityManager().find(StrTestEntity.class, str1_id);
@@ -109,15 +102,14 @@
SetRefCollEntity rev3 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 3);
SetRefCollEntity rev4 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 4);
- assert rev1.getCollection().equals(makeSet(str1));
- assert rev2.getCollection().equals(makeSet(str1, str2));
- assert rev3.getCollection().equals(makeSet(str2));
- assert rev4.getCollection().equals(makeSet());
+ assert rev1.getCollection().equals(TestTools.makeSet(str1));
+ assert rev2.getCollection().equals(TestTools.makeSet(str1, str2));
+ assert rev3.getCollection().equals(TestTools.makeSet(str2));
+ assert rev4.getCollection().equals(TestTools.makeSet());
assert "coll1".equals(rev1.getData());
assert "coll1".equals(rev2.getData());
assert "coll1".equals(rev3.getData());
assert "coll1".equals(rev4.getData());
-
}
}
Copied: trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/DataChangesNotOwnedSet.java (from rev 117, trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSet.java)
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/DataChangesNotOwnedSet.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/DataChangesNotOwnedSet.java 2008-08-21 11:30:54 UTC (rev 118)
@@ -0,0 +1,84 @@
+package org.jboss.envers.test.integration.onetomany.unidirectional;
+
+import org.jboss.envers.test.integration.AbstractEntityTest;
+import org.jboss.envers.test.entities.onetomany.unidirectional.SetRefCollEntity;
+import org.jboss.envers.test.entities.StrTestEntity;
+import org.jboss.envers.test.tools.TestTools;
+import org.hibernate.ejb.Ejb3Configuration;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+import java.util.HashSet;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class DataChangesNotOwnedSet extends AbstractEntityTest {
+ private Integer str1_id;
+
+ private Integer coll1_id;
+
+ public void configure(Ejb3Configuration cfg) {
+ cfg.addAnnotatedClass(StrTestEntity.class);
+ cfg.addAnnotatedClass(SetRefCollEntity.class);
+ }
+
+ @BeforeClass(dependsOnMethods = "init")
+ public void initData() {
+ EntityManager em = getEntityManager();
+
+ StrTestEntity str1 = new StrTestEntity("str1");
+
+ SetRefCollEntity coll1 = new SetRefCollEntity(3, "coll1");
+
+ // Revision 1
+ em.getTransaction().begin();
+
+ em.persist(str1);
+
+ coll1.setCollection(new HashSet<StrTestEntity>());
+ em.persist(coll1);
+
+ em.getTransaction().commit();
+
+ // Revision 2
+ em.getTransaction().begin();
+
+ str1 = em.find(StrTestEntity.class, str1.getId());
+ coll1 = em.find(SetRefCollEntity.class, coll1.getId());
+
+ coll1.getCollection().add(str1);
+ coll1.setData("coll2");
+
+ em.getTransaction().commit();
+
+ //
+
+ str1_id = str1.getId();
+
+ coll1_id = coll1.getId();
+ }
+
+ @Test
+ public void testRevisionsCounts() {
+ assert Arrays.asList(1, 2).equals(getVersionsReader().getRevisions(SetRefCollEntity.class, coll1_id));
+
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(StrTestEntity.class, str1_id));
+ }
+
+ @Test
+ public void testHistoryOfColl1() {
+ StrTestEntity str1 = getEntityManager().find(StrTestEntity.class, str1_id);
+
+ SetRefCollEntity rev1 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 1);
+ SetRefCollEntity rev2 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 2);
+
+ assert rev1.getCollection().equals(TestTools.makeSet());
+ assert rev2.getCollection().equals(TestTools.makeSet(str1));
+
+ assert "coll1".equals(rev1.getData());
+ assert "coll2".equals(rev2.getData());
+ }
+}
\ No newline at end of file
Property changes on: trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/DataChangesNotOwnedSet.java
___________________________________________________________________
Name: svn:mergeinfo
+
Modified: trunk/src/test/org/jboss/envers/test/tools/TestTools.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/tools/TestTools.java 2008-08-21 11:18:53 UTC (rev 117)
+++ trunk/src/test/org/jboss/envers/test/tools/TestTools.java 2008-08-21 11:30:54 UTC (rev 118)
@@ -2,6 +2,7 @@
import java.util.Set;
import java.util.HashSet;
+import java.util.List;
/**
* @author Adam Warski (adam at warski dot org)
@@ -16,4 +17,18 @@
return ret;
}
+
+ public static <T> boolean checkList(List<T> list, T... objects) {
+ if (list.size() != objects.length) {
+ return false;
+ }
+
+ for (T obj : objects) {
+ if (!list.contains(obj)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
}
16 years, 6 months
JBoss Envers SVN: r117 - in trunk/src: main/org/jboss/envers/entities/mapper/relation/lazy and 7 other directories.
by jboss-envers-commits@lists.jboss.org
Author: adamw
Date: 2008-08-21 07:18:53 -0400 (Thu, 21 Aug 2008)
New Revision: 117
Added:
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java
trunk/src/main/org/jboss/envers/synchronization/work/CollectionChangeWorkUnit.java
trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/
trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/SetRefCollEntity.java
trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/
trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSet.java
Removed:
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyIdMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java
trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java
Modified:
trunk/src/main/org/jboss/envers/event/VersionsEventListener.java
trunk/src/main/org/jboss/envers/synchronization/work/AddWorkUnit.java
trunk/src/main/org/jboss/envers/synchronization/work/DelWorkUnit.java
trunk/src/main/org/jboss/envers/synchronization/work/KeepCheckVisitor.java
trunk/src/main/org/jboss/envers/synchronization/work/ModWorkUnit.java
trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java
trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java
trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java
Log:
ENVERS-26: refactoring, first test
Deleted: trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java 2008-08-21 10:19:09 UTC (rev 116)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -1,64 +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.entities.mapper.relation;
-
-import org.jboss.envers.entities.mapper.PropertyMapper;
-import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.entities.mapper.relation.lazy.OneToManyBidirectionalInitializor;
-import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
-import org.jboss.envers.configuration.VersionsConfiguration;
-import org.hibernate.collection.PersistentCollection;
-
-import java.util.*;
-import java.io.Serializable;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToManyBidirectionalMapper extends AbstractOneToManyMapper implements PropertyMapper {
- private final String owningReferencePropertyName;
-
- public OneToManyBidirectionalMapper(String owningReferencePropertyName, String owningEntityName, String propertyName) {
- super(owningEntityName, propertyName);
-
- this.owningReferencePropertyName = owningReferencePropertyName;
- }
-
- public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj, Object oldObj) {
- return false;
- }
-
- protected <T extends Collection> Initializor<T> getInitializator(VersionsConfiguration verCfg,
- VersionsReaderImplementor versionsReader,
- Class<?> entityClass, Object primaryKey,
- Number revision,
- Class<T> collectionClass) {
- return new OneToManyBidirectionalInitializor<T>(versionsReader, entityClass, owningReferencePropertyName, primaryKey,
- revision, collectionClass);
- }
-
- public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName, PersistentCollection newColl,
- Serializable oldColl, Serializable id) {
- return null;
- }
-}
\ No newline at end of file
Added: trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java (rev 0)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyBidirectionalMapper.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -0,0 +1,64 @@
+/*
+ * 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.entities.mapper.relation;
+
+import org.jboss.envers.entities.mapper.PropertyMapper;
+import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
+import org.jboss.envers.reader.VersionsReaderImplementor;
+import org.jboss.envers.entities.mapper.relation.lazy.OneToManyBidirectionalInitializor;
+import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
+import org.jboss.envers.configuration.VersionsConfiguration;
+import org.hibernate.collection.PersistentCollection;
+
+import java.util.*;
+import java.io.Serializable;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class OneToManyBidirectionalMapper extends AbstractOneToManyMapper implements PropertyMapper {
+ private final String owningReferencePropertyName;
+
+ public OneToManyBidirectionalMapper(String owningReferencePropertyName, String owningEntityName, String propertyName) {
+ super(owningEntityName, propertyName);
+
+ this.owningReferencePropertyName = owningReferencePropertyName;
+ }
+
+ public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj, Object oldObj) {
+ return false;
+ }
+
+ protected <T extends Collection> Initializor<T> getInitializator(VersionsConfiguration verCfg,
+ VersionsReaderImplementor versionsReader,
+ Class<?> entityClass, Object primaryKey,
+ Number revision,
+ Class<T> collectionClass) {
+ return new OneToManyBidirectionalInitializor<T>(versionsReader, entityClass, owningReferencePropertyName, primaryKey,
+ revision, collectionClass);
+ }
+
+ public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName, PersistentCollection newColl,
+ Serializable oldColl, Serializable id) {
+ return null;
+ }
+}
\ No newline at end of file
Deleted: trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyIdMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyIdMapper.java 2008-08-21 10:19:09 UTC (rev 116)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyIdMapper.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -1,90 +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.entities.mapper.relation;
-
-import org.jboss.envers.entities.mapper.PropertyMapper;
-import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.entities.mapper.relation.lazy.OneToManyInitializor;
-import org.jboss.envers.entities.mapper.relation.lazy.proxy.ListProxy;
-import org.jboss.envers.entities.mapper.relation.lazy.proxy.SetProxy;
-import org.jboss.envers.exception.VersionsException;
-import org.jboss.envers.tools.reflection.ReflectionTools;
-import org.hibernate.property.Setter;
-import org.hibernate.property.Getter;
-import org.hibernate.collection.PersistentCollection;
-
-import java.util.*;
-import java.io.Serializable;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToManyIdMapper implements PropertyMapper {
- private final String owningReferencePropertyName;
- private final String owningEntityName;
- private final String propertyName;
-
- public OneToManyIdMapper(String owningReferencePropertyName, String owningEntityName, String propertyName) {
- this.owningReferencePropertyName = owningReferencePropertyName;
- this.owningEntityName = owningEntityName;
- this.propertyName = propertyName;
- }
-
- public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj, Object oldObj) {
- return false;
- }
-
- @SuppressWarnings({"unchecked"})
- public void mapToEntityFromMap(Object obj, Map data, Object primaryKey, VersionsReaderImplementor versionsReader, Number revision) {
- if (obj == null) {
- return;
- }
-
- Class<?> entityClass = ReflectionTools.loadClass(owningEntityName);
-
- Getter getter = ReflectionTools.getGetter(obj.getClass(), propertyName);
- Class collectionClass = getter.getReturnType();
-
- // todo: investigate generics
- Object value;
- if (List.class.isAssignableFrom(collectionClass)) {
- value = new ListProxy(new OneToManyInitializor<ArrayList>(versionsReader, entityClass,
- owningReferencePropertyName, primaryKey, revision, ArrayList.class));
- } else if (Set.class.isAssignableFrom(collectionClass) || Collection.class.isAssignableFrom(collectionClass)) {
- value = new SetProxy(new OneToManyInitializor<HashSet>(versionsReader, entityClass,
- owningReferencePropertyName, primaryKey, revision, HashSet.class));
- } else {
- throw new VersionsException("Unsupported versioned collection type: " + collectionClass.getName());
- }
-
- Setter setter = ReflectionTools.getSetter(obj.getClass(), propertyName);
- setter.set(obj, value, null);
- }
-
- public List<PersistentCollectionChangeData> mapCollectionChangesFromCollections(String referencingPropertyName,
- PersistentCollection newColl,
- Serializable oldColl,
- Serializable id) {
- return null;
- }
-}
\ No newline at end of file
Deleted: trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java 2008-08-21 10:19:09 UTC (rev 116)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -1,116 +0,0 @@
-package org.jboss.envers.entities.mapper.relation;
-
-import org.jboss.envers.entities.mapper.PropertyMapper;
-import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
-import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
-import org.jboss.envers.entities.mapper.relation.lazy.OneToManyUnidirectionalInitializor;
-import org.jboss.envers.entities.mapper.id.IdMapper;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
-import org.jboss.envers.configuration.VersionsConfiguration;
-import org.jboss.envers.RevisionType;
-import org.hibernate.collection.PersistentCollection;
-
-import java.util.*;
-import java.io.Serializable;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToManyUnidirectionalMapper extends AbstractOneToManyMapper implements PropertyMapper {
- private final VersionsEntitiesConfiguration verEntCfg;
- private final String referencedEntityName;
- private final String collectionReferencingPropertyName;
- private final String versionsReferencedEntityName;
- private final String versionsMiddleEntityName;
- private final IdMapper referencingMiddleIdMapper;
- private final IdMapper referencedMiddleIdMapper;
-
- private final UnidirectionalRelationQueryGenerator queryGenerator;
-
- public OneToManyUnidirectionalMapper(VersionsEntitiesConfiguration verEntCfg, String referencingEntityName,
- String referencedEntityName, String collectionReferencingPropertyName,
- String versionsReferencedEntityName, String versionsMiddleEntityName,
- IdMapper referencingMiddleIdMapper, IdMapper referencedMiddleIdMapper,
- IdMapper referencedIdMapper) {
- super(referencingEntityName, collectionReferencingPropertyName);
-
- this.verEntCfg = verEntCfg;
- this.referencedEntityName = referencedEntityName;
- this.collectionReferencingPropertyName = collectionReferencingPropertyName;
- this.versionsReferencedEntityName = versionsReferencedEntityName;
- this.versionsMiddleEntityName = versionsMiddleEntityName;
- this.referencingMiddleIdMapper = referencingMiddleIdMapper;
- this.referencedMiddleIdMapper = referencedMiddleIdMapper;
-
- queryGenerator = new UnidirectionalRelationQueryGenerator(verEntCfg, versionsReferencedEntityName,
- versionsMiddleEntityName, referencingMiddleIdMapper, referencedMiddleIdMapper, referencedIdMapper);
- }
-
- private Collection getOldCollection(Serializable oldColl) {
- if (oldColl instanceof Map) {
- return ((Map) oldColl).keySet();
- } else {
- return (Collection) oldColl;
- }
- }
-
- private void addCollectionChanges(List<PersistentCollectionChangeData> collectionChanges, Set<Object> changed,
- RevisionType revisionType, Serializable id) {
- for (Object changedEntity : changed) {
- Map<String, Object> entityData = new HashMap<String, Object>();
- Map<String, Object> originalId = new HashMap<String, Object>();
- entityData.put(verEntCfg.getOriginalIdPropName(), originalId);
-
- collectionChanges.add(new PersistentCollectionChangeData(versionsMiddleEntityName, entityData));
- referencingMiddleIdMapper.mapToMapFromId(originalId, id);
- referencedMiddleIdMapper.mapToMapFromEntity(originalId, changedEntity);
-
- entityData.put(verEntCfg.getRevisionTypePropName(), revisionType);
-
- System.out.println("entityData = " + entityData);
- }
- }
-
- @SuppressWarnings({"unchecked"})
- public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName,
- PersistentCollection newColl,
- Serializable oldColl, Serializable id) {
- if (!collectionReferencingPropertyName.equals(referencingPropertyName)) {
- return null;
- }
-
- List<PersistentCollectionChangeData> collectionChanges = new ArrayList<PersistentCollectionChangeData>();
-
- Collection newCollection = (Collection) newColl;
- Collection oldCollection = getOldCollection(oldColl);
-
- Set<Object> added = new HashSet<Object>();
- if (newColl != null) { added.addAll(newCollection); }
- if (oldColl != null) { added.removeAll(oldCollection); }
-
- addCollectionChanges(collectionChanges, added, RevisionType.ADD, id);
-
- Set<Object> deleted = new HashSet<Object>();
- if (oldColl != null) { deleted.addAll(oldCollection); }
- if (newColl != null) { deleted.removeAll(newCollection); }
-
- addCollectionChanges(collectionChanges, deleted, RevisionType.DEL, id);
-
- return collectionChanges;
- }
-
- @SuppressWarnings({"unchecked"})
- public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj, Object oldObj) {
- // Changes are mapped in the "mapCollectionChanges" method.
- return false;
- }
-
- protected <T extends Collection> Initializor<T> getInitializator(VersionsConfiguration verCfg,
- VersionsReaderImplementor versionsReader,
- Class<?> entityClass, Object primaryKey,
- Number revision, Class<T> collectionClass) {
- return new OneToManyUnidirectionalInitializor<T>(verCfg, referencedEntityName, queryGenerator,
- versionsReader, primaryKey, revision, collectionClass);
- }
-}
Added: trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java (rev 0)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/OneToManyUnidirectionalMapper.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -0,0 +1,112 @@
+package org.jboss.envers.entities.mapper.relation;
+
+import org.jboss.envers.entities.mapper.PropertyMapper;
+import org.jboss.envers.entities.mapper.PersistentCollectionChangeData;
+import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
+import org.jboss.envers.entities.mapper.relation.lazy.OneToManyUnidirectionalInitializor;
+import org.jboss.envers.entities.mapper.id.IdMapper;
+import org.jboss.envers.reader.VersionsReaderImplementor;
+import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
+import org.jboss.envers.configuration.VersionsConfiguration;
+import org.jboss.envers.RevisionType;
+import org.hibernate.collection.PersistentCollection;
+
+import java.util.*;
+import java.io.Serializable;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class OneToManyUnidirectionalMapper extends AbstractOneToManyMapper implements PropertyMapper {
+ private final VersionsEntitiesConfiguration verEntCfg;
+ private final String referencedEntityName;
+ private final String collectionReferencingPropertyName;
+ private final String versionsMiddleEntityName;
+ private final IdMapper referencingMiddleIdMapper;
+ private final IdMapper referencedMiddleIdMapper;
+
+ private final UnidirectionalRelationQueryGenerator queryGenerator;
+
+ public OneToManyUnidirectionalMapper(VersionsEntitiesConfiguration verEntCfg, String referencingEntityName,
+ String referencedEntityName, String collectionReferencingPropertyName,
+ String versionsReferencedEntityName, String versionsMiddleEntityName,
+ IdMapper referencingMiddleIdMapper, IdMapper referencedMiddleIdMapper,
+ IdMapper referencedIdMapper) {
+ super(referencingEntityName, collectionReferencingPropertyName);
+
+ this.verEntCfg = verEntCfg;
+ this.referencedEntityName = referencedEntityName;
+ this.collectionReferencingPropertyName = collectionReferencingPropertyName;
+ this.versionsMiddleEntityName = versionsMiddleEntityName;
+ this.referencingMiddleIdMapper = referencingMiddleIdMapper;
+ this.referencedMiddleIdMapper = referencedMiddleIdMapper;
+
+ queryGenerator = new UnidirectionalRelationQueryGenerator(verEntCfg, versionsReferencedEntityName,
+ versionsMiddleEntityName, referencingMiddleIdMapper, referencedMiddleIdMapper, referencedIdMapper);
+ }
+
+ private Collection getOldCollection(Serializable oldColl) {
+ if (oldColl instanceof Map) {
+ return ((Map) oldColl).keySet();
+ } else {
+ return (Collection) oldColl;
+ }
+ }
+
+ private void addCollectionChanges(List<PersistentCollectionChangeData> collectionChanges, Set<Object> changed,
+ RevisionType revisionType, Serializable id) {
+ for (Object changedEntity : changed) {
+ Map<String, Object> entityData = new HashMap<String, Object>();
+ Map<String, Object> originalId = new HashMap<String, Object>();
+ entityData.put(verEntCfg.getOriginalIdPropName(), originalId);
+
+ collectionChanges.add(new PersistentCollectionChangeData(versionsMiddleEntityName, entityData));
+ referencingMiddleIdMapper.mapToMapFromId(originalId, id);
+ referencedMiddleIdMapper.mapToMapFromEntity(originalId, changedEntity);
+
+ entityData.put(verEntCfg.getRevisionTypePropName(), revisionType);
+ }
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public List<PersistentCollectionChangeData> mapCollectionChanges(String referencingPropertyName,
+ PersistentCollection newColl,
+ Serializable oldColl, Serializable id) {
+ if (!collectionReferencingPropertyName.equals(referencingPropertyName)) {
+ return null;
+ }
+
+ List<PersistentCollectionChangeData> collectionChanges = new ArrayList<PersistentCollectionChangeData>();
+
+ Collection newCollection = (Collection) newColl;
+ Collection oldCollection = getOldCollection(oldColl);
+
+ Set<Object> added = new HashSet<Object>();
+ if (newColl != null) { added.addAll(newCollection); }
+ if (oldColl != null) { added.removeAll(oldCollection); }
+
+ addCollectionChanges(collectionChanges, added, RevisionType.ADD, id);
+
+ Set<Object> deleted = new HashSet<Object>();
+ if (oldColl != null) { deleted.addAll(oldCollection); }
+ if (newColl != null) { deleted.removeAll(newCollection); }
+
+ addCollectionChanges(collectionChanges, deleted, RevisionType.DEL, id);
+
+ return collectionChanges;
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public boolean mapToMapFromEntity(Map<String, Object> data, Object newObj, Object oldObj) {
+ // Changes are mapped in the "mapCollectionChanges" method.
+ return false;
+ }
+
+ protected <T extends Collection> Initializor<T> getInitializator(VersionsConfiguration verCfg,
+ VersionsReaderImplementor versionsReader,
+ Class<?> entityClass, Object primaryKey,
+ Number revision, Class<T> collectionClass) {
+ return new OneToManyUnidirectionalInitializor<T>(verCfg, referencedEntityName, queryGenerator,
+ versionsReader, primaryKey, revision, collectionClass);
+ }
+}
Deleted: trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java 2008-08-21 10:19:09 UTC (rev 116)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -1,93 +0,0 @@
-package org.jboss.envers.entities.mapper.relation;
-
-import org.jboss.envers.entities.mapper.id.QueryParameterData;
-import org.jboss.envers.entities.mapper.id.IdMapper;
-import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
-import org.jboss.envers.RevisionType;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.hibernate.Query;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class UnidirectionalRelationQueryGenerator {
- private final String queryString;
- private final IdMapper referencingMiddleIdMapper;
-
- public UnidirectionalRelationQueryGenerator(VersionsEntitiesConfiguration verEntCfg,
- String versionsReferencedEntityName, String versionsMiddleEntityName,
- IdMapper referencingMiddleIdMapper, IdMapper referencedMiddleIdMapper,
- IdMapper referencedIdMapper) {
- this.referencingMiddleIdMapper = referencingMiddleIdMapper;
-
- /*
- * The query that we need to create:
- * SELECT e FROM versionsReferencedEntity e, middleEntity ee
- * WHERE
- * (selecting e entities at revision :revision)
- * e.revision = (SELECT max(e2.revision) FROM referencedEntity e2
- * WHERE e2.revision <= :revision AND e2.id1 = e.id1) AND
- * (only entities referenced by the association)
- * ee.id1 = e.id1 AND
- * ee.id2 = :id2 AND
- * (the association at revision :revision)
- * ee.revision = (SELECT max(ee2.revision) FROM middleEntity ee2
- * WHERE ee2.revision <= :revision AND ee2.id2 = :id2 AND ee2.id1 = ee.id1) AND
- * (only non-deleted entities and associations)
- * ee.revision_type != DEL AND
- * e.revision_type != DEL
- */
- String revisionPropertyPath = verEntCfg.getRevisionPropPath();
- String originalIdPropertyName = verEntCfg.getOriginalIdPropName();
-
- StringBuilder querySB = new StringBuilder();
- querySB
- .append("SELECT e FROM ").append(versionsReferencedEntityName).append(" e")
- .append(", ").append(versionsMiddleEntityName).append(" ee ")
- .append("WHERE ")
- // e.revision = (SELECT max(e2.revision) ...
- .append("e.").append(revisionPropertyPath).append(" = (SELECT max(e2.").append(revisionPropertyPath)
- .append(") FROM ").append(versionsReferencedEntityName).append(" e2 ")
- // e2.revision <= :revision
- .append("WHERE e2.").append(revisionPropertyPath).append(" <= :revision AND ")
- // e2.id1 = e.id1)
- .append(referencedIdMapper.getIdsEqualQuery("e." + originalIdPropertyName, "e2." + originalIdPropertyName))
- .append(") AND ")
- // ee.id1 = e.id1
- .append(referencedMiddleIdMapper.getIdsEqualQuery("ee." + originalIdPropertyName,
- referencedIdMapper, "e." + originalIdPropertyName))
- .append(" AND ")
- // ee.id2 = :id2
- .append(referencingMiddleIdMapper.getIdEqualsQuery("ee." + originalIdPropertyName, true))
- .append(" AND ")
- // ee.revision = (SELECT max(ee2.revision) ...
- .append("ee.").append(revisionPropertyPath).append(" = (SELECT max(ee2.").append(revisionPropertyPath)
- .append(") FROM ").append(versionsMiddleEntityName).append(" ee2 ")
- // ee2.revision <= :revision
- .append("WHERE ee2.").append(revisionPropertyPath).append(" <= :revision AND ")
- // ee2.id2 = :id2)
- .append(referencingMiddleIdMapper.getIdEqualsQuery("ee2." + originalIdPropertyName, true))
- .append(" AND ")
- // ee2.id1 = ee.id1)
- .append(referencedMiddleIdMapper.getIdsEqualQuery("ee." + originalIdPropertyName, "ee2." + originalIdPropertyName))
- .append(") AND ")
- // e.revision_type != DEL AND
- .append("e.").append(verEntCfg.getRevisionTypePropName()).append(" != ").append(":delrevisiontype")
- .append(" AND ")
- // ee.revision_type != DEL
- .append("ee.").append(verEntCfg.getRevisionTypePropName()).append(" != ").append(":delrevisiontype");
-
- queryString = querySB.toString();
- }
-
- public Query getQuery(VersionsReaderImplementor versionsReader, Object primaryKey, Number revision) {
- Query query = versionsReader.getSession().createQuery(queryString);
- query.setParameter("revision", revision);
- query.setParameter("delrevisiontype", RevisionType.DEL);
- for (QueryParameterData paramData: referencingMiddleIdMapper.mapToQueryParametersFromId(primaryKey)) {
- paramData.setParameterValue(query);
- }
-
- return query;
- }
-}
Added: trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java (rev 0)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/UnidirectionalRelationQueryGenerator.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -0,0 +1,93 @@
+package org.jboss.envers.entities.mapper.relation;
+
+import org.jboss.envers.entities.mapper.id.QueryParameterData;
+import org.jboss.envers.entities.mapper.id.IdMapper;
+import org.jboss.envers.configuration.VersionsEntitiesConfiguration;
+import org.jboss.envers.RevisionType;
+import org.jboss.envers.reader.VersionsReaderImplementor;
+import org.hibernate.Query;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class UnidirectionalRelationQueryGenerator {
+ private final String queryString;
+ private final IdMapper referencingMiddleIdMapper;
+
+ public UnidirectionalRelationQueryGenerator(VersionsEntitiesConfiguration verEntCfg,
+ String versionsReferencedEntityName, String versionsMiddleEntityName,
+ IdMapper referencingMiddleIdMapper, IdMapper referencedMiddleIdMapper,
+ IdMapper referencedIdMapper) {
+ this.referencingMiddleIdMapper = referencingMiddleIdMapper;
+
+ /*
+ * The query that we need to create:
+ * SELECT e FROM versionsReferencedEntity e, middleEntity ee
+ * WHERE
+ * (selecting e entities at revision :revision)
+ * e.revision = (SELECT max(e2.revision) FROM referencedEntity e2
+ * WHERE e2.revision <= :revision AND e2.id1 = e.id1) AND
+ * (only entities referenced by the association)
+ * ee.id1 = e.id1 AND
+ * ee.id2 = :id2 AND
+ * (the association at revision :revision)
+ * ee.revision = (SELECT max(ee2.revision) FROM middleEntity ee2
+ * WHERE ee2.revision <= :revision AND ee2.id2 = :id2 AND ee2.id1 = ee.id1) AND
+ * (only non-deleted entities and associations)
+ * ee.revision_type != DEL AND
+ * e.revision_type != DEL
+ */
+ String revisionPropertyPath = verEntCfg.getRevisionPropPath();
+ String originalIdPropertyName = verEntCfg.getOriginalIdPropName();
+
+ StringBuilder querySB = new StringBuilder();
+ querySB
+ .append("SELECT e FROM ").append(versionsReferencedEntityName).append(" e")
+ .append(", ").append(versionsMiddleEntityName).append(" ee ")
+ .append("WHERE ")
+ // e.revision = (SELECT max(e2.revision) ...
+ .append("e.").append(revisionPropertyPath).append(" = (SELECT max(e2.").append(revisionPropertyPath)
+ .append(") FROM ").append(versionsReferencedEntityName).append(" e2 ")
+ // e2.revision <= :revision
+ .append("WHERE e2.").append(revisionPropertyPath).append(" <= :revision AND ")
+ // e2.id1 = e.id1)
+ .append(referencedIdMapper.getIdsEqualQuery("e." + originalIdPropertyName, "e2." + originalIdPropertyName))
+ .append(") AND ")
+ // ee.id1 = e.id1
+ .append(referencedMiddleIdMapper.getIdsEqualQuery("ee." + originalIdPropertyName,
+ referencedIdMapper, "e." + originalIdPropertyName))
+ .append(" AND ")
+ // ee.id2 = :id2
+ .append(referencingMiddleIdMapper.getIdEqualsQuery("ee." + originalIdPropertyName, true))
+ .append(" AND ")
+ // ee.revision = (SELECT max(ee2.revision) ...
+ .append("ee.").append(revisionPropertyPath).append(" = (SELECT max(ee2.").append(revisionPropertyPath)
+ .append(") FROM ").append(versionsMiddleEntityName).append(" ee2 ")
+ // ee2.revision <= :revision
+ .append("WHERE ee2.").append(revisionPropertyPath).append(" <= :revision AND ")
+ // ee2.id2 = :id2)
+ .append(referencingMiddleIdMapper.getIdEqualsQuery("ee2." + originalIdPropertyName, true))
+ .append(" AND ")
+ // ee2.id1 = ee.id1)
+ .append(referencedMiddleIdMapper.getIdsEqualQuery("ee." + originalIdPropertyName, "ee2." + originalIdPropertyName))
+ .append(") AND ")
+ // e.revision_type != DEL AND
+ .append("e.").append(verEntCfg.getRevisionTypePropName()).append(" != ").append(":delrevisiontype")
+ .append(" AND ")
+ // ee.revision_type != DEL
+ .append("ee.").append(verEntCfg.getRevisionTypePropName()).append(" != ").append(":delrevisiontype");
+
+ queryString = querySB.toString();
+ }
+
+ public Query getQuery(VersionsReaderImplementor versionsReader, Object primaryKey, Number revision) {
+ Query query = versionsReader.getSession().createQuery(queryString);
+ query.setParameter("revision", revision);
+ query.setParameter("delrevisiontype", RevisionType.DEL);
+ for (QueryParameterData paramData: referencingMiddleIdMapper.mapToQueryParametersFromId(primaryKey)) {
+ paramData.setParameterValue(query);
+ }
+
+ return query;
+ }
+}
Deleted: trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java 2008-08-21 10:19:09 UTC (rev 116)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -1,74 +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.entities.mapper.relation.lazy;
-
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
-import org.jboss.envers.query.VersionsRestrictions;
-import org.jboss.envers.exception.VersionsException;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToManyBidirectionalInitializor<T extends Collection> implements Initializor<T> {
- private VersionsReaderImplementor versionsReader;
- private Class<?> entityClass;
- private String owningReferencePropertyName;
- private Object primaryKey;
- private Number revision;
- private Class<T> collectionClass;
-
- public OneToManyBidirectionalInitializor(VersionsReaderImplementor versionsReader, Class<?> entityClass,
- String owningReferencePropertyName, Object primaryKey, Number revision,
- Class<T> collectionClass) {
- this.versionsReader = versionsReader;
- this.entityClass = entityClass;
- this.owningReferencePropertyName = owningReferencePropertyName;
- this.primaryKey = primaryKey;
- this.revision = revision;
- this.collectionClass = collectionClass;
- }
-
- @SuppressWarnings({"unchecked"})
- public T initialize() {
- List queryResult = versionsReader.createQuery().forEntitiesAtRevision(entityClass, revision)
- .add(VersionsRestrictions.relatedIdEq(owningReferencePropertyName, primaryKey)).getResultList();
-
- if (collectionClass.isAssignableFrom(queryResult.getClass())) {
- return (T) queryResult;
- } else {
- Collection result;
- try {
- result = collectionClass.newInstance();
- } catch (Exception e) {
- throw new VersionsException(e);
- }
-
- result.addAll(queryResult);
-
- return (T) result;
- }
- }
-}
Added: trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java (rev 0)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyBidirectionalInitializor.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -0,0 +1,74 @@
+/*
+ * 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.entities.mapper.relation.lazy;
+
+import org.jboss.envers.reader.VersionsReaderImplementor;
+import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
+import org.jboss.envers.query.VersionsRestrictions;
+import org.jboss.envers.exception.VersionsException;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class OneToManyBidirectionalInitializor<T extends Collection> implements Initializor<T> {
+ private VersionsReaderImplementor versionsReader;
+ private Class<?> entityClass;
+ private String owningReferencePropertyName;
+ private Object primaryKey;
+ private Number revision;
+ private Class<T> collectionClass;
+
+ public OneToManyBidirectionalInitializor(VersionsReaderImplementor versionsReader, Class<?> entityClass,
+ String owningReferencePropertyName, Object primaryKey, Number revision,
+ Class<T> collectionClass) {
+ this.versionsReader = versionsReader;
+ this.entityClass = entityClass;
+ this.owningReferencePropertyName = owningReferencePropertyName;
+ this.primaryKey = primaryKey;
+ this.revision = revision;
+ this.collectionClass = collectionClass;
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public T initialize() {
+ List queryResult = versionsReader.createQuery().forEntitiesAtRevision(entityClass, revision)
+ .add(VersionsRestrictions.relatedIdEq(owningReferencePropertyName, primaryKey)).getResultList();
+
+ if (collectionClass.isAssignableFrom(queryResult.getClass())) {
+ return (T) queryResult;
+ } else {
+ Collection result;
+ try {
+ result = collectionClass.newInstance();
+ } catch (Exception e) {
+ throw new VersionsException(e);
+ }
+
+ result.addAll(queryResult);
+
+ return (T) result;
+ }
+ }
+}
Deleted: trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java 2008-08-21 10:19:09 UTC (rev 116)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -1,55 +0,0 @@
-package org.jboss.envers.entities.mapper.relation.lazy;
-
-import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
-import org.jboss.envers.entities.mapper.relation.UnidirectionalRelationQueryGenerator;
-import org.jboss.envers.entities.EntityInstantiator;
-import org.jboss.envers.reader.VersionsReaderImplementor;
-import org.jboss.envers.exception.VersionsException;
-import org.jboss.envers.configuration.VersionsConfiguration;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * @author Adam Warski (adam at warski dot org)
- */
-public class OneToManyUnidirectionalInitializor<T extends Collection> implements Initializor<T> {
- private final VersionsConfiguration verCfg;
- private final String entityName;
- private final UnidirectionalRelationQueryGenerator queryGenerator;
- private final VersionsReaderImplementor versionsReader;
- private final Object primaryKey;
- private final Number revision;
- private final Class<T> collectionClass;
-
- public OneToManyUnidirectionalInitializor(VersionsConfiguration verCfg, String entityName,
- UnidirectionalRelationQueryGenerator queryGenerator,
- VersionsReaderImplementor versionsReader, Object primaryKey,
- Number revision, Class<T> collectionClass) {
- this.verCfg = verCfg;
- this.entityName = entityName;
- this.queryGenerator = queryGenerator;
- this.versionsReader = versionsReader;
- this.primaryKey = primaryKey;
- this.revision = revision;
- this.collectionClass = collectionClass;
- }
-
- @SuppressWarnings({"unchecked"})
- public T initialize() {
- EntityInstantiator entityInstantiator = new EntityInstantiator(verCfg, versionsReader);
-
- List queryResult = queryGenerator.getQuery(versionsReader, primaryKey, revision).list();
-
- T result;
- try {
- result = collectionClass.newInstance();
- } catch (Exception e) {
- throw new VersionsException(e);
- }
-
- entityInstantiator.addInstancesFromVersionsEntities(entityName, result, queryResult, revision);
-
- return result;
- }
-}
Added: trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java (rev 0)
+++ trunk/src/main/org/jboss/envers/entities/mapper/relation/lazy/OneToManyUnidirectionalInitializor.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -0,0 +1,55 @@
+package org.jboss.envers.entities.mapper.relation.lazy;
+
+import org.jboss.envers.entities.mapper.relation.lazy.proxy.Initializor;
+import org.jboss.envers.entities.mapper.relation.UnidirectionalRelationQueryGenerator;
+import org.jboss.envers.entities.EntityInstantiator;
+import org.jboss.envers.reader.VersionsReaderImplementor;
+import org.jboss.envers.exception.VersionsException;
+import org.jboss.envers.configuration.VersionsConfiguration;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class OneToManyUnidirectionalInitializor<T extends Collection> implements Initializor<T> {
+ private final VersionsConfiguration verCfg;
+ private final String entityName;
+ private final UnidirectionalRelationQueryGenerator queryGenerator;
+ private final VersionsReaderImplementor versionsReader;
+ private final Object primaryKey;
+ private final Number revision;
+ private final Class<T> collectionClass;
+
+ public OneToManyUnidirectionalInitializor(VersionsConfiguration verCfg, String entityName,
+ UnidirectionalRelationQueryGenerator queryGenerator,
+ VersionsReaderImplementor versionsReader, Object primaryKey,
+ Number revision, Class<T> collectionClass) {
+ this.verCfg = verCfg;
+ this.entityName = entityName;
+ this.queryGenerator = queryGenerator;
+ this.versionsReader = versionsReader;
+ this.primaryKey = primaryKey;
+ this.revision = revision;
+ this.collectionClass = collectionClass;
+ }
+
+ @SuppressWarnings({"unchecked"})
+ public T initialize() {
+ EntityInstantiator entityInstantiator = new EntityInstantiator(verCfg, versionsReader);
+
+ List queryResult = queryGenerator.getQuery(versionsReader, primaryKey, revision).list();
+
+ T result;
+ try {
+ result = collectionClass.newInstance();
+ } catch (Exception e) {
+ throw new VersionsException(e);
+ }
+
+ entityInstantiator.addInstancesFromVersionsEntities(entityName, result, queryResult, revision);
+
+ return result;
+ }
+}
Modified: trunk/src/main/org/jboss/envers/event/VersionsEventListener.java
===================================================================
--- trunk/src/main/org/jboss/envers/event/VersionsEventListener.java 2008-08-21 10:19:09 UTC (rev 116)
+++ trunk/src/main/org/jboss/envers/event/VersionsEventListener.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -44,7 +44,7 @@
PostCollectionRecreateEventListener, Initializable {
private VersionsConfiguration verCfg;
- private void generateCollectionChangeWorkUnits(VersionsSync verSync, EntityPersister entityPersister,
+ private void generateBidirectionalCollectionChangeWorkUnits(VersionsSync verSync, EntityPersister entityPersister,
String entityName, Object[] newState, Object[] oldState) {
// Checking if this is enabled in configuration ...
if (!verCfg.getGlobalCfg().isGenerateRevisionsForCollections()) {
@@ -71,12 +71,12 @@
// (size increases).
if (newValue != null) {
Serializable id = (Serializable) idMapper.mapToIdFromEntity(newValue);
- verSync.addWorkUnit(new BidirectionalCollectionChangeWorkUnit(relDesc.getToEntityName(), verCfg, id, newValue));
+ verSync.addWorkUnit(new CollectionChangeWorkUnit(relDesc.getToEntityName(), verCfg, id, newValue));
}
if (oldValue != null) {
Serializable id = (Serializable) idMapper.mapToIdFromEntity(oldValue);
- verSync.addWorkUnit(new BidirectionalCollectionChangeWorkUnit(relDesc.getToEntityName(), verCfg, id, oldValue));
+ verSync.addWorkUnit(new CollectionChangeWorkUnit(relDesc.getToEntityName(), verCfg, id, oldValue));
}
}
}
@@ -92,7 +92,7 @@
verSync.addWorkUnit(new AddWorkUnit(event.getPersister().getEntityName(), verCfg, event.getId(),
event.getPersister(), event.getState()));
- generateCollectionChangeWorkUnits(verSync, event.getPersister(), entityName, event.getState(), null);
+ generateBidirectionalCollectionChangeWorkUnits(verSync, event.getPersister(), entityName, event.getState(), null);
}
}
@@ -105,7 +105,7 @@
verSync.addWorkUnit(new ModWorkUnit(event.getPersister().getEntityName(), verCfg, event.getId(),
event.getPersister(), event.getState(), event.getOldState()));
- generateCollectionChangeWorkUnits(verSync, event.getPersister(), entityName, event.getState(), event.getOldState());
+ generateBidirectionalCollectionChangeWorkUnits(verSync, event.getPersister(), entityName, event.getState(), event.getOldState());
}
}
@@ -117,7 +117,7 @@
verSync.addWorkUnit(new DelWorkUnit(event.getPersister().getEntityName(), verCfg, event.getId()));
- generateCollectionChangeWorkUnits(verSync, event.getPersister(), entityName, null, event.getDeletedState());
+ generateBidirectionalCollectionChangeWorkUnits(verSync, event.getPersister(), entityName, null, event.getDeletedState());
}
}
@@ -128,8 +128,15 @@
if (verCfg.getEntCfg().isVersioned(entityName)) {
VersionsSync verSync = verCfg.getSyncManager().get(event.getSession());
- verSync.addWorkUnit(new PersistentCollectionChangeWorkUnit(entityName, verCfg, newColl,
- collectionEntry.getRole(), oldColl, event.getAffectedOwnerIdOrNull()));
+ VersionsWorkUnit workUnit = new PersistentCollectionChangeWorkUnit(entityName, verCfg, newColl,
+ collectionEntry.getRole(), oldColl, event.getAffectedOwnerIdOrNull());
+ verSync.addWorkUnit(workUnit);
+
+ if (workUnit.containsWork()) {
+ // There are some changes: a revision needs also be generated for the collection owner
+ verSync.addWorkUnit(new CollectionChangeWorkUnit(event.getAffectedOwnerEntityName(), verCfg,
+ event.getAffectedOwnerIdOrNull(), event.getAffectedOwnerOrNull()));
+ }
}
}
Modified: trunk/src/main/org/jboss/envers/synchronization/work/AddWorkUnit.java
===================================================================
--- trunk/src/main/org/jboss/envers/synchronization/work/AddWorkUnit.java 2008-08-21 10:19:09 UTC (rev 116)
+++ trunk/src/main/org/jboss/envers/synchronization/work/AddWorkUnit.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -72,7 +72,7 @@
return KeepCheckResult.NONE;
}
- public KeepCheckResult check(BidirectionalCollectionChangeWorkUnit second) {
+ public KeepCheckResult check(CollectionChangeWorkUnit second) {
return KeepCheckResult.FIRST;
}
Copied: trunk/src/main/org/jboss/envers/synchronization/work/CollectionChangeWorkUnit.java (from rev 115, trunk/src/main/org/jboss/envers/synchronization/work/BidirectionalCollectionChangeWorkUnit.java)
===================================================================
--- trunk/src/main/org/jboss/envers/synchronization/work/CollectionChangeWorkUnit.java (rev 0)
+++ trunk/src/main/org/jboss/envers/synchronization/work/CollectionChangeWorkUnit.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -0,0 +1,78 @@
+/*
+ * 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.synchronization.work;
+
+import org.hibernate.Session;
+import org.jboss.envers.configuration.VersionsConfiguration;
+import org.jboss.envers.RevisionType;
+
+import java.io.Serializable;
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class CollectionChangeWorkUnit extends AbstractVersionsWorkUnit implements VersionsWorkUnit {
+ private final Object entity;
+
+ public CollectionChangeWorkUnit(String entityName, VersionsConfiguration verCfg, Serializable id, Object entity) {
+ super(entityName, verCfg, id);
+
+ this.entity = entity;
+ }
+
+ public boolean containsWork() {
+ return true;
+ }
+
+ public void perform(Session session, Number revision) {
+ Map<String, Object> data = new HashMap<String, Object>();
+ fillDataWithId(data, revision, RevisionType.MOD);
+
+ verCfg.getEntCfg().get(getEntityName()).getPropertyMapper().mapToMapFromEntity(data, entity, null);
+
+ session.save(verCfg.getVerEntCfg().getVersionsEntityName(getEntityName()), data);
+
+ setPerformed(data);
+ }
+
+ public KeepCheckResult check(AddWorkUnit second) {
+ return KeepCheckResult.SECOND;
+ }
+
+ public KeepCheckResult check(ModWorkUnit second) {
+ return KeepCheckResult.SECOND;
+ }
+
+ public KeepCheckResult check(DelWorkUnit second) {
+ return KeepCheckResult.SECOND;
+ }
+
+ public KeepCheckResult check(CollectionChangeWorkUnit second) {
+ return KeepCheckResult.FIRST;
+ }
+
+ public KeepCheckResult dispatch(KeepCheckVisitor first) {
+ return first.check(this);
+ }
+}
Modified: trunk/src/main/org/jboss/envers/synchronization/work/DelWorkUnit.java
===================================================================
--- trunk/src/main/org/jboss/envers/synchronization/work/DelWorkUnit.java 2008-08-21 10:19:09 UTC (rev 116)
+++ trunk/src/main/org/jboss/envers/synchronization/work/DelWorkUnit.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -62,7 +62,7 @@
return KeepCheckResult.FIRST;
}
- public KeepCheckResult check(BidirectionalCollectionChangeWorkUnit second) {
+ public KeepCheckResult check(CollectionChangeWorkUnit second) {
return KeepCheckResult.FIRST;
}
Modified: trunk/src/main/org/jboss/envers/synchronization/work/KeepCheckVisitor.java
===================================================================
--- trunk/src/main/org/jboss/envers/synchronization/work/KeepCheckVisitor.java 2008-08-21 10:19:09 UTC (rev 116)
+++ trunk/src/main/org/jboss/envers/synchronization/work/KeepCheckVisitor.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -29,5 +29,5 @@
KeepCheckResult check(AddWorkUnit second);
KeepCheckResult check(ModWorkUnit second);
KeepCheckResult check(DelWorkUnit second);
- KeepCheckResult check(BidirectionalCollectionChangeWorkUnit second);
+ KeepCheckResult check(CollectionChangeWorkUnit second);
}
Modified: trunk/src/main/org/jboss/envers/synchronization/work/ModWorkUnit.java
===================================================================
--- trunk/src/main/org/jboss/envers/synchronization/work/ModWorkUnit.java 2008-08-21 10:19:09 UTC (rev 116)
+++ trunk/src/main/org/jboss/envers/synchronization/work/ModWorkUnit.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -70,7 +70,7 @@
return KeepCheckResult.SECOND;
}
- public KeepCheckResult check(BidirectionalCollectionChangeWorkUnit second) {
+ public KeepCheckResult check(CollectionChangeWorkUnit second) {
return KeepCheckResult.FIRST;
}
Modified: trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java
===================================================================
--- trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java 2008-08-21 10:19:09 UTC (rev 116)
+++ trunk/src/main/org/jboss/envers/synchronization/work/PersistentCollectionChangeWorkUnit.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -56,7 +56,7 @@
return null;
}
- public KeepCheckResult check(BidirectionalCollectionChangeWorkUnit second) {
+ public KeepCheckResult check(CollectionChangeWorkUnit second) {
return null;
}
Added: trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/SetRefCollEntity.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/SetRefCollEntity.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/entities/onetomany/unidirectional/SetRefCollEntity.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -0,0 +1,85 @@
+package org.jboss.envers.test.entities.onetomany.unidirectional;
+
+import org.jboss.envers.Versioned;
+import org.jboss.envers.test.entities.StrTestEntity;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import java.util.Set;
+
+/**
+ * Set collection of references entity
+ * @author Adam Warski (adam at warski dot org)
+ */
+@Entity
+public class SetRefCollEntity {
+ @Id
+ private Integer id;
+
+ @Versioned
+ private String data;
+
+ @Versioned
+ @OneToMany
+ private Set<StrTestEntity> collection;
+
+ public SetRefCollEntity() {
+ }
+
+ public SetRefCollEntity(Integer id, String data) {
+ this.id = id;
+ this.data = data;
+ }
+
+ public SetRefCollEntity(String data) {
+ 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 Set<StrTestEntity> getCollection() {
+ return collection;
+ }
+
+ public void setCollection(Set<StrTestEntity> collection) {
+ this.collection = collection;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof SetRefCollEntity)) return false;
+
+ SetRefCollEntity that = (SetRefCollEntity) 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 "SetRefEdEntity(id = " + id + ", data = " + data + ")";
+ }
+}
\ No newline at end of file
Added: trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSet.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSet.java (rev 0)
+++ trunk/src/test/org/jboss/envers/test/integration/onetomany/unidirectional/BasicNotOwnedSet.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -0,0 +1,123 @@
+package org.jboss.envers.test.integration.onetomany.unidirectional;
+
+import org.jboss.envers.test.integration.AbstractEntityTest;
+import org.jboss.envers.test.entities.onetomany.unidirectional.SetRefCollEntity;
+import org.jboss.envers.test.entities.StrTestEntity;
+import org.hibernate.ejb.Ejb3Configuration;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import javax.persistence.EntityManager;
+import java.util.Arrays;
+import java.util.Set;
+import java.util.HashSet;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class BasicNotOwnedSet extends AbstractEntityTest {
+ private Integer str1_id;
+ private Integer str2_id;
+
+ private Integer coll1_id;
+
+ public void configure(Ejb3Configuration cfg) {
+ cfg.addAnnotatedClass(StrTestEntity.class);
+ cfg.addAnnotatedClass(SetRefCollEntity.class);
+ }
+
+ @BeforeClass(dependsOnMethods = "init")
+ public void initData() {
+ EntityManager em = getEntityManager();
+
+ StrTestEntity str1 = new StrTestEntity("str1");
+ StrTestEntity str2 = new StrTestEntity("str2");
+
+ SetRefCollEntity coll1 = new SetRefCollEntity(3, "coll1");
+
+ // Revision 1
+ em.getTransaction().begin();
+
+ em.persist(str1);
+ em.persist(str2);
+
+ coll1.setCollection(new HashSet<StrTestEntity>());
+ coll1.getCollection().add(str1);
+ em.persist(coll1);
+
+ em.getTransaction().commit();
+
+ // Revision 2
+ em.getTransaction().begin();
+
+ str2 = em.find(StrTestEntity.class, str2.getId());
+ coll1 = em.find(SetRefCollEntity.class, coll1.getId());
+
+ coll1.getCollection().add(str2);
+
+ em.getTransaction().commit();
+
+ // Revision 3
+ em.getTransaction().begin();
+
+ str1 = em.find(StrTestEntity.class, str1.getId());
+ coll1 = em.find(SetRefCollEntity.class, coll1.getId());
+
+ coll1.getCollection().remove(str1);
+
+ em.getTransaction().commit();
+
+ // Revision 4
+ em.getTransaction().begin();
+
+ coll1 = em.find(SetRefCollEntity.class, coll1.getId());
+
+ coll1.getCollection().clear();
+
+ em.getTransaction().commit();
+
+ //
+
+ str1_id = str1.getId();
+ str2_id = str2.getId();
+
+ coll1_id = coll1.getId();
+ }
+
+ @Test
+ public void testRevisionsCounts() {
+ assert Arrays.asList(1, 2, 3, 4).equals(getVersionsReader().getRevisions(SetRefCollEntity.class, coll1_id));
+
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(StrTestEntity.class, str1_id));
+ assert Arrays.asList(1).equals(getVersionsReader().getRevisions(StrTestEntity.class, str2_id));
+ }
+
+ @SuppressWarnings({"ManualArrayToCollectionCopy"})
+ private <T> Set<T> makeSet(T... objects) {
+ Set<T> ret = new HashSet<T>();
+ for (T obj : objects) { ret.add(obj); }
+ return ret;
+ }
+
+ @Test
+ public void testHistoryOfColl1() {
+ StrTestEntity str1 = getEntityManager().find(StrTestEntity.class, str1_id);
+ StrTestEntity str2 = getEntityManager().find(StrTestEntity.class, str2_id);
+
+ SetRefCollEntity rev1 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 1);
+ SetRefCollEntity rev2 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 2);
+ SetRefCollEntity rev3 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 3);
+ SetRefCollEntity rev4 = getVersionsReader().find(SetRefCollEntity.class, coll1_id, 4);
+
+ assert rev1.getCollection().equals(makeSet(str1));
+ assert rev2.getCollection().equals(makeSet(str1, str2));
+ assert rev3.getCollection().equals(makeSet(str2));
+ assert rev4.getCollection().equals(makeSet());
+
+ assert "coll1".equals(rev1.getData());
+ assert "coll1".equals(rev2.getData());
+ assert "coll1".equals(rev3.getData());
+ assert "coll1".equals(rev4.getData());
+
+ }
+}
Modified: trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java 2008-08-21 10:19:09 UTC (rev 116)
+++ trunk/src/test/org/jboss/envers/test/working/WorkingEntity1.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -15,6 +15,7 @@
public class WorkingEntity1 {
@Id
@GeneratedValue
+ @Column(name = "id1")
private Integer id1;
@Versioned
Modified: trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java
===================================================================
--- trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java 2008-08-21 10:19:09 UTC (rev 116)
+++ trunk/src/test/org/jboss/envers/test/working/WorkingEntity2.java 2008-08-21 11:18:53 UTC (rev 117)
@@ -22,7 +22,7 @@
private String str2;
@Versioned
- @OneToMany //(mappedBy="we2")
+ @OneToMany //(mappedBy="we2")
//@ManyToMany
//@Transient
private Set<WorkingEntity1> we1s;
16 years, 6 months