source: SRUClient/trunk/src/test/java/eu/clarin/sru/client/TestUtils.java @ 6917

Last change on this file since 6917 was 6917, checked in by Oliver Schonefeld, 8 years ago
  • enhance endpoint description parser
  • Property svn:eol-style set to native
File size: 13.7 KB
Line 
1/**
2 * This software is copyright (c) 2012-2014 by
3 *  - Institut fuer Deutsche Sprache (http://www.ids-mannheim.de)
4 * This is free software. You can redistribute it
5 * and/or modify it under the terms described in
6 * the GNU General Public License v3 of which you
7 * should have received a copy. Otherwise you can download
8 * it from
9 *
10 *   http://www.gnu.org/licenses/gpl-3.0.txt
11 *
12 * @copyright Institut fuer Deutsche Sprache (http://www.ids-mannheim.de)
13 *
14 * @license http://www.gnu.org/licenses/gpl-3.0.txt
15 *  GNU General Public License v3
16 */
17package eu.clarin.sru.client;
18
19import java.net.URI;
20import java.util.List;
21
22import org.slf4j.Logger;
23import org.slf4j.LoggerFactory;
24import org.w3c.dom.Node;
25
26import eu.clarin.sru.client.SRUExplainRecordData.ConfigInfo;
27import eu.clarin.sru.client.SRUExplainRecordData.Schema;
28import eu.clarin.sru.client.fcs.ClarinFCSEndpointDescription;
29import eu.clarin.sru.client.fcs.ClarinFCSEndpointDescription.ResourceInfo;
30import eu.clarin.sru.client.fcs.ClarinFCSRecordData;
31import eu.clarin.sru.client.fcs.DataView;
32import eu.clarin.sru.client.fcs.DataViewGenericDOM;
33import eu.clarin.sru.client.fcs.DataViewGenericString;
34import eu.clarin.sru.client.fcs.DataViewHits;
35import eu.clarin.sru.client.fcs.Resource;
36
37class TestUtils {
38    private static final Logger logger =
39            LoggerFactory.getLogger(TestUtils.class);
40
41    public static SRUExplainRequest makeExplainRequest(String baseURI) {
42        SRUExplainRequest request = new SRUExplainRequest(baseURI);
43        request.setExtraRequestData("x-indent-response", "4");
44        request.setExtraRequestData("x-fcs-endpoint-description", "true");
45        request.setParseRecordDataEnabled(true);
46        return request;
47    }
48
49
50    public static SRUScanRequest makeScanRequest(String baseURI) {
51        SRUScanRequest request = new SRUScanRequest(baseURI);
52        request.setScanClause("fcs.resource = root");
53        request.setExtraRequestData("x-clarin-resource-info", "true");
54        request.setExtraRequestData("x-indent-response", "4");
55        return request;
56    }
57
58
59    public static SRUSearchRetrieveRequest makeSearchRequest(String baseURI, String query) {
60        if ((query == null) || query.isEmpty()) {
61            query = "Faustus";
62        }
63        SRUSearchRetrieveRequest request = new SRUSearchRetrieveRequest(baseURI);
64        request.setQuery(SRUClientConstants.QUERY_TYPE_CQL, query);
65//        request.setRecordSchema(ClarinFCSRecordData.LEGACY_RECORD_SCHEMA);
66        request.setMaximumRecords(5);
67        request.setRecordXmlEscaping(SRURecordXmlEscaping.XML);
68        request.setRecordPacking(SRURecordPacking.PACKED);
69        request.setExtraRequestData("x-indent-response", "4");
70        return request;
71    }
72
73
74    public static void printExplainResponse(SRUExplainResponse response) {
75        logger.info("displaying results of 'explain' request ...");
76        if (response.hasDiagnostics()) {
77            for (SRUDiagnostic diagnostic : response.getDiagnostics()) {
78                logger.info("uri={}, message={}, detail={}",
79                        diagnostic.getURI(),
80                        diagnostic.getMessage(),
81                        diagnostic.getDetails());
82            }
83        }
84        if (response.hasRecord()) {
85            SRURecord record = response.getRecord();
86            logger.info("schema = {}", record.getRecordSchema());
87            if (record.isRecordSchema(SRUExplainRecordData.RECORD_SCHEMA)) {
88                dumpExplainRecordData(record.getRecordData());
89            }
90            if (record.hasExtraRecordData()) {
91                logger.info("extraRecordInfo = {}",
92                        record.getExtraRecordData());
93            }
94        }
95        if (response.hasExtraResponseData()) {
96            for (SRUExtraResponseData data : response.getExtraResponseData()) {
97                if (data instanceof ClarinFCSEndpointDescription) {
98                    dumpEndpointDescription(
99                            (ClarinFCSEndpointDescription) data);
100                } else {
101                    logger.info("extraResponseData = {} (class={})",
102                            data.getRootElement(), data.getClass().getName());
103                }
104
105            }
106        }
107    }
108
109
110    public static void printScanResponse(SRUScanResponse response) {
111        logger.info("displaying results of 'scan' request ...");
112        if (response.hasDiagnostics()) {
113            for (SRUDiagnostic diagnostic : response.getDiagnostics()) {
114                logger.info("uri={}, message={}, detail={}",
115                        diagnostic.getURI(),
116                        diagnostic.getMessage(),
117                        diagnostic.getDetails());
118            }
119        }
120        if (response.hasTerms()) {
121            for (SRUTerm term : response.getTerms()) {
122                logger.info("value={}, numberOfRecords={}, displayTerm={}",
123                            term.getValue(),
124                            term.getNumberOfRecords(),
125                            term.getDisplayTerm());
126            }
127        } else {
128            logger.info("no terms");
129        }
130    }
131
132
133    public static void printSearchResponse(SRUSearchRetrieveResponse response) {
134        logger.info("displaying results of 'searchRetrieve' request ...");
135        logger.info("numberOfRecords = {}, nextResultPosition = {}",
136                response.getNumberOfRecords(),
137                response.getNextRecordPosition());
138        if (response.hasDiagnostics()) {
139            for (SRUDiagnostic diagnostic : response.getDiagnostics()) {
140                logger.info("uri={}, message={}, detail={}",
141                        diagnostic.getURI(),
142                        diagnostic.getMessage(),
143                        diagnostic.getDetails());
144            }
145        }
146        if (response.hasRecords()) {
147            for (SRURecord record : response.getRecords()) {
148                logger.info("schema = {}, identifier = {}, position = {}",
149                        record.getRecordSchema(),
150                        record.getRecordIdentifier(),
151                        record.getRecordPosition());
152                if (record.isRecordSchema(ClarinFCSRecordData.RECORD_SCHEMA)) {
153                    ClarinFCSRecordData rd =
154                            (ClarinFCSRecordData) record.getRecordData();
155                    dumpResource(rd.getResource());
156                } else if (record.isRecordSchema(SRUSurrogateRecordData.RECORD_SCHEMA)) {
157                    SRUSurrogateRecordData r =
158                            (SRUSurrogateRecordData) record.getRecordData();
159                    logger.info("SURROGATE DIAGNOSTIC: uri={}, message={}, detail={}",
160                                r.getURI(), r.getMessage(), r.getDetails());
161                } else {
162                    logger.info("UNSUPPORTED SCHEMA: {}",
163                            record.getRecordSchema());
164                }
165            }
166        } else {
167            logger.info("no results");
168        }
169    }
170
171
172    public static void dumpExplainRecordData(SRURecordData recordData) {
173        if (SRUExplainRecordData.RECORD_SCHEMA.equals(recordData.getRecordSchema())) {
174            SRUExplainRecordData data = (SRUExplainRecordData) recordData;
175            logger.info("host={}, port={}, database={}",
176                    data.getServerInfo().getHost(),
177                    data.getServerInfo().getPort(),
178                    data.getServerInfo().getDatabase());
179            List<Schema> schemaInfo = data.getSchemaInfo();
180            if (schemaInfo != null) {
181                for (Schema schema : schemaInfo) {
182                    logger.debug("schema: identifier={}, name={}, " +
183                            "location={}, sort={}, retrieve={}",
184                            schema.getIdentifier(),
185                            schema.getName(),
186                            schema.getLocation(),
187                            schema.getSort(),
188                            schema.getRetrieve());
189                }
190            }
191            ConfigInfo configInfo = data.getConfigInfo();
192            if (configInfo != null) {
193                if (configInfo.getDefaults() != null) {
194                    logger.debug("configInfo/default = {}",
195                            configInfo.getDefaults());
196                }
197                if (configInfo.getSettings() != null) {
198                    logger.debug("configInfo/setting = {}",
199                            configInfo.getSettings());
200                }
201                if (configInfo.getSupports() != null) {
202                    logger.debug("configInfo/supports = {}",
203                            configInfo.getSupports());
204                }
205            }
206        }
207    }
208
209
210    public static void dumpResource(Resource resource) {
211        logger.info("CLARIN-FCS: pid={}, ref={}",
212                resource.getPid(), resource.getRef());
213        if (resource.hasDataViews()) {
214            dumpDataView("CLARIN-FCS: ", resource.getDataViews());
215        }
216        if (resource.hasResourceFragments()) {
217            for (Resource.ResourceFragment fragment : resource.getResourceFragments()) {
218                logger.debug("CLARIN-FCS: ResourceFragment: pid={}, ref={}",
219                        fragment.getPid(), fragment.getRef());
220                if (fragment.hasDataViews()) {
221                    dumpDataView("CLARIN-FCS: ResourceFragment/", fragment.getDataViews());
222                }
223            }
224        }
225    }
226
227
228    private static void dumpEndpointDescription(ClarinFCSEndpointDescription ed) {
229        logger.info("dumping <EndpointDescription> (version={})",
230                ed.getVersion());
231        for (URI capability : ed.getCapabilities()) {
232            logger.info("  capability: {}", capability);
233        } // for
234        for (ClarinFCSEndpointDescription.DataView dataView :
235            ed.getSupportedDataViews()) {
236            logger.info("  supportedDataView: id={}, type={}, policy={}",
237                    dataView.getIdentifier(),
238                    dataView.getMimeType(),
239                    dataView.getDeliveryPolicy());
240        } // for
241        for (ClarinFCSEndpointDescription.Layer layer :
242            ed.getSupportedLayers()) {
243            logger.info("  supportedLayer: id={}, result-id={}, " +
244                    "layer-type={}, encoding={}, qualifier={}, " +
245                    "alt-value-info={}, alt-value-info-uri={}",
246                    layer.getIdentifier(),
247                    layer.getResultId(),
248                    layer.getLayerType(),
249                    layer.getEncoding(),
250                    layer.getQualifier(),
251                    layer.getAltValueInfo(),
252                    layer.getAltValueInfoURI());
253        }
254        dumpResourceInfo(ed.getResources(), 1, "  ");
255    }
256
257
258    private static void dumpResourceInfo(List<ResourceInfo> ris, int depth,
259            String indent) {
260        for (ResourceInfo ri : ris) {
261            logger.info("{}[depth={}] <ResourceInfo>", indent, depth);
262            logger.info("{}    pid={}", indent, ri.getPid());
263            logger.info("{}    title: {}", indent, ri.getTitle());
264            if (ri.getDescription() != null) {
265                logger.info("{}    description: {}",
266                        indent, ri.getDescription());
267            }
268            if (ri.getLandingPageURI() != null) {
269                logger.info("{}    landingPageURI: {}",
270                        indent, ri.getLandingPageURI());
271            }
272            for (ClarinFCSEndpointDescription.DataView dv :
273                ri.getAvailableDataViews()) {
274                logger.info("{}    available dataviews: type={}, policy={}",
275                        indent, dv.getMimeType(), dv.getDeliveryPolicy());
276            }
277            for (ClarinFCSEndpointDescription.Layer l :
278                ri.getAvailableLayers()) {
279                logger.info("{}    available layers: result-id={}, layer-type={}",
280                        indent, l.getResultId(), l.getLayerType());
281            }
282            if (ri.hasSubResources()) {
283                dumpResourceInfo(ri.getSubResources(),
284                        depth + 1, indent + "  ");
285            }
286        }
287    }
288
289
290    private static void dumpDataView(String s, List<DataView> dataviews) {
291        for (DataView dataview : dataviews) {
292            logger.info("{}DataView: type={}, pid={}, ref={}",
293                    s, dataview.getMimeType(), dataview.getPid(),
294                    dataview.getRef());
295            if (dataview instanceof DataViewGenericDOM) {
296                final DataViewGenericDOM view = (DataViewGenericDOM) dataview;
297                final Node root = view.getDocument().getFirstChild();
298                logger.info("{}DataView (generic dom): root element <{}> / {}",
299                        s, root.getNodeName(),
300                        root.getOwnerDocument().hashCode());
301            } else if (dataview instanceof DataViewGenericString) {
302                final DataViewGenericString view =
303                        (DataViewGenericString) dataview;
304                logger.info("{}DataView (generic string): data = {}",
305                        s, view.getContent());
306            } else if (dataview instanceof DataViewHits) {
307                final DataViewHits hits = (DataViewHits) dataview;
308                logger.info("{}DataView: {}",
309                        s, addHitHighlights(hits));
310            } else {
311                logger.info("{}DataView: cannot display " +
312                        "contents of unexpected class '{}'",
313                        s, dataview.getClass().getName());
314            }
315        }
316    }
317
318
319    private static String addHitHighlights(DataViewHits hits) {
320        StringBuilder sb = new StringBuilder(hits.getText());
321        int corr = 0;
322        for (int i = 0; i < hits.getHitCount(); i++) {
323            int[] offsets = hits.getHitOffsets(i);
324            sb.insert(offsets[0] + corr, "[");
325            corr += 1;
326            sb.insert(offsets[1] + corr, "]");
327            corr += 1;
328        }
329        return sb.toString();
330    }
331
332} // class TestUtils
Note: See TracBrowser for help on using the repository browser.