Completed
Pull Request — master (#150)
by
unknown
03:45
created

SolrSearchAdapter::getSearchQueryWriter()   C

Complexity

Conditions 14
Paths 14

Size

Total Lines 30
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 14
eloc 22
nc 14
nop 1
dl 0
loc 30
rs 6.2666
c 0
b 0
f 0

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace SilverStripe\FullTextSearch\Search\Adapters;
4
5
use SilverStripe\FullTextSearch\Search\Criteria\SearchCriteria;
6
use SilverStripe\FullTextSearch\Search\Criteria\SearchCriterion;
7
use SilverStripe\FullTextSearch\Search\Queries\AbstractSearchQueryWriter;
8
use SilverStripe\FullTextSearch\Solr\Writers\SolrSearchQueryWriterBasic;
9
use SilverStripe\FullTextSearch\Solr\Writers\SolrSearchQueryWriterIn;
10
use SilverStripe\FullTextSearch\Solr\Writers\SolrSearchQueryWriterRange;
11
12
/**
13
 * Class SolrSearchAdapter
14
 * @package SilverStripe\FullTextSearch\Search\Adapters
15
 */
16
class SolrSearchAdapter implements SearchAdapterInterface
17
{
18
    /**
19
     * @param SearchCriterion $criterion
20
     * @return string
21
     * @throws \InvalidArgumentException
22
     */
23
    public function generateQueryString(SearchCriterion $criterion)
24
    {
25
        $writer = $this->getSearchQueryWriter($criterion);
26
27
        return $writer->generateQueryString($criterion);
28
    }
29
30
    /**
31
     * @param string $conjunction
32
     * @return string
33
     * @throws \InvalidArgumentException
34
     */
35
    public function getConjunctionFor($conjunction)
36
    {
37
        switch ($conjunction) {
38
            case SearchCriteria::CONJUNCTION_AND:
39
            case SearchCriteria::CONJUNCTION_OR:
40
                return sprintf(' %s ', $conjunction);
41
            default:
42
                throw new \InvalidArgumentException(
43
                    sprintf('Invalid conjunction supplied to SolrSearchAdapter: "%s".', $conjunction)
44
                );
45
        }
46
    }
47
48
    /**
49
     * @return string
50
     */
51
    public function getPrependToCriteriaComponent()
52
    {
53
        return '+';
54
    }
55
56
    /**
57
     * @return string
58
     */
59
    public function getAppendToCriteriaComponent()
60
    {
61
        return '';
62
    }
63
64
    /**
65
     * @return string
66
     */
67
    public function getOpenComparisonContainer()
68
    {
69
        return '(';
70
    }
71
72
    /**
73
     * @return string
74
     */
75
    public function getCloseComparisonContainer()
76
    {
77
        return ')';
78
    }
79
80
    /**
81
     * @param SearchCriterion $searchCriterion
82
     * @return AbstractSearchQueryWriter
83
     * @throws \InvalidArgumentException
84
     */
85
    protected function getSearchQueryWriter(SearchCriterion $searchCriterion)
86
    {
87
        if ($searchCriterion->getSearchQueryWriter() instanceof AbstractSearchQueryWriter) {
0 ignored issues
show
introduced by
$searchCriterion->getSearchQueryWriter() is always a sub-type of SilverStripe\FullTextSea...stractSearchQueryWriter.
Loading history...
88
            // The user has defined their own SearchQueryWriter, so we should just return it.
89
            return $searchCriterion->getSearchQueryWriter();
90
        }
91
92
        switch ($searchCriterion->getComparison()) {
93
            case SearchCriterion::EQUAL:
94
            case SearchCriterion::NOT_EQUAL:
95
                return SolrSearchQueryWriterBasic::create();
96
            case SearchCriterion::IN:
97
            case SearchCriterion::NOT_IN:
98
                return SolrSearchQueryWriterIn::create();
99
            case SearchCriterion::GREATER_EQUAL:
100
            case SearchCriterion::GREATER_THAN:
101
            case SearchCriterion::LESS_EQUAL:
102
            case SearchCriterion::LESS_THAN:
103
            case SearchCriterion::ISNULL:
104
            case SearchCriterion::ISNOTNULL:
105
                return SolrSearchQueryWriterRange::create();
106
            case SearchCriterion::CUSTOM:
107
                // CUSTOM requires a SearchQueryWriter be provided.
108
                if (!$searchCriterion->getSearchQueryWriter() instanceof AbstractSearchQueryWriter) {
109
                    throw new \InvalidArgumentException('SearchQueryWriter undefined or unsupported in SearchCriterion');
110
                }
111
112
                return $searchCriterion->getSearchQueryWriter();
113
            default:
114
                throw new \InvalidArgumentException('Unsupported comparison type in SolrSearchAdapter');
115
        }
116
    }
117
}
118