source: SRUClient/trunk/src/main/java/eu/clarin/sru/fcs/ClarinFederatedContentSearchRecordParser.java @ 2163

Last change on this file since 2163 was 2163, checked in by oschonef, 12 years ago

OT: I saw tail lights last night in a dream about my first wife ...

File size: 4.3 KB
Line 
1/**
2 * This software is copyright (c) 2011 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.fcs;
18
19import javax.xml.stream.XMLStreamException;
20import javax.xml.stream.XMLStreamReader;
21
22import org.slf4j.Logger;
23import org.slf4j.LoggerFactory;
24
25import eu.clarin.sru.client.SRUClientException;
26import eu.clarin.sru.client.SRURecordData;
27import eu.clarin.sru.client.SRURecordDataParser;
28import eu.clarin.sru.client.XmlStreamReaderUtils;
29
30
31/**
32 * A record for CLARIN FCS.
33 */
34public class ClarinFederatedContentSearchRecordParser implements
35        SRURecordDataParser {
36    private static final Logger logger =
37            LoggerFactory.getLogger(ClarinFederatedContentSearchRecordParser.class);
38    public static final String FCS_NS =
39            ClarinFederatedContentSearchRecordData.RECORD_SCHEMA;
40    public static final String FCS_KWIC_NS = "http://clarin.eu/fcs/1.0/kwic";
41    private static final String DATAVIEW_KWIC = "kwic";
42
43
44    @Override
45    public String getRecordSchema() {
46        return ClarinFederatedContentSearchRecordData.RECORD_SCHEMA;
47    }
48
49
50    @Override
51    public SRURecordData parse(XMLStreamReader reader)
52            throws XMLStreamException, SRUClientException {
53        XmlStreamReaderUtils.readStart(reader, FCS_NS, "Resource", true, true);
54        String pid = XmlStreamReaderUtils.readAttributeValue(reader, null,
55                "pid");
56        XmlStreamReaderUtils.consumeStart(reader);
57
58        String left = null;
59        String keyword = null;
60        String right = null;
61
62        boolean first = true;
63        boolean kwic = false;
64
65        while (XmlStreamReaderUtils.readStart(reader, FCS_NS, "DataView",
66                first, true)) {
67            first = false;
68            String type = XmlStreamReaderUtils.readAttributeValue(reader, null,
69                    "type");
70            XmlStreamReaderUtils.consumeStart(reader);
71            if ((type == null) || type.isEmpty()) {
72                throw new SRUClientException(
73                        "DataView element need a non-empty 'type' attribute");
74            }
75            logger.debug("found DataView @type = {}", type);
76            if (DATAVIEW_KWIC.equals(type)) {
77                if (kwic) {
78                    throw new SRUClientException(
79                            "only one KWIC dataview is allowed");
80                }
81                XmlStreamReaderUtils.readStart(reader, FCS_KWIC_NS, "kwic",
82                        true);
83                if (XmlStreamReaderUtils.readStart(reader, FCS_KWIC_NS, "c",
84                        false)) {
85                    left = XmlStreamReaderUtils.readString(reader, false);
86                    XmlStreamReaderUtils.readEnd(reader, FCS_KWIC_NS, "c");
87                }
88                keyword = XmlStreamReaderUtils.readContent(reader, FCS_KWIC_NS,
89                        "kw", true);
90                if (XmlStreamReaderUtils.readStart(reader, FCS_KWIC_NS, "c",
91                        false)) {
92                    right = XmlStreamReaderUtils.readString(reader, false);
93                    XmlStreamReaderUtils.readEnd(reader, FCS_KWIC_NS, "c");
94                }
95                XmlStreamReaderUtils.readEnd(reader, FCS_KWIC_NS, "kwic");
96                kwic = true;
97            } else {
98                logger.warn("skipping dataview of type '{}'", type);
99            }
100            XmlStreamReaderUtils.readEnd(reader, FCS_NS, "DataView", true);
101        } // while
102
103        XmlStreamReaderUtils.readEnd(reader, FCS_NS, "Resource");
104
105        if (kwic) {
106            return new ClarinFederatedContentSearchRecordData(pid, left,
107                    keyword, right);
108        } else {
109            throw new SRUClientException("no mandatroy kwic dataview found");
110        }
111    }
112
113} // class ClarinFederatedContentSearchRecordParser
Note: See TracBrowser for help on using the repository browser.