@@ -20,6 +20,7 @@ settings.ApiBaseURL = GetSetting("ArchivesSpaceBackendURL");
2020settings .Username = GetSetting (" AS_Username" );
2121settings .Password = GetSetting (" AS_Password" );
2222settings .AutoSearchPriority = GetSetting (" AutoSearchPriority" );
23+ settings .AutoGroupResults = GetSetting (" AutoGroupResults" );
2324
2425local types = {};
2526
@@ -38,7 +39,9 @@ types["System.Drawing.Size"] = luanet.import_type("System.Drawing.Size");
3839luanet .load_assembly (" System.Data" );
3940types [" System.Data.DataTable" ] = luanet .import_type (" System.Data.DataTable" );
4041
41- local currentResourceUri = " " ;
42+ local currentRecordUri = " " ;
43+
44+ local gridColumns = {};
4245
4346local archiveSpaceAddonScript = [[
4447 function buildObjectUrl(currentTreeId) {
@@ -61,7 +64,7 @@ local archiveSpaceAddonScript = [[
6164 var archivesSpaceAddonInitialized = true;
6265 var currentRepositoryPath = /\/repositories\/(\d+)/.exec($(".repo-container > .btn-group > a[href*='/repositories/']")[0].href)[0];
6366
64- //Sets the currentResourceUri
67+ //Sets the currentRecordUri
6568 if (currentRepositoryPath) {
6669 // There is an information tree
6770 if (window.AjaxTree) {
@@ -198,6 +201,7 @@ function BuildItemsGrid()
198201 gridColumn .Visible = true ;
199202 gridColumn .OptionsColumn .ReadOnly = true ;
200203 gridColumn .Width = 50 ;
204+ gridColumns [" Title" ] = gridColumn ;
201205
202206 gridColumn = gridView .Columns :Add ();
203207 gridColumn .Caption = " SubTitle" ;
@@ -206,6 +210,7 @@ function BuildItemsGrid()
206210 gridColumn .Visible = true ;
207211 gridColumn .OptionsColumn .ReadOnly = true ;
208212 gridColumn .Width = 50 ;
213+ gridColumns [" SubTitle" ] = gridColumn ;
209214
210215 gridColumn = gridView .Columns :Add ();
211216 gridColumn .Caption = " Call Number" ;
@@ -214,6 +219,7 @@ function BuildItemsGrid()
214219 gridColumn .Visible = true ;
215220 gridColumn .OptionsColumn .ReadOnly = true ;
216221 gridColumn .Width = 50 ;
222+ gridColumns [" Call Number" ] = gridColumn ;
217223
218224 gridColumn = gridView .Columns :Add ();
219225 gridColumn .Caption = " Author" ;
@@ -222,6 +228,7 @@ function BuildItemsGrid()
222228 gridColumn .Visible = true ;
223229 gridColumn .OptionsColumn .ReadOnly = true ;
224230 gridColumn .Width = 50 ;
231+ gridColumns [" Author" ] = gridColumn ;
225232
226233 gridColumn = gridView .Columns :Add ();
227234 gridColumn .Caption = " Volume" ;
@@ -230,6 +237,7 @@ function BuildItemsGrid()
230237 gridColumn .Visible = true ;
231238 gridColumn .OptionsColumn .ReadOnly = true ;
232239 gridColumn .Width = 50 ;
240+ gridColumns [" Volume" ] = gridColumn ;
233241
234242 gridColumn = gridView .Columns :Add ();
235243 gridColumn .Caption = " Barcode" ;
@@ -238,6 +246,16 @@ function BuildItemsGrid()
238246 gridColumn .Visible = true ;
239247 gridColumn .OptionsColumn .ReadOnly = true ;
240248 gridColumn .Width = 50 ;
249+ gridColumns [" Barcode" ] = gridColumn ;
250+
251+ gridColumn = gridView .Columns :Add ();
252+ gridColumn .Caption = " Location" ;
253+ gridColumn .FieldName = " Location" ;
254+ gridColumn .Name = " gridColumnLocation" ;
255+ gridColumn .Visible = true ;
256+ gridColumn .OptionsColumn .ReadOnly = true ;
257+ gridColumn .Width = 50 ;
258+ gridColumns [" Location" ] = gridColumn ;
241259
242260 catalogSearchForm .Grid .GridControl .DataSource = CreateItemsTable ();
243261
@@ -254,6 +272,7 @@ function CreateItemsTable()
254272 itemsTable .Columns :Add (" Author" );
255273 itemsTable .Columns :Add (" Volume" );
256274 itemsTable .Columns :Add (" Barcode" );
275+ itemsTable .Columns :Add (" Location" );
257276
258277 return itemsTable ;
259278end
@@ -330,17 +349,17 @@ end
330349
331350function NodeChanged (currentRepositoryPath , selectedResourcePath )
332351 ResetDataGrid ();
333- currentResourceUri = PathCombine (currentRepositoryPath , selectedResourcePath );
334- LogDebug (' currentResourceUri = ' .. currentResourceUri );
352+ currentRecordUri = PathCombine (currentRepositoryPath , selectedResourcePath );
353+ LogDebug (' currentRecordUri = ' .. currentRecordUri );
335354
336355 SetImportButtonsDisabled ();
337356end
338357
339358function SetCitationImportButtonsEnabled ()
340359 if (
341- string.match (currentResourceUri , HostAppInfo .PageUri [" Resource" ]) or
342- string.match (currentResourceUri , HostAppInfo .PageUri [" Accession" ]) or
343- string.match (currentResourceUri , HostAppInfo .PageUri [" DigitalObject" ])
360+ string.match (currentRecordUri , HostAppInfo .PageUri [" Resource" ]) or
361+ string.match (currentRecordUri , HostAppInfo .PageUri [" Accession" ]) or
362+ string.match (currentRecordUri , HostAppInfo .PageUri [" DigitalObject" ])
344363 ) then
345364 LogDebug (" Resource- Setting Import Citation to True" );
346365 catalogSearchForm .ImportCitationButton .BarButton .Enabled = true ;
@@ -369,47 +388,87 @@ function ResetDataGrid()
369388end
370389
371390function PopulateDataGrid ()
372- local itemsDataTable = CreateItemsTable ();
373- LogDebug (" Current Resource URI: " .. currentResourceUri );
374- if (string.match (currentResourceUri , HostAppInfo .PageUri [" ArchivalObject" ])) then
391+ LogDebug (" Current Record URI: " .. currentRecordUri );
392+
393+ if (string.match (currentRecordUri , HostAppInfo .PageUri [" ArchivalObject" ])) then
394+
375395 local sessionId = GetSessionId ();
376- local archivalObject = GetArchivalObject (sessionId , currentResourceUri );
377-
378- if (archivalObject ) and (archivalObject .instances ~= nil and archivalObject .instances ~= JsonParser .NIL ) then
379- LogDebug (" Is an instance of archival object" );
380- local collectionUri = ExtractSubproperty (archivalObject , " resource" , " ref" );
381- local collection = ArchivesSpaceGetRequest (sessionId , collectionUri );
382-
383- local mapping = HostAppInfo .InstanceDataImport ;
384- local availableData = {};
385- availableData [" ArchivalObjectTitle" ] = ExtractProperty (archivalObject , " title" );
386- availableData [" ResourceTitle" ] = ExtractProperty (collection , " title" );
387- availableData [" EadId" ] = ExtractProperty (collection ," ead_id" );
388- availableData [" Creators" ] = ExtractCreators (sessionId , collection );
389-
390- catalogSearchForm .Grid .GridControl :BeginUpdate ();
391-
392- for _ , v in ipairs (archivalObject .instances ) do
393- local itemRow = itemsDataTable :NewRow ();
394- local topContainer = GetTopContainerFromAPI (sessionId , v )
395- availableData [" ArchivalObjectContainer" ] = ExtractArchivalObjectContainer (v , topContainer );
396- availableData [" ArchivalObjectContainerBarcode" ] = ExtractArchivalObjectContainerBarcode (topContainer );
397- itemRow :set_item (mapping [" Title" ].ItemGridColumn , availableData [mapping [" Title" ].AspaceData ]);
398- itemRow :set_item (mapping [" SubTitle" ].ItemGridColumn , availableData [mapping [" SubTitle" ].AspaceData ]);
399- itemRow :set_item (mapping [" CallNumber" ].ItemGridColumn , availableData [mapping [" CallNumber" ].AspaceData ]);
400- itemRow :set_item (mapping [" Author" ].ItemGridColumn , availableData [mapping [" Author" ].AspaceData ]);
401- itemRow :set_item (mapping [" Volume" ].ItemGridColumn , availableData [mapping [" Volume" ].AspaceData ]);
402- itemRow :set_item (mapping [" Barcode" ].ItemGridColumn , availableData [mapping [" Barcode" ].AspaceData ]);
403- itemsDataTable .Rows :Add (itemRow );
396+ local archivalObject = GetArchivalObject (sessionId , currentRecordUri );
397+ local collectionUri = ExtractSubproperty (archivalObject , " resource" , " ref" );
398+ local collection = ArchivesSpaceGetRequest (sessionId , collectionUri );
399+
400+ if archivalObject and archivalObject .instances and (archivalObject .instances ~= JsonParser .NIL ) and (# archivalObject .instances > 0 ) then
401+ LogDebug (" Mapping Archival Object instances" );
402+ instances = archivalObject .instances ;
403+ elseif collection and collection .instances and (collection .instances ~= JsonParser .NIL ) and (# collection .instances > 0 ) then
404+ LogDebug (" Archival Object has no instances. Mapping Resource instances." );
405+ instances = collection .instances ;
406+ else
407+ LogDebug (" Neither the current Archival Object nor the current Resource have any instances." );
408+ return ;
409+ end
410+
411+ local availableData = {};
412+ availableData [" ArchivalObjectTitle" ] = ExtractProperty (archivalObject , " title" );
413+ availableData [" ResourceTitle" ] = ExtractProperty (collection , " title" );
414+ availableData [" EadId" ] = ExtractProperty (collection ," ead_id" );
415+ availableData [" Creators" ] = ExtractCreators (sessionId , collection );
416+
417+ local itemsDataTable = CreateItemsTable ();
418+
419+ catalogSearchForm .Grid .GridControl :BeginUpdate ();
420+
421+ for _ , archivalObjectInstance in ipairs (instances ) do
422+
423+ local topContainer = GetTopContainerFromAPI (sessionId , archivalObjectInstance );
424+ local digitalObject = GetDigitalObjectFromAPI (sessionId , archivalObjectInstance );
425+
426+ availableData [" ArchivalObjectInstance" ] = ExtractArchivalObjectInstanceTitle (archivalObjectInstance , topContainer , digitalObject );
427+ availableData [" ArchivalObjectInstanceBarcode" ] = ExtractArchivalObjectInstanceBarcode (topContainer , digitalObject );
428+
429+ topContainerHasContainerLocations = (
430+ topContainer and
431+ topContainer .container_locations and
432+ topContainer .container_locations ~= JsonParser .NIL and
433+ (# topContainer .container_locations > 0 )
434+ )
435+
436+ if topContainerHasContainerLocations then
437+ for _ , containerLocation in ipairs (topContainer .container_locations ) do
438+ location = ArchivesSpaceGetRequest (sessionId , containerLocation .ref );
439+ availableData [" ArchivalObjectContainerLocation" ] = location .title ;
440+ AddRowToItemsTable (itemsDataTable , availableData );
441+ end
442+ else
443+ availableData [" ArchivalObjectContainerLocation" ] = " " ;
444+ AddRowToItemsTable (itemsDataTable , availableData );
404445 end
446+ end
405447
406- catalogSearchForm .Grid .GridControl .DataSource = itemsDataTable ;
407- catalogSearchForm .Grid .GridControl :EndUpdate ();
448+ catalogSearchForm .Grid .GridControl .DataSource = itemsDataTable ;
449+ catalogSearchForm .Grid .GridControl :EndUpdate ();
408450
451+ catalogSearchForm .Grid .GridControl .Enabled = true ;
452+ if settings .AutoGroupResults then
453+ gridColumns [" Volume" ]:Group ();
409454 end
410455 end
411456end
412457
458+ function AddRowToItemsTable (itemsDataTable , availableData )
459+ local itemRow = itemsDataTable :NewRow ();
460+
461+ itemRow :set_item (HostAppInfo .InstanceDataImport [" Title" ].ItemGridColumn , availableData [HostAppInfo .InstanceDataImport [" Title" ].AspaceData ]);
462+ itemRow :set_item (HostAppInfo .InstanceDataImport [" SubTitle" ].ItemGridColumn , availableData [HostAppInfo .InstanceDataImport [" SubTitle" ].AspaceData ]);
463+ itemRow :set_item (HostAppInfo .InstanceDataImport [" CallNumber" ].ItemGridColumn , availableData [HostAppInfo .InstanceDataImport [" CallNumber" ].AspaceData ]);
464+ itemRow :set_item (HostAppInfo .InstanceDataImport [" Author" ].ItemGridColumn , availableData [HostAppInfo .InstanceDataImport [" Author" ].AspaceData ]);
465+ itemRow :set_item (HostAppInfo .InstanceDataImport [" Volume" ].ItemGridColumn , availableData [HostAppInfo .InstanceDataImport [" Volume" ].AspaceData ]);
466+ itemRow :set_item (HostAppInfo .InstanceDataImport [" Barcode" ].ItemGridColumn , availableData [HostAppInfo .InstanceDataImport [" Barcode" ].AspaceData ]);
467+ itemRow :set_item (HostAppInfo .InstanceDataImport [" Location" ].ItemGridColumn , availableData [HostAppInfo .InstanceDataImport [" Location" ].AspaceData ]);
468+
469+ itemsDataTable .Rows :Add (itemRow );
470+ end
471+
413472function ImportInstance_Clicked ()
414473 local importRow = catalogSearchForm .Grid .GridControl .MainView :GetFocusedRow ();
415474
@@ -433,7 +492,7 @@ function ImportCitation_Clicked()
433492 SetImportButtonsDisabled ();
434493
435494 local sessionId = GetSessionId ();
436- local collection = ArchivesSpaceGetRequest (sessionId , currentResourceUri );
495+ local collection = ArchivesSpaceGetRequest (sessionId , currentRecordUri );
437496 local jsonModelType = ExtractProperty (collection , " jsonmodel_type" );
438497 LogDebug (" Json Model Type: " .. jsonModelType );
439498 local availableData = {};
@@ -516,7 +575,17 @@ function GetTopContainerFromAPI(sessionId, archivalObjectInstance)
516575 return nil
517576end
518577
519- function ExtractArchivalObjectContainer (archivalObjectInstance , topContainer )
578+ function GetDigitalObjectFromAPI (sessionId , archivalObjectInstance )
579+ if (archivalObjectInstance .digital_object ~= nil and archivalObjectInstance .digital_object ~= JsonParser .NIL ) then
580+ local digitalObjectUri = archivalObjectInstance .digital_object .ref ;
581+ local digitalObject = ArchivesSpaceGetRequest (sessionId , digitalObjectUri );
582+ return digitalObject
583+ end
584+
585+ return nil
586+ end
587+
588+ function ExtractArchivalObjectInstanceTitle (archivalObjectInstance , topContainer , digitalObject )
520589 local container = " " ;
521590
522591 if (archivalObjectInstance .container ~= nil and archivalObjectInstance .container ~= JsonParser .NIL ) then
@@ -529,16 +598,20 @@ function ExtractArchivalObjectContainer(archivalObjectInstance, topContainer)
529598 end
530599 elseif (topContainer ) then
531600 container = topContainer .long_display_string ;
601+ elseif (digitalObject ) then
602+ container = digitalObject .title ;
532603 end
533604
534605 return container ;
535606end
536607
537- function ExtractArchivalObjectContainerBarcode (topContainer )
608+ function ExtractArchivalObjectInstanceBarcode (topContainer , digitalObject )
538609 local barcode = " " ;
539610
540611 if topContainer and topContainer .barcode then
541612 barcode = topContainer .barcode ;
613+ elseif digitalObject and digitalObject .digital_object_id then
614+ barcode = digitalObject .digital_object_id ;
542615 end
543616
544617 return barcode ;
0 commit comments