• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

IQSS / dataverse / #22693

03 Jul 2024 01:09PM CUT coverage: 20.626% (-0.09%) from 20.716%
#22693

push

github

web-flow
Merge pull request #10664 from IQSS/develop

merge develop into master for 6.3

195 of 1852 new or added lines in 82 files covered. (10.53%)

72 existing lines in 33 files now uncovered.

17335 of 84043 relevant lines covered (20.63%)

0.21 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/main/java/edu/harvard/iq/dataverse/mydata/MyDataFilterParams.java
1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package edu.harvard.iq.dataverse.mydata;
7

8
import edu.harvard.iq.dataverse.DvObject;
9
import edu.harvard.iq.dataverse.search.IndexServiceBean;
10
import edu.harvard.iq.dataverse.authorization.DataverseRolePermissionHelper;
11
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
12
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
13
import edu.harvard.iq.dataverse.search.SearchConstants;
14
import edu.harvard.iq.dataverse.search.SearchFields;
15
import edu.harvard.iq.dataverse.util.BundleUtil;
16
import java.util.ArrayList;
17
import java.util.Arrays;
18
import java.util.HashMap;
19
import java.util.List;
20
import java.util.logging.Logger;
21
import jakarta.json.Json;
22
import jakarta.json.JsonArrayBuilder;
23
import jakarta.json.JsonObjectBuilder;
24
import org.apache.commons.lang3.StringUtils;
25

26
/**
27
 *
28
 * @author rmp553
29
 */
30
public class MyDataFilterParams {
31

32
    private static final Logger logger = Logger.getLogger(MyDataFilterParams.class.getCanonicalName());
×
33

34
    // -----------------------------------
35
    // Static Reference objects
36
    // -----------------------------------
37
    public static final List<DvObject.DType> defaultDvObjectTypes = Arrays.asList(DvObject.DType.Dataverse, DvObject.DType.Dataset);
×
38
    public static final List<DvObject.DType> allDvObjectTypes = Arrays.asList(DvObject.DType.Dataverse, DvObject.DType.Dataset, DvObject.DType.Dataverse, DvObject.DType.DataFile);
×
39
    
40
    public static final List<String> defaultPublishedStates = Arrays.asList(IndexServiceBean.getPUBLISHED_STRING(),
×
41
                                                    IndexServiceBean.getUNPUBLISHED_STRING(),
×
42
                                                    IndexServiceBean.getDRAFT_STRING(),
×
43
                                                    IndexServiceBean.getIN_REVIEW_STRING(),
×
44
                                                    IndexServiceBean.getDEACCESSIONED_STRING());
×
45
    public static final List<String> allPublishedStates = defaultPublishedStates;
×
46
            /*Arrays.asList(IndexServiceBean.getPUBLISHED_STRING(),
47
                                                    IndexServiceBean.getUNPUBLISHED_STRING(),
48
                                                    IndexServiceBean.getDRAFT_STRING(),
49
                                                    IndexServiceBean.getIN_REVIEW_STRING(),
50
                                                    IndexServiceBean.getDEACCESSIONED_STRING());*/
51
            
52
    public static final HashMap<DvObject.DType, String> sqlToSolrSearchMap ;
53
    static
54
    {
55
        sqlToSolrSearchMap = new HashMap<>();
×
56
        sqlToSolrSearchMap.put(DvObject.DType.Dataverse, SearchConstants.DATAVERSES);
×
57
        sqlToSolrSearchMap.put(DvObject.DType.Dataset, SearchConstants.DATASETS);
×
58
        sqlToSolrSearchMap.put(DvObject.DType.DataFile, SearchConstants.FILES);
×
59
    }
60
    
61
    public static final HashMap<DvObject.DType, String> userInterfaceToSqlSearchMap ;
62
    static
63
    {
64
        userInterfaceToSqlSearchMap = new HashMap<>();
×
65
        
66
        userInterfaceToSqlSearchMap.put(DvObject.DType.Dataverse, SearchConstants.UI_DATAVERSES);
×
67
        userInterfaceToSqlSearchMap.put(DvObject.DType.Dataset, SearchConstants.UI_DATAVERSES);
×
68
        userInterfaceToSqlSearchMap.put(DvObject.DType.DataFile, SearchConstants.UI_FILES);
×
69
    }
×
70
    
71
    
72
    // -----------------------------------
73
    // Filter parameters
74
    // -----------------------------------
75
    private DataverseRequest dataverseRequest;
76
    private AuthenticatedUser authenticatedUser;
77
    private String userIdentifier;
78
    private List<DvObject.DType> dvObjectTypes;
79
    private List<String> publicationStatuses;
80
    private List<Long> roleIds;
81
    private List<Boolean> datasetValidities;
82
    
83
    //private ArrayList<DataverseRole> roles;
84
    public static final String defaultSearchTerm = "*:*";
85
    private String searchTerm = "*:*";
×
86
    
87
    // -----------------------------------
88
    // Error checking
89
    // -----------------------------------
90
    private boolean errorFound = false;
×
91
    private String errorMessage = null;
×
92
    
93

94
    
95
    
96
    /**
97
     * Constructor used to get total counts
98
     * 
99
     * @param authenticatedUser
100
     * @param userIdentifier 
101
     */
102
    public MyDataFilterParams(DataverseRequest dataverseRequest, DataverseRolePermissionHelper roleHelper){
×
103
        if (dataverseRequest==null){
×
104
            throw new NullPointerException("MyDataFilterParams constructor: dataverseRequest cannot be null ");
×
105
        }
106
        this.dataverseRequest = dataverseRequest;
×
107
        this.setAuthenticatedUserFromDataverseRequest(dataverseRequest);
×
108
        this.userIdentifier = authenticatedUser.getIdentifier();
×
109

110
        if (roleHelper==null){
×
111
            throw new NullPointerException("MyDataFilterParams constructor: roleHelper cannot be null");
×
112
        }
113
        this.dvObjectTypes = MyDataFilterParams.allDvObjectTypes;
×
114
        this.publicationStatuses = MyDataFilterParams.allPublishedStates;
×
115
        this.datasetValidities = null;
×
116
        this.searchTerm = MyDataFilterParams.defaultSearchTerm;
×
117
        this.roleIds = roleHelper.getRoleIdList();
×
118
    }
×
119
    
120
    /**
121
     * @param userIdentifier
122
     * @param dvObjectTypes
123
     * @param publicationStatuses 
124
     * @param searchTerm 
125
     * @param datasetValidities
126
     */
127
    public MyDataFilterParams(DataverseRequest dataverseRequest, List<DvObject.DType> dvObjectTypes, List<String> publicationStatuses, List<Long> roleIds, String searchTerm, List<Boolean> datasetValidities) {
×
128
        if (dataverseRequest==null){
×
129
            throw new NullPointerException("MyDataFilterParams constructor: dataverseRequest cannot be null ");
×
130
        }
131
        this.dataverseRequest = dataverseRequest;
×
132
        this.setAuthenticatedUserFromDataverseRequest(dataverseRequest);
×
133
        this.userIdentifier = authenticatedUser.getIdentifier();
×
134

135
        if (dvObjectTypes==null){
×
136
            throw new NullPointerException("MyDataFilterParams constructor: dvObjectTypes cannot be null");
×
137
        }
138

139
        this.dvObjectTypes = dvObjectTypes;
×
140

141
        if (publicationStatuses == null){
×
142
            this.publicationStatuses = MyDataFilterParams.defaultPublishedStates;
×
143
        }else{
144
            this.publicationStatuses = publicationStatuses;
×
145
        }
146

147
        this.datasetValidities = datasetValidities;
×
148
        
149
        // Do something here if none chosen!
150
        this.roleIds = roleIds;
×
151
        
152
        if ((searchTerm == null)||(searchTerm.trim().isEmpty())){
×
153
            this.searchTerm = MyDataFilterParams.defaultSearchTerm;
×
154
        }else{
155
            this.searchTerm = searchTerm;
×
156
        }
157
        
158
        this.checkParams();
×
159
    }
×
160
    
161
    
162
    private void setAuthenticatedUserFromDataverseRequest(DataverseRequest dvRequest){
163
        
164
        if (dvRequest == null){
×
165
            throw new NullPointerException("MyDataFilterParams getAuthenticatedUserFromDataverseRequest: dvRequest cannot be null");
×
166
        }
167
        
168
        this.authenticatedUser = dvRequest.getAuthenticatedUser();
×
169
        
170
        if (this.authenticatedUser == null){
×
171
            throw new NullPointerException("MyDataFilterParams getAuthenticatedUserFromDataverseRequest: Hold on! dvRequest must be associated with an AuthenticatedUser be null");
×
172
        }
173
    }  
×
174
    
175
    
176
    public List<Long> getRoleIds(){
177
        
178
        return this.roleIds;
×
179
    }
180
    
181
    
182
    private void checkParams() {
NEW
183
        if ((this.userIdentifier == null) || (this.userIdentifier.isEmpty())) {
×
NEW
184
            this.addError(BundleUtil.getStringFromBundle("myDataFilterParams.error.no.user"));
×
UNCOV
185
            return;
×
186
        }
187

NEW
188
        if ((this.roleIds == null) || (this.roleIds.isEmpty())) {
×
NEW
189
            this.addError(BundleUtil.getStringFromBundle("myDataFilterParams.error.result.no.role"));
×
UNCOV
190
            return;
×
191
        }
192

NEW
193
        if ((this.dvObjectTypes == null) || (this.dvObjectTypes.isEmpty())) {
×
NEW
194
            this.addError(BundleUtil.getStringFromBundle("myDataFilterParams.error.result.no.dvobject"));
×
UNCOV
195
            return;
×
196
        }
197

NEW
198
        if ((this.publicationStatuses == null) || (this.publicationStatuses.isEmpty())) {
×
NEW
199
            this.addError(BundleUtil.getStringFromBundle("dataretrieverAPI.user.not.found",
×
NEW
200
                    Arrays.asList(StringUtils.join(MyDataFilterParams.defaultPublishedStates, ", "))));
×
UNCOV
201
            return;
×
202
        }
203
    }
×
204
    
205
    public List<DvObject.DType> getDvObjectTypes(){
206
        return this.dvObjectTypes;
×
207
    }
208
    
209
    public String getUserIdentifier(){
210
        return this.userIdentifier;
×
211
    }
212
    
213
    
214
    public AuthenticatedUser getAuthenticatedUser() {
215
        return authenticatedUser;
×
216
    }
217
    
218
    public String getErrorMessage(){
219
        return this.errorMessage;
×
220
    }
221
    
222
    public boolean hasError(){
223
        return this.errorFound;
×
224
    }
225

226
    public void addError(String s){
227
        this.errorFound = true;
×
228
        this.errorMessage = s;
×
229
    }
×
230

231
    
232
    
233
    // --------------------------------------------
234
    // start: Convenience methods for dvObjectTypes
235
    // --------------------------------------------
236
    public boolean areDataversesIncluded(){
237
        if (this.dvObjectTypes.contains(DvObject.DType.Dataverse)){
×
238
            return true;
×
239
        }
240
        return false;
×
241
    }
242
    public boolean areDatasetsIncluded(){
243
        if (this.dvObjectTypes.contains(DvObject.DType.Dataset)){
×
244
            return true;
×
245
        }
246
        return false;
×
247
    }
248
    public boolean areFilesIncluded(){
249
        if (this.dvObjectTypes.contains(DvObject.DType.DataFile)){
×
250
            return true;
×
251
        }
252
        return false;
×
253
    }
254
    
255
    public String getSolrFragmentForDvObjectType(){
256
        if ((this.dvObjectTypes == null)||(this.dvObjectTypes.isEmpty())){
×
257
            throw new IllegalStateException("Error encountered earlier.  Before calling this method, first check 'hasError()'");
×
258
        }
259
        
260
        List<String> solrTypes = new ArrayList<>();
×
261
        for (DvObject.DType dtype : this.dvObjectTypes){
×
262
            solrTypes.add(MyDataFilterParams.sqlToSolrSearchMap.get(dtype));
×
263
        }
×
264
                
265
        String valStr = StringUtils.join(solrTypes, " OR ");
×
266
        if (this.dvObjectTypes.size() > 1){
×
267
            valStr = "(" + valStr + ")";
×
268
        }
269
        
270
        return  SearchFields.TYPE + ":" + valStr;// + ")";
×
271
    }
272

273
    public String getSolrFragmentForPublicationStatus(){
274
        if ((this.publicationStatuses == null)||(this.publicationStatuses.isEmpty())){
×
275
            throw new IllegalStateException("Error encountered earlier.  Before calling this method, first check 'hasError()'");
×
276
        }
277

278
        // Add quotes around each publication status
279
        //
280
        List<String> solrPublicationStatuses = new ArrayList<>();
×
281
        for (String pubStatus : this.publicationStatuses){
×
282
            solrPublicationStatuses.add("\"" + pubStatus + "\"");
×
283
        }
×
284
        
285
        
286
        String valStr = StringUtils.join(solrPublicationStatuses, " OR ");
×
287
        if (this.publicationStatuses.size() > 1){
×
288
            valStr = "(" + valStr + ")";
×
289
        }
290

291
        return  "(" + SearchFields.PUBLICATION_STATUS + ":" + valStr + ")";
×
292
    }
293

294
    public String getSolrFragmentForDatasetValidity(){
NEW
295
        if ((this.datasetValidities == null) || (this.datasetValidities.isEmpty()) || (this.datasetValidities.size() > 1)){
×
296
            return "";
×
297
        }
298
    
299
        
300
        String valStr = StringUtils.join(datasetValidities, " OR ");
×
301
        if (this.datasetValidities.size() > 1){
×
302
            valStr = "(" + valStr + ")";
×
303
        }
304

305
        return  "(" + SearchFields.DATASET_VALID + ":" + valStr + ")";
×
306
    }
307

308
    public String getDvObjectTypesAsJSONString(){
309
        
310
        return this.getDvObjectTypesAsJSON().build().toString();
×
311
    }
312
    
313
     /**
314
     * "publication_statuses" : [ name 1, name 2, etc.]
315
     * 
316
     * @return 
317
     */
318
    public JsonArrayBuilder getListofSelectedPublicationStatuses(){
319
        
320
        JsonArrayBuilder jsonArray = Json.createArrayBuilder();
×
321
        
322
        for (String pubStatus : this.publicationStatuses){
×
323
            jsonArray.add(pubStatus);            
×
324
        }
×
325
        return jsonArray;
×
326
                
327
    }
328

329
        
330
    /**
331
     * "dataset_valid" : [ true, false ]
332
     *
333
     * @return
334
     */
335
    public JsonArrayBuilder getListofSelectedValidities(){
336
        if (this.datasetValidities == null || this.datasetValidities.isEmpty()) {
×
337
            return null;
×
338
        }
339

340
        JsonArrayBuilder jsonArray = Json.createArrayBuilder();
×
341

342
        for (Boolean valid : this.datasetValidities){
×
343
            jsonArray.add(valid);
×
344
        }
×
345
        return jsonArray;
×
346
    }
347
    
348
    
349
    public JsonObjectBuilder getDvObjectTypesAsJSON(){
350
        
351
        JsonArrayBuilder jsonArray = Json.createArrayBuilder();
×
352

353
        jsonArray.add(Json.createObjectBuilder().add("value", DvObject.DType.Dataverse.getDType())
×
354
                            .add("label", SearchConstants.UI_DATAVERSES)
×
355
                            .add("selected", this.areDataversesIncluded()))
×
356
                .add(Json.createObjectBuilder().add("value", DvObject.DType.Dataset.getDType())
×
357
                            .add("label", SearchConstants.UI_DATASETS)
×
358
                            .add("selected", this.areDatasetsIncluded()))
×
359
                .add(Json.createObjectBuilder().add("value", DvObject.DType.DataFile.getDType())
×
360
                            .add("label", SearchConstants.UI_FILES)
×
361
                            .add("selected", this.areFilesIncluded())
×
362
                );
363
        
364
        JsonObjectBuilder jsonData = Json.createObjectBuilder();
×
365
        jsonData.add(SearchFields.TYPE, jsonArray);
×
366
        
367
        return jsonData;
×
368
    }
369
    
370
    // --------------------------------------------
371
    // end: Convenience methods for dvObjectTypes
372
    // --------------------------------------------
373

374
    public String getSearchTerm(){
375
       return this.searchTerm;
×
376
   }
377
    
378
    public static List<String[]> getPublishedStatesForMyDataPage(){
379
        if (defaultPublishedStates==null){
×
380
            throw new NullPointerException("defaultPublishedStates cannot be null");
×
381
        }
382
        List<String[]> publicationStateInfoList = new ArrayList<String[]>();
×
383
        String stateNameAsVariable;
384
        for (String displayState : defaultPublishedStates){
×
385
            stateNameAsVariable = displayState.toLowerCase().replace(" ", "_");
×
386
            String[] singleInfoRow = { displayState, stateNameAsVariable };
×
387
            publicationStateInfoList.add(singleInfoRow);
×
388
        }
×
389
        return publicationStateInfoList;
×
390
    }
391
  
392
    public DataverseRequest getDataverseRequest(){
393
        return this.dataverseRequest;
×
394
    }
395
  
396
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc