From f09558a81f37b624124cfba7ea23cd5f3f254f60 Mon Sep 17 00:00:00 2001
From: Dennis Ahrens <dennis.ahrens@hs-hannover.de>
Date: Thu, 11 Sep 2014 09:33:22 +0200
Subject: [PATCH] [TASK] Fixes join collidies.

---
 hshetl/entities.py | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/hshetl/entities.py b/hshetl/entities.py
index 681fa8b..2f912d8 100644
--- a/hshetl/entities.py
+++ b/hshetl/entities.py
@@ -100,9 +100,8 @@ class Entity(AbstractRepository):
         container_identifier = self._hash(container_fields)
 
         if container_identifier in container:
-            rec = Record(join_identifier, self.properties, self.itervalues())
-            rec.load(container_fields, mapped_record, container)
-            container.container_collide(rec)
+            container.container_collide(join_identifier, self.properties, self.itervalues(),
+                                        container_fields, mapped_record, container)
             return
 
         if self.record_repository.has(join_identifier):
@@ -114,7 +113,8 @@ class Entity(AbstractRepository):
             self.record_repository.add(record)
             container.append(container_identifier)
         except DuplicatedSystemIdException:
-            container.join_collide(Record(join_identifier, self.properties, self.itervalues()))
+            container.join_collide(join_identifier, self.properties, self.itervalues(),
+                                   container_fields, mapped_record, container)
 
     def add(self, container):
         '''Adds the container to the entity and register it at all records'''
@@ -212,8 +212,15 @@ class Container(list):
             value = raw_value
         return (mapped_prop_name, value)
 
-    def container_collide(self, record):
+    def _create_collision_record(self, join_identifier, properties, containers, container_fields, mapped_record, container):
+        '''Create a record object, if there was a container or join collision.'''
+        rec = Record(join_identifier, properties, containers)
+        rec.load(container_fields, mapped_record, container)
+        return rec
+
+    def container_collide(self, join_identifier, properties, containers, container_fields, mapped_record, container):
         '''Add a container collisions or break.'''
+        record = self._create_collision_record(join_identifier, properties, containers, container_fields, mapped_record, container)
         if self.collision_handling == COLLISION_HANDLING_BREAKALL or \
            self.collision_handling == COLLISION_HANDLING_BREAKCONTAINER:
             msg = 'Collision in %s system detected! Aborting! %s found twice.' % (self.name, repr(record))
@@ -223,8 +230,9 @@ class Container(list):
             logging.warn(msg)
             self.collisions.append(record)
 
-    def join_collide(self, record):
+    def join_collide(self, join_identifier, properties, containers, container_fields, mapped_record, container):
         '''Add a join collisions or break.'''
+        record = self._create_collision_record(join_identifier, properties, containers, container_fields, mapped_record, container)
         if self.collision_handling == COLLISION_HANDLING_BREAKALL or \
            self.collision_handling == COLLISION_HANDLING_BREAKJOIN:
             msg = 'Collision in %s system detected! Aborting! %s found twice.' % (self.name, repr(record))
@@ -563,7 +571,7 @@ delete: {}
 unaltered: {}
 unknown: {}
 collsions: {}
-join_collosion: {}
+join_collisions: {}
 '''.format(len(self.insert), len(self.update), len(self.delete), len(self.unaltered), len(self.unknown), len(self.collisions), len(self.join_collisions))
 
 
-- 
GitLab