source: FCSSimpleClient/trunk/src/test/java/eu/clarin/sru/client/fcs/TestUtils.java @ 7280

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