Changeset 2953 for SRUClient


Ignore:
Timestamp:
05/29/13 10:59:52 (11 years ago)
Author:
oschonef
Message:
  • more work on explain record data parser
Location:
SRUClient/trunk/src/main/java/eu/clarin/sru/client
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • SRUClient/trunk/src/main/java/eu/clarin/sru/client/SRUExplainRecordDataParser.java

    r2946 r2953  
    5858        }
    5959
    60         logger.debug("parsing explain record data (version={} schema={})",
     60        logger.debug("parsing explain record data (version={}, schema={})",
    6161                version, recordSchema);
    6262
     
    8282            throws XMLStreamException, SRUClientException {
    8383
     84        /*
     85         * explain (serverInfo, databaseInfo?, metaInfo?, indexInfo?,
     86         *     (recordInfo|schemaInfo)?, configInfo?)
     87         */
     88
    8489        // explain/serverInfo
    8590        ServerInfo serverInfo = parseServerInfo(reader, namespace);
     
    8792        // explain/databaseInfo
    8893        if (XmlStreamReaderUtils.readStart(reader, namespace, "databaseInfo", false)) {
     94            /*
     95             * databaseInfo (title*, description*, (author | contact | extent |
     96             *     history | langUsage | restrictions | subjects | links |
     97             *     implementation)*)
     98             */
    8999            logger.debug("databaseInfo");
     100
     101            while (XmlStreamReaderUtils.readStart(reader,
     102                    namespace, "title", false, true)) {
     103                final String lang = XmlStreamReaderUtils.readAttributeValue(reader, null, "lang", false);
     104                final String primary = XmlStreamReaderUtils.readAttributeValue(reader, null, "primary", false);
     105                XmlStreamReaderUtils.consumeStart(reader);
     106                String value = XmlStreamReaderUtils.readString(reader, false);
     107                XmlStreamReaderUtils.readEnd(reader, namespace, "title");
     108                logger.debug("-> title = {} (primary={}, lang={})", value, primary, lang);
     109            } // while
     110
     111            while (XmlStreamReaderUtils.readStart(reader,
     112                    namespace, "description", false, true)) {
     113                XmlStreamReaderUtils.consumeStart(reader);
     114                String value = XmlStreamReaderUtils.readString(reader, false);
     115                XmlStreamReaderUtils.readEnd(reader, namespace, "description");
     116                logger.debug("-> description = {}", value);
     117            }
     118
    90119            XmlStreamReaderUtils.readEnd(reader, namespace, "databaseInfo", true);
    91120        }
     
    93122        // explain/metaInfo
    94123        if (XmlStreamReaderUtils.readStart(reader, namespace, "metaInfo", false)) {
     124            /*
     125             * metaInfo (dateModified, (aggregatedFrom, dateAggregated)?)
     126             */
    95127            logger.debug("metaInfo");
    96128            XmlStreamReaderUtils.readEnd(reader, namespace, "metaInfo", true);
     
    99131        // explain/indexInfo
    100132        while (XmlStreamReaderUtils.readStart(reader, namespace, "indexInfo", false)) {
     133            /*
     134             * indexInfo ((set | index | sortKeywords)+)
     135             */
    101136            logger.debug("indexInfo");
     137            boolean found = false;
    102138            for (;;) {
    103                 /*
    104                  * FIXME: SRU 2.0 has *either* <set> or <index>
    105                  * check with SRU 1.2 ...
    106                  */
    107139                if (XmlStreamReaderUtils.readStart(reader, namespace, "set", false, true)) {
    108                     logger.debug("set");
     140                    logger.debug("-> set");
    109141                    // FIXME: read attributes
    110142                    XmlStreamReaderUtils.consumeStart(reader);
    111143
    112144                    XmlStreamReaderUtils.readEnd(reader, namespace, "set", true);
     145                    found = true;
    113146                } else if (XmlStreamReaderUtils.readStart(reader, namespace, "index", false, true)) {
    114                     logger.debug("index");
     147                    logger.debug("-> index");
    115148                    // FIXME: read attributes
    116149                    XmlStreamReaderUtils.consumeStart(reader);
    117150                    XmlStreamReaderUtils.readEnd(reader, namespace, "index", true);
     151                    found = true;
     152                } else if (XmlStreamReaderUtils.readStart(reader, namespace, "sortKeyword", false)) {
     153                    logger.debug("-> sortKeywords");
     154                    XmlStreamReaderUtils.readEnd(reader, namespace, "sortKeyword", true);
     155                    found = true;
    118156                } else {
    119157                    break;
    120158                }
     159            } // for
     160            if (!found) {
     161                // FIXME: error message
     162                throw new XMLStreamException("expected at least one of <set>. <index> or <sortKeyword> element", reader.getLocation());
    121163            }
    122164            XmlStreamReaderUtils.readEnd(reader, namespace, "indexInfo", true);
    123165        } // while
     166
     167        // explain/recordInfo or explain/schemaInfo
     168        if (XmlStreamReaderUtils.peekStart(reader, namespace, "recordInfo") ||
     169            XmlStreamReaderUtils.peekStart(reader, namespace, "schemaInfo")) {
     170            if (XmlStreamReaderUtils.readStart(reader,
     171                    namespace, "recordInfo", false)) {
     172                logger.debug("recordInfo");
     173                XmlStreamReaderUtils.readEnd(reader, namespace, "recordInfo", true);
     174            } else if (XmlStreamReaderUtils.readStart(reader,
     175                    namespace, "schemaInfo", false)) {
     176                logger.debug("schemaInfo");
     177                XmlStreamReaderUtils.readEnd(reader, namespace, "schemaInfo", true);
     178            } else {
     179                throw new XMLStreamException("unexpected start element '" +
     180                        reader.getName() + "'", reader.getLocation());
     181            }
     182        }
     183
     184        // explain/configInfo
     185        if (XmlStreamReaderUtils.readStart(reader, namespace,
     186                "configInfo", false)) {
     187            /*
     188             * configInfo ((default|setting|supports)*)
     189             */
     190            logger.debug("configInfo");
     191            for (;;) {
     192                if (XmlStreamReaderUtils.readStart(reader,
     193                        namespace, "default", false, true)) {
     194                    final String type =
     195                            XmlStreamReaderUtils.readAttributeValue(reader,
     196                                    null, "type", true);
     197                    XmlStreamReaderUtils.consumeStart(reader);
     198                    final String value =
     199                            XmlStreamReaderUtils.readString(reader, true);
     200                    XmlStreamReaderUtils.readEnd(reader, namespace, "default");
     201                    logger.debug("-> default: type={}, value={}", type, value);
     202                } else if (XmlStreamReaderUtils.readStart(reader,
     203                        namespace, "setting", false, true)) {
     204                    final String type =
     205                            XmlStreamReaderUtils.readAttributeValue(reader,
     206                                    null, "type", true);
     207                    XmlStreamReaderUtils.consumeStart(reader);
     208                    final String value =
     209                            XmlStreamReaderUtils.readString(reader, true);
     210                    XmlStreamReaderUtils.readEnd(reader, namespace, "setting");
     211                    logger.debug("-> setting: type={}, value={}", type, value);
     212                } else if (XmlStreamReaderUtils.readStart(reader,
     213                        namespace, "supports", false, true)) {
     214                    final String type =
     215                            XmlStreamReaderUtils.readAttributeValue(reader,
     216                                    null, "type", true);
     217                    XmlStreamReaderUtils.consumeStart(reader);
     218                    final String value =
     219                            XmlStreamReaderUtils.readString(reader, true);
     220                    XmlStreamReaderUtils.readEnd(reader, namespace, "supports");
     221
     222                    logger.debug("-> supports: type={}, value={}", type, value);
     223                } else {
     224                    break;
     225                }
     226            }
     227            XmlStreamReaderUtils.readEnd(reader, namespace, "configInfo", true);
     228        }
    124229
    125230        XmlStreamReaderUtils.readEnd(reader, namespace, "explain", true);
     
    152257
    153258        Set<String> transports = new HashSet<String>();
    154         s = XmlStreamReaderUtils.readAttributeValue(reader,
    155                 null, "transport");
     259        s = XmlStreamReaderUtils.readAttributeValue(reader, null, "transport");
    156260        if (s != null) {
    157             s = s + " http";
    158261            for (String i : s.split("\\s+")) {
    159262                String t = null;
     
    201304        }
    202305        XmlStreamReaderUtils.readEnd(reader, namespace, "serverInfo", true);
    203         logger.debug("serverInfo: host={}, port={}, database={}, version={}, protocol={}, transport={}",
    204                 host, port, database, version, protocol, transports);
     306        logger.debug("serverInfo: host={}, port={}, database={}, version={}, " +
     307                "protocol={}, transport={}", host, port, database, version,
     308                protocol, transports);
    205309        return new ServerInfo(host, port, database, protocol, version,
    206310                transports);
  • SRUClient/trunk/src/main/java/eu/clarin/sru/client/XmlStreamReaderUtils.java

    r2936 r2953  
    107107                }
    108108                if (reader.isStartElement()) {
    109                     if (!(namespaceURI.equals(reader.getNamespaceURI()) && localName
    110                             .equals(reader.getLocalName()))) {
     109                    if (!(namespaceURI.equals(reader.getNamespaceURI()) &&
     110                            localName.equals(reader.getLocalName()))) {
    111111                        level++;
    112112                    }
     
    228228    public static String peekElementLocalName(XMLStreamReader reader)
    229229            throws XMLStreamException {
     230        consumeWhitespace(reader);
    230231        if (!reader.isStartElement()) {
    231232            throw new XMLStreamException("not at a start elment event",
     
    236237
    237238
     239    public static boolean peekStart(XMLStreamReader reader,
     240            String namespaceURI, String localName) throws XMLStreamException {
     241        consumeWhitespace(reader);
     242        if (!reader.isStartElement()) {
     243            throw new XMLStreamException("not at a start elment event",
     244                    reader.getLocation());
     245        }
     246        return namespaceURI.equals(reader.getNamespaceURI()) &&
     247                localName.equals(reader.getLocalName());
     248    }
     249   
     250   
    238251    public static void consumeStart(XMLStreamReader reader)
    239252            throws XMLStreamException {
Note: See TracChangeset for help on using the changeset viewer.