Project

General

Profile

1 43931 katerina.i
package eu.dnetlib.data.search.web.api;
2
3 56601 katerina.i
import eu.dnetlib.api.data.SearchService;
4 43931 katerina.i
import eu.dnetlib.api.data.SearchServiceException;
5
import eu.dnetlib.data.search.app.SearchServiceImpl;
6 44977 katerina.i
import eu.dnetlib.data.search.transform.Transformer;
7
import eu.dnetlib.data.search.transform.config.SearchRegistry;
8 44742 katerina.i
import eu.dnetlib.data.search.utils.cql.CQLQueryBuilder;
9 43931 katerina.i
import eu.dnetlib.data.search.web.utils.RequestResponseHandler;
10
import eu.dnetlib.domain.data.SearchResult;
11 56601 katerina.i
import io.micrometer.core.annotation.Timed;
12 43931 katerina.i
import org.apache.log4j.Logger;
13
import org.springframework.beans.factory.annotation.Autowired;
14
import org.springframework.stereotype.Component;
15
16
import javax.servlet.http.HttpServletRequest;
17 49850 katerina.i
import javax.servlet.http.HttpServletResponse;
18 43931 katerina.i
import javax.ws.rs.*;
19 43975 katerina.i
import javax.ws.rs.core.Context;
20
import javax.ws.rs.core.MediaType;
21
import javax.ws.rs.core.Response;
22 49850 katerina.i
import javax.ws.rs.core.StreamingOutput;
23 49870 katerina.i
import java.io.IOException;
24
import java.io.OutputStream;
25 44602 katerina.i
import java.util.List;
26
import java.util.Locale;
27 43931 katerina.i
28
/**
29
 * Created by kiatrop on 2/6/2016.
30
 */
31
32
@Component
33
@Path("/v2")
34
public class SearchApiService {
35
36
    private static final Logger logger = Logger.getLogger(SearchApiService.class);
37
38
    @Autowired
39 56601 katerina.i
    private SearchService searchService = null;
40 43931 katerina.i
41 44977 katerina.i
    @Autowired
42
    private SearchRegistry searchRegistry = null;
43
44 43931 katerina.i
    @GET
45 44602 katerina.i
    @Path("/api/resources")
46
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
47 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/resources"}, longTask = false)
48 44602 katerina.i
    public Response fetchResources(@QueryParam("query") String query,
49 44762 katerina.i
                                      @DefaultValue("0") @QueryParam("page") final int offset,
50 44602 katerina.i
                                      @DefaultValue("10") @QueryParam("size") final int limit,
51
                                      @QueryParam("refine") @DefaultValue("false") final boolean refine,
52
                                      @QueryParam("fields") final List<String> fields,
53
                                      @QueryParam("fq") final List<String> fieldQueries,
54
                                      @QueryParam("format") final String format,
55 45491 katerina.i
                                      @QueryParam("type") final String type,
56 44602 katerina.i
                                      @Context final HttpServletRequest request) {
57
58 45491 katerina.i
        return getResponseByEntity(query, extractEntity(type), offset, limit, format, request, refine, fields, fieldQueries);
59 44602 katerina.i
    }
60 44636 katerina.i
61 44602 katerina.i
    @GET
62 43931 katerina.i
    @Path("/api/publications")
63 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
64 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/publications"}, longTask = false)
65 46175 katerina.i
    public Response fetchPublications(@QueryParam("q") final String keywords,
66
                                      @QueryParam("doi") final String doi,
67 50429 katerina.i
                                      @QueryParam("sortBy") final String sortBy,
68 44762 katerina.i
                                      @DefaultValue("0") @QueryParam("page") final int offset,
69 43975 katerina.i
                                      @DefaultValue("10") @QueryParam("size") final int limit,
70
                                      @QueryParam("refine") @DefaultValue("false") final boolean refine,
71
                                      @QueryParam("fields") final List<String> fields,
72 44645 katerina.i
                                      @QueryParam("fq") final List<String> fieldQueries,
73 44602 katerina.i
                                      @QueryParam("format") final String format,
74 43975 katerina.i
                                      @Context final HttpServletRequest request) {
75 44734 katerina.i
76 50018 katerina.i
        logger.debug("Publications request received");
77 46175 katerina.i
        //TODO do not allow q and keywords both - SWITCH back if needed
78
        //String simpleQuery = buildSimpleSearchQuery(RequestResponseHandler.Entity.PUBLICATION, keywords) ;
79 50429 katerina.i
        String simpleQuery = buildSearchRequest(RequestResponseHandler.Entity.PUBLICATION, keywords, doi,sortBy, fieldQueries);
80 44734 katerina.i
        return getResponseByEntity(simpleQuery, RequestResponseHandler.Entity.PUBLICATION, offset, limit, format, request, refine, fields, fieldQueries);
81 43931 katerina.i
82
    }
83
84 44602 katerina.i
85 43931 katerina.i
    @GET
86 44271 katerina.i
    @Path("/api/publications/count")
87 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
88 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/publications/count"}, longTask = false)
89 44734 katerina.i
    public Response fetchPublicationsCount(@QueryParam("q") String query,
90
                                           @QueryParam("format") final String format,
91 46175 katerina.i
                                           @QueryParam("fq") final List<String> fieldQueries,
92 44734 katerina.i
                                           @Context final HttpServletRequest request)  {
93 46361 katerina.i
        String fullQuery = buildSearchRequest(RequestResponseHandler.Entity.PUBLICATION, query, fieldQueries);
94 46175 katerina.i
        return getCount(request, fullQuery, format, fieldQueries);
95 44271 katerina.i
    }
96
97 44663 katerina.i
98 44271 katerina.i
    @GET
99 43931 katerina.i
    @Path("/api/publications/{publicationid}")
100 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
101 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/publications/{publicationid}"}, longTask = false)
102 44645 katerina.i
    public Response fetchPublicationsById(@PathParam("publicationid") String publicationid,
103 44657 katerina.i
                                          @QueryParam("format") final String format,
104 46175 katerina.i
                                          @QueryParam("fq") final List<String> fieldQueries,
105 44657 katerina.i
                                          @Context final HttpServletRequest request) {
106 46175 katerina.i
        return getResponseByEntityId(request, RequestResponseHandler.Entity.PUBLICATION, publicationid, format, fieldQueries);
107 43975 katerina.i
    }
108 43931 katerina.i
109 44734 katerina.i
110 44301 katerina.i
    @GET
111 43975 katerina.i
    @Path("/api/datasets")
112 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
113 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/datasets"}, longTask = false)
114 44734 katerina.i
    public Response fetchDatasets(@QueryParam("q") String keywords,
115 46175 katerina.i
                                  @QueryParam("doi") final String doi,
116 50429 katerina.i
                                  @QueryParam("sortBy") final String sortBy,
117 44762 katerina.i
                                  @DefaultValue("0") @QueryParam("page") int offset,
118 43975 katerina.i
                                  @DefaultValue("10") @QueryParam("size") int limit,
119
                                  @QueryParam("refine") @DefaultValue("false") boolean refine,
120
                                  @QueryParam("fields") final List<String> fields,
121 44734 katerina.i
                                  @QueryParam("fq") final List<String> fieldQueries,
122 44602 katerina.i
                                  @QueryParam("format") final String format,
123 43975 katerina.i
                                  @Context HttpServletRequest request) {
124 43931 katerina.i
125 50429 katerina.i
        String simpleQuery = buildSearchRequest(RequestResponseHandler.Entity.DATASET, keywords, doi, sortBy, fieldQueries);
126 44734 katerina.i
        return getResponseByEntity(simpleQuery, RequestResponseHandler.Entity.DATASET, offset, limit, format, request, refine, fields, fieldQueries);
127 43931 katerina.i
    }
128 44301 katerina.i
129 44271 katerina.i
    @GET
130
    @Path("/api/datasets/count")
131 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
132 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/datasets/count"}, longTask = false)
133 44734 katerina.i
    public Response fetchDatesetsCount(@QueryParam("q") String query,
134
                                       @QueryParam("format") final String format,
135 46175 katerina.i
                                       @QueryParam("fq") final List<String> fieldQueries,
136 44734 katerina.i
                                       @Context final HttpServletRequest request)  {
137 46361 katerina.i
        String fullQuery = buildSearchRequest(RequestResponseHandler.Entity.DATASET, query, fieldQueries);
138 46175 katerina.i
        return getCount(request, fullQuery, format, fieldQueries);
139 44271 katerina.i
    }
140 43931 katerina.i
141 44734 katerina.i
142 43931 katerina.i
    @GET
143
    @Path("/api/datasets/{datasetid}")
144 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/datasets/{datasetid}"}, longTask = false)
145 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
146 44734 katerina.i
    public Response fetchDatasets(@PathParam("datasetid") String datasetid,
147
                                  @QueryParam("format") final String format,
148 46175 katerina.i
                                  @QueryParam("fq") final List<String> fieldQueries,
149 44734 katerina.i
                                  @Context final HttpServletRequest request) {
150 46175 katerina.i
        return getResponseByEntityId(request, RequestResponseHandler.Entity.DATASET, datasetid, format, fieldQueries);
151 43931 katerina.i
    }
152
153 49220 katerina.i
    @GET
154
    @Path("/api/software")
155
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
156 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/software"}, longTask = false)
157 49220 katerina.i
    public Response fetchSoftware(@QueryParam("q") String keywords,
158
                                  @QueryParam("doi") final String doi,
159 50429 katerina.i
                                  @QueryParam("sortBy") final String sortBy,
160 49220 katerina.i
                                  @DefaultValue("0") @QueryParam("page") int offset,
161
                                  @DefaultValue("10") @QueryParam("size") int limit,
162
                                  @QueryParam("refine") @DefaultValue("false") boolean refine,
163
                                  @QueryParam("fields") final List<String> fields,
164
                                  @QueryParam("fq") final List<String> fieldQueries,
165
                                  @QueryParam("format") final String format,
166
                                  @Context HttpServletRequest request) {
167 44762 katerina.i
168 50429 katerina.i
        String simpleQuery = buildSearchRequest(RequestResponseHandler.Entity.SOFTWARE, keywords, doi, sortBy, fieldQueries);
169 49220 katerina.i
        return getResponseByEntity(simpleQuery, RequestResponseHandler.Entity.SOFTWARE, offset, limit, format, request, refine, fields, fieldQueries);
170
    }
171
172 43931 katerina.i
    @GET
173 49220 katerina.i
    @Path("/api/software/count")
174
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
175 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/software/count"}, longTask = false)
176 49220 katerina.i
    public Response fetchSoftwareCount(@QueryParam("q") String query,
177
                                       @QueryParam("format") final String format,
178
                                       @QueryParam("fq") final List<String> fieldQueries,
179
                                       @Context final HttpServletRequest request)  {
180
        String fullQuery = buildSearchRequest(RequestResponseHandler.Entity.SOFTWARE, query, fieldQueries);
181
        return getCount(request, fullQuery, format, fieldQueries);
182
    }
183
184
    @GET
185
    @Path("/api/software/{softwareid}")
186
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
187 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/software/{softwareid}"}, longTask = false)
188 49220 katerina.i
    public Response fetchSoftware(@PathParam("softwareid") String datasetid,
189
                                  @QueryParam("format") final String format,
190
                                  @QueryParam("fq") final List<String> fieldQueries,
191
                                  @Context final HttpServletRequest request) {
192 49364 katerina.i
        return getResponseByEntityId(request, RequestResponseHandler.Entity.SOFTWARE, datasetid, format, fieldQueries);
193 49220 katerina.i
    }
194
195
    @GET
196 52806 tsampikos.
    @Path("/api/other")
197
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
198 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/other"}, longTask = false)
199 52806 tsampikos.
    public Response fetchOther(@QueryParam("q") String keywords,
200
                                  @QueryParam("doi") final String doi,
201
                                  @QueryParam("sortBy") final String sortBy,
202
                                  @DefaultValue("0") @QueryParam("page") int offset,
203
                                  @DefaultValue("10") @QueryParam("size") int limit,
204
                                  @QueryParam("refine") @DefaultValue("false") boolean refine,
205
                                  @QueryParam("fields") final List<String> fields,
206
                                  @QueryParam("fq") final List<String> fieldQueries,
207
                                  @QueryParam("format") final String format,
208
                                  @Context HttpServletRequest request) {
209
210
        String simpleQuery = buildSearchRequest(RequestResponseHandler.Entity.OTHER, keywords, doi, sortBy, fieldQueries);
211
        return getResponseByEntity(simpleQuery, RequestResponseHandler.Entity.OTHER, offset, limit, format, request, refine, fields, fieldQueries);
212
    }
213
214
    @GET
215
    @Path("/api/other/count")
216
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
217 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/other"}, longTask = false)
218 52806 tsampikos.
    public Response fetchOtherCount(@QueryParam("q") String query,
219
                                       @QueryParam("format") final String format,
220
                                       @QueryParam("fq") final List<String> fieldQueries,
221
                                       @Context final HttpServletRequest request)  {
222
        String fullQuery = buildSearchRequest(RequestResponseHandler.Entity.OTHER, query, fieldQueries);
223
        return getCount(request, fullQuery, format, fieldQueries);
224
    }
225
226
    @GET
227
    @Path("/api/other/{otherid}")
228
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
229 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/other/{otherid}"}, longTask = false)
230 52806 tsampikos.
    public Response fetchOther(@PathParam("otherid") String datasetid,
231
                                  @QueryParam("format") final String format,
232
                                  @QueryParam("fq") final List<String> fieldQueries,
233
                                  @Context final HttpServletRequest request) {
234
        return getResponseByEntityId(request, RequestResponseHandler.Entity.OTHER, datasetid, format, fieldQueries);
235
    }
236
    @GET
237 43975 katerina.i
    @Path("/api/projects")
238 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
239 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/projects"}, longTask = false)
240 44734 katerina.i
    public Response fetchProjects(@QueryParam("q") String keywords,
241 44762 katerina.i
                                  @DefaultValue("0") @QueryParam("page") int offset,
242
                                  @DefaultValue("10") @QueryParam("size") int limit,
243
                                  @QueryParam("refine") @DefaultValue("false") boolean refine,
244
                                  @QueryParam("fields") final List<String> fields,
245
                                  @QueryParam("fq") final List<String> fieldQueries,
246 44602 katerina.i
                                  @QueryParam("format") final String format,
247 44762 katerina.i
                                  @Context HttpServletRequest request) {
248 43975 katerina.i
249 46175 katerina.i
        String simpleQuery = buildSearchRequest(RequestResponseHandler.Entity.PROJECT, keywords, fieldQueries);
250 44762 katerina.i
        return getResponseByEntity(simpleQuery, RequestResponseHandler.Entity.PROJECT, offset, limit, format, request, refine, fields, fieldQueries);
251 43975 katerina.i
    }
252
253 44301 katerina.i
254 43975 katerina.i
    @GET
255 44271 katerina.i
    @Path("/api/projects/count")
256 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
257 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/projects/count"}, longTask = false)
258 44762 katerina.i
    public Response fetchProjectsCount(@QueryParam("q") String query,
259
                                       @QueryParam("format") final String format,
260 46175 katerina.i
                                       @QueryParam("fq") final List<String> fieldQueries,
261 44762 katerina.i
                                       @Context final HttpServletRequest request) {
262 46361 katerina.i
        String fullQuery = buildSearchRequest(RequestResponseHandler.Entity.PROJECT, query, fieldQueries);
263 46175 katerina.i
        return getCount(request, fullQuery, format, fieldQueries);
264 44271 katerina.i
    }
265
266
    @GET
267 43931 katerina.i
    @Path("/api/projects/{projectid}")
268 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
269 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/projects/{projectid}"}, longTask = false)
270 44762 katerina.i
    public Response fetchProjects(@PathParam("projectid") String projectid,
271
                                  @QueryParam("format") final String format,
272 46175 katerina.i
                                  @QueryParam("fq") final List<String> fieldQueries,
273 44762 katerina.i
                                  @Context final HttpServletRequest request) {
274 46175 katerina.i
        return getResponseByEntityId(request, RequestResponseHandler.Entity.PROJECT, projectid, format, fieldQueries);
275 43931 katerina.i
    }
276
277
    @GET
278
    @Path("/api/projects/{projectId}/publications")
279 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
280 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/projects/{projectid}/publications"}, longTask = false)
281 43931 katerina.i
    public Response fetchProjectPublications(@PathParam("projectId") String projectId,
282 44762 katerina.i
                                             @DefaultValue("0") @QueryParam("page") int offset,
283 43931 katerina.i
                                             @DefaultValue("10") @QueryParam("size") int limit,
284 44602 katerina.i
                                             @QueryParam("format") final String format,
285 46175 katerina.i
                                             @QueryParam("fq") final List<String> fieldQueries,
286 43931 katerina.i
                                             @Context HttpServletRequest request)  {
287
288 46175 katerina.i
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.PUBLICATION, "relprojectid", projectId, fieldQueries);
289
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.PUBLICATION, offset, limit, format, request, false, null, fieldQueries);
290 43975 katerina.i
    }
291 43931 katerina.i
292 43975 katerina.i
    @GET
293 44290 katerina.i
    @Path("/api/projects/{projectId}/publications/count")
294 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
295 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/projects/{projectid}/publications/count"}, longTask = false)
296 44762 katerina.i
    public Response fetchProjectPublicationsCount(@PathParam("projectId") String projectId,
297
                                                  @QueryParam("format") final String format,
298 46175 katerina.i
                                                  @QueryParam("fq") final List<String> fieldQueries,
299 44762 katerina.i
                                                  @Context final HttpServletRequest request) {
300 46175 katerina.i
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.PUBLICATION, "relprojectid", projectId, fieldQueries);
301
        return getCount(request, fullQuery, format, fieldQueries);
302 44290 katerina.i
    }
303
304
    @GET
305 43975 katerina.i
    @Path("/api/projects/{projectId}/datasets")
306 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
307 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/projects/{projectId}/datasets"}, longTask = false)
308 43975 katerina.i
    public Response fetchProjectDatasets(@PathParam("projectId") String projectId,
309 44762 katerina.i
                                             @DefaultValue("0") @QueryParam("page") int offset,
310 43975 katerina.i
                                             @DefaultValue("10") @QueryParam("size") int limit,
311 44602 katerina.i
                                             @QueryParam("format") final String format,
312 46175 katerina.i
                                             @QueryParam("fq") final List<String> fieldQueries,
313 43975 katerina.i
                                             @Context HttpServletRequest request)  {
314 43931 katerina.i
315 46175 katerina.i
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.DATASET, "relprojectid", projectId, fieldQueries);
316
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.DATASET, offset, limit, format, request, false, null, fieldQueries);
317 43931 katerina.i
    }
318
319 44762 katerina.i
320 44290 katerina.i
    @GET
321
    @Path("/api/projects/{projectId}/datasets/count")
322 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
323 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/projects/{projectId}/datasets/count"}, longTask = false)
324 44290 katerina.i
    public Response fetchProjectDatasetsCount(@PathParam("projectId") String projectId,
325 44762 katerina.i
                                              @DefaultValue("0") @QueryParam("page") int offset,
326
                                              @DefaultValue("10") @QueryParam("size") int limit,
327
                                              @QueryParam("format") final String format,
328 46175 katerina.i
                                              @QueryParam("fq") final List<String> fieldQueries,
329 44762 katerina.i
                                              @Context HttpServletRequest request)  {
330 46175 katerina.i
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.DATASET, "relprojectid", projectId, fieldQueries);
331
        return getCount(request, fullQuery, format, fieldQueries);
332 44290 katerina.i
    }
333
334 49220 katerina.i
335
336 43975 katerina.i
    @GET
337 49220 katerina.i
    @Path("/api/projects/{projectId}/software/count")
338
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
339 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/projects/{projectId}/software/count"}, longTask = false)
340 49220 katerina.i
    public Response fetchProjectSoftwareCount(@PathParam("projectId") String projectId,
341
                                              @DefaultValue("0") @QueryParam("page") int offset,
342
                                              @DefaultValue("10") @QueryParam("size") int limit,
343
                                              @QueryParam("format") final String format,
344
                                              @QueryParam("fq") final List<String> fieldQueries,
345
                                              @Context HttpServletRequest request)  {
346
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.SOFTWARE, "relprojectid", projectId, fieldQueries);
347
        return getCount(request, fullQuery, format, fieldQueries);
348
    }
349
350
    @GET
351
    @Path("/api/projects/{projectId}/software")
352
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
353 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/projects/{projectId}/software"}, longTask = false)
354 49220 katerina.i
    public Response fetchProjectSoftware(@PathParam("projectId") String projectId,
355
                                         @DefaultValue("0") @QueryParam("page") int offset,
356
                                         @DefaultValue("10") @QueryParam("size") int limit,
357
                                         @QueryParam("format") final String format,
358
                                         @QueryParam("fq") final List<String> fieldQueries,
359
                                         @Context HttpServletRequest request)  {
360
361
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.SOFTWARE, "relprojectid", projectId, fieldQueries);
362
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.SOFTWARE, offset, limit, format, request, false, null, fieldQueries);
363
    }
364
365
    @GET
366 52806 tsampikos.
    @Path("/api/projects/{projectId}/other/count")
367
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
368 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/projects/{projectId}/other/count"}, longTask = false)
369 52806 tsampikos.
    public Response fetchProjectOtherCount(@PathParam("projectId") String projectId,
370
                                              @DefaultValue("0") @QueryParam("page") int offset,
371
                                              @DefaultValue("10") @QueryParam("size") int limit,
372
                                              @QueryParam("format") final String format,
373
                                              @QueryParam("fq") final List<String> fieldQueries,
374
                                              @Context HttpServletRequest request)  {
375
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.OTHER, "relprojectid", projectId, fieldQueries);
376
        return getCount(request, fullQuery, format, fieldQueries);
377
    }
378
379
    @GET
380
    @Path("/api/projects/{projectId}/other")
381
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
382 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/projects/{projectId}/other"}, longTask = false)
383 52806 tsampikos.
    public Response fetchProjectOther(@PathParam("projectId") String projectId,
384
                                         @DefaultValue("0") @QueryParam("page") int offset,
385
                                         @DefaultValue("10") @QueryParam("size") int limit,
386
                                         @QueryParam("format") final String format,
387
                                         @QueryParam("fq") final List<String> fieldQueries,
388
                                         @Context HttpServletRequest request)  {
389
390
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.OTHER, "relprojectid", projectId, fieldQueries);
391
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.OTHER, offset, limit, format, request, false, null, fieldQueries);
392
    }
393
394
    @GET
395 43975 katerina.i
    @Path("/api/datasources")
396 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
397 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/datasources"}, longTask = false)
398 44762 katerina.i
    public Response fetchDatasources(@QueryParam("q") String keywords,
399
                                     @DefaultValue("0") @QueryParam("page") final int offset,
400 43975 katerina.i
                                     @DefaultValue("10") @QueryParam("size") final int limit,
401
                                     @QueryParam("refine") @DefaultValue("false") final boolean refine,
402
                                     @QueryParam("fields") final List<String> fields,
403 44762 katerina.i
                                     @QueryParam("fq") final List<String> fieldQueries,
404 44602 katerina.i
                                     @QueryParam("format") final String format,
405 44762 katerina.i
                                     @Context final HttpServletRequest request) {
406 43931 katerina.i
407 46175 katerina.i
        String simpleQuery = buildSearchRequest(RequestResponseHandler.Entity.DATASOURCE, keywords, fieldQueries);
408 44762 katerina.i
        return getResponseByEntity(simpleQuery, RequestResponseHandler.Entity.DATASOURCE, offset, limit, format, request, refine, fields, fieldQueries);
409 43975 katerina.i
    }
410 44301 katerina.i
411 44271 katerina.i
    @GET
412
    @Path("/api/datasources/count")
413 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
414 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/datasources/count"}, longTask = false)
415 44762 katerina.i
    public Response fetchDatasourcesCount(@QueryParam("q") String query,
416
                                          @QueryParam("format") final String format,
417 46175 katerina.i
                                          @QueryParam("fq") final List<String> fieldQueries,
418 44762 katerina.i
                                          @Context final HttpServletRequest request) {
419 46361 katerina.i
        String fullQuery = buildSearchRequest(RequestResponseHandler.Entity.DATASOURCE, query, fieldQueries);
420 46175 katerina.i
        return getCount(request, fullQuery, format, fieldQueries);
421 44271 katerina.i
    }
422 43975 katerina.i
423 43931 katerina.i
    @GET
424
    @Path("/api/datasources/{datasourceid}")
425 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
426 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/datasources/{datasourceid}"}, longTask = false)
427 44762 katerina.i
    public Response fetchDatasources(@PathParam("datasourceid") String datasourceid,
428
                                     @QueryParam("format") final String format,
429 46175 katerina.i
                                     @QueryParam("fq") final List<String> fieldQueries,
430 44762 katerina.i
                                     @Context final HttpServletRequest request) {
431 46175 katerina.i
        return getResponseByEntityId(request, RequestResponseHandler.Entity.DATASOURCE, datasourceid, format, fieldQueries);
432 44271 katerina.i
    }
433 43931 katerina.i
434
435
    @GET
436 43975 katerina.i
    @Path("/api/organizations")
437 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
438 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations"}, longTask = false)
439 44762 katerina.i
    public Response fetchOrganisations(@QueryParam("q") String keywords,
440
                                       @DefaultValue("0") @QueryParam("page") final int offset,
441 44301 katerina.i
                                       @DefaultValue("10") @QueryParam("size") final int limit,
442
                                       @QueryParam("refine") @DefaultValue("false") final boolean refine,
443
                                       @QueryParam("fields") final List<String> fields,
444 44762 katerina.i
                                       @QueryParam("fq") final List<String> fieldQueries,
445 44602 katerina.i
                                       @QueryParam("format") final String format,
446 44301 katerina.i
                                       @Context final HttpServletRequest request) {
447 43975 katerina.i
448 46175 katerina.i
        String simpleQuery = buildSearchRequest(RequestResponseHandler.Entity.ORGANIZATION, keywords, fieldQueries);
449 44762 katerina.i
        return getResponseByEntity(simpleQuery, RequestResponseHandler.Entity.ORGANIZATION, offset, limit, format, request, refine, fields, fieldQueries);
450 43931 katerina.i
    }
451
452 44301 katerina.i
453 44271 katerina.i
    @GET
454
    @Path("/api/organizations/count")
455 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
456 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations/count"}, longTask = false)
457 44762 katerina.i
    public Response fetchOrganizationsCount(@QueryParam("q") String query,
458
                                            @QueryParam("format") final String format,
459 46175 katerina.i
                                            @QueryParam("fq") final List<String> fieldQueries,
460 44762 katerina.i
                                            @Context final HttpServletRequest request) {
461 46361 katerina.i
        String fullQuery = buildSearchRequest(RequestResponseHandler.Entity.ORGANIZATION, query, fieldQueries);
462 46175 katerina.i
        return getCount(request, fullQuery, format, fieldQueries);
463 44271 katerina.i
    }
464 43975 katerina.i
465 43931 katerina.i
    @GET
466 43975 katerina.i
    @Path("/api/organizations/{organizationid}")
467 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
468 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations/{organizationid}"}, longTask = false)
469 44762 katerina.i
    public Response fetchOrganizations(@PathParam("organizationid") String organizationid,
470
                                       @QueryParam("format") final String format,
471 46175 katerina.i
                                       @QueryParam("fq") final List<String> fieldQueries,
472 44762 katerina.i
                                       @Context final HttpServletRequest request) {
473 46175 katerina.i
        return getResponseByEntityId(request, RequestResponseHandler.Entity.ORGANIZATION, organizationid, format, fieldQueries);
474 43975 katerina.i
    }
475
476 44762 katerina.i
477 43975 katerina.i
    @GET
478
    @Path("/api/organizations/{organizationid}/datasources")
479 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
480 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations/{organizationid}/datasources"}, longTask = false)
481 43975 katerina.i
    public Response fetchOrganizationDatasources(@PathParam("organizationid") String organizationid,
482 44762 katerina.i
                                                 @DefaultValue("0") @QueryParam("page") int offset,
483 43975 katerina.i
                                                 @DefaultValue("10") @QueryParam("size") int limit,
484 44602 katerina.i
                                                 @QueryParam("format") final String format,
485 46175 katerina.i
                                                 @QueryParam("fq") final List<String> fieldQueries,
486 43975 katerina.i
                                                 @Context HttpServletRequest request)  {
487 46175 katerina.i
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.DATASOURCE, "relorganizationid", organizationid, fieldQueries);
488 46224 katerina.i
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.DATASOURCE, offset, limit, format, request, false, null, fieldQueries);
489 43975 katerina.i
    }
490
491 44290 katerina.i
    @GET
492
    @Path("/api/organizations/{organizationid}/datasources/count")
493 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
494 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations/{organizationid}/datasources/count"}, longTask = false)
495 44762 katerina.i
    public Response fetchOrganizationDatasources(@PathParam("organizationid") String organizationid,
496
                                                 @QueryParam("format") final String format,
497 46175 katerina.i
                                                 @QueryParam("fq") final List<String> fieldQueries,
498 44762 katerina.i
                                                 @Context final HttpServletRequest request) {
499 46175 katerina.i
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.DATASOURCE, "relorganizationid", organizationid, fieldQueries);
500
        return getCount(request, fullQuery, format, fieldQueries);
501 44290 katerina.i
    }
502
503
504 43975 katerina.i
    @GET
505 49503 katerina.i
    @Path("/api/organizations/{organizationid}/publications")
506
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
507 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations/{organizationid}/publications"}, longTask = false)
508 49503 katerina.i
    public Response fetchOrganizationPublications(@PathParam("organizationid") String organizationid,
509
                                              @DefaultValue("0") @QueryParam("page") int offset,
510
                                              @DefaultValue("10") @QueryParam("size") int limit,
511
                                              @QueryParam("format") final String format,
512
                                              @QueryParam("fq") final List<String> fieldQueries,
513
                                              @Context HttpServletRequest request)  {
514
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.PUBLICATION, "relorganizationid", organizationid, fieldQueries);
515
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.PUBLICATION, offset, limit, format, request, false, null, fieldQueries);
516
    }
517
518
    @GET
519
    @Path("/api/organizations/{organizationid}/publications/count")
520
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
521 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations/{organizationid}/publications/count"}, longTask = false)
522 49503 katerina.i
    public Response fetchOrganizationPublicationsCount(@PathParam("organizationid") String organizationid,
523
                                                  @DefaultValue("0") @QueryParam("page") int offset,
524
                                                  @DefaultValue("10") @QueryParam("size") int limit,
525
                                                  @QueryParam("format") final String format,
526
                                                  @QueryParam("fq") final List<String> fieldQueries,
527
                                                  @Context HttpServletRequest request)  {
528
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.PUBLICATION, "relorganizationid", organizationid, fieldQueries);
529
        return getCount(request, fullQuery, format, fieldQueries);
530
    }
531
532
    @GET
533
    @Path("/api/organizations/{organizationid}/datasets")
534
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
535 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations/{organizationid}/datasets"}, longTask = false)
536 49503 katerina.i
    public Response fetchOrganizationDatsets(@PathParam("organizationid") String organizationid,
537
                                                  @DefaultValue("0") @QueryParam("page") int offset,
538
                                                  @DefaultValue("10") @QueryParam("size") int limit,
539
                                                  @QueryParam("format") final String format,
540
                                                  @QueryParam("fq") final List<String> fieldQueries,
541
                                                  @Context HttpServletRequest request)  {
542
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.DATASET, "relorganizationid", organizationid, fieldQueries);
543
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.DATASET, offset, limit, format, request, false, null, fieldQueries);
544
    }
545
546
    @GET
547
    @Path("/api/organizations/{organizationid}/datasets/count")
548
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
549 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations/{organizationid}/datasets/count"}, longTask = false)
550 49503 katerina.i
    public Response fetchOrganizationDatsetsCount(@PathParam("organizationid") String organizationid,
551
                                             @DefaultValue("0") @QueryParam("page") int offset,
552
                                             @DefaultValue("10") @QueryParam("size") int limit,
553
                                             @QueryParam("format") final String format,
554
                                             @QueryParam("fq") final List<String> fieldQueries,
555
                                             @Context HttpServletRequest request)  {
556
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.DATASET, "relorganizationid", organizationid, fieldQueries);
557
        return getCount(request, fullQuery, format, fieldQueries);
558
    }
559
560
    @GET
561 44271 katerina.i
    @Path("/api/organizations/{organizationid}/projects")
562 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
563 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations/{organizationid}/projects"}, longTask = false)
564 44271 katerina.i
    public Response fetchOrganizationProjects(@PathParam("organizationid") String organizationid,
565 44762 katerina.i
                                                 @DefaultValue("0") @QueryParam("page") int offset,
566 44271 katerina.i
                                                 @DefaultValue("10") @QueryParam("size") int limit,
567 44602 katerina.i
                                                 @QueryParam("format") final String format,
568 46175 katerina.i
                                                 @QueryParam("fq") final List<String> fieldQueries,
569 44271 katerina.i
                                                 @Context HttpServletRequest request)  {
570 46175 katerina.i
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.PROJECT, "relorganizationid", organizationid, fieldQueries);
571 46224 katerina.i
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.PROJECT, offset, limit, format, request, false, null, fieldQueries);
572 44271 katerina.i
    }
573
574 44290 katerina.i
    @GET
575
    @Path("/api/organizations/{organizationid}/projects/count")
576 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
577 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/organizations/{organizationid}/projects/count"}, longTask = false)
578 44762 katerina.i
    public Response fetchOrganizationProjectsCount(@PathParam("organizationid") String organizationid,
579
                                                   @QueryParam("format") final String format,
580 46175 katerina.i
                                                   @QueryParam("fq") final List<String> fieldQueries,
581 44762 katerina.i
                                                   @Context final HttpServletRequest request) {
582 46175 katerina.i
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.PROJECT, "relorganizationid", organizationid, fieldQueries);
583
        return getCount(request, fullQuery,format, fieldQueries);
584 44290 katerina.i
    }
585
586 55638 katerina.i
/*
587 44290 katerina.i
588 44271 katerina.i
    @GET
589 43975 katerina.i
    @Path("/api/people")
590 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
591 44762 katerina.i
    public Response fetchPeople(@QueryParam("q") String keywords,
592
                                @DefaultValue("0") @QueryParam("page") final int offset,
593 43975 katerina.i
                                @DefaultValue("10") @QueryParam("size") final int limit,
594
                                @QueryParam("refine") @DefaultValue("false") final boolean refine,
595
                                @QueryParam("fields") final List<String> fields,
596 44762 katerina.i
                                @QueryParam("fq") final List<String> fieldQueries,
597 44602 katerina.i
                                @QueryParam("format") final String format,
598 43975 katerina.i
                                @Context final HttpServletRequest request) {
599 44301 katerina.i
600 46175 katerina.i
        String simpleQuery = buildSearchRequest(RequestResponseHandler.Entity.PERSON, keywords, fieldQueries);
601 44762 katerina.i
        return getResponseByEntity(simpleQuery, RequestResponseHandler.Entity.PERSON, offset, limit, format, request, refine, fields, fieldQueries);
602 43975 katerina.i
    }
603
604 44301 katerina.i
605 43975 katerina.i
    @GET
606 44271 katerina.i
    @Path("/api/people/count")
607 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
608 44762 katerina.i
    public Response fetchPeopleCount(@QueryParam("q") String query,
609
                                     @QueryParam("format") final String format,
610 46175 katerina.i
                                     @QueryParam("fq") final List<String> fieldQueries,
611 44762 katerina.i
                                     @Context final HttpServletRequest request) {
612 46361 katerina.i
        String fullQuery = buildSearchRequest(RequestResponseHandler.Entity.PERSON, query, fieldQueries);
613 46175 katerina.i
        return getCount(request, fullQuery, format, fieldQueries);
614 44271 katerina.i
    }
615
616
    @GET
617 43931 katerina.i
    @Path("/api/people/{personid}")
618 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
619 44762 katerina.i
    public Response fetchPeople(@PathParam("personid") String personid,
620
                                @QueryParam("format") final String format,
621 46175 katerina.i
                                @QueryParam("fq") final List<String> fieldQueries,
622 44762 katerina.i
                                @Context final HttpServletRequest request) {
623 46175 katerina.i
        return getResponseByEntityId(request, RequestResponseHandler.Entity.PERSON, personid, format, fieldQueries);
624 43931 katerina.i
    }
625
626 44762 katerina.i
627 43975 katerina.i
    @GET
628
    @Path("/api/people/{personid}/publications")
629 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
630 43975 katerina.i
    public Response fetchPeoplePublications(@PathParam("personid") String personid,
631 44762 katerina.i
                                            @DefaultValue("0") @QueryParam("page") final int offset,
632 43975 katerina.i
                                            @DefaultValue("10") @QueryParam("size") final int limit,
633 44602 katerina.i
                                            @QueryParam("format") final String format,
634 46175 katerina.i
                                            @QueryParam("fq") final List<String> fieldQueries,
635 43975 katerina.i
                                            @Context final HttpServletRequest request) {
636 46175 katerina.i
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.PUBLICATION, "relpersonid", personid, fieldQueries);
637
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.PUBLICATION, offset, limit, format, request, false, null, fieldQueries);
638 43975 katerina.i
    }
639 43931 katerina.i
640 43975 katerina.i
    @GET
641 44290 katerina.i
    @Path("/api/people/{personid}/publications/count")
642 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
643 44762 katerina.i
    public Response fetchPeoplePublicationsCount(@PathParam("personid") String personid,
644
                                                 @QueryParam("format") final String format,
645 46175 katerina.i
                                                 @QueryParam("fq") final List<String> fieldQueries,
646 44762 katerina.i
                                                 @Context final HttpServletRequest request) {
647 46175 katerina.i
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.PUBLICATION, "relpersonid", personid, fieldQueries);
648
        return getCount(request, fullQuery, format, fieldQueries);
649 44290 katerina.i
    }
650
651
652
    @GET
653 43975 katerina.i
    @Path("/api/people/{personid}/datasets")
654 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
655 43975 katerina.i
    public Response fetchPeopleDatasets(@PathParam("personid") String personid,
656 44762 katerina.i
                                        @DefaultValue("0") @QueryParam("page") final int offset,
657 43975 katerina.i
                                        @DefaultValue("10") @QueryParam("size") final int limit,
658 44602 katerina.i
                                        @QueryParam("format") final String format,
659 46175 katerina.i
                                        @QueryParam("fq") final List<String> fieldQueries,
660 43975 katerina.i
                                        @Context final HttpServletRequest request) {
661 46175 katerina.i
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.DATASET, "relpersonid", personid, fieldQueries);
662
        return getResponseByEntity(fullQuery, RequestResponseHandler.Entity.DATASET, offset, limit, format, request, false, null, fieldQueries);
663 43975 katerina.i
    }
664
665 44290 katerina.i
    @GET
666
    @Path("/api/people/{personid}/datasets/count")
667 44602 katerina.i
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
668 44762 katerina.i
    public Response fetchPeopleDatasetsCount(@PathParam("personid") String personid,
669
                                             @QueryParam("format") final String format,
670 46175 katerina.i
                                             @QueryParam("fq") final List<String> fieldQueries,
671 44762 katerina.i
                                             @Context final HttpServletRequest request) {
672 46175 katerina.i
        String fullQuery = builtEntity2EntityRelationQuery(RequestResponseHandler.Entity.DATASET, "relpersonid", personid, fieldQueries);
673
        return getCount(request, fullQuery, format, fieldQueries);
674 44301 katerina.i
    }
675 55638 katerina.i
*/
676 49850 katerina.i
    @GET
677 51542 katerina.i
    @Path("/api/reports")
678 49850 katerina.i
    @Produces(MediaType.TEXT_PLAIN)
679 56601 katerina.i
    @Timed(value = "http.server.request.duration", extraTags = {"referer", "portal", "uri", "/rest/v2/api/reports"}, longTask = false)
680 52317 tsampikos.
    public Response fetchReport(@QueryParam("q") String keywords,
681 49850 katerina.i
                                @QueryParam("refine") @DefaultValue("false") boolean refine,
682
                                @QueryParam("fields") final List<String> fields,
683
                                @QueryParam("fq") final List<String> fieldQueries,
684
                                @QueryParam("type") final String type,
685
                                @QueryParam("format") final String format,
686 49870 katerina.i
                                @Context final HttpServletResponse response) {
687 49850 katerina.i
688 50018 katerina.i
        logger.debug("Reports request received");
689
690
        if (type == null || type.isEmpty()) {
691
            return Response.status(Response.Status.BAD_REQUEST).entity(APIResponseFormatter.
692
                    compose500Message(MediaType.APPLICATION_JSON, "Fail to fetch report.", "The 'type' parameter is missing.")).build();
693
        }
694
695
        long startTime = System.nanoTime();
696 50401 katerina.i
        final RequestResponseHandler.Entity entity =  extractEntity(type);
697
        final Transformer transformer = extractTransformer(format, extractEntity(type));
698
        final boolean special = isSpecialFormat(format);
699 49870 katerina.i
        String responseType =  extractResponseFormat(format);
700 49850 katerina.i
701 52317 tsampikos.
        final String fullQuery = buildSearchRequest(entity, keywords, fieldQueries);
702 55638 katerina.i
        logger.debug("fullquery " + fullQuery);
703
        logger.debug("fieldQueries " + fieldQueries);
704 50018 katerina.i
705 49870 katerina.i
        try {
706 56601 katerina.i
            SearchResult sr = ((SearchServiceImpl)searchService).newSearch(fullQuery, Locale.getDefault().toString(), fields, fieldQueries,0, 0, format, transformer,null,false);
707 50018 katerina.i
            logger.debug("Total number of results " + sr.getTotal());
708
709 49870 katerina.i
            if (sr.getTotal() > 10000) {
710 50018 katerina.i
                return Response.status(Response.Status.BAD_REQUEST).entity(APIResponseFormatter.
711 49870 katerina.i
                        compose500Message(MediaType.APPLICATION_JSON, "Fail to fetch report.", "You have exceeded the number of allowed returned results")).build();
712
            }
713
714
        } catch (SearchServiceException sse) {
715
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(APIResponseFormatter.
716
                    compose500Message(MediaType.APPLICATION_JSON, "Fail to fetch report.", sse.getMessage())).build();
717
        }
718
719 49850 katerina.i
        StreamingOutput stream = new StreamingOutput() {
720
            @Override
721
            public void write(OutputStream os) throws IOException, WebApplicationException
722
            {
723 50018 katerina.i
                if (hasTitle(format) && !format.equals("html")) {
724 49870 katerina.i
                    os.write(CSVResponseFormat.appendTitle(entity, special).getBytes());
725
                }
726 49850 katerina.i
                try {
727 56601 katerina.i
                    ((SearchServiceImpl)searchService).cursorSearch(fullQuery, fields, fieldQueries, format, transformer, os);
728 49850 katerina.i
729
                } catch (SearchServiceException sse) {
730 49870 katerina.i
                    os.write(("Fail to return report. " + sse.getMessage()).getBytes());
731
                    logger.warn("Fail to return report. ", sse);
732 49850 katerina.i
                }
733 49870 katerina.i
734 50018 katerina.i
                //os.close();
735 49850 katerina.i
            }
736
737
        };
738
739 50018 katerina.i
        long estimatedTime = System.nanoTime() - startTime;
740
        logger.debug("Reports search time " + estimatedTime/1000000 +  " milliseconds");
741 49870 katerina.i
        return Response.ok().entity(stream).type(responseType).build();
742 50018 katerina.i
    }
743 49850 katerina.i
744 44734 katerina.i
    private String extractResponseFormat(String format) {
745 45053 katerina.i
        if (format != null && !format.isEmpty()) {
746
            if (format.equalsIgnoreCase("json")) {
747
                return MediaType.APPLICATION_JSON;
748
749 46175 katerina.i
            } else if (format.contains("csv")) {
750 45053 katerina.i
                return new MediaType("text", "csv").toString();
751
752 45379 katerina.i
            }  else if (format.equalsIgnoreCase("tsv")) {
753 45053 katerina.i
                return new MediaType("text", "tsv").toString();
754 45426 katerina.i
755
            } else if (format.equalsIgnoreCase("html")) {
756
                return MediaType.TEXT_HTML;
757 45053 katerina.i
            }
758 44734 katerina.i
        }
759 45053 katerina.i
760 44734 katerina.i
        return MediaType.APPLICATION_XML;
761
    }
762
763 45379 katerina.i
    private boolean isSpecialFormat(String format) {
764 45426 katerina.i
        if (format != null && format.toLowerCase().contains("special")) {
765 45379 katerina.i
            return true;
766
        }
767
        return false;
768
    }
769
770 46175 katerina.i
    private boolean hasTitle(String format) {
771
        if (format != null && format.toLowerCase().contains("notitle")) {
772
            return false;
773
        }
774
        return true;
775
    }
776
777 45426 katerina.i
    //TODO differentiate for html + add special controls for format support
778 44977 katerina.i
    private Transformer extractTransformer(String format, RequestResponseHandler.Entity entity) {
779
        if (searchRegistry == null) { return  null;}
780
781 45426 katerina.i
        if (format != null && (format.toLowerCase().contains("csv") || format.equalsIgnoreCase("html"))) {
782 49503 katerina.i
            logger.debug("Extracting transformer...." + format + "_" + entity);
783 46175 katerina.i
            return searchRegistry.getTransformer(format.replaceAll("-notitle","") + "_" + entity, Locale.getDefault());
784 45379 katerina.i
785 44977 katerina.i
        }
786
787
        return null;
788
    }
789
790 46175 katerina.i
    //TODO old way of creating query see if needed.
791
    /*private String buildSimpleSearchQuery(RequestResponseHandler.Entity entity, String keywords) {
792 44734 katerina.i
        StringBuilder queryBuilder = new StringBuilder();
793 46175 katerina.i
        enhanceQueryWithEntityType(queryBuilder, entity);
794
        builtQueryKeywords(queryBuilder, cleanKeywords(keywords));
795 44734 katerina.i
        return queryBuilder.toString();
796 46175 katerina.i
    }*/
797
798
    private String cleanKeywords(String keywords) {
799
        if (keywords != null) {
800
            return keywords.replaceAll("[\\\\/:*?<>|()]", "");
801
        }
802
        return keywords;
803 44734 katerina.i
    }
804
805 46175 katerina.i
    private String cleanId(String entityId) {
806
        return entityId.replaceAll("\"", "");
807 44645 katerina.i
    }
808
809 50429 katerina.i
    private String buildSearchRequest(RequestResponseHandler.Entity entity, String keywords, String doi, String sortBy, List<String> fieldQueries) {
810 46175 katerina.i
        enhanceFieldQueryWithEntityType(entity, fieldQueries);
811
812
        StringBuilder queryBuilder = new StringBuilder();
813
        if (doi != null && !doi.trim().isEmpty()) {
814
            queryBuilder.append("(pidclassid exact \"doi\" and pid exact " + doi + ")");
815
        }
816
817
        builtQueryKeywords(queryBuilder, keywords);
818 50429 katerina.i
        enhanceWithSortParameter(queryBuilder, sortBy);
819 46175 katerina.i
820
        return queryBuilder.toString();
821 44290 katerina.i
    }
822
823 46175 katerina.i
    private String buildSearchRequest(RequestResponseHandler.Entity entity, String keywords, List<String> fieldQueries) {
824
        enhanceFieldQueryWithEntityType(entity, fieldQueries);
825
826 44301 katerina.i
        StringBuilder queryBuilder = new StringBuilder();
827 46175 katerina.i
        builtQueryKeywords(queryBuilder, keywords);
828
829 44301 katerina.i
        return queryBuilder.toString();
830 44290 katerina.i
    }
831
832 46175 katerina.i
    private void enhanceFieldQueryWithEntityType(RequestResponseHandler.Entity entity, List<String> fieldQueries) {
833
        for (String fieldQuery: entity.getFieldQueries()) {
834
            logger.debug("adding " + fieldQuery);
835
            fieldQueries.add(fieldQuery);
836
        }
837
    }
838
839
    private void builtQueryKeywords(StringBuilder queryBuilder, String keywords) {
840
        if (keywords != null && !keywords.trim().isEmpty()) {
841
            CQLQueryBuilder.appendKeywords(queryBuilder, cleanKeywords(keywords));
842
        }
843
844
        if (queryBuilder.toString().isEmpty()) {
845
            queryBuilder.append("(*)");
846
        }
847
    }
848
849
    private void builtEntityIdQuery(StringBuilder queryBuilder, RequestResponseHandler.Entity entity, String entityId, List<String> fieldQueries){
850
        enhanceFieldQueryWithEntityType(entity, fieldQueries);
851
        enhanceQueryWithEntityId(queryBuilder, entity, cleanId(entityId));
852
    }
853
854 56601 katerina.i
    /* Queries with pids are only valid with deleted by inderence marked as true */
855
    private void resultPidQuery(StringBuilder queryBuilder, RequestResponseHandler.Entity entity, String resultPid, List<String> fieldQueries){
856
        builtDeletedByInferenceQuery(queryBuilder);
857
        if (entity == RequestResponseHandler.Entity.ORGANIZATION) {
858
            enhanceFieldQueryWithEntityType(entity, fieldQueries);
859
        } else if (entity != RequestResponseHandler.Entity.NONE) {
860
            throw new IllegalArgumentException("Entity " + entity.toString() + " is not supported.");
861
        }
862
        enhanceQueryWithPid(queryBuilder, entity, cleanId(resultPid));
863
    }
864
865
    private void builtDeletedByInferenceQuery(StringBuilder queryBuilder) {
866
        CQLQueryBuilder.appendFieldTerm(queryBuilder, CQLQueryBuilder.Operator.NONE, "deletedByInference", CQLQueryBuilder.Operator.EQUAL, "true");
867
    }
868
869 46175 katerina.i
    private String builtEntity2EntityRelationQuery(RequestResponseHandler.Entity entity, String relationfield, String entityId, List<String> fieldQueries){
870
        StringBuilder queryBuilder = new StringBuilder();
871
        //enhanceQueryWithEntityType(queryBuilder, entity);
872
        enhanceFieldQueryWithEntityType(entity, fieldQueries);
873
        enhanceQueryWithRelationId(queryBuilder, relationfield, cleanId(entityId));
874
        return queryBuilder.toString();
875
    }
876
877 44663 katerina.i
    private void enhanceQueryWithRelationId(StringBuilder queryBuilder, String relationfield, String entityId) {
878 46175 katerina.i
        if (!queryBuilder.toString().isEmpty()) {
879
            CQLQueryBuilder.appendFieldTerm(queryBuilder, CQLQueryBuilder.Operator.AND, " " + relationfield + " ", CQLQueryBuilder.Operator.EXACT, entityId);
880
881
        } else {
882
            CQLQueryBuilder.appendFieldTerm(queryBuilder, CQLQueryBuilder.Operator.NONE, relationfield + " ", CQLQueryBuilder.Operator.EXACT, entityId);
883
        }
884 44290 katerina.i
    }
885
886 46175 katerina.i
    private void enhanceQueryWithEntityId(StringBuilder queryBuilder, RequestResponseHandler.Entity entity, String entityId) {
887
        if (queryBuilder.toString().isEmpty()) {
888
            CQLQueryBuilder.appendFieldTerm(queryBuilder, CQLQueryBuilder.Operator.NONE, "objidentifier", CQLQueryBuilder.Operator.EXACT, entityId);
889
        } else {
890
            CQLQueryBuilder.appendFieldTerm(queryBuilder, CQLQueryBuilder.Operator.AND, "objidentifier", CQLQueryBuilder.Operator.EXACT, entityId);
891
        }
892
893 56601 katerina.i
        if (entity == RequestResponseHandler.Entity.PUBLICATION || entity == RequestResponseHandler.Entity.DATASET
894
                || entity == RequestResponseHandler.Entity.SOFTWARE || entity == RequestResponseHandler.Entity.OTHER) {
895 46175 katerina.i
            CQLQueryBuilder.appendFieldTerm(queryBuilder, CQLQueryBuilder.Operator.OR, "resultdupid", CQLQueryBuilder.Operator.EXACT, entityId);
896 56601 katerina.i
897
        } else if (entity == RequestResponseHandler.Entity.ORGANIZATION) {
898
            CQLQueryBuilder.appendFieldTerm(queryBuilder, CQLQueryBuilder.Operator.OR, "organizationdupid", CQLQueryBuilder.Operator.EXACT, entityId);
899 46175 katerina.i
        }
900 56601 katerina.i
    }
901 46175 katerina.i
902 56601 katerina.i
903
904
    private void enhanceQueryWithPid(StringBuilder queryBuilder, RequestResponseHandler.Entity entity, String entityId) {
905
        if (entity == RequestResponseHandler.Entity.NONE) {
906
            CQLQueryBuilder.appendFieldTerm(queryBuilder, CQLQueryBuilder.Operator.AND, "resultdupid", CQLQueryBuilder.Operator.EXACT, entityId);
907
908
        } else if (entity == RequestResponseHandler.Entity.ORGANIZATION) {
909
            CQLQueryBuilder.appendFieldTerm(queryBuilder, CQLQueryBuilder.Operator.AND, "organizationdupid", CQLQueryBuilder.Operator.EXACT, entityId);
910
911
        } else {
912
            throw new IllegalArgumentException("The entity " + entity.toString() + " is not supported.");
913
        }
914 44290 katerina.i
    }
915
916 50429 katerina.i
    private void enhanceWithSortParameter(StringBuilder queryBuilder, String sortBy) {
917
        if (sortBy != null) {
918
            String[] sortParams = sortBy.split(",");
919
920
            if (sortParams.length != 2) {
921
                throw new IllegalArgumentException("Invalid sort paremeter. 'sortBy' parameter format is <fieldName>[,asc|,desc].");
922
            }
923
924
            String sortByField = sortParams[0];
925
            String order = sortParams[1];
926
927
            if (!sortByField.equals("resultdateofacceptance")){
928
                throw new IllegalArgumentException("'" + sortByField + "' is not a sortable field.");
929
            }
930
931
            if (!checkOrder(order)) {
932
                throw new IllegalArgumentException("'" + order + "' is not a valid ordering. Please use one of {ascending, descending}");
933
            }
934
935
            addSortParameter(sortByField, order, queryBuilder);
936
        }
937
    }
938
939
    private static boolean checkOrder(String order) {
940
        if (order.matches("ascending|descending")) {
941
            return true;
942
        }
943
        return false;
944
    }
945
946
    private static void addSortParameter(String indexField, String order, StringBuilder queryBuilder) {
947
        queryBuilder.append(" sortBy " + indexField + "/sort." + order);
948
    }
949
950 46175 katerina.i
    private Response getCount(HttpServletRequest request, String query, String format, List<String> fieldQueries) {
951 44977 katerina.i
        String responseFormat = extractResponseFormat(format);
952
953 44271 katerina.i
        try {
954 56601 katerina.i
            SearchResult searchResult = ((SearchServiceImpl)searchService).newSearch(query, Locale.getDefault().toString(), null, fieldQueries, 0, 0, responseFormat, null, null, false);
955 44977 katerina.i
            return Response.status(Response.Status.OK).entity(APIResponseFormatter.createCountMeta(request, query, searchResult.getTotal(), responseFormat)).type(responseFormat).build();
956 44271 katerina.i
957
        } catch (SearchServiceException sse) {
958 44977 katerina.i
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(APIResponseFormatter.compose500Message(responseFormat, "Fail to fetch count for query " + query + ".", sse.getMessage())).build();
959 44290 katerina.i
        }
960
    }
961
962 46175 katerina.i
    private Response getResponseByEntityId(HttpServletRequest request, RequestResponseHandler.Entity entity, String entityId, String format, List<String> fieldQueries) {
963 44734 katerina.i
        String responseType = extractResponseFormat(format);
964 46175 katerina.i
965 43931 katerina.i
        try {
966 44290 katerina.i
            StringBuilder queryBuilder = new StringBuilder();
967 46175 katerina.i
            builtEntityIdQuery(queryBuilder, entity, entityId, fieldQueries);
968 44290 katerina.i
            String fullQuery = queryBuilder.toString();
969 43931 katerina.i
970 44734 katerina.i
            if(fullQuery == null || fullQuery.isEmpty()) {
971
                return Response.status(Response.Status.BAD_REQUEST).
972
                        entity(APIResponseFormatter.compose400Message(format, "The 'query' parameter is required")).
973
                        type(responseType).build();
974
            }
975
976 56601 katerina.i
            SearchResult searchResult = ((SearchServiceImpl)searchService).newSearch(fullQuery, Locale.getDefault().toString(), null, fieldQueries, 0, 1, responseType, null, null, false);
977 44290 katerina.i
978 43931 katerina.i
            if (searchResult.getSearchResults() == null || searchResult.getSearchResults().isEmpty() ||
979
                    searchResult.getSearchResults().size() == 0 || searchResult.getSearchResults().get(0) == null) {
980 44645 katerina.i
                return Response.status(Response.Status.NOT_FOUND).entity(APIResponseFormatter.compose404Message(responseType, "404 - " + entity +" with id "
981
                                + entityId + " not found.")).type(responseType).build();
982 43931 katerina.i
            }
983
984 44657 katerina.i
            return Response.status(Response.Status.OK).entity(APIResponseFormatter.createEntityResponse(request, entity, searchResult.getSearchResults().get(0).toString(), responseType)).type(responseType).build();
985 43931 katerina.i
986
        } catch (SearchServiceException sse) {
987 43975 katerina.i
            logger.error("Fail to fetch "+ entity + " with id " + entityId, sse);
988 44645 katerina.i
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(APIResponseFormatter.compose500Message(responseType, "Fail to fetch " + entity + " with id " + entityId, sse.getMessage())).build();
989 43931 katerina.i
        }
990
    }
991
992 44734 katerina.i
    private Response getResponseByEntity(String fullQuery, RequestResponseHandler.Entity entity, int offset, int limit, String format, HttpServletRequest request, boolean refine, List<String> refineFields, List<String> fieldQueries) {
993 50018 katerina.i
        long startTime = System.nanoTime();
994 45379 katerina.i
        Transformer transformer = extractTransformer(format, entity);
995
        boolean special = isSpecialFormat(format);
996 46175 katerina.i
        boolean hasTitle = hasTitle(format);
997 44734 katerina.i
        String responseType = extractResponseFormat(format);
998 45379 katerina.i
999 44734 katerina.i
        if(fullQuery == null || fullQuery.isEmpty()) {
1000
            return Response.status(Response.Status.BAD_REQUEST).
1001
                    entity(APIResponseFormatter.compose400Message(responseType, "The 'query' parameter is required")).
1002
                    type(responseType).build();
1003
        }
1004
1005 43975 katerina.i
        try {
1006 56601 katerina.i
            SearchResult solrResults = ((SearchServiceImpl)searchService).newSearch(fullQuery, Locale.getDefault().toString(), refineFields, fieldQueries, offset, limit, responseType, transformer, null, false);
1007 50018 katerina.i
            long estimatedTime = System.nanoTime() - startTime;
1008
            logger.debug("Publications search time " + estimatedTime/1000000 +  " milliseconds");
1009 46175 katerina.i
            return Response.status(Response.Status.OK).entity(APIResponseFormatter.createEntitiesResponse(request, entity, fullQuery, fieldQueries, solrResults, refine, responseType, special, hasTitle)).type(responseType).build();
1010 43931 katerina.i
1011 43975 katerina.i
        } catch (SearchServiceException sse) {
1012
            logger.error("Fail to get " + entity.getPlural() , sse);
1013
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).
1014 44645 katerina.i
                    entity(APIResponseFormatter.compose500Message(responseType, "Fail to fetch " + entity.getPlural(), sse.getMessage())).type(responseType).build();
1015 43975 katerina.i
        }
1016 43931 katerina.i
    }
1017
1018 45491 katerina.i
    private RequestResponseHandler.Entity extractEntity(String type) {
1019
1020
        if (type == null) {
1021
            return RequestResponseHandler.Entity.NONE;
1022
        }
1023
1024
        if (type.equalsIgnoreCase(RequestResponseHandler.Entity.PUBLICATION.getPlural())) {
1025
            return RequestResponseHandler.Entity.PUBLICATION;
1026
1027
        } else if (type.equalsIgnoreCase(RequestResponseHandler.Entity.DATASET.getPlural())) {
1028
            return RequestResponseHandler.Entity.DATASET;
1029
1030 50018 katerina.i
        } else if (type.equalsIgnoreCase(RequestResponseHandler.Entity.SOFTWARE.getPlural())) {
1031
            return RequestResponseHandler.Entity.SOFTWARE;
1032
1033 52806 tsampikos.
        } else if (type.equalsIgnoreCase(RequestResponseHandler.Entity.OTHER.getPlural())) {
1034
            return RequestResponseHandler.Entity.OTHER;
1035
1036 45491 katerina.i
        } else if (type.equalsIgnoreCase(RequestResponseHandler.Entity.PROJECT.getPlural())) {
1037
            return RequestResponseHandler.Entity.PROJECT;
1038
1039
        } else if (type.equalsIgnoreCase(RequestResponseHandler.Entity.DATASOURCE.getPlural())) {
1040
            return RequestResponseHandler.Entity.DATASOURCE;
1041
1042
        } else if (type.equalsIgnoreCase(RequestResponseHandler.Entity.PERSON.getPlural())) {
1043
            return RequestResponseHandler.Entity.PERSON;
1044
1045
        } else if (type.equalsIgnoreCase(RequestResponseHandler.Entity.ORGANIZATION.getPlural())) {
1046
            return RequestResponseHandler.Entity.ORGANIZATION;
1047
        }
1048
1049
        return RequestResponseHandler.Entity.NONE;
1050
    }
1051
1052
1053 55643 katerina.i
    //This follows the newSearchWithoutFieldQueries comment. I wish to remove it!!! This was only made
1054
    // (quick and dirty - only the getResponseByEntity version with newSearchWithoutFieldQueries is used
1055
    // after a last time request for the portal to show all the publications and the deletedbyinference ones.
1056
    // I did not want to pass a parameter since I do not know if we are going to keep it. This is for a tech meeting showcase.
1057
    // If we want to keep this I need to redesign.
1058
    @GET
1059
    @Path("/api/deletedByInferencePublications/{publicationid}")
1060
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
1061 56601 katerina.i
    @Timed(value = "http.requests.portal.publicationDuplicates", longTask = false)
1062
    //TODO remove
1063 55643 katerina.i
    public Response fetchDeletedByInferencePublicationsById(@PathParam("publicationid") String publicationid,
1064
                                          @QueryParam("format") final String format,
1065 56601 katerina.i
                                          @QueryParam("size") final int limit,
1066 55643 katerina.i
                                          @QueryParam("fq") final List<String> fieldQueries,
1067
                                          @Context final HttpServletRequest request) {
1068 56601 katerina.i
1069
        return getDeletedByInferenceResponseByPid(request, RequestResponseHandler.Entity.PUBLICATION, publicationid, format, limit, fieldQueries);
1070 55643 katerina.i
    }
1071
1072 56601 katerina.i
    @GET
1073
    @Path("/api/deletedByInferenceResults/{resultPid}")
1074
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
1075
    @Timed(value = "http.requests.portal.publicationDuplicates", longTask = false)
1076
    public Response fetchDeletedByInferenceEntitiesById(@PathParam("resultPid") String resultPid,
1077
                                                            @QueryParam("format") final String format,
1078
                                                            @QueryParam("size") final int limit,
1079
                                                            @QueryParam("fq") final List<String> fieldQueries,
1080
                                                            @Context final HttpServletRequest request) {
1081
1082
        return getDeletedByInferenceResponseByPid(request, RequestResponseHandler.Entity.NONE, resultPid, format, limit, fieldQueries);
1083
    }
1084
1085
1086
    @GET
1087
    @Path("/api/deletedByInferenceOrganizations/{organizationPid}")
1088
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
1089
    @Timed(value = "http.requests.portal.organizationDuplicates", longTask = false)
1090
    public Response fetchDeletedByInferenceOrganizationById(@PathParam("organizationPid") String organizationPid,
1091
                                                     @QueryParam("format") final String format,
1092
                                                     @QueryParam("size") final int limit,
1093
                                                     @QueryParam("fq") final List<String> fieldQueries,
1094
                                                     @Context final HttpServletRequest request) {
1095
1096
        return getDeletedByInferenceResponseByPid(request, RequestResponseHandler.Entity.ORGANIZATION, organizationPid, format, limit, fieldQueries);
1097
    }
1098
1099
1100 55643 katerina.i
    //Please see comment above. I wish to remove it.
1101 56601 katerina.i
    private Response getDeletedByInferenceResponseByPid(HttpServletRequest request, RequestResponseHandler.Entity entity, String resultPid, String format, int limit, List<String> fieldQueries) {
1102 55643 katerina.i
        String responseType = extractResponseFormat(format);
1103
1104
        try {
1105
            StringBuilder queryBuilder = new StringBuilder();
1106 56601 katerina.i
            resultPidQuery(queryBuilder, entity, resultPid, fieldQueries);
1107 55643 katerina.i
            String fullQuery = queryBuilder.toString();
1108
1109
            if(fullQuery == null || fullQuery.isEmpty()) {
1110
                return Response.status(Response.Status.BAD_REQUEST).
1111
                        entity(APIResponseFormatter.compose400Message(format, "The 'query' parameter is required")).
1112
                        type(responseType).build();
1113
            }
1114
1115 56601 katerina.i
            SearchResult searchResults = ((SearchServiceImpl)searchService).newSearchWithoutFieldQueries(fullQuery, Locale.getDefault().toString(), null, fieldQueries, 0, limit, responseType, null, null, false);
1116 55643 katerina.i
1117 56601 katerina.i
            if (searchResults.getSearchResults() == null || searchResults.getSearchResults().isEmpty() ||
1118
                    searchResults.getSearchResults().size() == 0 || searchResults.getSearchResults().get(0) == null) {
1119 55643 katerina.i
                return Response.status(Response.Status.NOT_FOUND).entity(APIResponseFormatter.compose404Message(responseType, "404 - " + entity +" with id "
1120 56601 katerina.i
                        + resultPid + " not found.")).type(responseType).build();
1121 55643 katerina.i
            }
1122
1123
1124 56601 katerina.i
            return Response.status(Response.Status.OK).entity(APIResponseFormatter.createEntitiesResponse(request, entity, fullQuery, null, searchResults, false, responseType, false, false)).type(responseType).build();
1125
1126 55643 katerina.i
        } catch (SearchServiceException sse) {
1127 56601 katerina.i
            logger.error("Fail to fetch "+ entity + " with id " + resultPid, sse);
1128
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(APIResponseFormatter.compose500Message(responseType, "Fail to fetch " + entity + " with id " + resultPid, sse.getMessage())).build();
1129 55643 katerina.i
        }
1130
    }
1131
1132 44977 katerina.i
    /*
1133 43931 katerina.i
    public static void main(String[] args) {
1134
        String json = " {\"result\":{\"xmlns:oaf\":\"http://namespace.openaire.eu/oaf\",\"xmlns:xsi\":\"http://www.w3.o" +
1135
                "rg/2001/XMLSchema-instance\",\"header\":{\"dri:dateOfCollection\":\"2016-05-20T03:34:07Z\",\"dri:dateOfTransformation\":\"\",\"counters\":{\"counter_dedup\":{\"value\":2},\"counter_doi\":{\"value\":2},\"counter_authorship\":{\"va" +
1136
                "lue\":1},\"counter_authorship_inferred\":{\"value\":1}},\"dri:objIdentifier\":\"dedup_wf_001::0f5604702b32f59d9789573113279e69\"},\"metadata\":{\"oaf:entity\":{\"oaf:result\":{\"datainfo\":{\"provenanceaction\":{\"schemename\"" +
1137
                ":\"dnet:provenanceActions\",\"classname\":\"sysimport:dedup\",\"schemeid\":\"dnet:provenanceActions\",\"classid\":\"sysimport:dedup\"},\"trust\":0.9,\"inferenceprovenance\":\"dedup-similarity-result\",\"deletedbyinference\":fal" +
1138
                "se,\"inferred\":true},\"rels\":{\"rel\":{\"to\":{\"content\":\"dedup_wf_001::884d8c367553a8de98ec90ece1b1be4a\",\"scheme\":\"dnet:person_result_relations\",\"class\":\"hasAuthor\",\"type\":\"person\"},\"provenanceaction\":\"sysimpor" +
1139
                "t:crosswalk:repository\",\"trust\":0.9,\"inferenceprovenance\":\"\",\"ranking\":1,\"inferred\":true,\"fullname\":\"Krafft, Alexander\"}},\"subject\":[{\"content\":\"Clinic for Obstetrics\",\"schemename\":\"dnet:result_subject\",\"c" +
1140
                "lassname\":\"keyword\",\"schemeid\":\"dnet:result_subject\",\"classid\":\"keyword\"},{\"content\":\"610 Medicine & health\",\"schemename\":\"dnet:result_subject\",\"classname\":\"keyword\",\"schemeid\":\"dnet:result_subject\",\"class" +
1141
                "id\":\"keyword\"},{\"content\":\"News\",\"schemename\":\"dnet:result_subject\",\"classname\":\"keyword\",\"schemeid\":\"dnet:result_subject\",\"classid\":\"keyword\"}],\"collectedfrom\":[{\"id\":\"opendoar____::0efe32849d230d7f53049d" +
1142
                "dc4a4b0c60\",\"name\":\"Zurich Open Repository and Archive\"},{\"id\":\"opendoar____::8b6dd7db9af49e67306feb59a8bdc52c\",\"name\":\"Europe PubMed Central\"}],\"children\":{\"result\":[{\"title\":{\"content\":\"Iron supplementat" +
1143
                "ion in pregnancy\",\"schemename\":\"dnet:dataCite_title\",\"classname\":\"main title\",\"schemeid\":\"dnet:dataCite_title\",\"classid\":\"main title\"},\"resulttype\":{\"schemename\":\"dnet:result_typologies\",\"classname\":\"publi" +
1144
                "cation\",\"schemeid\":\"dnet:result_typologies\",\"classid\":\"publication\"},\"dateofacceptance\":\"1981-09-01\",\"objidentifier\":\"od_______908::f27f9e68f0b9f510ebf572ba295344e1\"},{\"title\":{\"content\":\"Iron supplementat" +
1145
                "ion in pregnancy\",\"schemename\":\"dnet:dataCite_title\",\"classname\":\"main title\",\"schemeid\":\"dnet:dataCite_title\",\"classid\":\"main title\"},\"resulttype\":{\"schemename\":\"dnet:result_typologies\",\"classname\":\"publi" +
1146
                "cation\",\"schemeid\":\"dnet:result_typologies\",\"classid\":\"publication\"},\"dateofacceptance\":\"2013-01-01\",\"publisher\":\"BMJ Publishing Group\",\"objidentifier\":\"od_______885::0f5604702b32f59d9789573113279e69\"}],\"i" +
1147
                "nstance\":[{\"webresource\":{\"url\":\"http://europepmc.org/articles/PMC2306130\"},\"id\":\"opendoar____::8b6dd7db9af49e67306feb59a8bdc52c\",\"licence\":{\"schemename\":\"dnet:access_modes\",\"classname\":\"Open Access\",\"sche" +
1148
                "meid\":\"dnet:access_modes\",\"classid\":\"OPEN\"},\"hostedby\":{\"id\":\"opendoar____::8b6dd7db9af49e67306feb59a8bdc52c\",\"name\":\"Europe PubMed Central\"},\"instancetype\":{\"schemename\":\"dnet:publication_resource\",\"class" +
1149
                "name\":\"Article\",\"schemeid\":\"dnet:publication_resource\",\"classid\":\"0001\"}},{\"webresource\":{\"url\":\"http://www.zora.uzh.ch/87059/1/30_13_Krafft_2013bmj_f4399_full.pdf\"},\"id\":\"opendoar____::0efe32849d230d7f530" +
1150
                "49ddc4a4b0c60\",\"licence\":{\"schemename\":\"dnet:access_modes\",\"classname\":\"Open Access\",\"schemeid\":\"dnet:access_modes\",\"classid\":\"OPEN\"},\"hostedby\":{\"id\":\"opendoar____::0efe32849d230d7f53049ddc4a4b0c60\",\"name" +
1151
                "\":\"Zurich Open Repository and Archive\"},\"instancetype\":{\"schemename\":\"dnet:publication_resource\",\"classname\":\"Article\",\"schemeid\":\"dnet:publication_resource\",\"classid\":\"0001\"}}]},\"pid\":[{\"content\":\"10.5167" +
1152
                "/uzh-87059\",\"schemename\":\"dnet:pid_types\",\"classname\":\"doi\",\"schemeid\":\"dnet:pid_types\",\"classid\":\"doi\"},{\"content\":\"PMC2306130\",\"schemename\":\"dnet:pid_types\",\"classname\":\"pmc\",\"schemeid\":\"dnet:pid_types\"," +
1153
                "\"classid\":\"pmc\"},{\"content\":\"10.1136/bmj.f4399\",\"schemename\":\"dnet:pid_types\",\"classname\":\"doi\",\"schemeid\":\"dnet:pid_types\",\"classid\":\"doi\"}],\"resourcetype\":{\"schemename\":\"\",\"classname\":\"\",\"schemeid\":\"\",\"c" +
1154
                "lassid\":\"\"},\"format\":\"\",\"dateofacceptance\":\"2013-01-01\",\"embargoenddate\":\"\",\"version\":\"\",\"size\":\"\",\"publisher\":\"BMJ Publishing Group\",\"country\":{\"schemename\":\"\",\"classname\":\"\",\"schemeid\":\"\",\"classid\":\"\"},\"" +
1155
                "metadataversionnumber\":\"\",\"title\":{\"content\":\"Iron supplementation in pregnancy\",\"schemename\":\"dnet:dataCite_title\",\"classname\":\"main title\",\"schemeid\":\"dnet:dataCite_title\",\"classid\":\"main title\"},\"result" +
1156
                "type\":{\"schemename\":\"dnet:result_typologies\",\"classname\":\"publication\",\"schemeid\":\"dnet:result_typologies\",\"classid\":\"publication\"},\"source\":\"Krafft, Alexander (2013). Iron supplementation in pregnancy. Br" +
1157
                "itish Medical Journal, 347:f4399.\",\"contributor\":\"\",\"description\":\"\",\"originalId\":[\"oai:europepmc.org:1052305\",\"oai:www.zora.uzh.ch:87059\"],\"lastmetadataupdate\":\"\",\"relevantdate\":{\"schemename\":\"\",\"classnam" +
1158
                "e\":\"\",\"schemeid\":\"\",\"classid\":\"\"},\"device\":\"\",\"bestlicense\":{\"schemename\":\"dnet:access_modes\",\"classname\":\"Open Access\",\"schemeid\":\"dnet:access_modes\",\"classid\":\"OPEN\"},\"language\":{\"schemename\":\"dnet:langu" +
1159
                "ages\",\"classname\":\"English\",\"schemeid\":\"dnet:languages\",\"classid\":\"eng\"},\"storagedate\":\"\",\"fulltext\":\"\"},\"xsi:schemaLocation\":\"http://namespace.openaire.eu/oaf https://www.openaire.eu/schema/0.2/oaf-0.2.xs" +
1160
                "d\"}},\"xmlns:dri\":\"http://www.driver-repository.eu/namespace/dri\"}}";
1161
1162
        String s = "{\"result\":{\"xmlns:oaf\":\"http://namespace.openaire.eu/oaf\",\"xmlns:xsi\":\"http://www.w3.org/2001" +
1163
                "/XMLSchema-instance\",\"header\":{\"dri:dateOfCollection\":\"2014-04-10T13:35:33Z\",\"dri:dateOfTransformation\":\"\",\"counters\":{\"counter_dedup\":{\"value\":2},\"counter_authorship\":{\"value\":1},\"counter_authorship_infer" +
1164
                "red\":{\"value\":1}},\"dri:objIdentifier\":\"dedup_wf_001::4d934888dee33a62dece6fa36192c710\"},\"metadata\":{\"oaf:entity\":{\"oaf:result\":{\"datainfo\":{\"provenanceaction\":{\"schemename\":\"dnet:provenanceActions\",\"classn" +
1165
                "ame\":\"sysimport:dedup\",\"schemeid\":\"dnet:provenanceActions\",\"classid\":\"sysimport:dedup\"},\"trust\":0.9,\"inferenceprovenance\":\"dedup-similarity-result\",\"deletedbyinference\":false,\"inferred\":true},\"rels\":{\"rel\"" +
1166
                ":{\"to\":{\"content\":\"od______1232::d4f9cea02c7762da24cd71ea0b9791de\",\"scheme\":\"dnet:person_result_relations\",\"class\":\"hasAuthor\",\"type\":\"person\"},\"provenanceaction\":\"sysimport:crosswalk:repository\",\"trust\":0" +
1167
                ".9,\"inferenceprovenance\":\"\",\"ranking\":1,\"inferred\":true,\"fullname\":\"Anonymous\"}},\"subject\":{\"content\":\"Señoríos-Legislación\",\"schemename\":\"dnet:result_subject\",\"classname\":\"keyword\",\"schemeid\":\"dnet:result" +
1168
                "_subject\",\"classid\":\"keyword\"},\"collectedfrom\":[{\"id\":\"opendoar____::e53a0a2978c28872a4505bdb51db06dc\",\"name\":\"Biblioteca Virtual del Patrimonio Bibliográfico (Virtual Library of Bibliographical Heritage)\"" +
1169
                "},{\"id\":\"opendoar____::7aee26c309def8c5a2a076eb250b8f36\",\"name\":\"Biblioteca Virtual de Aragón\"}],\"children\":{\"result\":[{\"title\":{\"content\":\"Discurso sobre los señoríos : necesidad y justicia del decreto de" +
1170
                " Cortes de 6 de Agosto de 1811 y ventaja que debe causar a la Nación\",\"schemename\":\"dnet:dataCite_title\",\"classname\":\"main title\",\"schemeid\":\"dnet:dataCite_title\",\"classid\":\"main title\"},\"resulttype\":{\"sch" +
1171
                "emename\":\"dnet:result_typologies\",\"classname\":\"publication\",\"schemeid\":\"dnet:result_typologies\",\"classid\":\"publication\"},\"dateofacceptance\":\"1820-01-01\",\"objidentifier\":\"od______2719::bc2326a31763719dc5ebd" +
1172
                "38f16a25404\"},{\"title\":{\"content\":\"Discurso sobre los señoríos : necesidad y justicia del decreto de Cortes de 6 de Agosto de 1811 y ventaja que debe causar a la Nación\",\"schemename\":\"dnet:dataCite_title\"," +
1173
                "\"classname\":\"main title\",\"schemeid\":\"dnet:dataCite_title\",\"classid\":\"main title\"},\"resulttype\":{\"schemename\":\"dnet:result_typologies\",\"classname\":\"publication\",\"schemeid\":\"dnet:result_typologies\",\"classid\"" +
1174
                ":\"publication\"},\"dateofacceptance\":\"1820-01-01\",\"objidentifier\":\"od______1232::4d934888dee33a62dece6fa36192c710\"}],\"instance\":[{\"webresource\":[{\"url\":\"http://bvpb.mcu.es/es/consulta/registro.cmd?id=403864\"" +
1175
                "},{\"url\":\"http://bvpb.mcu.es/es/catalogo_imagenes/grupo.cmd?path=2755\"}],\"id\":\"opendoar____::e53a0a2978c28872a4505bdb51db06dc\",\"licence\":{\"schemename\":\"dnet:access_modes\",\"classname\":\"Open Access\",\"schemei" +
1176
                "d\":\"dnet:access_modes\",\"classid\":\"OPEN\"},\"hostedby\":{\"id\":\"opendoar____::e53a0a2978c28872a4505bdb51db06dc\",\"name\":\"Biblioteca Virtual del Patrimonio Bibliográfico (Virtual Library of Bibliographical Herita" +
1177
                "ge)\"},\"instancetype\":{\"schemename\":\"dnet:publication_resource\",\"classname\":\"Book\",\"schemeid\":\"dnet:publication_resource\",\"classid\":\"0002\"}},{\"webresource\":{\"url\":\"http://bibliotecavirtual.aragon.es/bva/i18" +
1178
                "n/consulta/registro.cmd?id=2878\"},\"id\":\"opendoar____::7aee26c309def8c5a2a076eb250b8f36\",\"licence\":{\"schemename\":\"dnet:access_modes\",\"classname\":\"Open Access\",\"schemeid\":\"dnet:access_modes\",\"classid\":\"OPEN\"" +
1179
                "},\"hostedby\":{\"id\":\"opendoar____::7aee26c309def8c5a2a076eb250b8f36\",\"name\":\"Biblioteca Virtual de Aragón\"},\"instancetype\":{\"schemename\":\"dnet:publication_resource\",\"classname\":\"Book\",\"schemeid\":\"dnet:publi" +
1180
                "cation_resource\",\"classid\":\"0002\"}}]},\"pid\":{\"schemename\":\"\",\"classname\":\"\",\"schemeid\":\"\",\"classid\":\"\"},\"resourcetype\":{\"schemename\":\"\",\"classname\":\"\",\"schemeid\":\"\",\"classid\":\"\"},\"format\":\"\",\"dateofaccepta" +
1181
                "nce\":\"1820-01-01\",\"embargoenddate\":\"\",\"version\":\"\",\"size\":\"\",\"country\":{\"schemename\":\"\",\"classname\":\"\",\"schemeid\":\"\",\"classid\":\"\"},\"publisher\":\"\",\"metadataversionnumber\":\"\",\"title\":{\"content\":\"Discurso sob" +
1182
                "re los señoríos : necesidad y justicia del decreto de Cortes de 6 de Agosto de 1811 y ventaja que debe causar a la Nación\",\"schemename\":\"dnet:dataCite_title\",\"classname\":\"main title\",\"schemeid\":\"dnet:dataC" +
1183
                "ite_title\",\"classid\":\"main title\"},\"resulttype\":{\"schemename\":\"dnet:result_typologies\",\"classname\":\"publication\",\"schemeid\":\"dnet:result_typologies\",\"classid\":\"publication\"},\"source\":\"\",\"contributor\":\"Impr" +
1184
                "enta de Heras, imp.\",\"description\":\"\",\"originalId\":[\"oai:bvpb.mcu.es:403864\",\"oai:bibliotecavirtual.aragon.es:2878\"],\"lastmetadataupdate\":\"\",\"relevantdate\":{\"schemename\":\"\",\"classname\":\"\",\"schemeid\":\"\",\"cl" +
1185
                "assid\":\"\"},\"device\":\"\",\"bestlicense\":{\"schemename\":\"dnet:access_modes\",\"classname\":\"Open Access\",\"schemeid\":\"dnet:access_modes\",\"classid\":\"OPEN\"},\"language\":{\"schemename\":\"dnet:languages\",\"classname\":\"Span" +
1186
                "ish\",\"schemeid\":\"dnet:languages\",\"classid\":\"esl/spa\"},\"storagedate\":\"\",\"fulltext\":\"\"},\"xsi:schemaLocation\":\"http://namespace.openaire.eu/oaf https://www.openaire.eu/schema/0.2/oaf-0.2.xsd\"}},\"xmlns:dri\":\"h" +
1187
                "ttp://www.driver-repository.eu/namespace/dri\"}}\n";
1188
1189
        JSONObject finalOject = new JSONObject();
1190
        finalOject.put("dri:objIdentifier", new JSONObject(json).getJSONObject("result").getJSONObject("header").getString("dri:objIdentifier"));
1191
        finalOject.put("content", new JSONObject(new JSONObject(json).getJSONObject("result").getJSONObject("metadata").getJSONObject("oaf:entity").getJSONObject("oaf:result"),
1192
                new String[]{"title", "description", "language", "bestlicense", "pid", "rels"}));
1193
1194
        System.out.println(finalOject);
1195
1196
        JSONObject jsonObject = new JSONObject(s).getJSONObject("result").getJSONObject("metadata").getJSONObject("oaf:entity").getJSONObject("oaf:result");
1197
        System.out.println("title --> " + jsonObject.getJSONObject("title").getString("content"));
1198
        System.out.println("pid --> " + jsonObject.getJSONArray("pid"));
1199
1200
        JSONObject newJsonObject1 = new JSONObject(jsonObject, new String[]{"title", "description", "language", "bestlicense", "pid", "rels"});
1201
1202 44602 katerina.i
    }
1203
*/
1204 44663 katerina.i
    /*
1205 43931 katerina.i
1206 44602 katerina.i
    public static void main(String[] args) throws IOException, CQLParseException {
1207
        CqlTranslator translator = new CqlTranslatorImpl();
1208
        System.out.println(translator.toLucene("relfundinglevel0_id = ec__________::EC::FP7"));
1209
    }
1210 44663 katerina.i
    */
1211 43931 katerina.i
1212
}