From f60b2b8b0a4f4bfd238a93c6f42823d6f334f711 Mon Sep 17 00:00:00 2001
From: Mateus Rambo Strey <mars11@inf.ufpr.br>
Date: Tue, 10 Nov 2015 15:41:54 -0200
Subject: [PATCH] fix collection owner

---
 app/builders/collection_builder.rb            |  1 +
 app/controllers/collections_controller.rb     |  2 +-
 .../validators/collection_owner_validator.rb  |  6 ++---
 .../orient_db/collection_repository.rb        | 26 ++++++++++++++++---
 app/views/collections/_collection.html.erb    |  2 +-
 5 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/app/builders/collection_builder.rb b/app/builders/collection_builder.rb
index f64521c9..4613056c 100644
--- a/app/builders/collection_builder.rb
+++ b/app/builders/collection_builder.rb
@@ -26,6 +26,7 @@ class CollectionBuilder
             name: args['name'],
             id: args['@rid']
         )
+        obj.owner = collection_repository.owner(args['@rid'])
         obj.created_at = DateTime.strptime(args['created_at'], "%Y-%m-%d %H:%M:%S") unless args['created_at'].nil?
         obj.last_modified = DateTime.strptime(args['last_modified'], "%Y-%m-%d %H:%M:%S") unless args['last_modified'].nil?
         obj
diff --git a/app/controllers/collections_controller.rb b/app/controllers/collections_controller.rb
index d24a10b7..7482e6c5 100644
--- a/app/controllers/collections_controller.rb
+++ b/app/controllers/collections_controller.rb
@@ -29,7 +29,7 @@ class CollectionsController < ApplicationController
     @collection = Collection.new(collection_params)
 
     # let user or institution as owner
-    @collection.owner = (params[:collection][:institution].blank?) ? current_user : params[:collection][:institution]
+    @collection.owner = (params[:collection][:institution].blank?) ? current_user : institution_repository.find(params[:collection][:institution])
 
     respond_to do |format|
       if collection_repository.create @collection
diff --git a/app/models/validators/collection_owner_validator.rb b/app/models/validators/collection_owner_validator.rb
index d98460e1..a0412d1c 100644
--- a/app/models/validators/collection_owner_validator.rb
+++ b/app/models/validators/collection_owner_validator.rb
@@ -1,9 +1,9 @@
 class Validators::CollectionOwnerValidator < ActiveModel::Validator
 
   def validate(record)
-    if !record.owner.is_a?(User)
-      record.errors.add :base, 'The owner must be an User'
+    unless record.owner.is_a?(User) || record.owner.is_a?(Institution)
+      record.errors.add :base, 'The owner must be an User or an Institution'
     end
   end
 
-end
\ No newline at end of file
+end
diff --git a/app/repositories/orient_db/collection_repository.rb b/app/repositories/orient_db/collection_repository.rb
index 97379449..91f7bab5 100644
--- a/app/repositories/orient_db/collection_repository.rb
+++ b/app/repositories/orient_db/collection_repository.rb
@@ -35,13 +35,16 @@ module OrientDb
 
     def create(object)
       super(object)
-      create_edge "BelongsTo", object.id, owner_id(object)
+
+      # create relationship
+      create_edge "BelongsTo", object.id, owner_id(object.owner)
+
       object
     end
 
     def destroy(object)
       super(object)
-      destroy_edge "BelongsTo", object.id, owner_id(object)
+      destroy_edge "BelongsTo", object.id, owner_id(object.owner)
     end
 
     ##
@@ -82,10 +85,25 @@ module OrientDb
       hash.merge('name' => object.name) # forces name property for bookmarks
     end
 
+    # return owner of collection rid
+    def owner(collection_id)
+      edge = get_edges("BelongsTo", "out", collection_id).first
+
+      owner = get_by_rid(edge["in"])
+
+      if owner['@class'] == "User"
+        return user_repository.find owner['p_id']
+      elsif owner['@class'] == "Institution"
+        return institution_repository.find owner['@rid']
+      end
+
+      return []
+    end
+
     private
 
-    def owner_id(object)
-      (object.owner.class == User) ? object.owner.rid : institution_repository.find(object.owner).id
+    def owner_id(owner)
+      (owner.class == User) ? owner.rid : owner.id
     end
 
     def odb_class
diff --git a/app/views/collections/_collection.html.erb b/app/views/collections/_collection.html.erb
index 9d0b7320..cc138197 100644
--- a/app/views/collections/_collection.html.erb
+++ b/app/views/collections/_collection.html.erb
@@ -7,7 +7,7 @@
           <h4 class="media-heading"><%= collection.name %></h4>
         <!--  <span class="glyphicon glyphicon-eye-open">200&nbsp;</span>
           <span class="glyphicon glyphicon-star">4,5&nbsp;</span> -->
-          <span><a><%= 'Por '+ collection.owner.name unless collection.owner.name.blank? %>&nbsp;</a></span>
+          <span><a><%= 'Por '+ collection.owner.name unless collection.owner.name.blank? %></a></span>
         </div>
       </div>
 <% end %>
-- 
GitLab