@@ -483,8 +483,7 @@ class Datasets @Inject() (
483483 /**
484484 * Dataset.
485485 */
486- def dataset (id : UUID , currentSpace : Option [String ], limit : Int ) = PermissionAction (Permission .ViewDataset , Some (ResourceRef (ResourceRef .dataset, id))) { implicit request =>
487-
486+ def dataset (id : UUID , currentSpace : Option [String ], limit : Int , filter : Option [String ]) = PermissionAction (Permission .ViewDataset , Some (ResourceRef (ResourceRef .dataset, id))) { implicit request =>
488487 implicit val user = request.user
489488 Previewers .findDatasetPreviewers().foreach(p => Logger .debug(" Previewer found " + p.id))
490489 datasets.get(id) match {
@@ -612,11 +611,16 @@ class Datasets @Inject() (
612611 // increment view count for dataset
613612 val view_data = datasets.incrementViews(id, user)
614613
614+ // related datasets
615+ val relatedThings = relations.findRelationships(dataset.id.stringify, ResourceType .dataset, ResourceType .dataset)
616+ val relatedDatasets = for (r <- relatedThings) yield NodeDataset (datasets.get(UUID (r.target.id)).get, r.rdfType)
617+
618+
615619 // view_data is passed as tuple in dataset case only, because template is at limit of 22 parameters
616620 Ok (views.html.dataset(dataset, commentsByDataset, filteredPreviewers.toList, m,
617621 decodedCollectionsInside.toList, sensors, Some (decodedSpaces_canRemove), toPublish, curPubObjects,
618622 currentSpace, limit, showDownload, accessData, canAddDatasetToCollection,
619- stagingAreaDefined, view_data, extractionGroups))
623+ stagingAreaDefined, view_data, extractionGroups, relatedDatasets, filter ))
620624 }
621625 case None => {
622626 Logger .error(" Error getting dataset" + id)
@@ -625,78 +629,74 @@ class Datasets @Inject() (
625629 }
626630 }
627631
628- def getUpdatedFilesAndFolders (datasetId : UUID , limit : Int , pageIndex : Int , space : Option [String ]) = PermissionAction (Permission .ViewDataset , Some (ResourceRef (ResourceRef .dataset, datasetId)))(parse.json) { implicit request =>
632+ def getUpdatedFilesAndFolders (datasetId : UUID , limit : Int , pageIndex : Int , space : Option [String ], filter : Option [ String ] ) = PermissionAction (Permission .ViewDataset , Some (ResourceRef (ResourceRef .dataset, datasetId)))(parse.json) { implicit request =>
629633 implicit val user = request.user
630634 val filepageUpdate = if (pageIndex < 0 ) 0 else pageIndex
631635 val sortOrder : String =
632636 request.cookies.get(" sort-order" ) match {
633637 case Some (cookie) => cookie.value
634638 case None => " dateN" // If there is no cookie, and an order was not passed in, the view will choose its default
635639 }
640+
636641 datasets.get(datasetId) match {
637642 case Some (dataset) => {
643+ val folderHierarchy = new ListBuffer [Folder ]()
644+
638645 val folderId = (request.body \ " folderId" ).asOpt[String ]
639- folderId match {
640- case Some (fId) => {
641- folders.get(UUID (fId)) match {
646+ val ( childFolders : List [ UUID ], childFiles : List [ UUID ]) =
647+ folderId match {
648+ case Some (fId) => folders.get(UUID (fId)) match {
642649 case Some (folder) => {
643- val (foldersList : List [Folder ], limitFileList : List [File ]) =
644- if (play.Play .application().configuration().getBoolean(" sortInMemory" )) {
645- (SortingUtils .sortFolders(folder.folders.flatMap(f => folders.get(f)), sortOrder).slice(limit * filepageUpdate, limit * (filepageUpdate + 1 )),
646- SortingUtils .sortFiles(files.get(folder.files).found, sortOrder).slice(limit * filepageUpdate - folder.folders.length, limit * (filepageUpdate + 1 ) - folder.folders.length))
647- } else {
648- (folder.folders.reverse.slice(limit * filepageUpdate, limit * (filepageUpdate+ 1 )).flatMap(f => folders.get(f)),
649- folder.files.reverse.slice(limit * filepageUpdate - folder.folders.length, limit * (filepageUpdate+ 1 ) - folder.folders.length).flatMap(f => files.get(f)))
650- }
651- var folderHierarchy = new ListBuffer [Folder ]()
652650 folderHierarchy += folder
653- var f1 : Folder = folder
651+ var f1 = folder
654652 while (f1.parentType == " folder" ) {
655653 folders.get(f1.parentId) match {
656654 case Some (fparent) => {
657655 folderHierarchy += fparent
658656 f1 = fparent
659657 }
660- case None =>
658+ case None => Logger .error( " Parent folder " + f1.parentId.toString + " not found. " )
661659 }
662660 }
663- val fileComments = limitFileList.map { file =>
664- var allComments = comments.findCommentsByFileId(file.id)
665- sections.findByFileId(file.id).map { section =>
666- allComments ++= comments.findCommentsBySectionId(section.id)
667- }
668- file.id -> allComments.size
669- }.toMap
670- val next = folder.files.length + folder.folders.length > limit * (filepageUpdate + 1 )
671-
672- Ok (views.html.datasets.filesAndFolders(dataset, Some (folder.id.stringify), foldersList, folderHierarchy.reverse.toList, pageIndex, next, limitFileList.toList, fileComments, space)(request.user))
673-
661+ (folder.folders, folder.files)
674662 }
675- case None => InternalServerError ( s " No folder with id $ fId found " )
663+ case None => Logger .error( " Folder " + fId + " not found. " )
676664 }
665+ case None => (dataset.folders, dataset.files)
677666 }
678- case None => {
679- val (foldersList : List [Folder ], limitFileList : List [File ]) = if (play.Play .application().configuration().getBoolean(" sortInMemory" )) {
680- (SortingUtils .sortFolders(dataset.folders.flatMap(f => folders.get(f)), sortOrder).slice(limit * filepageUpdate, limit * (filepageUpdate + 1 )),
681- SortingUtils .sortFiles(files.get(dataset.files).found, sortOrder).slice(limit * filepageUpdate - dataset.folders.length, limit * (filepageUpdate + 1 ) - dataset.folders.length))
682- } else {
683- (dataset.folders.reverse.slice(limit * filepageUpdate, limit * (filepageUpdate+ 1 )).flatMap(f => folders.get(f)),
684- dataset.files.reverse.slice(limit * filepageUpdate - dataset.folders.length, limit * (filepageUpdate+ 1 ) - dataset.folders.length).flatMap(f => files.get(f)))
685- }
686667
687- val fileComments = limitFileList.map { file =>
688- var allComments = comments.findCommentsByFileId(file.id)
689- sections.findByFileId(file.id).map { section =>
690- allComments ++= comments.findCommentsBySectionId(section.id)
691- }
692- file.id -> allComments.size
693- }.toMap
668+ val filteredFiles = filter match {
669+ case Some (filt) => files.get(childFiles).found.filter(f => f.filename.toLowerCase.contains(filt.toLowerCase))
670+ case None => files.get(childFiles).found
671+ }
694672
695- val folderHierarchy = new ListBuffer [Folder ]()
696- val next = dataset.files.length + dataset.folders.length > limit * (filepageUpdate + 1 )
697- Ok (views.html.datasets.filesAndFolders(dataset, None , foldersList, folderHierarchy.reverse.toList, pageIndex, next, limitFileList.toList, fileComments, space)(request.user))
698- }
673+ val filteredFolders = filter match {
674+ case Some (filt) => folders.get(childFolders).found.filter(f => f.name.toLowerCase.contains(filt.toLowerCase))
675+ case None => folders.get(childFolders).found
699676 }
677+
678+ val (foldersList : List [Folder ], limitFileList : List [File ]) =
679+ if (play.Play .application().configuration().getBoolean(" sortInMemory" )) {
680+ (SortingUtils .sortFolders(filteredFolders, sortOrder).slice(limit * filepageUpdate, limit * (filepageUpdate + 1 )),
681+ SortingUtils .sortFiles(filteredFiles, sortOrder).slice(limit * filepageUpdate - filteredFolders.length, limit * (filepageUpdate + 1 ) - filteredFolders.length))
682+ } else {
683+ (folders.get(childFolders.reverse.slice(limit * filepageUpdate, limit * (filepageUpdate + 1 ))).found,
684+ files.get(childFiles.reverse.slice(limit * filepageUpdate - childFolders.length, limit * (filepageUpdate + 1 ) - childFolders.length)).found)
685+ }
686+
687+ // Get comment counts per file
688+ val fileComments = limitFileList.map { file =>
689+ var allComments = comments.findCommentsByFileId(file.id)
690+ sections.findByFileId(file.id).map { section =>
691+ allComments ++= comments.findCommentsBySectionId(section.id)
692+ }
693+ file.id -> allComments.size
694+ }.toMap
695+
696+ // Pagination
697+ val next = childFiles.length + childFolders.length > limit * (filepageUpdate + 1 )
698+
699+ Ok (views.html.datasets.filesAndFolders(dataset, folderId, foldersList, folderHierarchy.reverse.toList, pageIndex, next, limitFileList.toList, fileComments, space, filter)(request.user))
700700 }
701701 case None => InternalServerError (s " Dataset with id $datasetId not Found " )
702702 }
0 commit comments