001    //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.3_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    }