@@ -86,15 +86,14 @@ public List<DvObjectSolrDoc> determineSolrDocs(DvObject dvObject) {
8686 solrDocs .addAll (datasetSolrDocs );
8787 } else if (dvObject .isInstanceofDataFile ()) {
8888 DataFile datafile = (DataFile ) dvObject ;
89- Map <DatasetVersion .VersionState , Boolean > desiredCards = searchPermissionsService .getDesiredCards (datafile .getOwner ());
9089 Set <DatasetVersion > datasetVersions = datasetVersionsToBuildCardsFor (datafile .getOwner ());
9190 for (DatasetVersion version : datasetVersions ) {
92- if ( desiredCards . containsKey ( version . getVersionState ()) && desiredCards . get ( version . getVersionState ()) && datafile .isInDatasetVersion (version )) {
93- List <String > cachedPerms = searchPermissionsService .findDatasetVersionPerms (version );
94- String solrIdEnd = getDatasetOrDataFileSolrEnding (version .getVersionState ());
95- Long versionId = version .getId ();
96- DvObjectSolrDoc fileSolrDoc = constructDatafileSolrDoc (new DataFileProxy (datafile .getFileMetadata ()), cachedPerms , versionId , solrIdEnd );
97- solrDocs .add (fileSolrDoc );
91+ if ( datafile .isInDatasetVersion (version )) {
92+ List <String > cachedPerms = searchPermissionsService .findDatasetVersionPerms (version );
93+ String solrIdEnd = getDatasetOrDataFileSolrEnding (version .getVersionState ());
94+ Long versionId = version .getId ();
95+ DvObjectSolrDoc fileSolrDoc = constructDatafileSolrDoc (new DataFileProxy (datafile .getFileMetadata ()), cachedPerms , versionId , solrIdEnd );
96+ solrDocs .add (fileSolrDoc );
9897 }
9998 }
10099 } else {
@@ -136,13 +135,9 @@ private DvObjectSolrDoc constructDataverseSolrDoc(Dataverse dataverse) {
136135 private List <DvObjectSolrDoc > constructDatasetSolrDocs (Dataset dataset ) {
137136 List <DvObjectSolrDoc > emptyList = new ArrayList <>();
138137 List <DvObjectSolrDoc > solrDocs = emptyList ;
139- Map <DatasetVersion .VersionState , Boolean > desiredCards = searchPermissionsService .getDesiredCards (dataset );
140138 for (DatasetVersion version : datasetVersionsToBuildCardsFor (dataset )) {
141- boolean cardShouldExist = desiredCards .get (version .getVersionState ());
142- if (cardShouldExist ) {
143- DvObjectSolrDoc datasetSolrDoc = makeDatasetSolrDoc (version );
144- solrDocs .add (datasetSolrDoc );
145- }
139+ DvObjectSolrDoc datasetSolrDoc = makeDatasetSolrDoc (version );
140+ solrDocs .add (datasetSolrDoc );
146141 }
147142 return solrDocs ;
148143 }
@@ -161,39 +156,45 @@ private DvObjectSolrDoc constructDatafileSolrDoc(DataFileProxy fileProxy, List<S
161156
162157 private List <DvObjectSolrDoc > constructDatafileSolrDocsFromDataset (Dataset dataset ) {
163158 List <DvObjectSolrDoc > datafileSolrDocs = new ArrayList <>();
164- Map <DatasetVersion .VersionState , Boolean > desiredCards = searchPermissionsService .getDesiredCards (dataset );
165159 for (DatasetVersion datasetVersionFileIsAttachedTo : datasetVersionsToBuildCardsFor (dataset )) {
166- boolean cardShouldExist = desiredCards .get (datasetVersionFileIsAttachedTo .getVersionState ());
167- if (cardShouldExist ) {
168- List <String > perms = new ArrayList <>();
169- if (datasetVersionFileIsAttachedTo .isReleased ()) {
170- perms .add (IndexServiceBean .getPublicGroupString ());
171- } else {
172- perms = searchPermissionsService .findDatasetVersionPerms (datasetVersionFileIsAttachedTo );
173- }
160+ List <String > perms = new ArrayList <>();
161+ if (datasetVersionFileIsAttachedTo .isReleased ()) {
162+ perms .add (IndexServiceBean .getPublicGroupString ());
163+ } else {
164+ perms = searchPermissionsService .findDatasetVersionPerms (datasetVersionFileIsAttachedTo );
165+ }
174166
175- for (FileMetadata fileMetadata : datasetVersionFileIsAttachedTo .getFileMetadatas ()) {
176- Long fileId = fileMetadata .getDataFile ().getId ();
177- String solrIdStart = IndexServiceBean .solrDocIdentifierFile + fileId ;
178- String solrIdEnd = getDatasetOrDataFileSolrEnding (datasetVersionFileIsAttachedTo .getVersionState ());
179- String solrId = solrIdStart + solrIdEnd ;
180- DvObjectSolrDoc dataFileSolrDoc = new DvObjectSolrDoc (fileId .toString (), solrId , datasetVersionFileIsAttachedTo .getId (), fileMetadata .getLabel (), perms );
181- logger .finest ("adding fileid " + fileId );
182- datafileSolrDocs .add (dataFileSolrDoc );
183- }
167+ for (FileMetadata fileMetadata : datasetVersionFileIsAttachedTo .getFileMetadatas ()) {
168+ Long fileId = fileMetadata .getDataFile ().getId ();
169+ String solrIdStart = IndexServiceBean .solrDocIdentifierFile + fileId ;
170+ String solrIdEnd = getDatasetOrDataFileSolrEnding (datasetVersionFileIsAttachedTo .getVersionState ());
171+ String solrId = solrIdStart + solrIdEnd ;
172+ DvObjectSolrDoc dataFileSolrDoc = new DvObjectSolrDoc (fileId .toString (), solrId , datasetVersionFileIsAttachedTo .getId (), fileMetadata .getLabel (), perms );
173+ logger .finest ("adding fileid " + fileId );
174+ datafileSolrDocs .add (dataFileSolrDoc );
184175 }
185176 }
186177 return datafileSolrDocs ;
187178 }
188179
180+ /** Find the versions to index. The overall logic is
181+ * If there is only one version, or no released version (all non-draft versions are deaccessioned)
182+ * then index it regardless of it's versionstate
183+ * If there are released versions
184+ * then index the latest released version and a draft version if one exists
185+ * Hence - the latest deaccessioned version is only indexed if there is no released version
186+ * @param dataset
187+ * @return the set of versions to build cards for
188+ */
189189 private Set <DatasetVersion > datasetVersionsToBuildCardsFor (Dataset dataset ) {
190190 Set <DatasetVersion > datasetVersions = new HashSet <>();
191191 DatasetVersion latest = dataset .getLatestVersion ();
192- if (latest != null ) {
192+ DatasetVersion released = dataset .getReleasedVersion ();
193+ if (latest != null && (released == null || latest .isDraft ())) {
193194 datasetVersions .add (latest );
194195 }
195- DatasetVersion released = dataset .getReleasedVersion ();
196196 if (released != null ) {
197+ //May be the same as the latest version - only one copy will be in the set in that case
197198 datasetVersions .add (released );
198199 }
199200 return datasetVersions ;
@@ -377,17 +378,14 @@ public IndexResponse indexPermissionsOnSelfAndChildren(DvObject definitionPoint)
377378 * loaded (first case) and done only when needed for the second case.
378379 *
379380 **/
380- Map <DatasetVersion .VersionState , Boolean > desiredCards = searchPermissionsService .getDesiredCards (dataset );
381381 List <DatasetVersion > versionsToIndex = new ArrayList <>();
382- for (DatasetVersion version : versionsToReIndexPermissionsFor (dataset )) {
383- if (desiredCards .get (version .getVersionState ())) {
384- int fileCount = dataFileService .findCountByDatasetVersionId (version .getId ()).intValue ();
382+ for (DatasetVersion version : datasetVersionsToBuildCardsFor (dataset )) {
383+ int fileCount = dataFileService .findCountByDatasetVersionId (version .getId ()).intValue ();
385384 if (fileCount <= fileQueryMin ) {
386- // IMPORTANT: This triggers the loading of fileMetadatas within the current transaction
387- version .getFileMetadatas ().size ();
388- }
389- versionsToIndex .add (version );
385+ // IMPORTANT: This triggers the loading of fileMetadatas within the current transaction
386+ version .getFileMetadatas ().size ();
390387 }
388+ versionsToIndex .add (version );
391389 }
392390
393391 // Process the dataset's files in a new transaction, passing the pre-loaded data
@@ -412,16 +410,12 @@ public void indexDatasetBatchInNewTransaction(List<Long> datasetIds, final int[]
412410 indexPermissionsForOneDvObject (dataset );
413411
414412 // Process files for this dataset
415- Map <DatasetVersion .VersionState , Boolean > desiredCards = searchPermissionsService .getDesiredCards (dataset );
416-
417- for (DatasetVersion version : versionsToReIndexPermissionsFor (dataset )) {
418- if (desiredCards .get (version .getVersionState ())) {
413+ for (DatasetVersion version : datasetVersionsToBuildCardsFor (dataset )) {
419414 processDatasetVersionFiles (version , fileCounter , fileQueryMin );
420415 }
421416 }
422417 }
423418 }
424- }
425419
426420 @ TransactionAttribute (TransactionAttributeType .REQUIRES_NEW )
427421 public void indexDatasetFilesInNewTransaction (List <DatasetVersion > versions , final int [] fileCounter , int fileQueryMin ) {
@@ -500,18 +494,6 @@ private void reindexFilesInBatches(List<DataFileProxy> filesToReindexAsBatch, Li
500494 }
501495 }
502496
503- private List <DatasetVersion > versionsToReIndexPermissionsFor (Dataset dataset ) {
504- List <DatasetVersion > versionsToReindexPermissionsFor = new ArrayList <>();
505- Map <DatasetVersion .VersionState , Boolean > desiredCards = searchPermissionsService .getDesiredCards (dataset );
506- for (DatasetVersion version : datasetVersionsToBuildCardsFor (dataset )) {
507- boolean cardShouldExist = desiredCards .get (version .getVersionState ());
508- if (cardShouldExist ) {
509- versionsToReindexPermissionsFor .add (version );
510- }
511- }
512- return versionsToReindexPermissionsFor ;
513- }
514-
515497 public IndexResponse deleteMultipleSolrIds (List <String > solrIdsToDelete ) {
516498 if (solrIdsToDelete .isEmpty ()) {
517499 return new IndexResponse ("nothing to delete" );
0 commit comments