001 //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.3_testing/src/org/deegree/portal/context/MapModelAccess.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.net.URL;
039
040 import org.deegree.datatypes.QualifiedName;
041 import org.deegree.graphics.sld.StyledLayerDescriptor;
042 import org.deegree.model.spatialschema.Envelope;
043 import org.deegree.model.spatialschema.Point;
044 import org.deegree.portal.PortalException;
045
046 /**
047 * <p>
048 * This interface defines access to the model (
049 *
050 * @see org.deegree.portal.context.ViewContext ) a map based on. A concret implementation is
051 * responsible for handling the context. E.g. an implementation may adds additional
052 * capabilities like a history function.
053 * </p>
054 * <p>
055 * Several methods expects beside the name of a layer the address (URL) of the OWS that serves
056 * this layer. This is required because a ViewContext may offeres layers from more than one OWS
057 * and there is no rule that says that a layers name must be unique across several OWS. So the
058 * only way to identify a layer is to use the combination of layer name, service address and
059 * service type (maybe several services are published to the same address; e.g. deegree 2 will
060 * do this).
061 * </p>
062 * <p>
063 * Notice: All changed e.g. removeLayer just will be made to a ViewContext and not to the
064 * service providing a layer.
065 * </p>
066 *
067 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
068 * @author last edited by: $Author:wanhoff$
069 *
070 * @version $Revision: 18195 $ $Date: 2009-06-18 17:55:39 +0200 (Do, 18. Jun 2009) $
071 *
072 */
073 public interface MapModelAccess {
074
075 /**
076 * The pan north constant.
077 */
078 int PAN_NORTH = 0;
079
080 /**
081 * The pan north east constant.
082 */
083 int PAN_NORTHEAST = 1;
084
085 /**
086 * The pan north west constant.
087 */
088 int PAN_NORTHWEST = 2;
089
090 /**
091 * The pan south constant.
092 */
093 int PAN_SOUTH = 3;
094
095 /**
096 * The pan south east constant.
097 */
098 int PAN_SOUTHEAST = 4;
099
100 /**
101 * The pan south west constant.
102 */
103 int PAN_SOUTHWEST = 5;
104
105 /**
106 * The pan west constant.
107 */
108 int PAN_WEST = 6;
109
110 /**
111 * The pan east constant.
112 */
113 int PAN_EAST = 7;
114
115 /**
116 * sets the layers provided by the passed OWS to a <code>ViewContext</code>. A layer may be a
117 * WMS layer, a WFS feature type or a WCS coverage.
118 *
119 * @param names
120 * names of the layer
121 * @param owsAddresses
122 * addresses of the OWS that serves the layer. each passed layername is assigned to
123 * the OWS URL at the same index position.
124 * @param type
125 * OWS type (WCS, WMS or WFS)
126 * @return modified ViewContext
127 * @throws PortalException
128 * will be thrown if of the layers already is registered to a ViewContext or the OWS
129 * does not serves one the layers or <code>names</names>
130 * and <code>owsAddresses</code> are not of the same size.
131 */
132 public ViewContext setLayers( QualifiedName[] names, URL[] owsAddresses, String type )
133 throws PortalException;
134
135 /**
136 * sets the layers to a <code>ViewContext</code>. A layer may be a WMS layer, a WFS feature
137 * type or a WCS coverage.
138 *
139 * @param layers
140 * layers to add
141 * @return modified ViewContext
142 * @throws PortalException
143 * will be thrown if of the layers already is registered to a ViewContext.
144 */
145 public ViewContext setLayers( Layer[] layers )
146 throws PortalException;
147
148 /**
149 * adds a layer provided by the passed OWS to the end of the layer list of a
150 * <code>ViewContext</code>. A layer may be a WMS layer, a WFS feature type or a WCS
151 * coverage.
152 *
153 * @param name
154 * name of the layer
155 * @param owsAddress
156 * address of the OWS that serves the layer
157 * @param type
158 * OWS type (WCS, WMS or WFS)
159 * @exception PortalException
160 * will be thrown if the layer already is registered to a ViewContext or the OWS
161 * does not serves a layer with this name.
162 * @return modified ViewContext
163 */
164 public ViewContext addLayer( QualifiedName name, URL owsAddress, String type )
165 throws PortalException;
166
167 /**
168 * adds a layer to the end of the layer list of a <code>ViewContext</code>. A layer may be a
169 * WMS layer, a WFS feature type or a WCS coverage.
170 *
171 * @param layer
172 * layer to add
173 * @throws PortalException
174 * will be thrown if the layer already is registered to a ViewContext.
175 * @return modified ViewContext
176 */
177 public ViewContext addLayer( Layer layer )
178 throws PortalException;
179
180 /**
181 * adds a layer provided by the passed OWS to the defined index position of the layer list of a
182 * <code>ViewContext</code>. A layer may be a WMS layer, a WFS feature type or a WCS
183 * coverage.
184 *
185 * @param index
186 * index position where to insert the layer
187 * @param name
188 * name of the layer
189 * @param owsAddress
190 * address of the OWS that serves the layer
191 * @param type
192 * OWS type (WCS, WMS or WFS)
193 * @throws PortalException
194 * will be thrown if the layer already is registered to a ViewContext or the OWS
195 * does not serves a layer with this name or the index is < 0 or > the number
196 * of layers -1;
197 * @return modified ViewContext
198 */
199 public ViewContext addLayer( int index, QualifiedName name, URL owsAddress, String type )
200 throws PortalException;
201
202 /**
203 * adds a layer to the defined index position of the layer list of a <code>ViewContext</code>.
204 * A layer may be a WMS layer, a WFS feature type or a WCS coverage.
205 *
206 * @param index
207 * index position where to insert the layer
208 * @param layer
209 * layer to add
210 * @return modified ViewContext
211 * @throws PortalException
212 * will be thrown if the layer already is registered to a ViewContext or the index
213 * is < 0 or > the number of layers -1;
214 */
215 public ViewContext addLayer( int index, Layer layer )
216 throws PortalException;
217
218 /**
219 * adds a number of layers provided by the passed OWS to the end of the layer list of a
220 * <code>ViewContext</code>. A layer may be a WMS layer, a WFS feature type or a WCS
221 * coverage.
222 *
223 * @param names
224 * names of the layer
225 * @param owsAddresses
226 * addresses of the OWS's that serves the layer
227 * @param type
228 * OWS type (WCS, WMS or WFS)
229 * @return modified ViewContext
230 * @throws PortalException
231 * will be thrown if of the layers already is registered to a ViewContext or the OWS
232 * does not serves one the layers or the OWS does not serves one the layers or
233 * <code>names</names>
234 * and <code>owsAddresses</code> are not of the same size.
235 */
236 public ViewContext addLayers( QualifiedName[] names, URL[] owsAddresses, String type )
237 throws PortalException;
238
239 /**
240 * adds a number of layers to the end of the layer list of a <code>ViewContext</code>. A
241 * layer may be a WMS layer, a WFS feature type or a WCS coverage.
242 *
243 * @param layers
244 * layers to add
245 * @return modified ViewContext
246 * @throws PortalException
247 * will be thrown if of the layers already is registered to a ViewContext.
248 */
249 public ViewContext addLayers( Layer[] layers )
250 throws PortalException;
251
252 /**
253 * removes a named layer served by the passsed OWS from a <code>ViewContext</code>. if a
254 * layer with this name does not exist in a context, the unchanged <code>ViewContext</code>
255 * will be returned
256 *
257 * @param name
258 * name of the layer to be removed
259 * @param owsAddress
260 * address of the OWS that serves the layer
261 * @param type
262 * OWS type (WCS, WMS or WFS)
263 * @return modified ViewContext
264 */
265 public ViewContext removeLayer( QualifiedName name, URL owsAddress, String type );
266
267 /**
268 * swaps two layers in their order. The layer identified by the passed name and OWS can be moved
269 * up or down for one position. If a layer can not be moved up or down because it is already the
270 * top or bottom most layer the unchanged <code>ViewContext</code> will be returned
271 * <p>
272 * Notice: if to layers to be swaped are served by differend OWS at least one new image-layer
273 * must be created by the client.
274 * </p>
275 *
276 * @param name
277 * name of the layer to be moved up or down in the list
278 * @param owsAddress
279 * address of the OWS that serves the layer
280 * @param type
281 * OWS type (WCS, WMS or WFS)
282 * @param up
283 * true if layer should be moved up otherwise it will be moved down.
284 * @return modified ViewContext
285 * @throws PortalException
286 * will be thrown if the layer does not exists in a ViewContext.
287 */
288 public ViewContext swapLayers( QualifiedName name, URL owsAddress, String type, boolean up )
289 throws PortalException;
290
291 /**
292 * swaps to groups in their order
293 *
294 * @see MapModelAccess#swapLayers(QualifiedName, URL, String, boolean)
295 *
296 * @param name
297 * name of the group to be moved up or down
298 * @param up
299 * true if a group should be moved up otherwise it will be moved down.
300 * @return modified ViewContext
301 * @throws PortalException
302 * will be thrown if a group with the passed name does not exist in a ViewContext
303 */
304 public ViewContext swapGroups( QualifiedName name, boolean up )
305 throws PortalException;
306
307 /**
308 * sets the active style (style to be used for rendering) of a layer
309 *
310 * @param name
311 * name of the layer a style shall be set to
312 * @param owsAddress
313 * address of the OWS that serves this layer
314 * @param type
315 * OWS type (WCS, WMS or WFS)
316 * @param styleName
317 * name of the style to be assigned
318 * @return modified ViewContext
319 * @throws PortalException
320 * will be thrown if the layer or style are not known by a ViewContext or the style
321 * is not available for this layer
322 */
323 public ViewContext setLayerActiveStyle( QualifiedName name, URL owsAddress, String type, String styleName )
324 throws PortalException;
325
326 /**
327 * adds a named style to a layer to be available within a context.
328 *
329 * @param name
330 * name of the layer
331 * @param owsAddress
332 * address of the OWS that serves this layer
333 * @param type
334 * OWS type (WCS, WMS or WFS)
335 * @param styleName
336 * name of the style to be set
337 * @return modified ViewContext
338 * @throws PortalException
339 * will be thrown if the layer is not known by a ViewContext or the style is not
340 * available for this layer
341 */
342 public ViewContext addStyleToLayer( QualifiedName name, URL owsAddress, String type, String styleName )
343 throws PortalException;
344
345 /**
346 * removes a style from the layer defined in a ViewContext. If a style with passed named is not
347 * assigned to a layer the ViewContext will be returend unchanged.
348 *
349 * @param name
350 * name of the layer
351 * @param owsAddress
352 * address of the OWS that serves this layer
353 * @param type
354 * OWS type (WCS, WMS or WFS)
355 * @param styleName
356 * name of the style to be removed
357 * @return modified ViewContext
358 */
359 public ViewContext removeStyleFromLayer( QualifiedName name, URL owsAddress, String type, String styleName );
360
361 /**
362 * assignes a SLD document instead of a style to a layer. Usually this should be a SLD
363 * containing one named layer or one user layer and one user style. But it also will be possible
364 * to have a SLD with several layers (named layers as well as user layers). But this may cause
365 * some irritations so it should be avoided.
366 *
367 * @param name
368 * name of the layer the SLD should be assigned to
369 * @param owsAddress
370 * address of the OWS that serves this layer(s) if the SLD contains named layer(s).
371 * Otherwise the parameter can be <code>null</code>
372 * @param type
373 * OWS type (WCS, WMS or WFS)
374 * @param sld
375 * SLD that shall be assigned
376 * @return modified ViewContext
377 * @throws PortalException
378 * will be thrown if the layer is not known by a ViewContext or if the SLD contains
379 * a named layer but owsAddress is passed.
380 */
381 public ViewContext assignSLDToLayer( QualifiedName name, URL owsAddress, String type, StyledLayerDescriptor sld )
382 throws PortalException;
383
384 /**
385 * set a layer to be visible or invisible
386 *
387 * @param name
388 * name of the layer
389 * @param owsAddress
390 * address of the OWS that serves this layer
391 * @param type
392 * OWS type (WCS, WMS or WFS)
393 * @param visible
394 * <code>true</code> if a layer shall be visible; <code>false</code> if not.
395 * @return modified ViewContext
396 * @throws PortalException
397 * will be thrown if the layer is not known by a ViewContext.
398 *
399 */
400 public ViewContext setLayersVisible( String name, URL owsAddress, String type, boolean visible )
401 throws PortalException;
402
403 /**
404 * sets the CRS to be used by the map created from a ViewContext.
405 *
406 * @param crs
407 * name of the CRS e.g. EPSG:4326
408 * @return modified ViewContext
409 * @throws PortalException
410 * will be thrown if the CRS is not known by all layers available through a
411 * ViewContext
412 */
413 public ViewContext setMapCRS( String crs )
414 throws PortalException;
415
416 /**
417 * Adds a CRS to a layer if a ViewContext.
418 *
419 * @param name
420 * name of the layer
421 * @param owsAddress
422 * address of the OWS that serves this layer
423 * @param type
424 * OWS type (WCS, WMS or WFS)
425 * @param crsName
426 * name of the CRS to be added (e.g. EPSG:4326)
427 * @return modified ViewContext
428 * @throws PortalException
429 * will be thrown if the layer is not known by a ViewContext or the CRS is not
430 * supported for this layer/OWS
431 */
432 public ViewContext addCRSToLayer( String name, URL owsAddress, String type, String crsName )
433 throws PortalException;
434
435 /**
436 * removes a CRS from the list of availabe CRS of a layer. If the layer or the CRS does not
437 * exist in a ViewContext the ViewContext will be returned unchanged.
438 *
439 * @param name
440 * name of the layer
441 * @param owsAddress
442 * address of the OWS that serves this layer
443 * @param type
444 * OWS type (WCS, WMS or WFS)
445 * @param crsName
446 * name of the CRS to be removed from a layers CRS list
447 * @return modified ViewContext
448 */
449 public ViewContext removeCRSFromLayer( String name, URL owsAddress, String type, String crsName );
450
451 /**
452 * sets the bounding box a map/VieContext
453 *
454 * @param boundingBox
455 * new boundingbox
456 * @return modified ViewContext
457 * @throws ContextException
458 */
459 public ViewContext setMapBoundingBox( Envelope boundingBox )
460 throws ContextException;
461
462 /**
463 * sets the width and height of a map described by a ViewContext
464 *
465 * @param width
466 * map width measured in pixel
467 * @param height
468 * map height measured in pixel
469 * @return modified ViewContext
470 * @throws PortalException
471 * will be thrown if width or height < 1 (even a width or height of 1 pixel is not
472 * really useful but formal it is valid);
473 */
474 public ViewContext setMapSize( int width, int height )
475 throws PortalException;
476
477 /**
478 * zoom in or out of the map described by a ViewContext and recenters it to the passed point.
479 * <ul>
480 * <li>factor > 0: zoomout</li>
481 * <li>factor < 0: zoomin</li>
482 * <li>factor == 0: recenter</li>
483 * </ul>
484 *
485 * @param factor
486 * zoom factor in % of the boundingbox size
487 * @param point
488 * point (pixel coordinates) of the current map that marks the new center of the map
489 * @return modified ViewContext
490 * @throws ContextException
491 */
492 public ViewContext zoom( java.awt.Point point, double factor )
493 throws ContextException;
494
495 /**
496 * zoom in or out of the map described by a ViewContext and recenters it to the passed point.
497 * <ul>
498 * <li>factor > 0: zoomout</li>
499 * <li>factor < 0: zoomin</li>
500 * <li>factor == 0: recenter</li>
501 * </ul>
502 *
503 * @param factor
504 * zoom factor in % of the boundingbox size
505 * @param point
506 * point (map coordinates) of the current map that marks the new center of the map
507 * @return modified ViewContext
508 * @throws ContextException
509 */
510 public ViewContext zoom( Point point, double factor )
511 throws ContextException;
512
513 /**
514 * centers he map described by a ViewContext to the passed point. The behavior of this method is
515 * the same as
516 *
517 * @see #zoom(java.awt.Point, double) with a passed factor == 0;
518 *
519 * @param point
520 * point (pixel coordinates) of the current map that marks the new center of the map
521 * @return modified ViewContext
522 * @throws ContextException
523 */
524 public ViewContext recenterMap( java.awt.Point point )
525 throws ContextException;
526
527 /**
528 * centers he map described by a ViewContext to the passed point. The behavior of this method is
529 * the same as
530 *
531 * @see #zoom(Point, double) with a passed factor == 0;
532 *
533 * @param point
534 * point (map coordinates) of the current map that marks the new center of the map
535 * @return modified ViewContext
536 * @throws ContextException
537 */
538 public ViewContext recenterMap( Point point )
539 throws ContextException;
540
541 /**
542 * moves the boundingbox of the map to a well known direction. Directions that are known:
543 *
544 * @see #PAN_NORTH
545 * @see #PAN_NORTHEAST
546 * @see #PAN_NORTHWEST
547 * @see #PAN_SOUTH
548 * @see #PAN_SOUTHEAST
549 * @see #PAN_SOUTHWEST
550 * @see #PAN_WEST
551 * @see #PAN_EAST
552 * @param direction
553 * direction the map view shall be moved to
554 * @param factor
555 * factor measured in % the map view shall be moved
556 * @return modified ViewContext
557 * @throws PortalException
558 * will be thrown if passed direction is not valid or factor is <= 0
559 * @throws ContextException
560 */
561 public ViewContext pan( int direction, double factor )
562 throws PortalException, ContextException;
563
564 /**
565 * moves a map view to a free definable direction with a given factor
566 *
567 * @param directionDegree
568 * direction measured in degree that map view shall be moved to
569 * @param factor
570 * factor measured in % the map view shall be moved
571 * @return modified ViewContext
572 * @throws PortalException
573 * will be thrown if factor is <= 0
574 */
575 public ViewContext pan( double directionDegree, double factor )
576 throws PortalException;
577
578 /**
579 * sets the current image format a map shall be rendered. In theory OGC WMC specification allows
580 * rendering of each layer in a different image format but this seems to be very complicated,
581 * slow and not very useful, so deegree just supports one format for each OWS.
582 *
583 * @param mimeType
584 * image format
585 * @param owsAddress
586 * address of the OWS the format shall be used for
587 * @param type
588 * OWS type
589 * @return modified ViewContext
590 * @throws PortalException
591 * will be thrown if the passed mimeType is not suported by the passed OWS or one of
592 * its layers as defined in a ViewContext
593 */
594 public ViewContext setCurrentMapFormat( String mimeType, URL owsAddress, String type )
595 throws PortalException;
596
597 /**
598 * adds a new image format to a layer of a ViewContext. This method is useful because not every
599 * image format e.g.a WMS offers must be registered to be available through a Web Map Context.
600 *
601 * @param name
602 * name of the layer
603 * @param owsAddress
604 * address of the OWS
605 * @param type
606 * OWS type (WCS, WMS or WFS)
607 * @param mimeType
608 * new format to add to the layer
609 * @return modified ViewContext
610 * @throws PortalException
611 * will be thrown if the passed mimeType is not suported by the passed OWS
612 */
613 public ViewContext addFormatToLayer( String name, URL owsAddress, String type, String mimeType )
614 throws PortalException;
615
616 /**
617 * removes a format from a layer in a ViewContext.
618 *
619 * @see #addFormatToLayer(String, URL, String, String)
620 *
621 * @param name
622 * name of the layer
623 * @param owsAddress
624 * address of the OWS
625 * @param type
626 * OWS type (WCS, WMS or WFS)
627 * @param mimeType
628 * format to be removed
629 * @return modified ViewContext
630 * @throws PortalException
631 * will be thrown if the removed format is the current format of the layer.
632 */
633 public ViewContext removeFormatFromLayer( String name, URL owsAddress, String type, String mimeType )
634 throws PortalException;
635
636 /**
637 * groups a set of layers identified by their names, the address of the OWS that provides it und
638 * its type. A group has a name that must be unique and a parent that may is <code>null</code>.
639 * If no parent is given the group will be located underneath the root node.
640 *
641 * @param layers
642 * layers to be grouped.
643 * @param owsAddresses
644 * @param types
645 * @param groupName
646 * unique name of the group
647 * @param parentGroupName
648 * name of the parent group. may be <code>null</null>
649 * @return modified ViewContext
650 * @throws PortalException will be thrown if one of the layers is not served by
651 * the assigned OWS or a layer is already member of a
652 * group
653 */
654 public ViewContext groupLayers( String[] layers, URL[] owsAddresses, String[] types, String groupName,
655 String parentGroupName )
656 throws PortalException;
657
658 /**
659 * the difference to
660 *
661 * @see #groupLayers(String[], URL[], String[], String, String) is that the layers are
662 * identified by theri index position in a ViewContext
663 *
664 * @param first
665 * zero based index of the first layer to add to the group
666 * @param last
667 * zero based index of the last layer to add to the group
668 * @param groupName
669 * unique name of the group
670 * @param parentGroupName
671 * name of the parent group. may be <code>null</null>
672 * @return modified ViewContext
673 * @throws PortalException will be thrown if first or last is < 0 or larger
674 * than the total number of layers -1 or a layer is
675 * already member of a group
676 */
677 public ViewContext groupLayers( int first, int last, String groupName, String parentGroupName )
678 throws PortalException;
679
680 /**
681 * destroys a group. If a group with the passed name does not exist a ViewContext will be
682 * returned unchanged
683 *
684 * @param groupName
685 * name of the group to be removed
686 * @return modified ViewContext
687 */
688 public ViewContext destroyGroup( String groupName );
689
690 }