2
2
3
3
import edu .harvard .iq .dataverse .Dataset ;
4
4
import edu .harvard .iq .dataverse .DatasetLinkingDataverse ;
5
+ import edu .harvard .iq .dataverse .DatasetLinkingServiceBean ;
5
6
import edu .harvard .iq .dataverse .Dataverse ;
6
7
import edu .harvard .iq .dataverse .DataverseLinkingDataverse ;
8
+ import edu .harvard .iq .dataverse .DataverseLinkingServiceBean ;
7
9
import edu .harvard .iq .dataverse .DvObject ;
8
10
import edu .harvard .iq .dataverse .DvObjectServiceBean ;
9
11
import edu .harvard .iq .dataverse .EjbDataverseEngine ;
10
12
import edu .harvard .iq .dataverse .authorization .users .AuthenticatedUser ;
11
13
import edu .harvard .iq .dataverse .authorization .users .GuestUser ;
12
14
import edu .harvard .iq .dataverse .engine .command .DataverseRequest ;
13
- import edu .harvard .iq .dataverse .search .SearchServiceBean ;
14
- import edu .harvard .iq .dataverse .search .SolrQueryResponse ;
15
- import edu .harvard .iq .dataverse .search .SolrSearchResult ;
16
15
import edu .harvard .iq .dataverse .engine .command .exception .CommandException ;
16
+ import edu .harvard .iq .dataverse .engine .command .impl .DeleteDatasetLinkingDataverseCommand ;
17
+ import edu .harvard .iq .dataverse .engine .command .impl .DeleteDataverseLinkingDataverseCommand ;
17
18
import edu .harvard .iq .dataverse .engine .command .impl .LinkDatasetCommand ;
18
19
import edu .harvard .iq .dataverse .engine .command .impl .LinkDataverseCommand ;
19
20
import edu .harvard .iq .dataverse .search .SearchException ;
20
21
import edu .harvard .iq .dataverse .search .SearchFields ;
22
+ import edu .harvard .iq .dataverse .search .SearchServiceBean ;
23
+ import edu .harvard .iq .dataverse .search .SolrQueryResponse ;
24
+ import edu .harvard .iq .dataverse .search .SolrSearchResult ;
21
25
import edu .harvard .iq .dataverse .search .SortBy ;
22
26
import edu .harvard .iq .dataverse .util .SystemConfig ;
23
- import java .util .ArrayList ;
24
- import java .util .Date ;
25
- import java .util .List ;
26
- import java .util .logging .Level ;
27
- import java .util .logging .Logger ;
28
27
import jakarta .ejb .EJB ;
29
28
import jakarta .ejb .Schedule ;
30
29
import jakarta .ejb .Stateless ;
39
38
import jakarta .persistence .TypedQuery ;
40
39
import jakarta .servlet .http .HttpServletRequest ;
41
40
41
+ import java .util .ArrayList ;
42
+ import java .util .Date ;
43
+ import java .util .List ;
44
+ import java .util .logging .Level ;
45
+ import java .util .logging .Logger ;
46
+
42
47
@ Stateless
43
48
@ Named
44
49
public class SavedSearchServiceBean {
@@ -50,6 +55,10 @@ public class SavedSearchServiceBean {
50
55
@ EJB
51
56
DvObjectServiceBean dvObjectService ;
52
57
@ EJB
58
+ protected DatasetLinkingServiceBean dsLinkingService ;
59
+ @ EJB
60
+ protected DataverseLinkingServiceBean dvLinkingService ;
61
+ @ EJB
53
62
EjbDataverseEngine commandEngine ;
54
63
@ EJB
55
64
SystemConfig systemConfig ;
@@ -101,11 +110,15 @@ public SavedSearch add(SavedSearch toPersist) {
101
110
return persisted ;
102
111
}
103
112
104
- public boolean delete (long id ) {
113
+ public boolean delete (long id , boolean unlink ) throws SearchException , CommandException {
105
114
SavedSearch doomed = find (id );
106
115
boolean wasDeleted = false ;
107
116
if (doomed != null ) {
108
117
System .out .println ("deleting saved search id " + doomed .getId ());
118
+ if (unlink ) {
119
+ DataverseRequest dataverseRequest = new DataverseRequest (doomed .getCreator (), getHttpServletRequest ());
120
+ unLinksForSingleSavedSearch (dataverseRequest , doomed );
121
+ }
109
122
em .remove (doomed );
110
123
em .flush ();
111
124
wasDeleted = true ;
@@ -240,6 +253,37 @@ public JsonObjectBuilder makeLinksForSingleSavedSearch(DataverseRequest dvReq, S
240
253
return response ;
241
254
}
242
255
256
+ public void unLinksForSingleSavedSearch (DataverseRequest dvReq , SavedSearch savedSearch ) throws SearchException , CommandException {
257
+ logger .info ("UNLINK SAVED SEARCH (" + savedSearch .getId () + ") START search and unlink process" );
258
+ Date start = new Date ();
259
+ Dataverse linkingDataverse = savedSearch .getDefinitionPoint ();
260
+
261
+ SolrQueryResponse queryResponse = findHits (savedSearch );
262
+ for (SolrSearchResult solrSearchResult : queryResponse .getSolrSearchResults ()) {
263
+
264
+ DvObject dvObjectThatDefinitionPointWillLinkTo = dvObjectService .findDvObject (solrSearchResult .getEntityId ());
265
+ if (dvObjectThatDefinitionPointWillLinkTo == null ) {
266
+ continue ;
267
+ }
268
+
269
+ if (dvObjectThatDefinitionPointWillLinkTo .isInstanceofDataverse ()) {
270
+ Dataverse linkedDataverse = (Dataverse ) dvObjectThatDefinitionPointWillLinkTo ;
271
+ DataverseLinkingDataverse dvld = dvLinkingService .findDataverseLinkingDataverse (linkedDataverse .getId (), linkingDataverse .getId ());
272
+ if (dvld != null ) {
273
+ Dataverse dv = commandEngine .submitInNewTransaction (new DeleteDataverseLinkingDataverseCommand (dvReq , linkingDataverse , dvld , true ));
274
+ }
275
+ } else if (dvObjectThatDefinitionPointWillLinkTo .isInstanceofDataset ()) {
276
+ Dataset linkedDataset = (Dataset ) dvObjectThatDefinitionPointWillLinkTo ;
277
+ DatasetLinkingDataverse dsld = dsLinkingService .findDatasetLinkingDataverse (linkedDataset .getId (), linkingDataverse .getId ());
278
+ if (dsld != null ) {
279
+ Dataset ds = commandEngine .submitInNewTransaction (new DeleteDatasetLinkingDataverseCommand (dvReq , linkedDataset , dsld , true ));
280
+ }
281
+ }
282
+ }
283
+
284
+ logger .info ("UNLINK SAVED SEARCH (" + savedSearch .getId () + ") total time in ms: " + (new Date ().getTime () - start .getTime ()));
285
+ }
286
+
243
287
private SolrQueryResponse findHits (SavedSearch savedSearch ) throws SearchException {
244
288
String sortField = SearchFields .TYPE ; // first return dataverses, then datasets
245
289
String sortOrder = SortBy .DESCENDING ;
0 commit comments