source: sandbox/expresso-solr/expressoMail1_2/solrclient/library/Solarium/Client/ResponseParser/Analysis/Field.php @ 7588

Revision 7588, 4.9 KB checked in by adir, 11 years ago (diff)

Ticket #000 - Adicionando a integracao de buscas com Solr na base a ser isnerida na comunidade

Line 
1<?php
2/**
3 * Copyright 2011 Bas de Nooijer. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice,
9 *    this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice,
12 *    this listof conditions and the following disclaimer in the documentation
13 *    and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 *
27 * The views and conclusions contained in the software and documentation are
28 * those of the authors and should not be interpreted as representing official
29 * policies, either expressed or implied, of the copyright holder.
30 *
31 * @copyright Copyright 2011 Bas de Nooijer <solarium@raspberry.nl>
32 * @license http://github.com/basdenooijer/solarium/raw/master/COPYING
33 * @link http://www.solarium-project.org/
34 *
35 * @package Solarium
36 * @subpackage Client
37 */
38
39/**
40 * Parse document analysis response data
41 *
42 * @package Solarium
43 * @subpackage Client
44 */
45class Solarium_Client_ResponseParser_Analysis_Field extends Solarium_Client_ResponseParser
46{
47
48    /**
49     * Parse response data
50     *
51     * @param Solarium_Result $result
52     * @return array
53     */
54    public function parse($result)
55    {
56        $data = $result->getData();
57
58        if (isset($data['analysis'])) {
59            $items = $this->_parseAnalysis($data['analysis']);
60        } else {
61            $items = array();
62        }
63
64        return array(
65            'status' => $data['responseHeader']['status'],
66            'queryTime' => $data['responseHeader']['QTime'],
67            'items' => $items
68        );
69    }
70
71    /**
72     * Parser
73     *
74     * @param array $data
75     * @return array
76     */
77    protected function _parseAnalysis($data)
78    {
79        $types = array();
80        foreach ($data as $documentKey => $documentData) {
81            $fields = $this->_parseTypes($documentData);
82            $types[] = new Solarium_Result_Analysis_List($documentKey, $fields);
83        }
84
85        return $types;
86    }
87
88    /**
89     * Parse analysis types and items
90     *
91     * @param array $typeData
92     * @return array
93     */
94    protected function _parseTypes($typeData)
95    {
96        $results = array();
97        foreach ($typeData as $fieldKey => $fieldData) {
98
99            $types = array();
100            foreach ($fieldData as $typeKey => $typeData) {
101
102                // fix for extra level for key fields
103                if (count($typeData) == 1) {
104                    $typeData = current($typeData);
105                }
106
107                $counter = 0;
108                $classes = array();
109                while (isset($typeData[$counter]) && isset($typeData[$counter+1])) {
110                    $class = $typeData[$counter];
111                    $analysis = $typeData[$counter+1];
112
113                    if (is_string($analysis)) {
114
115                        $item = new Solarium_Result_Analysis_Item(
116                            array(
117                                'text' => $analysis,
118                                'start' => null,
119                                'end' => null,
120                                'position' => null,
121                                'positionHistory' => null,
122                                'type' => null,
123                            )
124                        );
125
126                        $classes[] = new Solarium_Result_Analysis_List($class, array($item));
127
128                    } else {
129
130                        $items = array();
131                        foreach ($analysis as $itemData) {
132                            $items[] = new Solarium_Result_Analysis_Item($itemData);
133                        }
134
135                        $classes[] = new Solarium_Result_Analysis_List($class, $items);
136                    }
137
138                    $counter += 2;
139                }
140
141                $types[] = new Solarium_Result_Analysis_List($typeKey, $classes);
142            }
143
144            $results[] = new Solarium_Result_Analysis_Types($fieldKey, $types);
145        }
146
147        return $results;
148    }
149
150}
Note: See TracBrowser for help on using the repository browser.