Project

General

Profile

« Previous | Next » 

Revision 58157

Enhanced portal API with general method to return resources based on their type. For oaftype result we can query with multiple resulttypeids that are seperated with OR operator

View differences:

modules/uoa-search/trunk/src/test/java/eu/dnetlib/data/search/utils/cql/QueryEnhancerTest.java
1 1
package eu.dnetlib.data.search.utils.cql;
2 2

  
3
import eu.dnetlib.data.search.web.api.SearchApiService;
4
import eu.dnetlib.data.search.web.utils.RequestResponseHandler;
3 5
import org.apache.log4j.BasicConfigurator;
4 6
import org.junit.Assert;
5 7
import org.junit.Before;
6 8
import org.junit.Test;
7 9

  
10
import java.util.ArrayList;
11
import java.util.List;
12

  
8 13
/**
9 14
 * Created by kiatrop on 30/11/2016.
10 15
 */
......
72 77
        Assert.assertEquals(queryBuilder1.toString(), queryBuilder2.toString());
73 78
    }
74 79

  
80
    public void testKeywordsWithResults() {
81
        StringBuilder queryBuilder1 = new StringBuilder();
82
        StringBuilder queryBuilder2 = new StringBuilder();
83

  
84
        CQLQueryBuilder.appendKeywords(queryBuilder1, "keywords");
85
        CQLQueryBuilder.appendSimpleTerm(queryBuilder2, CQLQueryBuilder.Operator.AND, "keywords");
86

  
87
        Assert.assertEquals(queryBuilder1.toString(), queryBuilder2.toString());
88
    }
89

  
90

  
75 91
    @Test
76 92
    public void appendKeywordsTest() {
77 93
        StringBuilder queryBuilder1 = new StringBuilder();
......
162 178
        Assert.assertEquals(queryBuilder1.toString(), "existing_query");
163 179

  
164 180
    }
181

  
182
    @Test
183
    public void ResultsKeywordsTest() {
184
        List<String> types = new ArrayList<>();
185
        List<String> fieldQueries = new ArrayList<>();
186
        System.out.println(SearchApiService.buildSearchRequest(types, null, null, null, fieldQueries));
187
        System.out.println(fieldQueries);
188

  
189
        System.out.println(SearchApiService.buildSearchRequest(types, null, "124", null, fieldQueries));
190

  
191

  
192
        types.add("publications");
193
        fieldQueries = new ArrayList<>();
194
        System.out.println(SearchApiService.buildSearchRequest(types, null, null, null, fieldQueries));
195
        System.out.println(fieldQueries);
196

  
197
        types.add("datasets");
198
        fieldQueries = new ArrayList<>();
199
        System.out.println(SearchApiService.buildSearchRequest(types, null, null, null, fieldQueries));
200
        System.out.println(fieldQueries);
201

  
202
        System.out.println(SearchApiService.buildSearchRequest(types, "test", null, null, fieldQueries));
203

  
204
        System.out.println(SearchApiService.buildSearchRequest(types, "\"test\"", null, null, fieldQueries));
205

  
206
        System.out.println(SearchApiService.buildSearchRequest(types, "test", "1234", null, fieldQueries));
207

  
208

  
209

  
210
    }
165 211
}
modules/uoa-search/trunk/src/main/java/eu/dnetlib/data/search/solr/SolrClientLocator.java
36 36
            List<String> urls = lookUpServiceServiceLocator.getService().quickSearchProfile("for $x in //RESOURCE_PROFILE//PROTOCOL[./@name='solr'] return data($x/@address)");
37 37

  
38 38
            if (urls.size() > 0) {
39
                logger.debug("cached url " + cachedUrl);
39 40
                cachedUrl = chooseIndexService(urls);
40 41

  
41 42
            } else {
......
49 50
        } finally {
50 51
            logger.warn("Falling back to cached value for index : " + cachedUrl);
51 52
            client.setSolrServerUrl(cachedUrl);
53
            
52 54
            client.setInterpretation(this.interpretation);
53 55
        }
54 56

  
......
56 58
    }
57 59

  
58 60
    private String chooseIndexService(List<String> urls) {
59
        return urls.get(0);
61
        if (cachedUrl.equals("${services.index.default.url}"))
62
            return urls.get(0);
63
        return cachedUrl;
60 64
    }
61 65

  
62 66
    public ServiceLocator<ISLookUpService> getLookUpServiceServiceLocator() {
modules/uoa-search/trunk/src/main/java/eu/dnetlib/data/search/web/utils/RequestResponseHandler.java
34 34

  
35 35
        //private final List<String> PERSON_FIELD_QUERIES = Arrays.asList("oaftype exact person");
36 36

  
37
        private final String RESULT_QUERY = "oaftype exact result";
38
        private final String PUBLICATION_QUERY = "resulttypeid exact publication";
39
        private final String DATASET_QUERY = "resulttypeid exact dataset";
40
        private final String SOFTWARE_QUERY = "resulttypeid exact software";
41
        private final String OTHER_QUERY = "resulttypeid exact other";
42

  
37 43
        private String value;
38 44
        Entity(String value) {
39 45
            this.value = value;
......
155 161
                    throw new IllegalArgumentException();
156 162
            }
157 163
        }
164

  
165
        public String getSimpleQuery() {
166
            switch (this) {
167
                case RESULT:
168
                    return RESULT_QUERY;
169

  
170
                case PUBLICATION:
171
                    return PUBLICATION_QUERY;
172

  
173
                case DATASET:
174
                    return DATASET_QUERY;
175

  
176
                case SOFTWARE:
177
                    return SOFTWARE_QUERY;
178

  
179
                case OTHER:
180
                    return OTHER_QUERY;
181

  
182
                default:
183
                    throw new IllegalArgumentException();
184
            }
185
        }
158 186
    }
159 187

  
160 188
    public final static String RESULT_PREFIX = "(oaftype exact result)";
modules/uoa-search/trunk/src/main/java/eu/dnetlib/data/search/web/api/SearchApiService.java
22 22
import javax.ws.rs.core.StreamingOutput;
23 23
import java.io.IOException;
24 24
import java.io.OutputStream;
25
import java.util.ArrayList;
26
import java.util.Arrays;
25 27
import java.util.List;
26 28
import java.util.Locale;
27 29

  
......
46 48
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
47 49
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/resources"}, longTask = false)
48 50
    public Response fetchResources(@QueryParam("query") String query,
49
                                      @DefaultValue("0") @QueryParam("page") final int offset,
50
                                      @DefaultValue("10") @QueryParam("size") final int limit,
51
                                      @QueryParam("refine") @DefaultValue("false") final boolean refine,
52
                                      @QueryParam("fields") final List<String> refineFields,
53
                                      @QueryParam("sf") final List<String> specialFacets,
54
                                      @QueryParam("fq") final List<String> fieldQueries,
55
                                      @QueryParam("format") final String format,
56
                                      @QueryParam("type") final String type,
57
                                      @Context final HttpServletRequest request) {
51
                                   @DefaultValue("0") @QueryParam("page") final int offset,
52
                                   @DefaultValue("10") @QueryParam("size") final int limit,
53
                                   @QueryParam("refine") @DefaultValue("false") final boolean refine,
54
                                   @QueryParam("fields") final List<String> refineFields,
55
                                   @QueryParam("sf") final List<String> specialFacets,
56
                                   @QueryParam("fq") final List<String> fieldQueries,
57
                                   @QueryParam("format") final String format,
58
                                   @QueryParam("type") final String type,
59
                                   @Context final HttpServletRequest request) {
58 60

  
59 61
        return getResponseByEntity(query, extractEntity(type), offset, limit, format, request, refine, refineFields, specialFacets, fieldQueries);
60 62
    }
61 63

  
62 64
    @GET
65
    @Path("/api/resources2")
66
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
67
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/resources2"}, longTask = false)
68
    public Response fetchResources(@QueryParam("query") String query,
69
                                   @DefaultValue("0") @QueryParam("page") final int offset,
70
                                   @DefaultValue("10") @QueryParam("size") final int limit,
71
                                   @QueryParam("refine") @DefaultValue("false") final boolean refine,
72
                                   @QueryParam("fields") final List<String> refineFields,
73
                                   @QueryParam("sf") final List<String> specialFacets,
74
                                   @QueryParam("fq") final List<String> fieldQueries,
75
                                   @QueryParam("format") final String format,
76
                                   @QueryParam("type") final List<String> types,
77
                                   @Context final HttpServletRequest request) {
78

  
79
        return getResponseByEntityTypes(query, types, offset, limit, format, request, refine, refineFields, specialFacets, fieldQueries);
80
    }
81

  
82
    private RequestResponseHandler.Entity identifyBasicEntityType(final List<String> types) {
83
        for(String type: types) {
84
            if (type.equals(RequestResponseHandler.Entity.PUBLICATION.getPlural()) || type.equals(RequestResponseHandler.Entity.DATASET.getPlural()) ||
85
                    type.equals(RequestResponseHandler.Entity.SOFTWARE.getPlural()) || type.equals(RequestResponseHandler.Entity.OTHER.getPlural())) {
86
                return RequestResponseHandler.Entity.RESULT;
87

  
88
            } else if (type.equals(RequestResponseHandler.Entity.PROJECT.getPlural())) {
89
                return  RequestResponseHandler.Entity.PROJECT;
90

  
91
            } else if (type.equals(RequestResponseHandler.Entity.DATASOURCE.getPlural())) {
92
                return  RequestResponseHandler.Entity.DATASOURCE;
93

  
94
            } else if (type.equals(RequestResponseHandler.Entity.ORGANIZATION.getPlural())) {
95
                return RequestResponseHandler.Entity.ORGANIZATION;
96
            }
97
        }
98
        return RequestResponseHandler.Entity.NONE;
99
    }
100

  
101
    @GET
63 102
    @Path("/api/results")
64 103
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
65 104
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/results"}, longTask = false)
66 105
    public Response fetchResults(@QueryParam("q") final String keywords,
67
                                      @QueryParam("doi") final String doi,
68
                                      @QueryParam("sortBy") final String sortBy,
69
                                      @DefaultValue("0") @QueryParam("page") final int offset,
70
                                      @DefaultValue("10") @QueryParam("size") final int limit,
71
                                      @QueryParam("refine") @DefaultValue("false") final boolean refine,
72
                                      @QueryParam("fields") final List<String> refineFields,
73
                                      @QueryParam("sf") final List<String> specialFacets,
74
                                      @QueryParam("fq") final List<String> fieldQueries,
75
                                      @QueryParam("format") final String format,
76
                                      @Context final HttpServletRequest request) {
106
                                 @QueryParam("doi") final String doi,
107
                                 @QueryParam("sortBy") final String sortBy,
108
                                 @DefaultValue("0") @QueryParam("page") final int offset,
109
                                 @DefaultValue("10") @QueryParam("size") final int limit,
110
                                 @QueryParam("refine") @DefaultValue("false") final boolean refine,
111
                                 @QueryParam("fields") final List<String> refineFields,
112
                                 @QueryParam("sf") final List<String> specialFacets,
113
                                 @QueryParam("fq") final List<String> fieldQueries,
114
                                 @QueryParam("format") final String format,
115
                                 @QueryParam("type") final List<String> types,
116
                                 @Context final HttpServletRequest request) {
77 117

  
78 118
        logger.debug("Publications request received");
79
        //TODO do not allow q and keywords both - SWITCH back if needed
80
        //String simpleQuery = buildSimpleSearchQuery(RequestResponseHandler.Entity.PUBLICATION, keywords) ;
81
        String simpleQuery = buildSearchRequest(RequestResponseHandler.Entity.RESULT, keywords, doi,sortBy, fieldQueries);
119

  
120
        String simpleQuery = buildSearchRequest(types, keywords, doi,sortBy, fieldQueries);
82 121
        return getResponseByEntity(simpleQuery, RequestResponseHandler.Entity.RESULT, offset, limit, format, request, refine, refineFields, specialFacets, fieldQueries);
83 122

  
84 123
    }
85 124

  
86

  
87 125
    @GET
88 126
    @Path("/api/results/count")
89 127
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
90 128
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/results/count"}, longTask = false)
91 129
    public Response fetchResultsCount(@QueryParam("q") String query,
92
                                           @QueryParam("format") final String format,
93
                                           @QueryParam("fq") final List<String> fieldQueries,
94
                                           @Context final HttpServletRequest request)  {
95
        String fullQuery = buildSearchRequest(RequestResponseHandler.Entity.RESULT, query, fieldQueries);
130
                                      @QueryParam("format") final String format,
131
                                      @QueryParam("fq") final List<String> fieldQueries,
132
                                      @QueryParam("types") final List<String> types,
133
                                      @Context final HttpServletRequest request)  {
134
        String fullQuery = buildSearchRequest(types, query, fieldQueries);
96 135
        return getCount(request, fullQuery, format, fieldQueries);
97 136
    }
98 137

  
99 138

  
139
    /*
100 140
    @GET
101 141
    @Path("/api/results/{resultid}")
102 142
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
103 143
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/results/{resultid}"}, longTask = false)
104 144
    public Response fetchResultsById(@PathParam("resultid") String resultid,
105
                                          @QueryParam("format") final String format,
106
                                          @QueryParam("fq") final List<String> fieldQueries,
107
                                          @Context final HttpServletRequest request) {
145
                                     @QueryParam("format") final String format,
146
                                     @QueryParam("fq") final List<String> fieldQueries,
147
                                     @Context final HttpServletRequest request) {
108 148
        return getResponseByEntityId(request, RequestResponseHandler.Entity.RESULT, resultid, format, fieldQueries);
109
    }
149
    }*/
110 150

  
111 151
    @GET
112 152
    @Path("/api/publications")
......
205 245
    @Path("/api/software")
206 246
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
207 247
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/software"}, longTask = false)
208
    public Response fetchSoftware(@QueryParam("q") String keywords,
248
    public Response fetchSoftware(@QueryParam("ru") String keywords,
209 249
                                  @QueryParam("doi") final String doi,
210 250
                                  @QueryParam("sortBy") final String sortBy,
211 251
                                  @DefaultValue("0") @QueryParam("page") int offset,
......
249 289
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
250 290
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/other"}, longTask = false)
251 291
    public Response fetchOther(@QueryParam("q") String keywords,
252
                                  @QueryParam("doi") final String doi,
253
                                  @QueryParam("sortBy") final String sortBy,
254
                                  @DefaultValue("0") @QueryParam("page") int offset,
255
                                  @DefaultValue("10") @QueryParam("size") int limit,
256
                                  @QueryParam("refine") @DefaultValue("false") boolean refine,
257
                                  @QueryParam("fields") final List<String> refineFields,
258
                                  @QueryParam("sf") final List<String> specialFacets,
259
                                   @QueryParam("fq") final List<String> fieldQueries,
260
                                  @QueryParam("format") final String format,
261
                                  @Context HttpServletRequest request) {
292
                               @QueryParam("doi") final String doi,
293
                               @QueryParam("sortBy") final String sortBy,
294
                               @DefaultValue("0") @QueryParam("page") int offset,
295
                               @DefaultValue("10") @QueryParam("size") int limit,
296
                               @QueryParam("refine") @DefaultValue("false") boolean refine,
297
                               @QueryParam("fields") final List<String> refineFields,
298
                               @QueryParam("sf") final List<String> specialFacets,
299
                               @QueryParam("fq") final List<String> fieldQueries,
300
                               @QueryParam("format") final String format,
301
                               @Context HttpServletRequest request) {
262 302

  
263 303
        String simpleQuery = buildSearchRequest(RequestResponseHandler.Entity.OTHER, keywords, doi, sortBy, fieldQueries);
264 304
        return getResponseByEntity(simpleQuery, RequestResponseHandler.Entity.OTHER, offset, limit, format, request, refine, refineFields, specialFacets, fieldQueries);
......
269 309
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
270 310
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/other"}, longTask = false)
271 311
    public Response fetchOtherCount(@QueryParam("q") String query,
272
                                       @QueryParam("format") final String format,
273
                                       @QueryParam("fq") final List<String> fieldQueries,
274
                                       @Context final HttpServletRequest request)  {
312
                                    @QueryParam("format") final String format,
313
                                    @QueryParam("fq") final List<String> fieldQueries,
314
                                    @Context final HttpServletRequest request)  {
275 315
        String fullQuery = buildSearchRequest(RequestResponseHandler.Entity.OTHER, query, fieldQueries);
276 316
        return getCount(request, fullQuery, format, fieldQueries);
277 317
    }
......
281 321
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
282 322
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/other/{otherid}"}, longTask = false)
283 323
    public Response fetchOther(@PathParam("otherid") String datasetid,
284
                                  @QueryParam("format") final String format,
285
                                  @QueryParam("fq") final List<String> fieldQueries,
286
                                  @Context final HttpServletRequest request) {
324
                               @QueryParam("format") final String format,
325
                               @QueryParam("fq") final List<String> fieldQueries,
326
                               @Context final HttpServletRequest request) {
287 327
        return getResponseByEntityId(request, RequestResponseHandler.Entity.OTHER, datasetid, format, fieldQueries);
288 328
    }
289 329
    @GET
......
360 400
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
361 401
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/projects/{projectId}/datasets"}, longTask = false)
362 402
    public Response fetchProjectDatasets(@PathParam("projectId") String projectId,
363
                                             @DefaultValue("0") @QueryParam("page") int offset,
364
                                             @DefaultValue("10") @QueryParam("size") int limit,
365
                                             @QueryParam("format") final String format,
366
                                             @QueryParam("fq") final List<String> fieldQueries,
367
                                             @Context HttpServletRequest request)  {
403
                                         @DefaultValue("0") @QueryParam("page") int offset,
404
                                         @DefaultValue("10") @QueryParam("size") int limit,
405
                                         @QueryParam("format") final String format,
406
                                         @QueryParam("fq") final List<String> fieldQueries,
407
                                         @Context HttpServletRequest request)  {
368 408

  
369 409
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.DATASET, "relprojectid", projectId, fieldQueries);
370 410
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.DATASET, offset, limit, format, request, false, null, null, fieldQueries);
......
421 461
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
422 462
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/projects/{projectId}/other/count"}, longTask = false)
423 463
    public Response fetchProjectOtherCount(@PathParam("projectId") String projectId,
424
                                              @DefaultValue("0") @QueryParam("page") int offset,
425
                                              @DefaultValue("10") @QueryParam("size") int limit,
426
                                              @QueryParam("format") final String format,
427
                                              @QueryParam("fq") final List<String> fieldQueries,
428
                                              @Context HttpServletRequest request)  {
464
                                           @DefaultValue("0") @QueryParam("page") int offset,
465
                                           @DefaultValue("10") @QueryParam("size") int limit,
466
                                           @QueryParam("format") final String format,
467
                                           @QueryParam("fq") final List<String> fieldQueries,
468
                                           @Context HttpServletRequest request)  {
429 469
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.OTHER, "relprojectid", projectId, fieldQueries);
430 470
        return getCount(request, fullQuery, format, fieldQueries);
431 471
    }
......
435 475
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
436 476
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/projects/{projectId}/other"}, longTask = false)
437 477
    public Response fetchProjectOther(@PathParam("projectId") String projectId,
438
                                         @DefaultValue("0") @QueryParam("page") int offset,
439
                                         @DefaultValue("10") @QueryParam("size") int limit,
440
                                         @QueryParam("format") final String format,
441
                                         @QueryParam("fq") final List<String> fieldQueries,
442
                                         @Context HttpServletRequest request)  {
478
                                      @DefaultValue("0") @QueryParam("page") int offset,
479
                                      @DefaultValue("10") @QueryParam("size") int limit,
480
                                      @QueryParam("format") final String format,
481
                                      @QueryParam("fq") final List<String> fieldQueries,
482
                                      @Context HttpServletRequest request)  {
443 483

  
444 484
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.OTHER, "relprojectid", projectId, fieldQueries);
445 485
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.OTHER, offset, limit, format, request, false, null, null, fieldQueries);
......
562 602
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
563 603
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations/{organizationid}/publications"}, longTask = false)
564 604
    public Response fetchOrganizationPublications(@PathParam("organizationid") String organizationid,
565
                                              @DefaultValue("0") @QueryParam("page") int offset,
566
                                              @DefaultValue("10") @QueryParam("size") int limit,
567
                                              @QueryParam("format") final String format,
568
                                              @QueryParam("fq") final List<String> fieldQueries,
569
                                              @Context HttpServletRequest request)  {
605
                                                  @DefaultValue("0") @QueryParam("page") int offset,
606
                                                  @DefaultValue("10") @QueryParam("size") int limit,
607
                                                  @QueryParam("format") final String format,
608
                                                  @QueryParam("fq") final List<String> fieldQueries,
609
                                                  @Context HttpServletRequest request)  {
570 610
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.PUBLICATION, "relorganizationid", organizationid, fieldQueries);
571 611
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.PUBLICATION, offset, limit, format, request, false, null, null, fieldQueries);
572 612
    }
......
576 616
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
577 617
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations/{organizationid}/publications/count"}, longTask = false)
578 618
    public Response fetchOrganizationPublicationsCount(@PathParam("organizationid") String organizationid,
579
                                                  @DefaultValue("0") @QueryParam("page") int offset,
580
                                                  @DefaultValue("10") @QueryParam("size") int limit,
581
                                                  @QueryParam("format") final String format,
582
                                                  @QueryParam("fq") final List<String> fieldQueries,
583
                                                  @Context HttpServletRequest request)  {
619
                                                       @DefaultValue("0") @QueryParam("page") int offset,
620
                                                       @DefaultValue("10") @QueryParam("size") int limit,
621
                                                       @QueryParam("format") final String format,
622
                                                       @QueryParam("fq") final List<String> fieldQueries,
623
                                                       @Context HttpServletRequest request)  {
584 624
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.PUBLICATION, "relorganizationid", organizationid, fieldQueries);
585 625
        return getCount(request, fullQuery, format, fieldQueries);
586 626
    }
......
590 630
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
591 631
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations/{organizationid}/datasets"}, longTask = false)
592 632
    public Response fetchOrganizationDatsets(@PathParam("organizationid") String organizationid,
593
                                                  @DefaultValue("0") @QueryParam("page") int offset,
594
                                                  @DefaultValue("10") @QueryParam("size") int limit,
595
                                                  @QueryParam("format") final String format,
596
                                                  @QueryParam("fq") final List<String> fieldQueries,
597
                                                  @Context HttpServletRequest request)  {
633
                                             @DefaultValue("0") @QueryParam("page") int offset,
634
                                             @DefaultValue("10") @QueryParam("size") int limit,
635
                                             @QueryParam("format") final String format,
636
                                             @QueryParam("fq") final List<String> fieldQueries,
637
                                             @Context HttpServletRequest request)  {
598 638
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.DATASET, "relorganizationid", organizationid, fieldQueries);
599 639
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.DATASET, offset, limit, format, request, false, null, null,fieldQueries);
600 640
    }
......
604 644
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
605 645
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations/{organizationid}/datasets/count"}, longTask = false)
606 646
    public Response fetchOrganizationDatsetsCount(@PathParam("organizationid") String organizationid,
607
                                             @DefaultValue("0") @QueryParam("page") int offset,
608
                                             @DefaultValue("10") @QueryParam("size") int limit,
609
                                             @QueryParam("format") final String format,
610
                                             @QueryParam("fq") final List<String> fieldQueries,
611
                                             @Context HttpServletRequest request)  {
647
                                                  @DefaultValue("0") @QueryParam("page") int offset,
648
                                                  @DefaultValue("10") @QueryParam("size") int limit,
649
                                                  @QueryParam("format") final String format,
650
                                                  @QueryParam("fq") final List<String> fieldQueries,
651
                                                  @Context HttpServletRequest request)  {
612 652
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.DATASET, "relorganizationid", organizationid, fieldQueries);
613 653
        return getCount(request, fullQuery, format, fieldQueries);
614 654
    }
......
618 658
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
619 659
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations/{organizationid}/projects"}, longTask = false)
620 660
    public Response fetchOrganizationProjects(@PathParam("organizationid") String organizationid,
621
                                                 @DefaultValue("0") @QueryParam("page") int offset,
622
                                                 @DefaultValue("10") @QueryParam("size") int limit,
623
                                                 @QueryParam("format") final String format,
624
                                                 @QueryParam("fq") final List<String> fieldQueries,
625
                                                 @Context HttpServletRequest request)  {
661
                                              @DefaultValue("0") @QueryParam("page") int offset,
662
                                              @DefaultValue("10") @QueryParam("size") int limit,
663
                                              @QueryParam("format") final String format,
664
                                              @QueryParam("fq") final List<String> fieldQueries,
665
                                              @Context HttpServletRequest request)  {
626 666
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.PROJECT, "relorganizationid", organizationid, fieldQueries);
627 667
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.PROJECT, offset, limit, format, request, false, null, null, fieldQueries);
628 668
    }
......
639 679
        return getCount(request, fullQuery,format, fieldQueries);
640 680
    }
641 681

  
642
/*
682
    /*
643 683

  
644
    @GET
645
    @Path("/api/people")
646
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
647
    public Response fetchPeople(@QueryParam("q") String keywords,
648
                                @DefaultValue("0") @QueryParam("page") final int offset,
649
                                @DefaultValue("10") @QueryParam("size") final int limit,
650
                                @QueryParam("refine") @DefaultValue("false") final boolean refine,
651
                                @QueryParam("fields") final List<String> refineFields,
652
                                @QueryParam("fq") final List<String> fieldQueries,
653
                                @QueryParam("format") final String format,
654
                                @Context final HttpServletRequest request) {
684
        @GET
685
        @Path("/api/people")
686
        @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
687
        public Response fetchPeople(@QueryParam("q") String keywords,
688
                                    @DefaultValue("0") @QueryParam("page") final int offset,
689
                                    @DefaultValue("10") @QueryParam("size") final int limit,
690
                                    @QueryParam("refine") @DefaultValue("false") final boolean refine,
691
                                    @QueryParam("fields") final List<String> refineFields,
692
                                    @QueryParam("fq") final List<String> fieldQueries,
693
                                    @QueryParam("format") final String format,
694
                                    @Context final HttpServletRequest request) {
655 695

  
656
        String simpleQuery = buildSearchRequest(RequestResponseHandler.Entity.PERSON, keywords, fieldQueries);
657
        return getResponseByEntity(simpleQuery, RequestResponseHandler.Entity.PERSON, offset, limit, format, request, refine, refineFields, fieldQueries);
658
    }
696
            String simpleQuery = buildSearchRequest(RequestResponseHandler.Entity.PERSON, keywords, fieldQueries);
697
            return getResponseByEntity(simpleQuery, RequestResponseHandler.Entity.PERSON, offset, limit, format, request, refine, refineFields, fieldQueries);
698
        }
659 699

  
660 700

  
661
    @GET
662
    @Path("/api/people/count")
663
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
664
    public Response fetchPeopleCount(@QueryParam("q") String query,
665
                                     @QueryParam("format") final String format,
666
                                     @QueryParam("fq") final List<String> fieldQueries,
667
                                     @Context final HttpServletRequest request) {
668
        String fullQuery = buildSearchRequest(RequestResponseHandler.Entity.PERSON, query, fieldQueries);
669
        return getCount(request, fullQuery, format, fieldQueries);
670
    }
701
        @GET
702
        @Path("/api/people/count")
703
        @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
704
        public Response fetchPeopleCount(@QueryParam("q") String query,
705
                                         @QueryParam("format") final String format,
706
                                         @QueryParam("fq") final List<String> fieldQueries,
707
                                         @Context final HttpServletRequest request) {
708
            String fullQuery = buildSearchRequest(RequestResponseHandler.Entity.PERSON, query, fieldQueries);
709
            return getCount(request, fullQuery, format, fieldQueries);
710
        }
671 711

  
672
    @GET
673
    @Path("/api/people/{personid}")
674
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
675
    public Response fetchPeople(@PathParam("personid") String personid,
676
                                @QueryParam("format") final String format,
677
                                @QueryParam("fq") final List<String> fieldQueries,
678
                                @Context final HttpServletRequest request) {
679
        return getResponseByEntityId(request, RequestResponseHandler.Entity.PERSON, personid, format, fieldQueries);
680
    }
712
        @GET
713
        @Path("/api/people/{personid}")
714
        @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
715
        public Response fetchPeople(@PathParam("personid") String personid,
716
                                    @QueryParam("format") final String format,
717
                                    @QueryParam("fq") final List<String> fieldQueries,
718
                                    @Context final HttpServletRequest request) {
719
            return getResponseByEntityId(request, RequestResponseHandler.Entity.PERSON, personid, format, fieldQueries);
720
        }
681 721

  
682 722

  
683
    @GET
684
    @Path("/api/people/{personid}/publications")
685
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
686
    public Response fetchPeoplePublications(@PathParam("personid") String personid,
723
        @GET
724
        @Path("/api/people/{personid}/publications")
725
        @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
726
        public Response fetchPeoplePublications(@PathParam("personid") String personid,
727
                                                @DefaultValue("0") @QueryParam("page") final int offset,
728
                                                @DefaultValue("10") @QueryParam("size") final int limit,
729
                                                @QueryParam("format") final String format,
730
                                                @QueryParam("fq") final List<String> fieldQueries,
731
                                                @Context final HttpServletRequest request) {
732
            String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.PUBLICATION, "relpersonid", personid, fieldQueries);
733
            return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.PUBLICATION, offset, limit, format, request, false, null, fieldQueries);
734
        }
735

  
736
        @GET
737
        @Path("/api/people/{personid}/publications/count")
738
        @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
739
        public Response fetchPeoplePublicationsCount(@PathParam("personid") String personid,
740
                                                     @QueryParam("format") final String format,
741
                                                     @QueryParam("fq") final List<String> fieldQueries,
742
                                                     @Context final HttpServletRequest request) {
743
            String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.PUBLICATION, "relpersonid", personid, fieldQueries);
744
            return getCount(request, fullQuery, format, fieldQueries);
745
        }
746

  
747

  
748
        @GET
749
        @Path("/api/people/{personid}/datasets")
750
        @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
751
        public Response fetchPeopleDatasets(@PathParam("personid") String personid,
687 752
                                            @DefaultValue("0") @QueryParam("page") final int offset,
688 753
                                            @DefaultValue("10") @QueryParam("size") final int limit,
689 754
                                            @QueryParam("format") final String format,
690 755
                                            @QueryParam("fq") final List<String> fieldQueries,
691 756
                                            @Context final HttpServletRequest request) {
692
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.PUBLICATION, "relpersonid", personid, fieldQueries);
693
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.PUBLICATION, offset, limit, format, request, false, null, fieldQueries);
694
    }
757
            String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.DATASET, "relpersonid", personid, fieldQueries);
758
            return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.DATASET, offset, limit, format, request, false, null, fieldQueries);
759
        }
695 760

  
696
    @GET
697
    @Path("/api/people/{personid}/publications/count")
698
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
699
    public Response fetchPeoplePublicationsCount(@PathParam("personid") String personid,
761
        @GET
762
        @Path("/api/people/{personid}/datasets/count")
763
        @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
764
        public Response fetchPeopleDatasetsCount(@PathParam("personid") String personid,
700 765
                                                 @QueryParam("format") final String format,
701 766
                                                 @QueryParam("fq") final List<String> fieldQueries,
702 767
                                                 @Context final HttpServletRequest request) {
703
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.PUBLICATION, "relpersonid", personid, fieldQueries);
704
        return getCount(request, fullQuery, format, fieldQueries);
705
    }
706

  
707

  
768
            String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.DATASET, "relpersonid", personid, fieldQueries);
769
            return getCount(request, fullQuery, format, fieldQueries);
770
        }
771
    */
708 772
    @GET
709
    @Path("/api/people/{personid}/datasets")
710
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
711
    public Response fetchPeopleDatasets(@PathParam("personid") String personid,
712
                                        @DefaultValue("0") @QueryParam("page") final int offset,
713
                                        @DefaultValue("10") @QueryParam("size") final int limit,
714
                                        @QueryParam("format") final String format,
715
                                        @QueryParam("fq") final List<String> fieldQueries,
716
                                        @Context final HttpServletRequest request) {
717
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.DATASET, "relpersonid", personid, fieldQueries);
718
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.DATASET, offset, limit, format, request, false, null, fieldQueries);
719
    }
720

  
721
    @GET
722
    @Path("/api/people/{personid}/datasets/count")
723
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
724
    public Response fetchPeopleDatasetsCount(@PathParam("personid") String personid,
725
                                             @QueryParam("format") final String format,
726
                                             @QueryParam("fq") final List<String> fieldQueries,
727
                                             @Context final HttpServletRequest request) {
728
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.DATASET, "relpersonid", personid, fieldQueries);
729
        return getCount(request, fullQuery, format, fieldQueries);
730
    }
731
*/
732
    @GET
733 773
    @Path("/api/reports")
734 774
    @Produces(MediaType.TEXT_PLAIN)
735 775
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/reports"}, longTask = false)
736
    public Response fetchReport(@QueryParam("q") String keywords,
776
    public Response fetchReport(@QueryParam("query") String query,
737 777
                                @QueryParam("refine") @DefaultValue("false") boolean refine,
738 778
                                @QueryParam("fields") final List<String> refineFields,
739 779
                                @QueryParam("fq") final List<String> fieldQueries,
740
                                @QueryParam("type") final String type,
780
                                @QueryParam("type") final List<String> types,
741 781
                                @QueryParam("format") final String format,
742 782
                                @Context final HttpServletResponse response) {
743 783

  
784
        long startTime = System.nanoTime();
744 785
        logger.debug("Reports request received");
745 786

  
746
        if (type == null || type.isEmpty()) {
747
            return Response.status(Response.Status.BAD_REQUEST).entity(APIResponseFormatter.
748
                    compose500Message(MediaType.APPLICATION_JSON, "Fail to fetch report.", "The 'type' parameter is missing.")).build();
749
        }
750

  
751
        long startTime = System.nanoTime();
752
        final RequestResponseHandler.Entity entity =  extractEntity(type);
753
        final Transformer transformer = extractTransformer(format, entity);
754 787
        final boolean special = isSpecialFormat(format);
755 788
        String responseType =  extractResponseFormat(format);
756 789

  
757
        final String fullQuery = buildSearchRequest(entity, keywords, fieldQueries);
758
        logger.debug("fullquery " + fullQuery);
790
        if(checkTypes(types)) {
791
            return Response.status(Response.Status.FORBIDDEN).
792
                    entity(APIResponseFormatter.compose400Message(responseType, "The type parameter is missing or is invalid.")).type(responseType).build();
793
        }
794

  
795
        RequestResponseHandler.Entity basicEntity = identifyBasicEntityType(types);
796
        if (basicEntity.equals(RequestResponseHandler.Entity.NONE)) {
797
            return Response.status(Response.Status.FORBIDDEN).
798
                    entity(APIResponseFormatter.compose400Message(responseType, "The type parameter is missing or is invalid.")).type(responseType).build();
799
        }
800

  
801
        Transformer transformer = extractTransformer(format, basicEntity);
802

  
803
        StringBuilder queryBuilder = new StringBuilder();
804
        if (basicEntity.equals(RequestResponseHandler.Entity.RESULT)) {
805
            enhanceFieldQueryWithResultType(types, fieldQueries);
806

  
807
        } else {
808
            enhanceFieldQueryWithEntityType(basicEntity, fieldQueries);
809
        }
810

  
811
        final String fullquery;
812
        if (query==null || query.isEmpty()) {
813
            fullquery = "*";
814
        } else {
815
            fullquery = query;
816
        }
817

  
818
        logger.debug("fullquery " + query);
759 819
        logger.debug("fieldQueries " + fieldQueries);
760 820

  
761 821
        try {
762
            SearchResult sr = ((SearchServiceImpl)searchService).newSearch(fullQuery, Locale.getDefault().toString(), refineFields, null, fieldQueries,0, 0, format, transformer,null,false);
822
            SearchResult sr = ((SearchServiceImpl)searchService).newSearch(fullquery, Locale.getDefault().toString(), refineFields, null, fieldQueries,0, 0, format, transformer,null,false);
763 823
            logger.debug("Total number of results " + sr.getTotal());
764 824

  
765 825

  
......
773 833
            public void write(OutputStream os) throws IOException, WebApplicationException
774 834
            {
775 835
                if (hasTitle(format) && !format.equals("html")) {
776
                    os.write(CSVResponseFormat.appendTitle(entity, special).getBytes());
836
                    os.write(CSVResponseFormat.appendTitle(basicEntity, special).getBytes());
777 837
                }
778 838
                try {
779
                    ((SearchServiceImpl)searchService).cursorSearch(fullQuery, refineFields, null, fieldQueries, format, transformer, os);
839
                    ((SearchServiceImpl)searchService).cursorSearch(fullquery, refineFields, null, fieldQueries, format, transformer, os);
780 840

  
781 841
                } catch (SearchServiceException sse) {
782 842
                    os.write(("Fail to return report. " + sse.getMessage()).getBytes());
783 843
                    logger.warn("Fail to return report. ", sse);
784 844
                }
785
                
845

  
786 846
                //os.close();
787 847
            }
788 848

  
......
847 907
        return queryBuilder.toString();
848 908
    }*/
849 909

  
850
    private String cleanKeywords(String keywords) {
910
    private static String cleanKeywords(String keywords) {
851 911
        if (keywords != null) {
852 912
            return keywords.replaceAll("[\\\\/:*?<>|()]", "");
853 913
        }
......
872 932
        return queryBuilder.toString();
873 933
    }
874 934

  
935
    public static String buildSearchRequest(List<String> types, String keywords, String doi, String sortBy, List<String> fieldQueries) {
936

  
937
        List<RequestResponseHandler.Entity> entities = extractEntities(types);
938
        //all results are of oaftype result
939
        enhanceFieldQueryWithResultType(types, fieldQueries);
940
        
941
        StringBuilder queryBuilder = new StringBuilder();
942
        if (doi != null && !doi.trim().isEmpty()) {
943
            if (!queryBuilder.toString().isEmpty()) {
944
                queryBuilder.append(" and ");
945
            }
946
            queryBuilder.append("(pidclassid exact \"doi\" and pid exact " + doi + ")");
947
        }
948

  
949
        builtQueryKeywords(queryBuilder, keywords);
950
        enhanceWithSortParameter(queryBuilder, sortBy);
951

  
952
        return queryBuilder.toString();
953
    }
954

  
875 955
    private String buildSearchRequest(RequestResponseHandler.Entity entity, String keywords, List<String> fieldQueries) {
876 956
        enhanceFieldQueryWithEntityType(entity, fieldQueries);
877 957

  
......
881 961
        return queryBuilder.toString();
882 962
    }
883 963

  
884
    private void enhanceFieldQueryWithEntityType(RequestResponseHandler.Entity entity, List<String> fieldQueries) {
964
    private String buildSearchRequest(List<String> types, String keywords, List<String> fieldQueries) {
965

  
966
        List<RequestResponseHandler.Entity> entities = extractEntities(types);
967
        enhanceFieldQueryWithEntityType(RequestResponseHandler.Entity.RESULT, fieldQueries);
968

  
969
        StringBuilder queryBuilder = new StringBuilder();
970
        builtQueryKeywords(queryBuilder, keywords);
971

  
972
        return queryBuilder.toString();
973
    }
974

  
975
    private static void enhanceFieldQueryWithEntityType(RequestResponseHandler.Entity entity, List<String> fieldQueries) {
885 976
        for (String fieldQuery: entity.getFieldQueries()) {
886 977
            logger.debug("adding " + fieldQuery);
887 978
            fieldQueries.add(fieldQuery);
888 979
        }
889 980
    }
890 981

  
891
    private void builtQueryKeywords(StringBuilder queryBuilder, String keywords) {
982
    private static void enhanceFieldQueryWithResultType(final List<String> types, List<String> fieldQueries) {
983

  
984
        fieldQueries.add(RequestResponseHandler.Entity.RESULT.getSimpleQuery());
985
        List<RequestResponseHandler.Entity> entities = extractEntities(types);
986

  
987
        if (types!= null && !types.isEmpty()) {
988
            StringBuilder queryBuilder = new StringBuilder();
989
            for(RequestResponseHandler.Entity entity: entities) {
990
                    CQLQueryBuilder.appendSimpleTerm(queryBuilder, CQLQueryBuilder.Operator.OR, entity.getSimpleQuery());
991
            }
992
            fieldQueries.add(queryBuilder.toString());
993
        }
994
    }
995

  
996

  
997

  
998
    private static void builtQueryKeywords(StringBuilder queryBuilder, String keywords) {
892 999
        if (keywords != null && !keywords.trim().isEmpty()) {
893 1000
            CQLQueryBuilder.appendKeywords(queryBuilder, cleanKeywords(keywords));
894 1001
        }
......
964 1071
        }
965 1072
    }
966 1073

  
967
    private void enhanceWithSortParameter(StringBuilder queryBuilder, String sortBy) {
1074
    private static void enhanceWithSortParameter(StringBuilder queryBuilder, String sortBy) {
968 1075
        if (sortBy != null) {
969 1076
            String[] sortParams = sortBy.split(",");
970 1077

  
......
1012 1119

  
1013 1120
    private Response getResponseByEntityId(HttpServletRequest request, RequestResponseHandler.Entity entity, String entityId, String format, List<String> fieldQueries) {
1014 1121
        String responseType = extractResponseFormat(format);
1015
        
1122

  
1016 1123
        try {
1017 1124
            StringBuilder queryBuilder = new StringBuilder();
1018 1125
            builtEntityIdQuery(queryBuilder, entity, entityId, fieldQueries);
......
1029 1136
            if (searchResult.getSearchResults() == null || searchResult.getSearchResults().isEmpty() ||
1030 1137
                    searchResult.getSearchResults().size() == 0 || searchResult.getSearchResults().get(0) == null) {
1031 1138
                return Response.status(Response.Status.NOT_FOUND).entity(APIResponseFormatter.compose404Message(responseType, "404 - " + entity +" with id "
1032
                                + entityId + " not found.")).type(responseType).build();
1139
                        + entityId + " not found.")).type(responseType).build();
1033 1140
            }
1034 1141

  
1035 1142
            return Response.status(Response.Status.OK).entity(APIResponseFormatter.createEntityResponse(request, entity, searchResult.getSearchResults().get(0).toString(), responseType)).type(responseType).build();
......
1066 1173
        }
1067 1174
    }
1068 1175

  
1069
    private RequestResponseHandler.Entity extractEntity(String type) {
1176
    private Response getResponseByEntityTypes(String fullQuery, List<String> types, int offset, int limit, String format, HttpServletRequest request, boolean refine, List<String> refineFields, List<String> specialFacets, List<String> fieldQueries) {
1177
        long startTime = System.nanoTime();
1070 1178

  
1179
        boolean special = isSpecialFormat(format);
1180
        boolean hasTitle = hasTitle(format);
1181
        String responseType = extractResponseFormat(format);
1182

  
1183
        if(checkTypes(types)) {
1184
            return Response.status(Response.Status.FORBIDDEN).
1185
                    entity(APIResponseFormatter.compose400Message(responseType, "The type parameter is missing or is invalid.")).type(responseType).build();
1186
        }
1187

  
1188
        RequestResponseHandler.Entity basicEntity = identifyBasicEntityType(types);
1189
        if (basicEntity.equals(RequestResponseHandler.Entity.NONE)) {
1190
            return Response.status(Response.Status.FORBIDDEN).
1191
                    entity(APIResponseFormatter.compose400Message(responseType, "The type parameter is missing or is invalid.")).type(responseType).build();
1192
        }
1193
        Transformer transformer = extractTransformer(format, basicEntity);
1194

  
1195
        //List<RequestResponseHandler.Entity> entities = extractEntities(types);
1196
        StringBuilder queryBuilder = new StringBuilder();
1197
        if (basicEntity.equals(RequestResponseHandler.Entity.RESULT)) {
1198
            enhanceFieldQueryWithResultType(types, fieldQueries);
1199
        } else {
1200
            enhanceFieldQueryWithEntityType(basicEntity, fieldQueries);
1201
        }
1202

  
1203
        try {
1204
            if (fullQuery==null || fullQuery.isEmpty()) {
1205
                fullQuery = "*";
1206
            }
1207

  
1208
            SearchResult solrResults = ((SearchServiceImpl)searchService).newSearch(fullQuery, Locale.getDefault().toString(), refineFields, specialFacets, fieldQueries, offset, limit, responseType, transformer, null, false);
1209
            long estimatedTime = System.nanoTime() - startTime;
1210
            logger.debug("Publications search time " + estimatedTime/1000000 +  " milliseconds");
1211
            return Response.status(Response.Status.OK).entity(APIResponseFormatter.createEntitiesResponse(request, basicEntity, fullQuery, fieldQueries, solrResults, refine, responseType, special, hasTitle)).type(responseType).build();
1212

  
1213
        } catch (SearchServiceException sse) {
1214
            logger.error("Fail to get " + basicEntity.getPlural() , sse);
1215
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).
1216
                    entity(APIResponseFormatter.compose500Message(responseType, "Fail to fetch " + basicEntity.getPlural(), sse.getMessage())).type(responseType).build();
1217
        }
1218
    }
1219

  
1220
    private void enhanceQueryWithEntities(StringBuilder queryBuilder, List<String> types) {
1221

  
1222
    }
1223

  
1224

  
1225
    private static List<RequestResponseHandler.Entity> extractEntities(final List<String> types) {
1226
        List<RequestResponseHandler.Entity> entities = null;
1227
        if (types!= null || types.isEmpty()) {
1228
            logger.debug("types " + types);
1229
            entities = new ArrayList<>();
1230
            for (String type: types) {
1231
                if (!entities.contains(type)) {
1232
                    logger.debug("extracting for type " + type);
1233
                    entities.add(extractEntity(type));
1234
                }
1235
            }
1236
        }
1237
        return entities;
1238
    }
1239

  
1240
    private static RequestResponseHandler.Entity extractEntity(String type) {
1241

  
1071 1242
        if (type == null) {
1072 1243
            return RequestResponseHandler.Entity.NONE;
1073 1244
        }
......
1116 1287
    @Timed(value = "http.requests.portal.publicationDuplicates", longTask = false)
1117 1288
    //TODO remove
1118 1289
    public Response fetchDeletedByInferencePublicationsById(@PathParam("publicationid") String publicationid,
1119
                                          @QueryParam("format") final String format,
1120
                                          @QueryParam("size") final int limit,
1121
                                          @QueryParam("fq") final List<String> fieldQueries,
1122
                                          @Context final HttpServletRequest request) {
1290
                                                            @QueryParam("format") final String format,
1291
                                                            @QueryParam("size") final int limit,
1292
                                                            @QueryParam("fq") final List<String> fieldQueries,
1293
                                                            @Context final HttpServletRequest request) {
1123 1294

  
1124 1295
        return getDeletedByInferenceResponseByPid(request, RequestResponseHandler.Entity.PUBLICATION, publicationid, format, limit, fieldQueries);
1125 1296
    }
......
1129 1300
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
1130 1301
    @Timed(value = "http.requests.portal.publicationDuplicates", longTask = false)
1131 1302
    public Response fetchDeletedByInferenceEntitiesById(@PathParam("resultPid") String resultPid,
1132
                                                            @QueryParam("format") final String format,
1133
                                                            @QueryParam("size") final int limit,
1134
                                                            @QueryParam("fq") final List<String> fieldQueries,
1135
                                                            @Context final HttpServletRequest request) {
1303
                                                        @QueryParam("format") final String format,
1304
                                                        @QueryParam("size") final int limit,
1305
                                                        @QueryParam("fq") final List<String> fieldQueries,
1306
                                                        @Context final HttpServletRequest request) {
1136 1307

  
1137 1308
        return getDeletedByInferenceResponseByPid(request, RequestResponseHandler.Entity.NONE, resultPid, format, limit, fieldQueries);
1138 1309
    }
......
1143 1314
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
1144 1315
    @Timed(value = "http.requests.portal.organizationDuplicates", longTask = false)
1145 1316
    public Response fetchDeletedByInferenceOrganizationById(@PathParam("organizationPid") String organizationPid,
1146
                                                     @QueryParam("format") final String format,
1147
                                                     @QueryParam("size") final int limit,
1148
                                                     @QueryParam("fq") final List<String> fieldQueries,
1149
                                                     @Context final HttpServletRequest request) {
1317
                                                            @QueryParam("format") final String format,
1318
                                                            @QueryParam("size") final int limit,
1319
                                                            @QueryParam("fq") final List<String> fieldQueries,
1320
                                                            @Context final HttpServletRequest request) {
1150 1321

  
1151 1322
        return getDeletedByInferenceResponseByPid(request, RequestResponseHandler.Entity.ORGANIZATION, organizationPid, format, limit, fieldQueries);
1152 1323
    }
......
1184 1355
        }
1185 1356
    }
1186 1357

  
1358
    public boolean checkTypes(List<String> types) {
1359
        for (RequestResponseHandler.Entity entity: RequestResponseHandler.Entity.values()){
1360
            if (!types.contains(entity.getPlural())) {
1361
                return false;
1362
            }
1363
        }
1364

  
1365
        return true;
1366
    }
1187 1367
    /*
1188 1368
    public static void main(String[] args) {
1189 1369
        String json = " {\"result\":{\"xmlns:oaf\":\"http://namespace.openaire.eu/oaf\",\"xmlns:xsi\":\"http://www.w3.o" +
modules/uoa-search/trunk/src/main/java/eu/dnetlib/data/search/web/api/CSVResponseFormat.java
36 36
            return project;
37 37

  
38 38
        } else if (entity.equals(RequestResponseHandler.Entity.PUBLICATION) || entity.equals(RequestResponseHandler.Entity.DATASET)
39
                    ||entity.equals(RequestResponseHandler.Entity.SOFTWARE) || entity.equals(RequestResponseHandler.Entity.OTHER)) {
39
                    ||entity.equals(RequestResponseHandler.Entity.SOFTWARE) || entity.equals(RequestResponseHandler.Entity.OTHER)
40
                    || entity.equals(RequestResponseHandler.Entity.RESULT)) {
40 41
            if (special) {
41 42
                return result_special;
42 43
            }

Also available in: Unified diff