    001    //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.4_testing/src/org/deegree/ogcwebservices/csw/discovery/SearchResults.java $
    002    /*----------------------------------------------------------------------------
    003     This file is part of deegree, http://deegree.org/
    004     Copyright (C) 2001-2009 by:
    005       Department of Geography, University of Bonn
    006     and
    007       lat/lon GmbH
    008
    009     This library is free software; you can redistribute it and/or modify it under
    010     the terms of the GNU Lesser General Public License as published by the Free
    011     Software Foundation; either version 2.1 of the License, or (at your option)
    012     any later version.
    013     This library is distributed in the hope that it will be useful, but WITHOUT
    014     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    015     FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
    016     details.
    017     You should have received a copy of the GNU Lesser General Public License
    018     along with this library; if not, write to the Free Software Foundation, Inc.,
    019     59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    020
    021     Contact information:
    022
    023     lat/lon GmbH
    024     Aennchenstr. 19, 53177 Bonn
    025     Germany
    026     http://lat-lon.de/
    027
    028     Department of Geography, University of Bonn
    029     Prof. Dr. Klaus Greve
    030     Postfach 1147, 53001 Bonn
    031     Germany
    032     http://www.geographie.uni-bonn.de/deegree/
    033
    034     e-mail: info@deegree.org
    035    ----------------------------------------------------------------------------*/
    036    package org.deegree.ogcwebservices.csw.discovery;
    037
    038    import java.net.URI;
    039    import java.net.URISyntaxException;
    040    import java.util.Date;
    041    import java.util.GregorianCalendar;
    042
    043    import org.deegree.ogcwebservices.InvalidParameterValueException;
    044    import org.w3c.dom.Node;
    045
    046    /**
    047     * Class representation of a &lt;csw:SearchResults&gt;-element.
    048     *
    049     * The SearchResults is a generic container for the actual response to a GetRecords request. The
    050     * content of the SearchResults is the set of records returned by the GetRecords operation. The
    051     * actual records returned by the catalogue should substitute for AbstractRecord.
    052     *
    053     * @author <a href="mailto:poth@lat-lon.de">Andreas Poth </a>
    054     * @author <a href="mailto:tfr@users.sourceforge.net">Torsten Friebe </a>
    055     * @author <a href="mailto:tfr@users.sourceforge.net">Markus Schneider </a>
    056     * @author last edited by: $Author: mschneider $
    057     *
    058     * @version 2.0, $Revision: 18195 $, $Date: 2009-06-18 17:55:39 +0200 (Do, 18. Jun 2009) $
    059     */
    060
    061    public class SearchResults {
    062
    063        private static final String[] ELEMENT_SETS = { "brief", "summary", "full" };
    064
    065        private URI requestId = null;
    066
    067        private URI resultSetId = null;
    068
    069        private String elementSet = null;
    070
    071        private URI recordSchema = null;
    072
    073        private int numberOfRecordsReturned = 0;
    074
    075        private int numberOfRecordsMatched = 0;
    076
    077        private int nextRecord = 0;
    078
    079        private Date expires = null;
    080
    081        private Node recordsParentNode;
    082
    083        /**
    084         *
    085         * @param requestId
    086         * @param resultSetId
    087         * @param elementSet
    088         * @param recordSchema
    089         * @param numberOfRecordsReturned
    090         * @param nextRecord
    091         * @param recordsParentNode
    092         * @throws InvalidParameterValueException
    093         */
    094        SearchResults( String requestId, String resultSetId, String elementSet, String recordSchema,
    095                       int numberOfRecordsReturned, int numberOfRecordsMatched, int nextRecord, Node recordsParentNode,
    096                       String expires ) throws InvalidParameterValueException {
    097
    098            if ( requestId != null ) {
    099                try {
    100                    this.requestId = new URI( null, requestId, null );
    101                } catch ( URISyntaxException e ) {
    102                    throw new InvalidParameterValueException( "Value '" + requestId
    103                                                              + "' of Parameter 'requestId' does not denote a valid URI." );
    104                }
    105            }
    106
    107            if ( resultSetId != null ) {
    108                try {
    109                    this.resultSetId = new URI( null, resultSetId, null );
    110                } catch ( URISyntaxException e ) {
    111                    throw new InvalidParameterValueException( "Value '" + resultSetId
    112                                                              + "' of Parameter 'resultSetId' does not denote a valid URI." );
    113                }
    114            }
    115
    116            if ( elementSet != null ) {
    117                for ( int i = 0; i < ELEMENT_SETS.length; i++ ) {
    118                    if ( ELEMENT_SETS[i].equals( elementSet ) ) {
    119                        this.elementSet = elementSet;
    120                    }
    121                }
    122                if ( this.elementSet == null ) {
    123                    throw new InvalidParameterValueException( "Value '" + elementSet
    124                                                              + "' of Parameter 'elementSet' is invalid. Valid parameters"
    125                                                              + " are: 'full', 'summary' and 'brief'." );
    126                }
    127            }
    128
    129            if ( recordSchema != null ) {
    130                try {
    131                    this.recordSchema = new URI( null, recordSchema, null );
    132                } catch ( URISyntaxException e ) {
    133                    throw new InvalidParameterValueException(
    134                                                              "Value '"
    135                                                                                      + recordSchema
    136                                                                                      + "' of Parameter 'recordSchema' does not denote a valid URI." );
    137                }
    138            }
    139
    140            this.numberOfRecordsReturned = numberOfRecordsReturned;
    141            this.numberOfRecordsMatched = numberOfRecordsMatched;
    142            // TODO
    143            this.expires = new GregorianCalendar().getTime();// TimeTools.createCalendar( expires
    144                                                                // ).getTime();
    145            this.nextRecord = nextRecord;
    146            this.recordsParentNode = recordsParentNode;
    147        }
    148
    149        /**
    150         * @return the id
    151         */
    152        public URI getRequestId() {
    153            return requestId;
    154        }
    155
    156        /**
    157         * A server-generated identifier for the result set. May be used in subsequent GetRecords
    158         * operations to further refine the result set. If the server does not implement this capability
    159         * then the attribute should be omitted.
    160         *
    161         * @return the id
    162         */
    163        public URI getResultSetId() {
    164            return resultSetId;
    165        }
    166
    167        /**
    168         * The element set returned (brief, summary or full). This is null if getElementNames of
    169         * <tt>GetRecord</tt>!= null; Optional
    170         *
    171         * @return brief, summary or full
    172         */
    173        public String getElementSet() {
    174            return elementSet;
    175        }
    176
    177        /**
    178         * A reference to the type or schema of the records returned. Optional
    179         *
    180         * @return schema
    181         */
    182        public URI getRecordSchema() {
    183            return recordSchema;
    184        }
    185
    186        /**
    187         * Number of records found by the GetRecords operation
    188         *
    189         * @return the number
    190         */
    191        public int getNumberOfRecordsMatched() {
    192            return numberOfRecordsMatched;
    193        }
    194
    195        /**
    196         * Number of records actually returned to client. This may not be the entire result set since
    197         * some servers may limit the number of records returned to limit the size of the response
    198         * package transmitted to the client. Subsequent queries may be executed to see more of the
    199         * result set. The nextRecord attribute will indicate to the client where to begin the next
    200         * query
    201         *
    202         * @return the number
    203         */
    204        public int getNumberOfRecordsReturned() {
    205            return numberOfRecordsReturned;
    206        }
    207
    208        /**
    209         * Start position of next record. A value of 0 means all records have been returned.
    210         *
    211         * @return the position
    212         */
    213        public int getNextRecord() {
    214            return nextRecord;
    215        }
    216
    217        /**
    218         * Returns the contents of the &lt;SearchResults&gt;-element.
    219         *
    220         * @return a node
    221         */
    222        public Node getRecords() {
    223            return recordsParentNode;
    224        }
    225
    226        /**
    227         * @return the expiration date
    228         *
    229         */
    230        public Date getExpires() {
    231            return expires;
    232        }
    233
    234    }