Author: adamw
Date: 2008-08-18 03:44:39 -0400 (Mon, 18 Aug 2008)
New Revision: 114
Added:
trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java
trunk/src/main/org/jboss/envers/configuration/metadata/EntityMappingData.java
trunk/src/main/org/jboss/envers/entities/RelationType.java
Removed:
trunk/src/main/org/jboss/envers/reader/lazy/
Modified:
trunk/src/main/org/jboss/envers/configuration/VersionsConfiguration.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/EntityInstantiator.java
trunk/src/main/org/jboss/envers/entities/RelationDescription.java
trunk/src/main/org/jboss/envers/event/VersionsEventListener.java
trunk/src/main/org/jboss/envers/query/criteria/CriteriaTools.java
trunk/src/main/org/jboss/envers/query/criteria/IdentifierEqVersionsExpression.java
trunk/src/main/org/jboss/envers/query/criteria/NotNullVersionsExpression.java
trunk/src/main/org/jboss/envers/query/criteria/NullVersionsExpression.java
trunk/src/main/org/jboss/envers/query/criteria/RelatedVersionsExpression.java
trunk/src/main/org/jboss/envers/query/criteria/SimpleVersionsExpression.java
trunk/src/main/org/jboss/envers/query/impl/EntitiesAtRevisionQuery.java
trunk/src/main/org/jboss/envers/synchronization/work/AbstractVersionsWorkUnit.java
trunk/src/main/org/jboss/envers/synchronization/work/AddWorkUnit.java
trunk/src/main/org/jboss/envers/synchronization/work/CollectionChangeWorkUnit.java
trunk/src/main/org/jboss/envers/synchronization/work/ModWorkUnit.java
trunk/src/main/org/jboss/envers/tools/reflection/YReflectionManager.java
Log:
ENVERS-37: restructing metdata configuration
Added: trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java
(rev 0)
+++ trunk/src/main/org/jboss/envers/configuration/EntitiesConfigurator.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -0,0 +1,116 @@
+package org.jboss.envers.configuration;
+
+import org.jboss.envers.entities.EntitiesConfigurations;
+import org.jboss.envers.configuration.metadata.VersionsMetadataGenerator;
+import org.jboss.envers.configuration.metadata.PersistentClassVersioningData;
+import org.jboss.envers.configuration.metadata.AnnotationsMetadataReader;
+import org.jboss.envers.configuration.metadata.EntityMappingData;
+import org.jboss.envers.tools.graph.GraphTopologicalSort;
+import org.jboss.envers.tools.reflection.YReflectionManager;
+import org.dom4j.io.DOMWriter;
+import org.dom4j.io.XMLWriter;
+import org.dom4j.io.OutputFormat;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.MappingException;
+import org.hibernate.cfg.Configuration;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.HashMap;
+import java.io.ByteArrayOutputStream;
+import java.io.Writer;
+import java.io.PrintWriter;
+import java.io.IOException;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class EntitiesConfigurator {
+ public EntitiesConfigurations configure(Configuration cfg, YReflectionManager
reflectionManager,
+ GlobalConfiguration globalCfg,
VersionsEntitiesConfiguration verEntCfg,
+ Document revisionInfoXmlMapping) {
+ VersionsMetadataGenerator versionsMetaGen = new
VersionsMetadataGenerator(globalCfg, verEntCfg);
+ DOMWriter writer = new DOMWriter();
+
+ // Sorting the persistent class topologically - superclass always before
subclass
+ Iterator<PersistentClass> classes = GraphTopologicalSort.sort(new
PersistentClassGraphDefiner(cfg)).iterator();
+
+ Map<PersistentClass, PersistentClassVersioningData> pcDatas =
+ new HashMap<PersistentClass, PersistentClassVersioningData>();
+ Map<PersistentClass, EntityMappingData> xmlMappings = new
HashMap<PersistentClass, EntityMappingData>();
+
+ // First pass
+ AnnotationsMetadataReader annotationsMetadataReader = new
AnnotationsMetadataReader();
+ while (classes.hasNext()) {
+ PersistentClass pc = classes.next();
+ // Collecting information from annotations on the persistent class pc
+ PersistentClassVersioningData versioningData =
+ annotationsMetadataReader.getVersioningData(pc, reflectionManager);
+
+ if (versioningData.isVersioned()) {
+ pcDatas.put(pc, versioningData);
+
+ if (versioningData.versionsTableName != null) {
+ verEntCfg.addCustomVersionsTableName(pc.getEntityName(),
versioningData.versionsTableName);
+ }
+
+ EntityMappingData mappingData = new EntityMappingData();
+ versionsMetaGen.generateFirstPass(pc, versioningData, mappingData);
+ xmlMappings.put(pc, mappingData);
+ }
+ }
+
+ // Second pass
+ for (PersistentClass pc : pcDatas.keySet()) {
+ EntityMappingData mappingData = xmlMappings.get(pc);
+
+ versionsMetaGen.generateSecondPass(pc, pcDatas.get(pc), mappingData);
+
+ //TODO
+ //writeDocument(document);
+
+ try {
+ cfg.addDocument(writer.write(mappingData.getMainMapping()));
+
+ for (Document additionalMapping : mappingData.getAdditionalMappings()) {
+ cfg.addDocument(writer.write(additionalMapping));
+ }
+ } catch (DocumentException e) {
+ throw new MappingException(e);
+ }
+ }
+
+ // Only if there are any versioned classes
+ if (pcDatas.size() > 0) {
+ try {
+ if (revisionInfoXmlMapping != null) {
+ cfg.addDocument(writer.write(revisionInfoXmlMapping));
+ }
+ } catch (DocumentException e) {
+ throw new MappingException(e);
+ }
+ }
+
+ return new EntitiesConfigurations(versionsMetaGen.getEntitiesConfigurations());
+ }
+
+ // todo
+ private void writeDocument(Document e) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ Writer w = new PrintWriter(baos);
+
+ try {
+ XMLWriter xw = new XMLWriter(w, new OutputFormat(" ", true));
+ xw.write(e);
+ w.flush();
+ } catch (IOException e1) {
+ e1.printStackTrace();
+ }
+
+ System.out.println("-----------");
+ System.out.println(baos.toString());
+ System.out.println("-----------");
+ }
+}
Modified: trunk/src/main/org/jboss/envers/configuration/VersionsConfiguration.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/VersionsConfiguration.java 2008-08-17
14:24:36 UTC (rev 113)
+++ trunk/src/main/org/jboss/envers/configuration/VersionsConfiguration.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -22,27 +22,12 @@
package org.jboss.envers.configuration;
import org.hibernate.cfg.Configuration;
-import org.hibernate.mapping.PersistentClass;
-import org.hibernate.MappingException;
-import org.jboss.envers.configuration.metadata.VersionsMetadataGenerator;
-import org.jboss.envers.configuration.metadata.AnnotationsMetadataReader;
-import org.jboss.envers.configuration.metadata.PersistentClassVersioningData;
import org.jboss.envers.entities.EntitiesConfigurations;
import org.jboss.envers.synchronization.VersionsSyncManager;
-import org.jboss.envers.tools.graph.GraphTopologicalSort;
import org.jboss.envers.tools.reflection.YReflectionManager;
import org.jboss.envers.revisioninfo.RevisionInfoQueryCreator;
-import org.dom4j.Document;
-import org.dom4j.DocumentException;
-import org.dom4j.io.XMLWriter;
-import org.dom4j.io.OutputFormat;
-import org.dom4j.io.DOMWriter;
import java.util.*;
-import java.io.ByteArrayOutputStream;
-import java.io.Writer;
-import java.io.PrintWriter;
-import java.io.IOException;
/**
* @author Adam Warski (adam at warski dot org)
@@ -74,85 +59,19 @@
return revisionInfoQueryCreator;
}
- private YReflectionManager getReflectionManager(Configuration cfg) {
- try {
- return new YReflectionManager(cfg);
- } catch (Exception e) {
- throw new MappingException(e);
- }
- }
-
@SuppressWarnings({"unchecked"})
public VersionsConfiguration(Configuration cfg) {
Properties properties = cfg.getProperties();
- YReflectionManager reflectionManager = getReflectionManager(cfg);
+ YReflectionManager reflectionManager = YReflectionManager.get(cfg);
RevisionInfoConfiguration revInfoCfg = new RevisionInfoConfiguration();
RevisionInfoConfigurationResult revInfoCfgResult = revInfoCfg.configure(cfg,
reflectionManager);
verEntCfg = new VersionsEntitiesConfiguration(properties,
revInfoCfgResult.getRevisionPropType());
globalCfg = new GlobalConfiguration(properties);
versionsSyncManager = new
VersionsSyncManager(revInfoCfgResult.getRevisionNumberGenerator());
revisionInfoQueryCreator = revInfoCfgResult.getRevisionInfoQueryCreator();
-
- VersionsMetadataGenerator versionsMetaGen = new VersionsMetadataGenerator(this);
- DOMWriter writer = new DOMWriter();
-
- // Sorting the persistent class topologically - superclass always before
subclass
- Iterator<PersistentClass> classes = GraphTopologicalSort.sort(new
PersistentClassGraphDefiner(cfg)).iterator();
-
- Map<PersistentClass, PersistentClassVersioningData> pcDatas =
- new HashMap<PersistentClass, PersistentClassVersioningData>();
- Map<PersistentClass, Document> documents = new HashMap<PersistentClass,
Document>();
-
- // First pass
- AnnotationsMetadataReader annotationsMetadataReader = new
AnnotationsMetadataReader();
- while (classes.hasNext()) {
- PersistentClass pc = classes.next();
- // Collecting information from annotations on the persistent class pc
- PersistentClassVersioningData versioningData =
- annotationsMetadataReader.getVersioningData(pc, reflectionManager);
-
- if (versioningData.isVersioned()) {
- pcDatas.put(pc, versioningData);
-
- if (versioningData.versionsTableName != null) {
- verEntCfg.addCustomVersionsTableName(pc.getEntityName(),
versioningData.versionsTableName);
- }
-
- Document genData = versionsMetaGen.generateFirstPass(pc,
versioningData);
- documents.put(pc, genData);
- }
- }
-
- // Second pass
- for (PersistentClass pc : pcDatas.keySet()) {
- Document document = documents.get(pc);
-
- versionsMetaGen.generateSecondPass(pc, pcDatas.get(pc), document);
-
- //TODO
- //writeDocument(document);
-
- try {
- cfg.addDocument(writer.write(document));
- } catch (DocumentException e) {
- throw new MappingException(e);
- }
- }
-
- // Getting the entities configurations
- entCfg = new
EntitiesConfigurations(versionsMetaGen.getEntitiesConfigurations());
-
- // Only if there are any versioned classes
- if (pcDatas.size() > 0) {
- try {
- if (revInfoCfgResult.getRevisionInfoXmlMapping() != null) {
-
cfg.addDocument(writer.write(revInfoCfgResult.getRevisionInfoXmlMapping()));
- }
- } catch (DocumentException e) {
- throw new MappingException(e);
- }
- }
+ entCfg = new EntitiesConfigurator().configure(cfg, reflectionManager, globalCfg,
verEntCfg,
+ revInfoCfgResult.getRevisionInfoXmlMapping());
}
//
@@ -172,22 +91,4 @@
return verCfg;
}
-
- // todo
- private void writeDocument(Document e) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- Writer w = new PrintWriter(baos);
-
- try {
- XMLWriter xw = new XMLWriter(w, new OutputFormat(" ", true));
- xw.write(e);
- w.flush();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
-
- System.out.println("-----------");
- System.out.println(baos.toString());
- System.out.println("-----------");
- }
}
Added: trunk/src/main/org/jboss/envers/configuration/metadata/EntityMappingData.java
===================================================================
--- trunk/src/main/org/jboss/envers/configuration/metadata/EntityMappingData.java
(rev 0)
+++
trunk/src/main/org/jboss/envers/configuration/metadata/EntityMappingData.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -0,0 +1,35 @@
+package org.jboss.envers.configuration.metadata;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+ */
+public class EntityMappingData {
+ private Document mainMapping;
+ private List<Document> additionalMappings;
+
+ public EntityMappingData() {
+ mainMapping = DocumentHelper.createDocument();
+ additionalMappings = new ArrayList<Document>();
+ }
+
+ public Document getMainMapping() {
+ return mainMapping;
+ }
+
+ public List<Document> getAdditionalMappings() {
+ return additionalMappings;
+ }
+
+ public Document newAdditionalMapping() {
+ Document additionalMapping = DocumentHelper.createDocument();
+ additionalMappings.add(additionalMapping);
+
+ return additionalMapping;
+ }
+}
Modified:
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java
===================================================================
---
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-17
14:24:36 UTC (rev 113)
+++
trunk/src/main/org/jboss/envers/configuration/metadata/VersionsMetadataGenerator.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -26,13 +26,12 @@
import org.hibernate.util.StringHelper;
import org.hibernate.MappingException;
import org.dom4j.Element;
-import org.dom4j.Document;
-import org.dom4j.DocumentHelper;
import org.dom4j.Attribute;
import org.dom4j.tree.DefaultElement;
import org.jboss.envers.entities.EntityConfiguration;
import org.jboss.envers.entities.IdMappingData;
-import org.jboss.envers.configuration.VersionsConfiguration;
+import org.jboss.envers.configuration.GlobalConfiguration;
+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;
@@ -44,8 +43,6 @@
import org.jboss.envers.ModificationStore;
import org.jboss.envers.tools.log.YLog;
import org.jboss.envers.tools.log.YLogManager;
-import org.jboss.envers.configuration.metadata.PersistentClassVersioningData;
-import org.jboss.envers.configuration.metadata.PropertyStoreInfo;
import org.jboss.envers.exception.VersionsException;
import java.util.Iterator;
@@ -59,7 +56,9 @@
public class VersionsMetadataGenerator {
private final static Map<String, ModificationStore> EMPTY_STORE =
Collections.emptyMap();
- private VersionsConfiguration verCfg;
+ private final GlobalConfiguration globalCfg;
+ private final VersionsEntitiesConfiguration verEntCfg;
+
private Map<String, EntityConfiguration> entitiesConfigurations;
// Map entity name -> (join descriptor -> element describing the
"versioned" join)
@@ -67,8 +66,9 @@
private YLog log =
YLogManager.getLogManager().getLog(VersionsMetadataGenerator.class);
- public VersionsMetadataGenerator(VersionsConfiguration verCfg) {
- this.verCfg = verCfg;
+ public VersionsMetadataGenerator(GlobalConfiguration globalCfg,
VersionsEntitiesConfiguration verEntCfg) {
+ this.globalCfg = globalCfg;
+ this.verEntCfg = verEntCfg;
entitiesConfigurations = new HashMap<String, EntityConfiguration>();
entitiesJoins = new HashMap<String, Map<Join, Element>>();
@@ -425,7 +425,7 @@
} else {
String message = "Type not supported for versioning: "
+ propertyType.getClass().getName() +
", on entity " + entityName + ", property
'" + property.getName() + "'.";
- if (verCfg.getGlobalCfg().isWarnOnUnsupportedTypes()) {
+ if (globalCfg.isWarnOnUnsupportedTypes()) {
log.warn(message);
} else {
throw new MappingException(message);
@@ -451,7 +451,7 @@
String originalTableName = join.getTable().getName();
String versionedTableName =
versioningData.secondaryTableDictionary.get(originalTableName);
if (versionedTableName == null) {
- versionedTableName =
verCfg.getVerEntCfg().getVersionsEntityName(originalTableName);
+ versionedTableName = verEntCfg.getVersionsEntityName(originalTableName);
}
String schema = versioningData.schema;
@@ -469,7 +469,7 @@
Element joinKey = joinElement.addElement("key");
addColumns(joinKey, join.getKey().getColumnIterator());
- MetadataTools.addColumn(joinKey, verCfg.getVerEntCfg().getRevisionPropName(),
null);
+ MetadataTools.addColumn(joinKey, verEntCfg.getRevisionPropName(), null);
}
}
@@ -521,12 +521,12 @@
addSimpleProperty(orig_id_mapping, id_prop, null, ModificationStore.FULL,
true);
}
- orig_id_mapping.addAttribute("name",
verCfg.getVerEntCfg().getOriginalIdPropName());
+ orig_id_mapping.addAttribute("name",
verEntCfg.getOriginalIdPropName());
// Adding the "revision number" property
- Element rev_mapping = MetadataTools.addProperty(orig_id_mapping,
verCfg.getVerEntCfg().getRevisionPropName(),
- verCfg.getVerEntCfg().getRevisionPropType(), true);
- MetadataTools.addColumn(rev_mapping, verCfg.getVerEntCfg().getRevisionPropName(),
null);
+ Element rev_mapping = MetadataTools.addProperty(orig_id_mapping,
verEntCfg.getRevisionPropName(),
+ verEntCfg.getRevisionPropType(), true);
+ MetadataTools.addColumn(rev_mapping, verEntCfg.getRevisionPropName(), null);
return new IdMappingData(mapper, orig_id_mapping, rel_id_mapping);
}
@@ -543,9 +543,8 @@
}
@SuppressWarnings({"unchecked"})
- public Document generateFirstPass(PersistentClass pc, PersistentClassVersioningData
versioningData) {
- Document document = DocumentHelper.createDocument();
-
+ public void generateFirstPass(PersistentClass pc, PersistentClassVersioningData
versioningData,
+ EntityMappingData mappingData) {
String schema = versioningData.schema;
if (StringTools.isEmpty(schema)) {
schema = pc.getTable().getSchema();
@@ -557,8 +556,8 @@
}
String entityName = pc.getEntityName();
- String versionsEntityName =
verCfg.getVerEntCfg().getVersionsEntityName(entityName);
- String versionsTableName = verCfg.getVerEntCfg().getVersionsTableName(entityName,
pc.getTable().getName());
+ String versionsEntityName = verEntCfg.getVersionsEntityName(entityName);
+ String versionsTableName = verEntCfg.getVersionsTableName(entityName,
pc.getTable().getName());
// Generating a mapping for the id
IdMappingData idMapper = addId(pc);
@@ -571,7 +570,7 @@
switch (inheritanceType) {
case NONE:
- class_mapping = MetadataTools.createEntity(document, versionsEntityName,
versionsTableName,
+ class_mapping = MetadataTools.createEntity(mappingData.getMainMapping(),
versionsEntityName, versionsTableName,
schema, catalog, pc.getDiscriminatorValue());
propertyMapper = new MultiPropertyMapper();
@@ -589,15 +588,15 @@
class_mapping.add((Element) idMapper.getXmlMapping().clone());
// Adding the "revision type" property
- Element revTypeProperty = MetadataTools.addProperty(class_mapping,
verCfg.getVerEntCfg().getRevisionTypePropName(),
- verCfg.getVerEntCfg().getRevisionTypePropType(), false);
+ Element revTypeProperty = MetadataTools.addProperty(class_mapping,
verEntCfg.getRevisionTypePropName(),
+ verEntCfg.getRevisionTypePropType(), false);
revTypeProperty.addAttribute("type",
"org.jboss.envers.entities.RevisionTypeType");
break;
case SINGLE:
- String extendsEntityName =
verCfg.getVerEntCfg().getVersionsEntityName(pc.getSuperclass().getEntityName());
- class_mapping = MetadataTools.createSubclassEntity(document,
versionsEntityName, versionsTableName,
- schema, catalog, extendsEntityName, pc.getDiscriminatorValue());
+ String extendsEntityName =
verEntCfg.getVersionsEntityName(pc.getSuperclass().getEntityName());
+ class_mapping =
MetadataTools.createSubclassEntity(mappingData.getMainMapping(), versionsEntityName,
+ versionsTableName, schema, catalog, extendsEntityName,
pc.getDiscriminatorValue());
addPersisterHack(class_mapping);
@@ -629,21 +628,19 @@
EntityConfiguration entityCfg = new EntityConfiguration(entityName,
versionsEntityName, idMapper,
propertyMapper, parentEntityName);
entitiesConfigurations.put(pc.getEntityName(), entityCfg);
-
- return document;
}
@SuppressWarnings({"unchecked"})
public void generateSecondPass(PersistentClass pc, PersistentClassVersioningData
versioningData,
- Document document) {
+ EntityMappingData mappingData) {
String entityName = pc.getEntityName();
CompositeMapperBuilder propertyMapper =
entitiesConfigurations.get(entityName).getPropertyMapper();
// Mapping unjoined properties
- Element parent = document.getRootElement().element("class");
+ Element parent =
mappingData.getMainMapping().getRootElement().element("class");
if (parent == null) {
- parent = document.getRootElement().element("subclass");
+ parent =
mappingData.getMainMapping().getRootElement().element("subclass");
}
addProperties(parent, (Iterator<Property>)
pc.getUnjoinedPropertyIterator(),
Modified: trunk/src/main/org/jboss/envers/entities/EntitiesConfigurations.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/EntitiesConfigurations.java 2008-08-17
14:24:36 UTC (rev 113)
+++ trunk/src/main/org/jboss/envers/entities/EntitiesConfigurations.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -21,9 +21,6 @@
*/
package org.jboss.envers.entities;
-import org.jboss.envers.entities.mapper.id.IdMapper;
-import org.jboss.envers.entities.mapper.ExtendedPropertyMapper;
-
import java.util.Map;
import java.util.HashMap;
@@ -61,12 +58,12 @@
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.relationType == RelationDescription.RelationType.TO_ONE) {
- for (RelationDescription other :
entitiesConfigurations.get(relDesc.toEntityName).getRelationsIterator()) {
- if (relDesc.fromPropertyName.equals(other.mappedByPropertyName)
&&
- (entityName.equals(other.toEntityName))) {
- relDesc.bidirectional = true;
- other.bidirectional= true;
+ if (relDesc.getRelationType() == RelationType.TO_ONE) {
+ for (RelationDescription other :
entitiesConfigurations.get(relDesc.getToEntityName()).getRelationsIterator()) {
+ if
(relDesc.getFromPropertyName().equals(other.getMappedByPropertyName()) &&
+ (entityName.equals(other.getToEntityName()))) {
+ relDesc.setBidirectional(true);
+ other.setBidirectional(true);
}
}
}
@@ -86,14 +83,6 @@
return get(entityName) != null;
}
- public IdMapper getIdMapper(String entityName) {
- return get(entityName).getIdMappingData().getIdMapper();
- }
-
- public ExtendedPropertyMapper getPropertyMapper(String entityName) {
- return get(entityName).getPropertyMapper();
- }
-
public RelationDescription getRelationDescription(String entityName, String
propertyName) {
EntityConfiguration entCfg = entitiesConfigurations.get(entityName);
RelationDescription relDesc = entCfg.getRelationDescription(propertyName);
Modified: trunk/src/main/org/jboss/envers/entities/EntityConfiguration.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/EntityConfiguration.java 2008-08-17 14:24:36
UTC (rev 113)
+++ trunk/src/main/org/jboss/envers/entities/EntityConfiguration.java 2008-08-18 07:44:39
UTC (rev 114)
@@ -21,7 +21,6 @@
*/
package org.jboss.envers.entities;
-import org.jboss.envers.entities.RelationDescription;
import org.jboss.envers.entities.mapper.ExtendedPropertyMapper;
import org.jboss.envers.entities.mapper.id.IdMapper;
@@ -52,30 +51,26 @@
}
public void addToOneRelation(String fromPropertyName, String toEntityName, IdMapper
idMapper) {
- relations.put(fromPropertyName, new RelationDescription(fromPropertyName,
RelationDescription.RelationType.TO_ONE,
+ relations.put(fromPropertyName, new RelationDescription(fromPropertyName,
RelationType.TO_ONE,
toEntityName, null, idMapper));
}
public void addOneToOneRelation(String fromPropertyName, String mappedByPropertyName,
String toEntityName,
IdMapper idMapper) {
- relations.put(fromPropertyName, new RelationDescription(fromPropertyName,
RelationDescription.RelationType.ONE_TO_ONE,
+ relations.put(fromPropertyName, new RelationDescription(fromPropertyName,
RelationType.ONE_TO_ONE,
toEntityName, mappedByPropertyName, idMapper));
}
public void addOneToManyRelation(String fromPropertyName, String
mappedByPropertyName, String toEntityName,
IdMapper idMapper) {
- relations.put(fromPropertyName, new RelationDescription(fromPropertyName,
RelationDescription.RelationType.ONE_TO_MANY,
+ relations.put(fromPropertyName, new RelationDescription(fromPropertyName,
RelationType.ONE_TO_MANY,
toEntityName, mappedByPropertyName, idMapper));
}
public boolean isRelation(String propertyName) {
return relations.get(propertyName) != null;
}
-
- public Iterable<RelationDescription> getRelationsIterator() {
- return relations.values();
- }
-
+
public RelationDescription getRelationDescription(String propertyName) {
return relations.get(propertyName);
}
@@ -84,19 +79,29 @@
return idMappingData;
}
+ public IdMapper getIdMapper() {
+ return idMappingData.getIdMapper();
+ }
+
public ExtendedPropertyMapper getPropertyMapper() {
return propertyMapper;
}
- public String getParentEntityName() {
- return parentEntityName;
- }
-
public String getEntityName() {
return entityName;
}
- public String getVersionsEntityName() {
+ // For use by EntitiesConfigurations
+
+ String getParentEntityName() {
+ return parentEntityName;
+ }
+
+ String getVersionsEntityName() {
return versionsEntityName;
}
+
+ Iterable<RelationDescription> getRelationsIterator() {
+ return relations.values();
+ }
}
Modified: trunk/src/main/org/jboss/envers/entities/EntityInstantiator.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/EntityInstantiator.java 2008-08-17 14:24:36
UTC (rev 113)
+++ trunk/src/main/org/jboss/envers/entities/EntityInstantiator.java 2008-08-18 07:44:39
UTC (rev 114)
@@ -70,12 +70,13 @@
throw new VersionsException(e);
}
- IdMapper idMapper = verCfg.getEntCfg().getIdMapper(entityName);
+ IdMapper idMapper = verCfg.getEntCfg().get(entityName).getIdMapper();
Map originalId = (Map)
versionsEntity.get(verCfg.getVerEntCfg().getOriginalIdPropName());
Object primaryKey = idMapper.mapToIdFromMap(originalId);
- verCfg.getEntCfg().getPropertyMapper(entityName).mapToEntityFromMap(ret,
versionsEntity, primaryKey, versionsReader, revision);
+ verCfg.getEntCfg().get(entityName).getPropertyMapper().mapToEntityFromMap(ret,
versionsEntity, primaryKey,
+ versionsReader, revision);
idMapper.mapToEntityFromMap(ret, originalId);
return ret;
Modified: trunk/src/main/org/jboss/envers/entities/RelationDescription.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/RelationDescription.java 2008-08-17 14:24:36
UTC (rev 113)
+++ trunk/src/main/org/jboss/envers/entities/RelationDescription.java 2008-08-18 07:44:39
UTC (rev 114)
@@ -27,12 +27,12 @@
* @author Adam Warski (adam at warski dot org)
*/
public class RelationDescription {
- public final String fromPropertyName;
- public final RelationType relationType;
- public final String toEntityName;
- public final String mappedByPropertyName;
- public final IdMapper idMapper;
- public boolean bidirectional;
+ private final String fromPropertyName;
+ private final RelationType relationType;
+ private final String toEntityName;
+ private final String mappedByPropertyName;
+ private final IdMapper idMapper;
+ private boolean bidirectional;
public RelationDescription(String fromPropertyName, RelationType relationType, String
toEntityName,
String mappedByPropertyName, IdMapper idMapper) {
@@ -45,9 +45,31 @@
this.bidirectional = false;
}
- public static enum RelationType {
- TO_ONE,
- ONE_TO_ONE,
- ONE_TO_MANY
+ public String getFromPropertyName() {
+ return fromPropertyName;
}
+
+ public RelationType getRelationType() {
+ return relationType;
+ }
+
+ public String getToEntityName() {
+ return toEntityName;
+ }
+
+ public String getMappedByPropertyName() {
+ return mappedByPropertyName;
+ }
+
+ public IdMapper getIdMapper() {
+ return idMapper;
+ }
+
+ public boolean isBidirectional() {
+ return bidirectional;
+ }
+
+ void setBidirectional(boolean bidirectional) {
+ this.bidirectional = bidirectional;
+ }
}
Added: trunk/src/main/org/jboss/envers/entities/RelationType.java
===================================================================
--- trunk/src/main/org/jboss/envers/entities/RelationType.java
(rev 0)
+++ trunk/src/main/org/jboss/envers/entities/RelationType.java 2008-08-18 07:44:39 UTC
(rev 114)
@@ -0,0 +1,10 @@
+package org.jboss.envers.entities;
+
+/**
+ * @author Adam Warski (adam at warski dot org)
+*/
+public enum RelationType {
+ TO_ONE,
+ ONE_TO_ONE,
+ ONE_TO_MANY
+}
Modified: trunk/src/main/org/jboss/envers/event/VersionsEventListener.java
===================================================================
--- trunk/src/main/org/jboss/envers/event/VersionsEventListener.java 2008-08-17 14:24:36
UTC (rev 113)
+++ trunk/src/main/org/jboss/envers/event/VersionsEventListener.java 2008-08-18 07:44:39
UTC (rev 114)
@@ -26,6 +26,7 @@
import org.hibernate.persister.entity.EntityPersister;
import org.jboss.envers.configuration.VersionsConfiguration;
import org.jboss.envers.entities.RelationDescription;
+import org.jboss.envers.entities.RelationType;
import org.jboss.envers.synchronization.VersionsSync;
import org.jboss.envers.synchronization.work.AddWorkUnit;
import org.jboss.envers.synchronization.work.ModWorkUnit;
@@ -58,24 +59,24 @@
for (int i=0; i<propertyNames.length; i++) {
String propertyName = propertyNames[i];
RelationDescription relDesc =
verCfg.getEntCfg().getRelationDescription(entityName, propertyName);
- if (relDesc != null && relDesc.bidirectional &&
relDesc.relationType == RelationDescription.RelationType.TO_ONE) {
+ if (relDesc != null && relDesc.isBidirectional() &&
relDesc.getRelationType() == RelationType.TO_ONE) {
// Checking for changes
Object oldValue = oldState == null ? null : oldState[i];
Object newValue = newState == null ? null : newState[i];
if (!Tools.objectsEqual(oldValue, newValue)) {
- IdMapper idMapper =
verCfg.getEntCfg().getIdMapper(relDesc.toEntityName);
+ IdMapper idMapper =
verCfg.getEntCfg().get(relDesc.getToEntityName()).getIdMapper();
// We have to generate changes both in the old collection (size
decreses) and new collection
// (size increases).
if (newValue != null) {
Serializable id = (Serializable)
idMapper.mapToIdFromEntity(newValue);
- verSync.addWorkUnit(new
CollectionChangeWorkUnit(relDesc.toEntityName, verCfg, id, newValue));
+ verSync.addWorkUnit(new
CollectionChangeWorkUnit(relDesc.getToEntityName(), verCfg, id, newValue));
}
if (oldValue != null) {
Serializable id = (Serializable)
idMapper.mapToIdFromEntity(oldValue);
- verSync.addWorkUnit(new
CollectionChangeWorkUnit(relDesc.toEntityName, verCfg, id, oldValue));
+ verSync.addWorkUnit(new
CollectionChangeWorkUnit(relDesc.getToEntityName(), verCfg, id, oldValue));
}
}
}
Modified: trunk/src/main/org/jboss/envers/query/criteria/CriteriaTools.java
===================================================================
--- trunk/src/main/org/jboss/envers/query/criteria/CriteriaTools.java 2008-08-17 14:24:36
UTC (rev 113)
+++ trunk/src/main/org/jboss/envers/query/criteria/CriteriaTools.java 2008-08-18 07:44:39
UTC (rev 114)
@@ -23,6 +23,7 @@
import org.jboss.envers.exception.VersionsException;
import org.jboss.envers.entities.RelationDescription;
+import org.jboss.envers.entities.RelationType;
import org.jboss.envers.configuration.VersionsConfiguration;
/**
@@ -47,7 +48,7 @@
return null;
}
- if (relationDesc.relationType == RelationDescription.RelationType.TO_ONE) {
+ if (relationDesc.getRelationType() == RelationType.TO_ONE) {
return relationDesc;
}
Modified:
trunk/src/main/org/jboss/envers/query/criteria/IdentifierEqVersionsExpression.java
===================================================================
---
trunk/src/main/org/jboss/envers/query/criteria/IdentifierEqVersionsExpression.java 2008-08-17
14:24:36 UTC (rev 113)
+++
trunk/src/main/org/jboss/envers/query/criteria/IdentifierEqVersionsExpression.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -37,7 +37,7 @@
public Criterion toVersionsCriterion(VersionsConfiguration verCfg, String
entityName)
throws VersionsException {
- return verCfg.getEntCfg().getIdMapper(entityName)
+ return verCfg.getEntCfg().get(entityName).getIdMapper()
.getIdEqualsCriterion(id, verCfg.getVerEntCfg().getOriginalIdPropName(),
true);
}
}
Modified: trunk/src/main/org/jboss/envers/query/criteria/NotNullVersionsExpression.java
===================================================================
---
trunk/src/main/org/jboss/envers/query/criteria/NotNullVersionsExpression.java 2008-08-17
14:24:36 UTC (rev 113)
+++
trunk/src/main/org/jboss/envers/query/criteria/NotNullVersionsExpression.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -44,7 +44,7 @@
if (relatedEntity == null) {
return Restrictions.isNotNull(propertyName);
} else {
- return relatedEntity.idMapper.getIdEqualsCriterion(null, propertyName,
false);
+ return relatedEntity.getIdMapper().getIdEqualsCriterion(null, propertyName,
false);
}
}
}
Modified: trunk/src/main/org/jboss/envers/query/criteria/NullVersionsExpression.java
===================================================================
--- trunk/src/main/org/jboss/envers/query/criteria/NullVersionsExpression.java 2008-08-17
14:24:36 UTC (rev 113)
+++ trunk/src/main/org/jboss/envers/query/criteria/NullVersionsExpression.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -44,7 +44,7 @@
if (relatedEntity == null) {
return Restrictions.isNull(propertyName);
} else {
- return relatedEntity.idMapper.getIdEqualsCriterion(null, propertyName,
true);
+ return relatedEntity.getIdMapper().getIdEqualsCriterion(null, propertyName,
true);
}
}
}
Modified: trunk/src/main/org/jboss/envers/query/criteria/RelatedVersionsExpression.java
===================================================================
---
trunk/src/main/org/jboss/envers/query/criteria/RelatedVersionsExpression.java 2008-08-17
14:24:36 UTC (rev 113)
+++
trunk/src/main/org/jboss/envers/query/criteria/RelatedVersionsExpression.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -48,7 +48,7 @@
throw new VersionsException("This criterion can only be used on a
property that is " +
"a relation to another property.");
} else {
- return relatedEntity.idMapper.getIdEqualsCriterion(id, propertyName,
equals);
+ return relatedEntity.getIdMapper().getIdEqualsCriterion(id, propertyName,
equals);
}
}
}
\ No newline at end of file
Modified: trunk/src/main/org/jboss/envers/query/criteria/SimpleVersionsExpression.java
===================================================================
---
trunk/src/main/org/jboss/envers/query/criteria/SimpleVersionsExpression.java 2008-08-17
14:24:36 UTC (rev 113)
+++
trunk/src/main/org/jboss/envers/query/criteria/SimpleVersionsExpression.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -60,9 +60,9 @@
") isn't supported and can't be used in
queries.");
}
- Object id = relatedEntity.idMapper.mapToIdFromEntity(value);
+ Object id = relatedEntity.getIdMapper().mapToIdFromEntity(value);
- return relatedEntity.idMapper.getIdEqualsCriterion(id, propertyName,
"=".equals(op));
+ return relatedEntity.getIdMapper().getIdEqualsCriterion(id, propertyName,
"=".equals(op));
}
}
}
Modified: trunk/src/main/org/jboss/envers/query/impl/EntitiesAtRevisionQuery.java
===================================================================
--- trunk/src/main/org/jboss/envers/query/impl/EntitiesAtRevisionQuery.java 2008-08-17
14:24:36 UTC (rev 113)
+++ trunk/src/main/org/jboss/envers/query/impl/EntitiesAtRevisionQuery.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -68,7 +68,7 @@
// e2.revision <= :revision
maxRevCriteria.add(Restrictions.le(revisionPropertyPath, revision));
// e2.id = e.id
-
maxRevCriteria.add(verCfg.getEntCfg().getIdMapper(entityName).getIdsEqualCriterion(
+
maxRevCriteria.add(verCfg.getEntCfg().get(entityName).getIdMapper().getIdsEqualCriterion(
"e." + originalIdPropertyName, "e2." +
originalIdPropertyName));
// e.revision_type != DEL AND
Modified:
trunk/src/main/org/jboss/envers/synchronization/work/AbstractVersionsWorkUnit.java
===================================================================
---
trunk/src/main/org/jboss/envers/synchronization/work/AbstractVersionsWorkUnit.java 2008-08-17
14:24:36 UTC (rev 113)
+++
trunk/src/main/org/jboss/envers/synchronization/work/AbstractVersionsWorkUnit.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -53,7 +53,7 @@
Map<String, Object> originalId = new HashMap<String, Object>();
originalId.put(entitiesCfg.getRevisionPropName(), revision);
- verCfg.getEntCfg().getIdMapper(getEntityName()).mapToMapFromId(originalId, id);
+ verCfg.getEntCfg().get(getEntityName()).getIdMapper().mapToMapFromId(originalId,
id);
data.put(entitiesCfg.getRevisionTypePropName(), revisionType);
data.put(entitiesCfg.getOriginalIdPropName(), originalId);
}
Modified: trunk/src/main/org/jboss/envers/synchronization/work/AddWorkUnit.java
===================================================================
--- trunk/src/main/org/jboss/envers/synchronization/work/AddWorkUnit.java 2008-08-17
14:24:36 UTC (rev 113)
+++ trunk/src/main/org/jboss/envers/synchronization/work/AddWorkUnit.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -53,7 +53,7 @@
Map<String, Object> data = new HashMap<String, Object>();
fillDataWithId(data, revision, RevisionType.ADD);
- verCfg.getEntCfg().getPropertyMapper(getEntityName()).map(data, propertyNames,
state, null);
+ verCfg.getEntCfg().get(getEntityName()).getPropertyMapper().map(data,
propertyNames, state, null);
session.save(verCfg.getVerEntCfg().getVersionsEntityName(getEntityName()),
data);
Modified:
trunk/src/main/org/jboss/envers/synchronization/work/CollectionChangeWorkUnit.java
===================================================================
---
trunk/src/main/org/jboss/envers/synchronization/work/CollectionChangeWorkUnit.java 2008-08-17
14:24:36 UTC (rev 113)
+++
trunk/src/main/org/jboss/envers/synchronization/work/CollectionChangeWorkUnit.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -49,7 +49,7 @@
Map<String, Object> data = new HashMap<String, Object>();
fillDataWithId(data, revision, RevisionType.MOD);
- verCfg.getEntCfg().getPropertyMapper(getEntityName()).mapToMapFromEntity(data,
entity, null);
+
verCfg.getEntCfg().get(getEntityName()).getPropertyMapper().mapToMapFromEntity(data,
entity, null);
session.save(verCfg.getVerEntCfg().getVersionsEntityName(getEntityName()),
data);
Modified: trunk/src/main/org/jboss/envers/synchronization/work/ModWorkUnit.java
===================================================================
--- trunk/src/main/org/jboss/envers/synchronization/work/ModWorkUnit.java 2008-08-17
14:24:36 UTC (rev 113)
+++ trunk/src/main/org/jboss/envers/synchronization/work/ModWorkUnit.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -42,7 +42,7 @@
super(entityName, verCfg, id);
data = new HashMap<String, Object>();
- changes = verCfg.getEntCfg().getPropertyMapper(getEntityName()).map(data,
entityPersister.getPropertyNames(),
+ changes = verCfg.getEntCfg().get(getEntityName()).getPropertyMapper().map(data,
entityPersister.getPropertyNames(),
newState, oldState);
}
Modified: trunk/src/main/org/jboss/envers/tools/reflection/YReflectionManager.java
===================================================================
--- trunk/src/main/org/jboss/envers/tools/reflection/YReflectionManager.java 2008-08-17
14:24:36 UTC (rev 113)
+++ trunk/src/main/org/jboss/envers/tools/reflection/YReflectionManager.java 2008-08-18
07:44:39 UTC (rev 114)
@@ -22,6 +22,7 @@
package org.jboss.envers.tools.reflection;
import org.hibernate.cfg.Configuration;
+import org.hibernate.MappingException;
import org.jboss.envers.exception.VersionsException;
import java.lang.reflect.InvocationTargetException;
@@ -59,4 +60,12 @@
throw new VersionsException(e);
}
}
+
+ public static YReflectionManager get(Configuration cfg) {
+ try {
+ return new YReflectionManager(cfg);
+ } catch (Exception e) {
+ throw new MappingException(e);
+ }
+ }
}