11package edu .harvard .iq .dataverse .api ;
22
3- import edu .harvard .iq .dataverse .Dataverse ;
3+ import edu .harvard .iq .dataverse .* ;
44import edu .harvard .iq .dataverse .api .auth .AuthRequired ;
55import edu .harvard .iq .dataverse .search .SearchFields ;
6- import edu .harvard .iq .dataverse .DataverseServiceBean ;
7- import edu .harvard .iq .dataverse .DvObjectServiceBean ;
86import edu .harvard .iq .dataverse .search .FacetCategory ;
97import edu .harvard .iq .dataverse .search .FacetLabel ;
108import edu .harvard .iq .dataverse .search .SolrSearchResult ;
1614import edu .harvard .iq .dataverse .search .SearchConstants ;
1715import edu .harvard .iq .dataverse .search .SearchException ;
1816import edu .harvard .iq .dataverse .search .SearchUtil ;
19- import edu .harvard .iq .dataverse .search .SolrIndexServiceBean ;
2017import edu .harvard .iq .dataverse .search .SortBy ;
2118import edu .harvard .iq .dataverse .settings .SettingsServiceBean ;
2219import java .io .IOException ;
2623import java .util .Map ;
2724import java .util .logging .Logger ;
2825import jakarta .ejb .EJB ;
26+ import jakarta .inject .Inject ;
2927import jakarta .json .Json ;
3028import jakarta .json .JsonArrayBuilder ;
3129import jakarta .json .JsonObjectBuilder ;
@@ -51,10 +49,8 @@ public class Search extends AbstractApiBean {
5149 SearchServiceBean searchService ;
5250 @ EJB
5351 DataverseServiceBean dataverseService ;
54- @ EJB
55- DvObjectServiceBean dvObjectService ;
56- @ EJB
57- SolrIndexServiceBean SolrIndexService ;
52+ @ Inject
53+ DatasetVersionFilesServiceBean datasetVersionFilesServiceBean ;
5854
5955 @ GET
6056 @ AuthRequired
@@ -179,39 +175,40 @@ public Response search(
179175 JsonArrayBuilder itemsArrayBuilder = Json .createArrayBuilder ();
180176 List <SolrSearchResult > solrSearchResults = solrQueryResponse .getSolrSearchResults ();
181177 for (SolrSearchResult solrSearchResult : solrSearchResults ) {
182- itemsArrayBuilder .add (solrSearchResult .toJsonObject (showRelevance , showEntityIds , showApiUrls , metadataFields ));
178+ itemsArrayBuilder .add (solrSearchResult .json (showRelevance , showEntityIds , showApiUrls , metadataFields , getDatasetFileCount ( solrSearchResult ) ));
183179 }
184180
185181 JsonObjectBuilder spelling_alternatives = Json .createObjectBuilder ();
186182 for (Map .Entry <String , List <String >> entry : solrQueryResponse .getSpellingSuggestionsByToken ().entrySet ()) {
187183 spelling_alternatives .add (entry .getKey (), entry .getValue ().toString ());
188184 }
189185
190- JsonArrayBuilder facets = Json .createArrayBuilder ();
191- JsonObjectBuilder facetCategoryBuilder = Json .createObjectBuilder ();
192- for (FacetCategory facetCategory : solrQueryResponse .getFacetCategoryList ()) {
193- JsonObjectBuilder facetCategoryBuilderFriendlyPlusData = Json .createObjectBuilder ();
194- JsonArrayBuilder facetLabelBuilderData = Json .createArrayBuilder ();
195- for (FacetLabel facetLabel : facetCategory .getFacetLabel ()) {
196- JsonObjectBuilder countBuilder = Json .createObjectBuilder ();
197- countBuilder .add (facetLabel .getName (), facetLabel .getCount ());
198- facetLabelBuilderData .add (countBuilder );
199- }
200- facetCategoryBuilderFriendlyPlusData .add ("friendly" , facetCategory .getFriendlyName ());
201- facetCategoryBuilderFriendlyPlusData .add ("labels" , facetLabelBuilderData );
202- facetCategoryBuilder .add (facetCategory .getName (), facetCategoryBuilderFriendlyPlusData );
203- }
204- facets .add (facetCategoryBuilder );
205-
206186 JsonObjectBuilder value = Json .createObjectBuilder ()
207187 .add ("q" , query )
208188 .add ("total_count" , solrQueryResponse .getNumResultsFound ())
209189 .add ("start" , solrQueryResponse .getResultsStart ())
210190 .add ("spelling_alternatives" , spelling_alternatives )
211191 .add ("items" , itemsArrayBuilder .build ());
192+
212193 if (showFacets ) {
194+ JsonArrayBuilder facets = Json .createArrayBuilder ();
195+ JsonObjectBuilder facetCategoryBuilder = Json .createObjectBuilder ();
196+ for (FacetCategory facetCategory : solrQueryResponse .getFacetCategoryList ()) {
197+ JsonObjectBuilder facetCategoryBuilderFriendlyPlusData = Json .createObjectBuilder ();
198+ JsonArrayBuilder facetLabelBuilderData = Json .createArrayBuilder ();
199+ for (FacetLabel facetLabel : facetCategory .getFacetLabel ()) {
200+ JsonObjectBuilder countBuilder = Json .createObjectBuilder ();
201+ countBuilder .add (facetLabel .getName (), facetLabel .getCount ());
202+ facetLabelBuilderData .add (countBuilder );
203+ }
204+ facetCategoryBuilderFriendlyPlusData .add ("friendly" , facetCategory .getFriendlyName ());
205+ facetCategoryBuilderFriendlyPlusData .add ("labels" , facetLabelBuilderData );
206+ facetCategoryBuilder .add (facetCategory .getName (), facetCategoryBuilderFriendlyPlusData );
207+ }
208+ facets .add (facetCategoryBuilder );
213209 value .add ("facets" , facets );
214210 }
211+
215212 value .add ("count_in_response" , solrSearchResults .size ());
216213 /**
217214 * @todo Returning the fq might be useful as a troubleshooting aid
@@ -232,6 +229,15 @@ public Response search(
232229 }
233230 }
234231
232+ private Long getDatasetFileCount (SolrSearchResult solrSearchResult ) {
233+ DvObject dvObject = solrSearchResult .getEntity ();
234+ if (dvObject .isInstanceofDataset ()) {
235+ DatasetVersion datasetVersion = ((Dataset ) dvObject ).getVersionFromId (solrSearchResult .getDatasetVersionId ());
236+ return datasetVersionFilesServiceBean .getFileMetadataCount (datasetVersion );
237+ }
238+ return null ;
239+ }
240+
235241 private User getUser (ContainerRequestContext crc ) throws WrappedResponse {
236242 User userToExecuteSearchAs = GuestUser .get ();
237243 try {
0 commit comments