source: SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/search/Result.java @ 5931

Last change on this file since 5931 was 5931, checked in by emanuel.dima@uni-tuebingen.de, 9 years ago
  1. alpha12: better language filtering using detection, collections view improvements
File size: 4.2 KB
Line 
1package eu.clarin.sru.fcs.aggregator.search;
2
3import eu.clarin.sru.client.SRUClientException;
4import eu.clarin.sru.client.SRURecord;
5import eu.clarin.sru.fcs.aggregator.scan.Corpus;
6import eu.clarin.sru.client.SRUSearchRetrieveResponse;
7import eu.clarin.sru.client.SRUSurrogateRecordData;
8import eu.clarin.sru.client.fcs.ClarinFCSRecordData;
9import eu.clarin.sru.client.fcs.DataView;
10import eu.clarin.sru.client.fcs.DataViewGenericDOM;
11import eu.clarin.sru.client.fcs.DataViewGenericString;
12import eu.clarin.sru.client.fcs.DataViewHits;
13import eu.clarin.sru.client.fcs.Resource;
14import java.util.ArrayList;
15import java.util.List;
16import org.w3c.dom.Node;
17import org.slf4j.LoggerFactory;
18
19/**
20 * Represents the results of a SRU search-retrieve operation request. It
21 * contains the endpoint/corpus (if specified in the request) to which a request
22 * was sent, and the corresponding SRU search-retrieve response.
23 *
24 * @author Yana Panchenko
25 * @author edima
26 */
27public final class Result {
28
29        private static final org.slf4j.Logger log = LoggerFactory.getLogger(Result.class);
30
31        private Request request;
32        private List<Kwic> kwics = new ArrayList<Kwic>();
33        private SRUClientException exception;
34
35        public List<Kwic> getKwics() {
36                return kwics;
37        }
38
39        public Result(Request request, SRUSearchRetrieveResponse response,
40                        SRUClientException xc) {
41                this.request = request;
42                this.exception = xc;
43                if (response != null && response.hasRecords()) {
44                        setResponse(response);
45                }
46        }
47
48        public void setResponse(SRUSearchRetrieveResponse response) {
49                for (SRURecord record : response.getRecords()) {
50                        if (record.isRecordSchema(ClarinFCSRecordData.RECORD_SCHEMA)) {
51                                ClarinFCSRecordData rd = (ClarinFCSRecordData) record.getRecordData();
52                                Resource resource = rd.getResource();
53                                setClarinRecord(resource);
54                                log.debug("Resource ref={0}, pid={1}, dataViews={2}",
55                                                new Object[]{resource.getRef(), resource.getPid(), resource.hasDataViews()});
56                        } else if (record.isRecordSchema(SRUSurrogateRecordData.RECORD_SCHEMA)) {
57                                SRUSurrogateRecordData r = (SRUSurrogateRecordData) record.getRecordData();
58                                log.info("Surrogate diagnostic: uri={0}, message={1}, detail={2}",
59                                                new Object[]{r.getURI(), r.getMessage(), r.getDetails()});
60                        } else {
61                                log.info("Unsupported schema: {0}", record.getRecordSchema());
62                        }
63                }
64        }
65
66        private void setClarinRecord(Resource resource) {
67                String pid = resource.getPid();
68                String reference = resource.getRef();
69
70                if (resource.hasDataViews()) {
71                        processDataViews(resource.getDataViews(), pid, reference);
72                }
73
74                if (resource.hasResourceFragments()) {
75                        for (Resource.ResourceFragment fragment : resource.getResourceFragments()) {
76                                log.debug("ResourceFragment: ref={0}, pid={1}, dataViews={2}",
77                                                new Object[]{fragment.getRef(), fragment.getPid(), fragment.hasDataViews()});
78                                if (fragment.hasDataViews()) {
79                                        processDataViews(fragment.getDataViews(),
80                                                        fragment.getPid() != null ? fragment.getPid() : pid,
81                                                        fragment.getRef() != null ? fragment.getRef() : reference);
82                                }
83                        }
84                }
85        }
86
87        private void processDataViews(List<DataView> dataViews, String pid, String reference) {
88                for (DataView dataview : dataViews) {
89                        if (dataview instanceof DataViewGenericDOM) {
90                                final DataViewGenericDOM view = (DataViewGenericDOM) dataview;
91                                final Node root = view.getDocument().getFirstChild();
92                                log.info("DataView (generic dom): root element <{}> / {}",
93                                                root.getNodeName(),
94                                                root.getOwnerDocument().hashCode());
95                        } else if (dataview instanceof DataViewGenericString) {
96                                final DataViewGenericString view
97                                                = (DataViewGenericString) dataview;
98                                log.info("DataView (generic string): data = {}",
99                                                view.getContent());
100                        } else if (dataview instanceof DataViewHits) {
101                                final DataViewHits hits = (DataViewHits) dataview;
102                                Kwic kwic = new Kwic(hits, pid, reference);
103                                kwics.add(kwic);
104                                log.info("DataViewHits: {}", kwic.getFragments());
105                        }
106                }
107        }
108
109        public SRUClientException getException() {
110                return exception;
111        }
112
113        public int getStartRecord() {
114                return request.getStartRecord();
115        }
116
117        public int getEndRecord() {
118                return request.getEndRecord();
119        }
120
121        public Corpus getCorpus() {
122                return request.getCorpus();
123        }
124
125        public String getSearchString() {
126                return request.getSearchString();
127        }
128
129}
Note: See TracBrowser for help on using the repository browser.