    001    //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.4_testing/src/org/deegree/portal/context/General.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.portal.context;
    037
    038    import java.awt.Rectangle;
    039
    040    import org.deegree.model.crs.CoordinateSystem;
    041    import org.deegree.model.metadata.iso19115.CitedResponsibleParty;
    042    import org.deegree.model.spatialschema.Envelope;
    043    import org.deegree.model.spatialschema.GeometryFactory;
    044    import org.deegree.model.spatialschema.Point;
    045    import org.deegree.ogcbase.BaseURL;
    046    import org.deegree.ogcbase.ImageURL;
    047
    048    /**
    049     * The class encapsulates the general informations common to all types of contexts
    050     *
    051     * @version $Revision: 18195 $
    052     * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
    053     */
    054    public class General {
    055        private CitedResponsibleParty contactInformation = null;
    056
    057        private Point[] boundingBox = null;
    058
    059        private GeneralExtension extension = null;
    060
    061        private String abstract_ = null;
    062
    063        private String title = null;
    064
    065        private BaseURL descriptionURL = null;
    066
    067        private ImageURL logoURL = null;
    068
    069        private String[] keywords = null;
    070
    071        private Rectangle window = null;
    072
    073        /**
    074         * Creates a new General object.
    075         *
    076         * @param title
    077         *            title of the context
    078         * @param abstract_
    079         *            short description
    080         * @param window
    081         * @param contactInformation
    082         *            informations about creator of the context
    083         * @param boundingBox
    084         *            bounding box of the map/data
    085         * @param descriptionURL
    086         *            reference to a webpage which contains relevant information to the view.
    087         * @param logoURL
    088         *            A reference to an image that might be attached to the context document.
    089         * @param keywords
    090         * @param extension
    091         *            The Extension element is a container tag in which arbitrary vendor specific information can be
    092         *            included without compromising the ability of other clients to enforce schema validation.
    093         *
    094         * @throws ContextException
    095         */
    096        public General( String title, String abstract_, Rectangle window, CitedResponsibleParty contactInformation,
    097                        Point[] boundingBox, BaseURL descriptionURL, ImageURL logoURL, String[] keywords,
    098                        GeneralExtension extension ) throws ContextException {
    099            setTitle( title );
    100            setAbstract( abstract_ );
    101            setWindow( window );
    102            setContactInformation( contactInformation );
    103            setBoundingBox( boundingBox );
    104            setDescriptionURL( descriptionURL );
    105            setLogoURL( logoURL );
    106            setKeywords( keywords );
    107            setExtension( extension );
    108        }
    109
    110        /**
    111         * An element Window presenting the size in pixels of the map the Context document describes. Negotiation between
    112         * Context defined aspect ratio and typical client aspect ratio (according to the client's vendor) is left to the
    113         * client.
    114         *
    115         * @param window
    116         */
    117        public void setWindow( Rectangle window ) {
    118            this.window = window;
    119        }
    120
    121        /**
    122         * BoundingBox formatted as defined in the WMS 1.1.1 Specification. It represents the geographic extent that should
    123         * be presented by the client1.
    124         *
    125         * @param boundingBox
    126         * @throws ContextException
    127         *             if the bbox is <code>null</code>
    128         */
    129        public void setBoundingBox( Point[] boundingBox )
    130                                throws ContextException {
    131            if ( boundingBox == null ) {
    132                throw new ContextException( "A context's bounding box isn't allowed to be null" );
    133            }
    134
    135            this.boundingBox = boundingBox;
    136        }
    137
    138        /**
    139         * BoundingBox formatted as defined in the WMS 1.1.1 Specification. It represents the geographic extent that should
    140         * be presented by the client1.
    141         *
    142         * @param boundingBox
    143         * @throws ContextException
    144         *             if the bbox is <code>null</code>
    145         */
    146        public void setBoundingBox( Envelope boundingBox )
    147                                throws ContextException {
    148            if ( boundingBox == null ) {
    149                throw new ContextException( "A context's bounding box isn't allowed to be null" );
    150            }
    151
    152            CoordinateSystem cs = this.boundingBox[0].getCoordinateSystem();
    153            Point p0 = GeometryFactory.createPoint( boundingBox.getMin().getX(), boundingBox.getMin().getY(), cs );
    154            Point p1 = GeometryFactory.createPoint( boundingBox.getMax().getX(), boundingBox.getMax().getY(), cs );
    155            this.boundingBox = new Point[] { p0, p1 };
    156        }
    157
    158        /**
    159         * An element KeywordList that contains one or more Keyword elements which allow search across context collections.
    160         *
    161         * @param keywords
    162         */
    163        public void setKeywords( String[] keywords ) {
    164            this.keywords = keywords;
    165        }
    166
    167        /**
    168         * An element Title that contains a human readable title of the Context.
    169         *
    170         * @param title
    171         * @throws ContextException
    172         *             if the title is <code>null</code>
    173         */
    174        public void setTitle( String title )
    175                                throws ContextException {
    176            if ( title == null ) {
    177                throw new ContextException( "A context's title isn't allowed to be null" );
    178            }
    179
    180            this.title = title;
    181        }
    182
    183        /**
    184         * An element Abstract that contains a description for the Context document describing its content.
    185         *
    186         * @param abstract_
    187         */
    188        public void setAbstract( String abstract_ ) {
    189            this.abstract_ = abstract_;
    190        }
    191
    192        /**
    193         * A reference to an image that might be attached to the Context document. It can be, for instance, the logo of the
    194         * project for which the context has been setup, or an overview of the map the context describes. This element
    195         * contains a link to the image as well as the dimension of the image (in pixels) and its format.
    196         *
    197         * @param logoURL
    198         */
    199        public void setLogoURL( ImageURL logoURL ) {
    200            this.logoURL = logoURL;
    201        }
    202
    203        /**
    204         * A URL reference to a webpage which contains relevant information to the view.
    205         *
    206         * @param descriptionURL
    207         */
    208        public void setDescriptionURL( BaseURL descriptionURL ) {
    209            this.descriptionURL = descriptionURL;
    210        }
    211
    212        /**
    213         * An element ContactInformation that presents contact information of the creator of the Context document. Contact
    214         * is described as defined in WMS 1.1.1 Specification.
    215         *
    216         * @param contactInformation
    217         */
    218        public void setContactInformation( CitedResponsibleParty contactInformation ) {
    219            this.contactInformation = contactInformation;
    220        }
    221
    222        /**
    223         * The Extension element is a container tag in which arbitrary vendor specific information can be included without
    224         * compromising the ability of other clients to enforce schema validation.<p/> This tag should not be used to
    225         * introduce new candidate elements that are intended to promote interoperability. Content in an <Extension> element
    226         * should not be expected to be preserved in transfers of ViewContext documents between different systems.
    227         *
    228         * @param extension
    229         */
    230        public void setExtension( GeneralExtension extension ) {
    231            this.extension = extension;
    232        }
    233
    234        /**
    235         *
    236         *
    237         * @return the window
    238         */
    239        public Rectangle getWindow() {
    240            return window;
    241        }
    242
    243        /**
    244         *
    245         * @return the boundingbox
    246         */
    247        public Point[] getBoundingBox() {
    248            return boundingBox;
    249        }
    250
    251        /**
    252         *
    253         * @return the keywords
    254         */
    255        public String[] getKeywords() {
    256            return keywords;
    257        }
    258
    259        /**
    260         *
    261         * @return the titles
    262         */
    263        public String getTitle() {
    264            return title;
    265        }
    266
    267        /**
    268         *
    269         * @return the abstract
    270         */
    271        public String getAbstract() {
    272            return abstract_;
    273        }
    274
    275        /**
    276         *
    277         * @return the url to the logo
    278         */
    279        public ImageURL getLogoURL() {
    280            return logoURL;
    281        }
    282
    283        /**
    284         *
    285         * @return the url to the description
    286         */
    287        public BaseURL getDescriptionURL() {
    288            return descriptionURL;
    289        }
    290
    291        /**
    292         *
    293         * @return the contactinformation
    294         */
    295        public CitedResponsibleParty getContactInformation() {
    296            return contactInformation;
    297        }
    298
    299        /**
    300         *
    301         * @return the extension.
    302         */
    303        public GeneralExtension getExtension() {
    304            return extension;
    305        }
    306
    307    }