Project

General

Profile

« Previous | Next » 

Revision 61432

Improvements in parameters and author seaches

View differences:

modules/uoa-search/trunk/src/main/java/eu/dnetlib/data/search/utils/cql/ParameterQueryEnhancer.java
329 329

  
330 330
        addMetadataQueryTerm(null, keywords, queryBuilder);
331 331
        addMetadataQueryTerm("resulttitle", title, queryBuilder);
332
        addMetadataQueryTerm("resultauthor", author, queryBuilder);
332
        addMetadataAuthorTerm("resultauthor", author, queryBuilder);
333 333
        addMetadataQueryTerm("country", country, queryBuilder);
334 334
    }
335 335

  
......
390 390
        }
391 391
    }
392 392

  
393
    public static void enhanceQueryWithOrcid(StringBuilder queryBuilder, HttpServletRequest request) {
394
        String[] dois = request.getParameterValues("orcid");
395

  
396
        if (dois != null && !(dois.length==0)) {
397
            queryBuilder.append(" and ");
398
            for (int i = 0; i < dois.length; i++) {
399
                String[] commaSeparated = dois[i].split(",");
400
                for (int j = 0; j < commaSeparated.length; j++) {
401
                    queryBuilder.append("(authorid exact \"").append(commaSeparated[j]).append("||orcid\")");
402
                    if (i < dois.length-1 || j < commaSeparated.length-1 ) {
403
                        queryBuilder.append(" or ");
404
                    }
405
                }
406
            }
407
        }
408
    }
409

  
393 410
    public static void enhanceQueryWithOriginalId(StringBuilder queryBuilder, HttpServletRequest request) {
394 411
        String[] originalIds = request.getParameterValues("originalId");
395 412

  
......
468 485
        }
469 486
    }
470 487

  
488
    public static void addMetadataAuthorTerm(String indexFieldName, String fieldValue, StringBuilder queryBuilder) {
489
        if (fieldValue != null && !fieldValue.trim().isEmpty()) {
490
            if(indexFieldName != null) {
491
                for (String term: fieldValue.trim().split(";")){
492
                    addEqualQueryTerm(indexFieldName, term, queryBuilder);
493
                }
494
            } else {
495
                queryBuilder.append(" and ( " );
496
                String[] keywords = fieldValue.trim().split(";");
497
                for (int i = 0; i < keywords.length; i++) {
498
                    if (i == keywords.length -1) {
499
                        queryBuilder.append(keywords[i]);
500
                    } else {
501
                        queryBuilder.append(keywords[i]).append(" and ");
502
                    }
503
                }
504
                queryBuilder.append(")" );
505
            }
506
        }
507
    }
508

  
471 509
    public static void addORQueryTerm(String indexFieldName1, String indexFieldName2, String fieldValue, StringBuilder queryBuilder) {
472 510
        if (fieldValue != null && !fieldValue.trim().isEmpty()) {
473 511
            for (String term: fieldValue.trim().split(" ")) {
modules/uoa-search/trunk/src/main/java/eu/dnetlib/data/search/micrometer/Metrics.java
80 80
                .get();
81 81

  
82 82
        registry.gauge("micrometer_info", Tags.of("component", model.getArtifactId()).and("scmtag", "HEAD").and("version", model.getVersion()), n);
83

  
84 83
        //registry.summary("search.server.response.size");
85 84

  
86

  
87

  
88

  
89 85
    }
90 86
}
modules/uoa-search/trunk/src/main/java/eu/dnetlib/data/search/web/api/SearchRequestController.java
25 25
import org.springframework.http.ResponseEntity;
26 26
import org.springframework.stereotype.Controller;
27 27
import org.springframework.ui.ModelMap;
28
import org.springframework.web.bind.annotation.ExceptionHandler;
29
import org.springframework.web.bind.annotation.RequestMapping;
30
import org.springframework.web.bind.annotation.RequestMethod;
31
import org.springframework.web.bind.annotation.ResponseBody;
28
import org.springframework.web.bind.annotation.*;
32 29
import org.z3950.zing.cql.CQLParseException;
33 30

  
31
import javax.annotation.PostConstruct;
34 32
import javax.annotation.Resource;
35 33
import javax.servlet.ServletOutputStream;
36 34
import javax.servlet.http.HttpServletRequest;
......
73 71
    private static final String OTHER_BASIC_QUERY = "(oaftype exact result) and (resulttypeid exact other)";
74 72
    private static final String PROJECT_BASIC_QUERY = "(oaftype exact project)";
75 73

  
76
    private static final List<String> GLOBAL_PARAMETERS = Arrays.asList("page", "size", "format", "sortBy");
74
    private static final HashSet<String> GLOBAL_PARAMETERS = new HashSet<>(Arrays.asList("page", "size", "format", "sortBy"));
77 75

  
78
    private static final List<String> PUB_N_DATA_COMMON_PARAMETERS = Arrays.asList("author", "doi", "originalId", "community", "FP7ProjectID", "FP7scientificArea",
79
            "fromDateAccepted", "funder", "fundingStream", "hasECFunding", "hasProject", "hasWTFunding", "keywords",
80
            "model", "OA", "openaireProjectID", "openaireProviderID", "projectID", "title", "toDateAccepted", "country");
76
    private static final HashSet<String> PUB_N_DATA_COMMON_PARAMETERS = new HashSet<>(Arrays.asList("author", "doi", "originalId",
77
            "community", "FP7ProjectID", "FP7scientificArea", "fromDateAccepted", "funder", "fundingStream", "hasECFunding", "hasProject",
78
            "hasWTFunding", "keywords", "model", "OA", "openaireProjectID", "openaireProviderID", "projectID", "title", "toDateAccepted",
79
            "country", "orcid"));
81 80

  
82
    private static final List<String> PUB_PARAMETERS = Arrays.asList("openairePublicationID");
83
    private static final List<String> DATA_PARAMETERS = Arrays.asList("openaireDatasetID");
84
    private static final List<String> SOFTWARE_PARAMETERS = Arrays.asList("openaireSoftwareID");
85
    private static final List<String> OTHER_PARAMETERS = Arrays.asList("openaireOtherID");
81
    private static final HashSet<String> PUB_PARAMETERS = new HashSet<>(Arrays.asList("openairePublicationID"));
82
    private static final HashSet<String> DATA_PARAMETERS = new HashSet<>(Arrays.asList("openaireDatasetID"));
83
    private static final HashSet<String> SOFTWARE_PARAMETERS = new HashSet<>(Arrays.asList("openaireSoftwareID"));
84
    private static final HashSet<String> OTHER_PARAMETERS = new HashSet<>(Arrays.asList("openaireOtherID"));
86 85

  
87
    private static final List<String> PUB_N_DATASET_MODELS = Arrays.asList("dc", "openaire", "sygma");
88
    private static final List<String> PUB_N_DATASET_FORMATS = Arrays.asList("json", "rss", "xml", "csv", "tsv", "html");
86
    private static final HashSet<String> PUB_N_DATASET_MODELS = new HashSet<>(Arrays.asList("dc", "openaire", "sygma"));
87
    private static final HashSet<String> PUB_N_DATASET_FORMATS = new HashSet<>(Arrays.asList("json", "rss", "xml", "csv", "tsv", "html"));
89 88

  
90
    private static final List<String> PROJECT_PARAMETERS = Arrays.asList("acronym", "callID", "endYear", "FP7scientificArea",
89
    private static final HashSet<String> PROJECT_PARAMETERS = new HashSet<>(Arrays.asList("acronym", "callID", "endYear", "FP7scientificArea",
91 90
            "funder", "fundingStream", "grantID", "hasECFunding", "hasWTFunding", "keywords", "name",
92
            "participantAcronyms", "participantCountries", "startYear", "sc39", "openaireParticipantID", "openaireProjectID");
93
    private static final List<String> PROJECT_FORMATS = Arrays.asList("xml", "json", "csv", "tsv", "html");
91
            "participantAcronyms", "participantCountries", "startYear", "sc39", "openaireParticipantID", "openaireProjectID"));
92
    private static final HashSet<String> PROJECT_FORMATS = new HashSet<>(Arrays.asList("xml", "json", "csv", "tsv", "html"));
94 93

  
94
    @PostConstruct
95
    public void init() {
96
        PUB_PARAMETERS.addAll(PUB_N_DATA_COMMON_PARAMETERS);
97
        DATA_PARAMETERS.addAll(PUB_N_DATA_COMMON_PARAMETERS);
98
        SOFTWARE_PARAMETERS.addAll(PUB_N_DATA_COMMON_PARAMETERS);
99
        OTHER_PARAMETERS.addAll(PUB_N_DATA_COMMON_PARAMETERS);
100
    }
101

  
95 102
    //TODO this is for joomla - to be removed soon
96 103
    @RequestMapping(value = "/search", method = RequestMethod.GET)
97 104
    @Timed(value = "search.joomla.requests", longTask = false)
......
210 217
    @RequestMapping(value = "/api/publications", method = RequestMethod.GET, produces = {MediaType.APPLICATION_XML_VALUE,MediaType.APPLICATION_JSON_VALUE})
211 218
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "api", "uri", "/api/publications"}, longTask = false)
212 219
    public void searchPublications(HttpServletRequest request, HttpServletResponse response) throws Exception {
213

  
214 220
        long time = System.currentTimeMillis();
215
        checkParameters(ListUtils.union(PUB_N_DATA_COMMON_PARAMETERS, PUB_PARAMETERS),request.getParameterMap());
216

  
217 221
        int page = readParameter(request, "page", 1);
218 222
        int size = readParameter(request, "size", 10);
223
        String format = (request.getParameter("format") != null) ? request.getParameter("format") : "xml";
224
        String model = request.getParameter("model");
225

  
226
        checkParameters(PUB_PARAMETERS,request.getParameterMap());
219 227
        checkRequestSize(page, size);
220

  
221
        String format = (request.getParameter("format") != null) ? request.getParameter("format") : "xml";
222 228
        checkFormatParameter(PUB_N_DATASET_FORMATS, format);
223 229
        createResponseMeta(response, format);
230
        checkModelParameter(PUB_N_DATASET_MODELS, model);
224 231

  
225 232
        String locale = request.getParameter("locale");
226

  
227
        String model = request.getParameter("model");
228
        checkModelParameter(PUB_N_DATASET_MODELS, model);
229 233
        String sTransformer = defineTransformer(model,format);
230 234

  
231 235
        Collection<String> referrers = readParameter(request,"referrer");
......
243 247
        ParameterQueryEnhancer.enhanceQueryWithAccessRights(queryBuilder, request);
244 248
        ParameterQueryEnhancer.enhanceQueryWithDate(queryBuilder, request);
245 249
        ParameterQueryEnhancer.enhanceQueryWithDoi(queryBuilder, request);
250
        ParameterQueryEnhancer.enhanceQueryWithOrcid(queryBuilder, request);
246 251
        ParameterQueryEnhancer.enhanceQueryWithOriginalId(queryBuilder, request);
247 252

  
248

  
249 253
        ParameterQueryEnhancer.enhanceQueryWithResultsSortParameters(queryBuilder, request);
250 254
        FormattedSearchResult formattedSearchResult = null;
251 255

  
......
255 259
        } catch (Exception e) {
256 260
            logger.error("Fail to execute search.", e);
257 261
            throw new Exception("Fail to execute search", e);
258

  
259 262
        }
260 263

  
261 264
        PrintWriter writer = response.getWriter();
......
272 275
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "api", "uri", "/api/datasets"}, longTask = false)
273 276
    public void searchData(HttpServletRequest request, HttpServletResponse response) throws Exception {
274 277

  
275
        checkParameters(ListUtils.union(PUB_N_DATA_COMMON_PARAMETERS, DATA_PARAMETERS),request.getParameterMap());
278
        checkParameters(DATA_PARAMETERS,request.getParameterMap());
276 279

  
277 280
        int page = readParameter(request, "page", 1);
278 281
        int size = readParameter(request, "size", 10);
......
331 334
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "api", "uri", "/api/software"}, longTask = false)
332 335
    public void searchSoftware(HttpServletRequest request, HttpServletResponse response) throws Exception {
333 336

  
334
        checkParameters(ListUtils.union(PUB_N_DATA_COMMON_PARAMETERS, SOFTWARE_PARAMETERS),request.getParameterMap());
337
        checkParameters(SOFTWARE_PARAMETERS,request.getParameterMap());
335 338

  
336 339
        int page = readParameter(request, "page", 1);
337 340
        int size = readParameter(request, "size", 10);
......
386 389
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "api", "uri", "/api/other"}, longTask = false)
387 390
    public void searchOther(HttpServletRequest request, HttpServletResponse response) throws Exception {
388 391

  
389
        checkParameters(ListUtils.union(PUB_N_DATA_COMMON_PARAMETERS, OTHER_PARAMETERS),request.getParameterMap());
392
        checkParameters(OTHER_PARAMETERS,request.getParameterMap());
390 393

  
391 394
        int page = readParameter(request, "page", 1);
392 395
        int size = readParameter(request, "size", 10);
......
682 685
     * @param allowedParameters the allowed parameters
683 686
     * @param currentParameters the given parameters
684 687
     */
685
    private void checkParameters(List<String> allowedParameters, Map<String, String[]> currentParameters){
688
    private void checkParameters(HashSet<String> allowedParameters, Map<String, String[]> currentParameters){
686 689
        if(currentParameters != null) {
687 690
            for (String parameter : currentParameters.keySet()) {
688 691
                if (!allowedParameters.contains(parameter) && !GLOBAL_PARAMETERS.contains(parameter) && !parameter.equals("referrer")) {
......
693 696
        }
694 697
    }
695 698

  
696
    private void checkFormatParameter(List<String> allowedFormats, String requestedFormat) {
699
    private void checkFormatParameter(HashSet<String> allowedFormats, String requestedFormat) {
697 700
        if (requestedFormat!= null && !allowedFormats.contains(requestedFormat)) {
698 701
            throw new IllegalArgumentException("The requested format \'"+ requestedFormat +"\' is not supported. The supported formats are: " + allowedFormats);
699 702
        }
700 703
    }
701 704

  
702
    private static void checkModelParameter(List<String> allowedModels, String requestedModel) {
705
    private static void checkModelParameter(HashSet<String> allowedModels, String requestedModel) {
703 706
        if (requestedModel!= null && !allowedModels.contains(requestedModel)) {
704 707
            throw new IllegalArgumentException("The requested model \'"+ allowedModels +"\' is not supported. The supported formats are: " + allowedModels);
705 708
        }

Also available in: Unified diff