Project

General

Profile

« Previous | Next » 

Revision 44663

more code cleaning

View differences:

SearchApiService.java
4 4
import eu.dnetlib.data.search.app.SearchServiceImpl;
5 5
import eu.dnetlib.data.search.web.utils.RequestResponseHandler;
6 6
import eu.dnetlib.domain.data.SearchResult;
7
import eu.dnetlib.functionality.index.cql.CqlTranslator;
8
import eu.dnetlib.functionality.index.cql.CqlTranslatorImpl;
9 7
import org.apache.log4j.Logger;
10 8
import org.springframework.beans.factory.annotation.Autowired;
11 9
import org.springframework.stereotype.Component;
12
import org.z3950.zing.cql.CQLParseException;
13 10

  
14 11
import javax.servlet.http.HttpServletRequest;
15 12
import javax.ws.rs.*;
16 13
import javax.ws.rs.core.Context;
17 14
import javax.ws.rs.core.MediaType;
18 15
import javax.ws.rs.core.Response;
19
import java.io.IOException;
20 16
import java.util.List;
21 17
import java.util.Locale;
22 18

  
......
74 70
                                      @QueryParam("format") final String format,
75 71
                                      @Context final HttpServletRequest request) {
76 72
        String responseType = extractResponseFormat(format);
77
        String simpleQuery = createSimpleSearchQuery(RequestResponseHandler.Entity.PUBLICATION, keywords);
73
        String simpleQuery = buildSimpleSearchQuery(RequestResponseHandler.Entity.PUBLICATION, keywords);
78 74
            return getResponseByEntity(simpleQuery, RequestResponseHandler.Entity.PUBLICATION, offset, limit, responseType, request, refine, fields, fieldQueries, responseType);
79 75

  
80 76
    }
81 77

  
82
    private String createSimpleSearchQuery(RequestResponseHandler.Entity entity, String keywords) {
78
    private String buildSimpleSearchQuery(RequestResponseHandler.Entity entity, String keywords) {
83 79
        StringBuilder queryBuilder = new StringBuilder();
84 80
        enhanceQueryWithEntityType(queryBuilder,entity);
85 81
        enhanceQueryWithKeywords(queryBuilder, keywords);
......
147 143
        }
148 144
        return fq.toString();
149 145
    }
150

  
146
*/
151 147
    @GET
152 148
    @Path("/api/publications/count")
153 149
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
......
155 151
        String fullQuery = builtQueryByEntity(query, RequestResponseHandler.Entity.PUBLICATION);
156 152
        return getCount(fullQuery);
157 153
    }
158
*/
159 154

  
155

  
160 156
    @GET
161 157
    @Path("/api/publications/{publicationid}")
162 158
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
......
486 482
*/
487 483

  
488 484
    private void enhanceQueryWithKeywords(StringBuilder queryBuilder, String keywords) {
489
        if (keywords != null && !keywords.trim().isEmpty()) {
490
            queryBuilder.append(" and (").append(keywords).append(")");
491
        }
485
        CQLQueryGeneration.appendKeywords(queryBuilder,keywords);
492 486
    }
493 487

  
494
    //@Deprecated
495
    /*private void enhanceQueryWithKeywords(StringBuilder queryBuilder, List<String> keywordOperators, List<String> keywords) {
496
        if (keywordOperators != null && !keywordOperators.isEmpty()) {
497
            if (keywords != null && !keywords.isEmpty()) {
498
                if (keywordOperators.size() != keywords.size()) {
499
                    throw new IllegalArgumentException("Keywords and Operators are not matched");
500
                }
501
            } else {
502
                throw new IllegalArgumentException("Keywords and Operators are not matched");
503
            }
504
        }
505

  
506
        for(int i = 0; i < keywords.size(); i++) {
507
            queryBuilder.append(' ').append(keywordOperators.get(i)).append(' ').append('(').append(keywords.get(i)).append(")");
508
        }
509
    }*/
510

  
511
    /*
512
    private void enhanceQueryWithParameters(StringBuilder queryBuilder, Map<String, String[]> operators, Map<String, String[]> parameters, Map<String, String> parameterIndexMap, Map<String, String> parameterOperatorMap) {
513
        if (parameterIndexMap != null && !parameterIndexMap.isEmpty()) {
514
            if (parameterOperatorMap != null && !parameterOperatorMap.isEmpty()) {
515
                for(String operatorType:operators.keySet()) {
516
                    //enhance messages with >, < ?? or maybe move all checks in the beginning?
517
                    if (operators.get(operatorType).length != parameters.get(parameterOperatorMap.get(operatorType)).length ) {
518
                        throw new IllegalArgumentException("Parameters and Operators are not matched");
519
                    }
520

  
521
                    String parameterName = parameterOperatorMap.get(operatorType);
522

  
523
                    for(int i = 0; i < operators.get(operatorType).length; i++) {
524
                        String indexField = parameterIndexMap.get(parameterOperatorMap.get(operatorType));
525

  
526
                        /*logger.debug("operator " + operatorType);
527
                        logger.debug("operator map get" + parameterOperatorMap.get(operatorType));
528

  
529
                        logger.debug("index map" + parameterIndexMap.keySet());
530
                        logger.debug("index map values" + parameterIndexMap.values());
531

  
532
                        logger.debug("index field " + indexField);*/
533
/*
534
                        if (indexField != null) {
535
//                          logger.debug(indexField + " " + operators.get(operatorType)[i] + " " + parameters.get(parameterName)[i]);
536
                            queryBuilder.append(' ').append(operators.get(operatorType)[i]).append('(').append(indexField).append(" = ").append(parameters.get(parameterName)[i]).append(")");
537

  
538
                        } else { //TODO check if needed
539
                            logger.debug("and here!");
540
                            logger.debug(" " + operators.get(operatorType)[i] + " " + parameters.get(operatorType)[i]);
541
                            queryBuilder.append(" " + operators.get(operatorType)[i] + " " + parameters.get(operatorType)[i]);
542
                        }
543
                    }
544
                }
545
            } else  {
546
                throw new IllegalArgumentException("Keywords and Operators are not matched");
547
            }
548

  
549
        }
550
    }
551
*/
552
    /*
553
    private boolean isFirstTerm(StringBuilder queryBuilder) {
554
        return queryBuilder.toString().trim().equals("");
555
    }*/
556

  
557
    public void builtEntityIdQuery(StringBuilder queryBuilder, RequestResponseHandler.Entity entity, String entityId){
488
    private void builtEntityIdQuery(StringBuilder queryBuilder, RequestResponseHandler.Entity entity, String entityId){
558 489
        enhanceQueryWithEntityType(queryBuilder, entity);
559 490
        enhanceQueryWithEntityId(queryBuilder, entityId);
560 491
    }
561 492

  
562
    public String builtEntity2EntityRelationQuery(RequestResponseHandler.Entity entity, String relationfield, String entityId){
493
    private String builtEntity2EntityRelationQuery(RequestResponseHandler.Entity entity, String relationfield, String entityId){
563 494
        StringBuilder queryBuilder = new StringBuilder();
564 495
        enhanceQueryWithEntityType(queryBuilder, entity);
565
        enhanceQueryWithEntity2EntityId(queryBuilder, relationfield, entityId);
496
        enhanceQueryWithRelationId(queryBuilder, relationfield, entityId);
566 497
        return queryBuilder.toString();
567 498
    }
568 499

  
569
    private void enhanceQueryWithEntity2EntityId(StringBuilder queryBuilder, String relationfield, String entityId) {
500
    private void enhanceQueryWithRelationId(StringBuilder queryBuilder, String relationfield, String entityId) {
570 501
        CQLQueryGeneration.appendTerm(queryBuilder, CQLQueryGeneration.Operator.AND, " " + relationfield + " ", CQLQueryGeneration.Operator.EXACT, entityId);
571 502
    }
572 503

  
573 504

  
574
    public void enhanceQueryWithEntityType(StringBuilder queryBuilder, RequestResponseHandler.Entity entity) {
505
    private void enhanceQueryWithEntityType(StringBuilder queryBuilder, RequestResponseHandler.Entity entity) {
575 506
        queryBuilder.append(entity.getQueryPrefix());
576 507
    }
577 508

  
578
    public void enhanceQueryWithEntityId(StringBuilder queryBuilder, String entityId) {
509
    private void enhanceQueryWithEntityId(StringBuilder queryBuilder, String entityId) {
579 510
        CQLQueryGeneration.appendTerm(queryBuilder, CQLQueryGeneration.Operator.AND, "objidentifier", CQLQueryGeneration.Operator.EXACT, entityId);
580 511
    }
581 512

  
582
    public String builtQueryByEntity(String query, RequestResponseHandler.Entity entity) {
513
    private String builtQueryByEntity(String query, RequestResponseHandler.Entity entity) {
583 514
        StringBuilder queryBuilder = new StringBuilder();
584
        queryBuilder.append(entity.getQueryPrefix());
515
        enhanceQueryWithEntityType(queryBuilder, entity);
585 516

  
586 517
        if (query != null && !query.trim().isEmpty()) {
587 518
            CQLQueryGeneration.appendSimpleTerm(queryBuilder, CQLQueryGeneration.Operator.AND, "(" + query + ")");
......
589 520

  
590 521
        return queryBuilder.toString();
591 522
    }
592
/*
593
    public void extractParameterNOperatorsValues(Map<String, String[]> parameterMap, Map<String, String[]> operatorTypeValues, Map<String, String[]> parameterTypeValues, RequestResponseHandler.Entity entity) {
594
        for (String parameter:parameterMap.keySet()) {
595
            Map<String, String> parameterIndexMap = entity.getParameterIndexMap();
596
            Map<String, String> parameterOperatorMap = entity.getParameterOperatorMap();
597 523

  
598
            if (parameterOperatorMap.get(parameter) != null) {
599
                operatorTypeValues.put(parameter, parameterMap.get(parameter));
600

  
601
            } else if (parameterIndexMap.get(parameter) != null) {
602
                parameterTypeValues.put(parameter, parameterMap.get(parameter));
603

  
604
            } else if (!parameter.equals("q") && !parameter.equals("op") && !parameter.equals("size") && !parameter.equals("page") && !parameter.equals("fields") && !parameter.equals("refine")){
605
                throw new IllegalArgumentException("The parameter " + parameter + " is not supported.");
606
            }
607

  
608
            if (parameterTypeValues.get(parameter) == null) {
609
                logger.debug("parameterTypeValues is null");
610
            } else {
611
                logger.debug("parameterTypeValues " + Arrays.asList(parameterTypeValues.get(parameter)));
612
            }
613

  
614
        }
615

  
616
        //TODO make checks per type????
617
        if (operatorTypeValues.size() != parameterTypeValues.size()) {
618
            throw new IllegalArgumentException("Parameters and Operators do not match.");
619
        }
620
    }
621
/*
622
    *//* For each parameter get the values and the operators *//*
623
    public void extractParameterOperatorsNValues(Map<String, String[]> requestParameterMap, Map<String, String[]> keywordOperatorValueMap, Map<String, String[]> keywordValuesMap,
624
                                                 Map<String, String[]> operatorValueMap, Map<String, String[]> parameterValuesMap, RequestResponseHandler.Entity entity) {
625

  
626
        for (String parameter:requestParameterMap.keySet()) {
627
            Map<String, String> parameterIndexMap = entity.getParameterIndexMap();
628
            Map<String, String> parameterOperatoMap = entity.getParameterOperatorMap();
629

  
630
            if (parameterOperatoMap.get(parameter) != null) {
631
                operatorValueMap.put(parameter, requestParameterMap.get(parameter));
632

  
633
            } else if (parameterIndexMap.get(parameter) != null) {
634
                parameterValuesMap.put(parameter, requestParameterMap.get(parameter));
635

  
636
            } else if (parameter.equals("q")) {
637
                keywordValuesMap.put("q", requestParameterMap.get("q"));
638

  
639
            } else if (parameter.equals("op")) {
640
                keywordOperatorValueMap.put("op", requestParameterMap.get("op"));
641

  
642
            } else if (!parameter.equals("size") && !parameter.equals("page") && !parameter.equals("fields") && !parameter.equals("refine")){
643
                throw new IllegalArgumentException("The parameter " + parameter + " is not supported.");
644
            }
645

  
646
            if (parameterValuesMap.get(parameter) == null) {
647
                logger.debug("parameterTypeValues is null");
648
            } else {
649
                logger.debug("parameterTypeValues " + Arrays.asList(parameterValuesMap.get(parameter)));
650
            }
651
        }
652

  
653
        if ((operatorValueMap.size() != parameterValuesMap.size()) || (keywordOperatorValueMap.size() != keywordValuesMap.size())) {
654
            throw new IllegalArgumentException("Operators do not match parameters.");
655
        }
656
    }*/
657

  
658 524
    private Response getCount(String query) {
659 525
        try {
660 526
            SearchResult searchResult = searchService.search(query, null, Locale.getDefault().toString(), 0, 0);
......
665 531
        }
666 532
    }
667 533

  
668
    /* TODO remove?
669
    private Response getCountByEntity2EntityRelation(String query, RequestResponseHandler.Entity entity, String relationfield, String entityId) {
670
        String fullQuery =  builtEntity2EntityRelationQuery(entity, relationfield, entityId);
671

  
672
        try {
673
            SearchResult searchResult = searchService.search(fullQuery, null, Locale.getDefault().toString(), 0, 0);
674
            return Response.status(Response.Status.OK).entity(ResponseFormatter.createCountMeta(fullQuery.replace("\"", "\\\""), searchResult.getTotal())).build();
675

  
676
        } catch (SearchServiceException sse) {
677
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(ResponseFormatter.compose500Message("Fail to fetch count for query " + fullQuery.replace("\"", "\\\"") + ".", sse.getMessage())).build();
678
        }
679
    } */
680

  
681 534
    private Response getResponseByEntityId(HttpServletRequest request, RequestResponseHandler.Entity entity, String entityId, String responseType) {
682 535
        try {
683 536
            StringBuilder queryBuilder = new StringBuilder();
......
712 565
        }
713 566
    }
714 567

  
715
    private void formatRefineResults(StringBuilder refineBuilder, SearchResult refineResults) {
716
        int i = 0;
717
        for (String json: refineResults.getBrowseResults()) {
718
            if (i == (refineResults.getBrowseResults().size() - 1)) {
719
                refineBuilder.append(json);
720
            } else {
721
                refineBuilder.append(json).append(",");
722
            }
723
            i++;
568

  
569
    /* TODO remove?
570
    private Response getCountByEntity2EntityRelation(String query, RequestResponseHandler.Entity entity, String relationfield, String entityId) {
571
        String fullQuery =  builtEntity2EntityRelationQuery(entity, relationfield, entityId);
572

  
573
        try {
574
            SearchResult searchResult = searchService.search(fullQuery, null, Locale.getDefault().toString(), 0, 0);
575
            return Response.status(Response.Status.OK).entity(ResponseFormatter.createCountMeta(fullQuery.replace("\"", "\\\""), searchResult.getTotal())).build();
576

  
577
        } catch (SearchServiceException sse) {
578
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(ResponseFormatter.compose500Message("Fail to fetch count for query " + fullQuery.replace("\"", "\\\"") + ".", sse.getMessage())).build();
724 579
        }
725
    }
580
    } */
726 581

  
727 582

  
728 583
/*
......
797 652

  
798 653
    }
799 654
*/
655
    /*
800 656

  
801 657
    public static void main(String[] args) throws IOException, CQLParseException {
802 658
        CqlTranslator translator = new CqlTranslatorImpl();
803 659
        System.out.println(translator.toLucene("relfundinglevel0_id = ec__________::EC::FP7"));
804 660
    }
661
    */
805 662

  
806 663
}

Also available in: Unified diff