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

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