Revision 62489
Added by Katerina Iatropoulou over 1 year ago
SearchRequestController.java | ||
---|---|---|
1 | 1 |
package eu.dnetlib.data.search.web.api; |
2 | 2 |
|
3 | 3 |
import com.google.common.collect.Iterables; |
4 |
import com.google.gson.JsonObject; |
|
4 | 5 |
import eu.dnetlib.api.data.SearchService; |
5 | 6 |
import eu.dnetlib.api.data.SearchServiceException; |
6 | 7 |
import eu.dnetlib.data.search.utils.cql.ParameterQueryEnhancer; |
... | ... | |
11 | 12 |
import org.apache.commons.lang.IncompleteArgumentException; |
12 | 13 |
import org.apache.commons.lang.StringEscapeUtils; |
13 | 14 |
import org.apache.log4j.Logger; |
15 |
import org.json.JSONArray; |
|
16 |
import org.json.JSONObject; |
|
17 |
import org.json.XML; |
|
14 | 18 |
import org.springframework.beans.factory.annotation.Autowired; |
15 | 19 |
import org.springframework.context.annotation.EnableAspectJAutoProxy; |
16 | 20 |
import org.springframework.http.HttpStatus; |
... | ... | |
67 | 71 |
private static final HashSet<String> PUB_N_DATA_COMMON_PARAMETERS = new HashSet<>(Arrays.asList("author", "doi", "originalId", |
68 | 72 |
"community", "FP7ProjectID", "FP7scientificArea", "fromDateAccepted", "funder", "fundingStream", "hasECFunding", "hasProject", |
69 | 73 |
"hasWTFunding", "keywords", "model", "OA", "openaireProjectID", "openaireProviderID", "projectID", "title", "toDateAccepted", |
70 |
"country", "orcid")); |
|
74 |
"country", "orcid", "version"));
|
|
71 | 75 |
|
72 | 76 |
private static final HashSet<String> RESULTS_PARAMETERS = new HashSet<>(Arrays.asList("resultID")); |
73 | 77 |
private static final HashSet<String> PUB_PARAMETERS = new HashSet<>(Arrays.asList("openairePublicationID", "sdg", "fos")); |
... | ... | |
224 | 228 |
checkModelParameter(PUB_N_DATASET_MODELS, model); |
225 | 229 |
|
226 | 230 |
String locale = request.getParameter("locale"); |
227 |
String sTransformer = defineTransformer(model,format); |
|
231 |
String sTransformer = defineTransformer(model,format, true, version);
|
|
228 | 232 |
|
229 | 233 |
Collection<String> referrers = readParameter(request,"referrer"); |
230 |
String newFormat = defineFormatter(model, format, true, referrers); |
|
234 |
String newFormat = defineFormatter(model, format, true, referrers, version);
|
|
231 | 235 |
|
232 | 236 |
StringBuilder queryBuilder = new StringBuilder(); |
233 | 237 |
queryBuilder.append(RESULTS_BASIC_QUERY); |
234 | 238 |
|
235 |
enhanceResearchOutcomesQuery(request, model, queryBuilder); |
|
239 |
enhanceResearchOutcomesQuery(request, model, version, queryBuilder);
|
|
236 | 240 |
FormattedSearchResult formattedSearchResult = null; |
237 | 241 |
|
238 | 242 |
try { |
... | ... | |
247 | 251 |
writer.append(formattedSearchResult.getFormattedResult()); |
248 | 252 |
|
249 | 253 |
writer.close(); |
250 |
|
|
251 |
time = System.currentTimeMillis() - time; |
|
252 |
logger.debug("Answer old time " + time); |
|
253 | 254 |
} |
254 | 255 |
|
255 | 256 |
@RequestMapping(value = "/api/publications", method = RequestMethod.GET, produces = {MediaType.APPLICATION_XML_VALUE,MediaType.APPLICATION_JSON_VALUE}) |
... | ... | |
260 | 261 |
int size = readParameter(request, "size", 10); |
261 | 262 |
String format = (request.getParameter("format") != null) ? request.getParameter("format") : "xml"; |
262 | 263 |
String model = request.getParameter("model"); |
264 |
String version = request.getParameter("version"); |
|
263 | 265 |
|
264 | 266 |
checkParameters(PUB_PARAMETERS,request.getParameterMap()); |
265 | 267 |
checkRequestSize(page, size); |
... | ... | |
268 | 270 |
checkModelParameter(PUB_N_DATASET_MODELS, model); |
269 | 271 |
|
270 | 272 |
String locale = request.getParameter("locale"); |
271 |
String sTransformer = defineTransformer(model,format); |
|
273 |
String sTransformer = defineTransformer(model,format, true, version);
|
|
272 | 274 |
|
273 | 275 |
Collection<String> referrers = readParameter(request,"referrer"); |
274 |
String newFormat = defineFormatter(model, format, true, referrers); |
|
276 |
String newFormat = defineFormatter(model, format, true, referrers, version);
|
|
275 | 277 |
|
276 | 278 |
StringBuilder queryBuilder = new StringBuilder(); |
277 | 279 |
queryBuilder.append(PUBLICATION_BASIC_QUERY); |
278 | 280 |
|
279 |
enhanceResearchOutcomesQuery(request, model, queryBuilder); |
|
281 |
enhanceResearchOutcomesQuery(request, model, version, queryBuilder);
|
|
280 | 282 |
FormattedSearchResult formattedSearchResult = null; |
281 | 283 |
|
282 | 284 |
try { |
... | ... | |
288 | 290 |
} |
289 | 291 |
|
290 | 292 |
PrintWriter writer = response.getWriter(); |
293 |
|
|
294 |
if (format.equals("json") && model!=null && model.equals("sygma")) { |
|
295 |
//TODO check this |
|
296 |
response.setHeader("Content-Type",JSON_CONTENT_TYPE); |
|
297 |
writer.append(XML.toJSONObject(formattedSearchResult.getFormattedResult()).toString()); |
|
298 |
|
|
299 |
} else { |
|
291 | 300 |
writer.append(formattedSearchResult.getFormattedResult()); |
301 |
} |
|
292 | 302 |
|
293 | 303 |
writer.close(); |
294 | 304 |
|
... | ... | |
296 | 306 |
logger.debug("Answer old time " + time); |
297 | 307 |
} |
298 | 308 |
|
299 |
private void enhanceResearchOutcomesQuery(HttpServletRequest request, String model, StringBuilder queryBuilder) { |
|
300 |
ParameterQueryEnhancer.enhanceQueryWithFundingLevelParams(queryBuilder, request, vocabularyManager, isModelSygma(model)); |
|
309 |
private void enhanceResearchOutcomesQuery(HttpServletRequest request, String model, String version, StringBuilder queryBuilder) {
|
|
310 |
ParameterQueryEnhancer.enhanceQueryWithFundingLevelParams(queryBuilder, request, vocabularyManager, isModelSygma(model), version);
|
|
301 | 311 |
ParameterQueryEnhancer.enhanceQueryWithOpenAIREIds(queryBuilder, request); |
302 | 312 |
ParameterQueryEnhancer.enhanceQueryWithMetadataKeywords(queryBuilder, request); |
303 | 313 |
ParameterQueryEnhancer.enhanceQueryWithFundingParams(queryBuilder, request); |
... | ... | |
309 | 319 |
ParameterQueryEnhancer.enhanceQueryWithOrcid(queryBuilder, request); |
310 | 320 |
ParameterQueryEnhancer.enhanceQueryWithOriginalId(queryBuilder, request); |
311 | 321 |
ParameterQueryEnhancer.enhanceQueryWithClassifications(queryBuilder, request, vocabularyManager); |
322 |
ParameterQueryEnhancer.enhanceQueryWithInstanceType(queryBuilder, isModelSygma(model), version); |
|
323 |
|
|
312 | 324 |
ParameterQueryEnhancer.enhanceQueryWithResultsSortParameters(queryBuilder, request); |
313 | 325 |
} |
314 | 326 |
|
... | ... | |
322 | 334 |
int page = readParameter(request, "page", 1); |
323 | 335 |
int size = readParameter(request, "size", 10); |
324 | 336 |
checkRequestSize(page, size); |
337 |
String version = request.getParameter("version"); |
|
325 | 338 |
|
326 | 339 |
String format = (request.getParameter("format") != null) ? request.getParameter("format") : "xml"; |
327 | 340 |
createResponseMeta(response, format); |
... | ... | |
330 | 343 |
|
331 | 344 |
String model = request.getParameter("model"); |
332 | 345 |
checkModelParameter(PUB_N_DATASET_MODELS, model); |
333 |
String sTransformer = defineTransformer(model,format);
|
|
346 |
String sTransformer = defineTransformer(model, format, false, version);
|
|
334 | 347 |
|
335 | 348 |
Collection<String> referrers = readParameter(request,"referrer"); |
336 |
String newFormat = defineFormatter(model, format, false, referrers); |
|
349 |
String newFormat = defineFormatter(model, format, false, referrers, version);
|
|
337 | 350 |
|
338 | 351 |
String locale = request.getParameter("locale"); |
339 | 352 |
|
340 | 353 |
StringBuilder queryBuilder = new StringBuilder(); |
341 | 354 |
queryBuilder.append(DATASET_BASIC_QUERY); |
342 | 355 |
|
343 |
enhanceResearchOutcomesQuery(request, model, queryBuilder); |
|
356 |
enhanceResearchOutcomesQuery(request, model, version, queryBuilder);
|
|
344 | 357 |
|
345 | 358 |
FormattedSearchResult formattedSearchResult = null; |
346 | 359 |
try { |
... | ... | |
356 | 369 |
} |
357 | 370 |
|
358 | 371 |
PrintWriter writer = response.getWriter(); |
359 |
writer.append(formattedSearchResult.getFormattedResult()); |
|
372 |
if (format.equals("json") && model!=null && model.equals("sygma")) { |
|
373 |
//TODO check this |
|
374 |
response.setHeader("Content-Type",JSON_CONTENT_TYPE); |
|
375 |
writer.append(XML.toJSONObject(formattedSearchResult.getFormattedResult()).toString()); |
|
376 |
|
|
377 |
} else { |
|
378 |
writer.append(formattedSearchResult.getFormattedResult()); |
|
379 |
} |
|
360 | 380 |
writer.close(); |
361 | 381 |
|
362 | 382 |
} |
... | ... | |
371 | 391 |
int size = readParameter(request, "size", 10); |
372 | 392 |
checkRequestSize(page, size); |
373 | 393 |
|
394 |
String version = request.getParameter("version"); |
|
395 |
|
|
396 |
|
|
374 | 397 |
String format = (request.getParameter("format") != null) ? request.getParameter("format") : "xml"; |
375 | 398 |
createResponseMeta(response, format); |
376 | 399 |
|
... | ... | |
378 | 401 |
|
379 | 402 |
String model = request.getParameter("model"); |
380 | 403 |
checkModelParameter(PUB_N_DATASET_MODELS, model); |
381 |
String sTransformer = defineTransformer(model,format); |
|
404 |
String sTransformer = defineTransformer(model,format, false, version);
|
|
382 | 405 |
|
383 | 406 |
Collection<String> referrers = readParameter(request,"referrer"); |
384 |
String newFormat = defineFormatter(model, format, false, referrers); |
|
407 |
String newFormat = defineFormatter(model, format, false, referrers, version);
|
|
385 | 408 |
|
386 | 409 |
String locale = request.getParameter("locale"); |
387 | 410 |
|
388 | 411 |
StringBuilder queryBuilder = new StringBuilder(); |
389 | 412 |
queryBuilder.append(SOFTWARE_BASIC_QUERY); |
390 | 413 |
|
391 |
enhanceResearchOutcomesQuery(request, model, queryBuilder); |
|
414 |
enhanceResearchOutcomesQuery(request, model, version, queryBuilder);
|
|
392 | 415 |
|
393 | 416 |
FormattedSearchResult formattedSearchResult = null; |
394 | 417 |
|
... | ... | |
415 | 438 |
int size = readParameter(request, "size", 10); |
416 | 439 |
checkRequestSize(page, size); |
417 | 440 |
|
441 |
String version = request.getParameter("version"); |
|
442 |
|
|
418 | 443 |
String format = (request.getParameter("format") != null) ? request.getParameter("format") : "xml"; |
419 | 444 |
createResponseMeta(response, format); |
420 | 445 |
|
... | ... | |
422 | 447 |
|
423 | 448 |
String model = request.getParameter("model"); |
424 | 449 |
checkModelParameter(PUB_N_DATASET_MODELS, model); |
425 |
String sTransformer = defineTransformer(model,format); |
|
450 |
String sTransformer = defineTransformer(model,format, false, version);
|
|
426 | 451 |
|
427 | 452 |
Collection<String> referrers = readParameter(request,"referrer"); |
428 |
String newFormat = defineFormatter(model, format, false, referrers); |
|
453 |
String newFormat = defineFormatter(model, format, false, referrers, version);
|
|
429 | 454 |
|
430 | 455 |
String locale = request.getParameter("locale"); |
431 | 456 |
|
432 | 457 |
StringBuilder queryBuilder = new StringBuilder(); |
433 | 458 |
queryBuilder.append(OTHER_BASIC_QUERY); |
434 | 459 |
|
435 |
enhanceResearchOutcomesQuery(request, model, queryBuilder); |
|
460 |
enhanceResearchOutcomesQuery(request, model, version, queryBuilder);
|
|
436 | 461 |
|
437 | 462 |
FormattedSearchResult formattedSearchResult = null; |
438 | 463 |
|
... | ... | |
566 | 591 |
}*/ |
567 | 592 |
|
568 | 593 |
//TODO: check if needed |
569 |
private String defineTransformer(String model, String format) { |
|
594 |
private String defineTransformer(String model, String format, boolean isPublications, String version) {
|
|
570 | 595 |
if (model != null && !model.trim().isEmpty() && format != null && (format.equals("json")||format.equals("xml"))) { |
571 | 596 |
if (model.equals("openaire")) { |
572 | 597 |
return null; |
573 | 598 |
|
574 | 599 |
} else if (model.equals("sygma")) { |
600 |
System.out.println("SYGMA MODEL"); |
|
601 |
if (version != null && version.equals("2")) { |
|
602 |
if (isPublications) |
|
603 |
return "sygma2_publication"; |
|
604 |
return "sygma_dataset2"; |
|
605 |
} |
|
575 | 606 |
return "results_openaire"; |
576 | 607 |
} |
577 | 608 |
else if (model.equals("dc")) { |
... | ... | |
589 | 620 |
|
590 | 621 |
} |
591 | 622 |
|
592 |
private String defineFormatter(String model, String format, boolean isPublications, Collection<String> referrers) { |
|
623 |
private String defineFormatter(String model, String format, boolean isPublications, Collection<String> referrers, String version) {
|
|
593 | 624 |
if( model != null && !model.trim().isEmpty() ) { |
594 | 625 |
if (model.equals("sygma")) { |
595 | 626 |
|
596 | 627 |
if (isPublications) { |
628 |
if (version!= null && version.equals("2")) { |
|
629 |
System.out.println("VERSION 2"); |
|
630 |
return "sygma2_publication_formatter"; |
|
631 |
} |
|
632 |
System.out.println("NOT VERSION 2"); |
|
597 | 633 |
return "sygma_publication"; |
634 |
} else { |
|
635 |
System.out.println("NOT PUBLICATION"); |
|
636 |
if (version!= null && version.equals("2")) { |
|
637 |
return "sygma_dataset2_formatter"; |
|
598 | 638 |
} |
599 | 639 |
return "sygma_dataset"; |
600 | 640 |
} |
641 |
} |
|
642 |
|
|
601 | 643 |
} else { |
602 | 644 |
if (referrers != null && !referrers.isEmpty() && Iterables.get(referrers, 0) != null && !Iterables.get(referrers, 0).isEmpty()) { |
603 | 645 |
return finalFormat(format, Iterables.get(referrers, 0)); |
Also available in: Unified diff
added sygma version 2 response + logging time for internal transformation