@@ -26,34 +26,43 @@ def initialize(output_directory, date)
26
26
27
27
# Based on and try to reuse the mapping methods in the class
28
28
# https://gist.github.com/lagoan/839cf8ce997fa17b529d84776b91cdac#file-export_collections_csv-rb-L181-L196
29
- def map_change_event_to_scholaris_item ( change_event )
30
- #result = CollectionCSVExporter.item_data_row(change_event.item)
31
- item = change_event . item . decorate
32
- itemTranslation = ItemCSVExporter . new
29
+ def map_change_event_to_scholaris_item ( change_event , obj )
30
+
33
31
scholaris_mapped_change_event = { }
34
- itemTranslation . easy_dspace_mapping do |method_key , _method_mapping |
35
- # keys starting with "manual_" are special cases that need to be handled differently
36
- jupiter_key = method_key . sub ( /^manual_/ , '' )
37
- # only caputure value if the key exists in the list of object changes in the change event
38
- if change_event . object_changes && change_event . object_changes . key? ( jupiter_key )
39
- value = if method_key . start_with? ( 'manual_' )
40
- itemTranslation . handle_manual_value ( item , method_key )
41
- else
42
- item . send ( method_key )
43
- end
44
- scholaris_mapped_change_event [ _method_mapping ] = value
45
- end
46
- end ;
32
+ itemTranslation = ItemCSVExporter . new
33
+ begin
34
+ item = obj . decorate
35
+ itemTranslation . easy_dspace_mapping do |method_key , _method_mapping |
36
+ # keys starting with "manual_" are special cases that need to be handled differently
37
+ jupiter_key = method_key . sub ( /^manual_/ , '' )
38
+ # only caputure value if the key exists in the list of object changes in the change event
39
+ if change_event . object_changes && change_event . object_changes . key? ( jupiter_key )
40
+ value = if method_key . start_with? ( 'manual_' )
41
+ itemTranslation . handle_manual_value ( item , method_key )
42
+ else
43
+ item . send ( method_key )
44
+ end
45
+ scholaris_mapped_change_event [ _method_mapping ] = value
46
+ end
47
+ end ;
48
+ rescue NoMethodError
49
+ puts "Mapping Error on jupiter ID #{ change_event . item_id } of type #{ change_event . item_type } and event #{ change_event . event } "
50
+ end
47
51
return scholaris_mapped_change_event
48
52
end
49
53
50
- def process_change_event ( change_event )
54
+ def process_change_event ( change_event , obj )
51
55
52
- if change_event . item_type == "Thesis"
53
- elsif change_event . item_type == "Item"
54
- result = map_change_event_to_scholaris_item ( change_event )
56
+ if change_event . event == "destroy"
57
+ result = { }
55
58
else
56
- result = '{"error"}'
59
+ if change_event . item_type == "Thesis"
60
+ result = '{"scholaris mapping unsupported"}'
61
+ elsif change_event . item_type == "Item"
62
+ result = map_change_event_to_scholaris_item ( change_event , obj )
63
+ else
64
+ result = '{"error"}'
65
+ end
57
66
end
58
67
59
68
# return dictionary of key value pairs
@@ -65,7 +74,7 @@ def process_change_event(change_event)
65
74
66
75
def perform ( )
67
76
CSV . open ( @output_file , 'wb' ) do |csv |
68
- csv << [ 'type' , 'change_id' , 'jupiter_id' , 'changed at' , 'event' , 'jupiter delta' , 'scholaris mapped delta' , 'jupiter delta formatted' , 'scholaris mapped delta formatted' ]
77
+ csv << [ 'type' , 'change_id' , 'jupiter_id' , 'is_jupiter_currently_readonly' , ' changed at', 'event' , 'jupiter delta' , 'scholaris mapped delta' , 'jupiter delta formatted' , 'scholaris mapped delta formatted' ]
69
78
PaperTrail ::Version . where ( created_at : @date ..) . find_each do |row |
70
79
# How to communicate key/value mapping differences from Jupiter to DSpace?
71
80
# First part, add documentation describing how to use the output
@@ -75,8 +84,10 @@ def perform()
75
84
# https://gist.github.com/lagoan/839cf8ce997fa17b529d84776b91cdac#file-export_collections_csv-rb-L181-L196
76
85
# I.e., test if the key exists in the object_changes and creating a new
77
86
# structure in a new column listing the Scholaris key/value pairs to update
78
- scholaris_mapping = process_change_event ( row )
79
- csv << [ row . item_type , row . id , row . item_id , row . created_at , row . event , row . object_changes , scholaris_mapping , JSON . pretty_generate ( row . object_changes ) , JSON . pretty_generate ( scholaris_mapping ) ]
87
+ obj = row . item
88
+ read_only = "True" if obj && obj . read_only?
89
+ scholaris_mapping = process_change_event ( row , obj )
90
+ csv << [ row . item_type , row . id , row . item_id , read_only , row . created_at , row . event , row . object_changes , scholaris_mapping , JSON . pretty_generate ( row . object_changes ) , JSON . pretty_generate ( scholaris_mapping ) ]
80
91
end
81
92
end
82
93
@@ -91,4 +102,4 @@ def perform()
91
102
92
103
end
93
104
94
- ChangesReport . new ( "/tmp/" , Date . new ( 2005 , 8 , 8 ) ) . perform ( )
105
+ ChangesReport . new ( "/tmp/" , Date . new ( 2025 , 3 , 15 ) ) . perform ( )
0 commit comments