001 //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.4_testing/src/org/deegree/portal/portlet/modules/map/actions/portlets/MapActionPortletAction.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.portlet.modules.map.actions.portlets;
037
038 import java.lang.reflect.Constructor;
039 import java.util.Map;
040
041 import javax.servlet.http.HttpServletRequest;
042
043 import org.apache.jetspeed.modules.actions.portlets.JspPortletAction;
044 import org.apache.jetspeed.portal.Portlet;
045 import org.apache.turbine.om.security.User;
046 import org.apache.turbine.util.RunData;
047 import org.deegree.framework.log.ILogger;
048 import org.deegree.framework.log.LoggerFactory;
049 import org.deegree.framework.util.KVP2Map;
050 import org.deegree.portal.PortalException;
051
052 /**
053 *
054 *
055 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
056 * @author last edited by: $Author: mschneider $
057 *
058 * @version $Revision: 18195 $, $Date: 2009-06-18 17:55:39 +0200 (Do, 18. Jun 2009) $
059 */
060 public class MapActionPortletAction extends JspPortletAction {
061
062 private ILogger LOG = LoggerFactory.getLogger( MapActionPortletAction.class );
063
064 /**
065 * @throws Exception
066 *
067 */
068 @Override
069 protected void buildNormalContext( Portlet portlet, RunData data )
070 throws Exception {
071
072 try {
073 MapActionPortletPerform mapp = new MapActionPortletPerform( data.getRequest(), portlet,
074 data.getServletContext() );
075 mapp.buildNormalContext();
076 data.getRequest().setAttribute( "User", data.getUser().getUserName() );
077 data.getRequest().setAttribute( "Password", data.getUser().getPassword() );
078 } catch ( Exception e ) {
079 throw e;
080 }
081
082 }
083
084 /**
085 * Changes the CRS of the underlying ViewContext. The actual action is implemented by the
086 * <code>CRSChooserPortletPerform</code>.
087 *
088 * @param data
089 * @param portlet
090 * @throws PortalException
091 */
092 public void doCrschoose( RunData data, Portlet portlet )
093 throws PortalException {
094
095 try {
096 Portlet port = portlet.getPortletConfig().getPortletSet().getPortletByName( "iGeoPortal:CRSChooserPortlet" );
097 CRSChooserPortletPerform ccpp = new CRSChooserPortletPerform( data.getRequest(), port,
098 data.getServletContext() );
099 ccpp.doCRSChange();
100 } catch ( Exception e ) {
101 LOG.logError( e.getMessage(), e );
102 throw new PortalException( e.getMessage() );
103 }
104 }
105
106 /**
107 * returns the MapWindowPortlet targeted by the current action
108 *
109 * @param rundata
110 * @param portlet
111 * @return the MapWindowPortlet targeted by the current action
112 */
113 private Portlet getMapWindowPortlet( RunData rundata, Portlet portlet ) {
114 Map map = KVP2Map.toMap( rundata.getRequest() );
115 String id = (String) map.get( "MAPPORTLET" );
116 Portlet port = portlet.getPortletConfig().getPortletSet().getPortletByID( id );
117 return port;
118 }
119
120 /**
121 *
122 * @param data
123 * @param portlet
124 * @throws Exception
125 */
126 public void doFeatureinfo( RunData data, Portlet portlet )
127 throws Exception {
128
129 try {
130 HttpServletRequest req = data.getRequest();
131 req.setAttribute( "$U$", data.getUser().getUserName() );
132 req.setAttribute( "$P$", data.getUser().getPassword() );
133 Portlet port = getMapWindowPortlet( data, portlet );
134 FeatureInfoPortletPerform fipp = new FeatureInfoPortletPerform( req, port, data.getServletContext() );
135 fipp.doGetFeatureInfo();
136 } catch ( Exception e ) {
137 e.printStackTrace();
138 }
139
140 }
141
142 /**
143 *
144 * @param data
145 * @param portlet
146 * @throws Exception
147 */
148 public void doFeatureinfoForward( RunData data, Portlet portlet )
149 throws Exception {
150
151 try {
152 Portlet port = getMapWindowPortlet( data, portlet );
153 String className = portlet.getPortletConfig().getInitParameter( "performingClass" );
154 Class[] classes = new Class[3];
155 classes[0] = data.getRequest().getClass();
156 classes[1] = port.getClass();
157 classes[2] = data.getRequest().getClass();
158 Object[] o = new Object[3];
159 o[0] = data.getRequest();
160 o[1] = portlet;
161 o[2] = data.getRequest();
162
163 Class clss = Class.forName( className );
164 Constructor constructor = clss.getConstructor( classes );
165 constructor.newInstance( o );
166
167 FeatureInfoForwardPortletPerform fifpp = (FeatureInfoForwardPortletPerform) constructor.newInstance( o );
168 fifpp.doGetFeatureInfo();
169 } catch ( Exception e ) {
170 e.printStackTrace();
171 }
172
173 }
174
175 /**
176 * sets a new bounding box for the current ViewContext.
177 *
178 * @param data
179 * @param portlet
180 */
181 public void doSetboundingbox( RunData data, Portlet portlet ) {
182 try {
183 Portlet port = getMapWindowPortlet( data, portlet );
184 MapWindowPortletPerform mwpp = new MapWindowPortletPerform( data.getRequest(), port,
185 data.getServletContext() );
186 mwpp.setBoundingBoxFromBBOXParam();
187 mwpp.setLayers();
188 mwpp.setCurrentFILayer();
189 } catch ( Exception e ) {
190 e.printStackTrace();
191 }
192 }
193
194 /**
195 * sets the maps boundingbox to the defined home boundingbox
196 *
197 * @param data
198 * @param portlet
199 */
200 public void doSethomeboundingbox( RunData data, Portlet portlet ) {
201 try {
202 Portlet port = getMapWindowPortlet( data, portlet );
203 MapWindowPortletPerform mwpp = new MapWindowPortletPerform( data.getRequest(), port,
204 data.getServletContext() );
205 mwpp.setHomeBoundingbox();
206 // mwpp.setLayers( port.getID() );
207 // mwpp.setCurrentFILayer();
208 } catch ( Exception e ) {
209 e.printStackTrace();
210 }
211
212 }
213
214 /**
215 * sets a new size of the map (pixel)
216 *
217 * @param rundata
218 * @param portlet
219 * @throws Exception
220 */
221 public void doSetmapsize( RunData rundata, Portlet portlet )
222 throws Exception {
223 try {
224 Portlet port = getMapWindowPortlet( rundata, portlet );
225 MapWindowPortletPerform mwpp = new MapWindowPortletPerform( rundata.getRequest(), port,
226 rundata.getServletContext() );
227 mwpp.setMapSize();
228 mwpp.setBoundingBoxFromBBOXParam();
229 mwpp.setLayers();
230 mwpp.setCurrentFILayer();
231 } catch ( Exception e ) {
232 e.printStackTrace();
233 }
234 }
235
236 /**
237 * Performs a repaint of the current ViewContext by regenerating the assigend OWS requests. In opposite to
238 * <code>doActualizeViewContext(RunData, Portlet)</code> no parameters from the client are solved to actualize the
239 * current ViewContext.
240 *
241 * @param rundata
242 * @param portlet
243 * @throws Exception
244 */
245 public void doRepaint( RunData rundata, Portlet portlet )
246 throws Exception {
247 try {
248 Portlet port = getMapWindowPortlet( rundata, portlet );
249 if ( port != null ) {
250 MapWindowPortletPerform mwpp = new MapWindowPortletPerform( rundata.getRequest(), port,
251 rundata.getServletContext() );
252 mwpp.setBoundingBoxFromBBOXParam();
253 mwpp.setLayers();
254 mwpp.setCurrentFILayer();
255 mwpp.setMode();
256 }
257 } catch ( Exception e ) {
258 e.printStackTrace();
259 }
260 }
261
262 /**
263 * performs a zoomIn or a zoomOut on the current map model (ViewContext)
264 *
265 * @param rundata
266 * @param portlet
267 * @throws Exception
268 */
269 public void doZoom( RunData rundata, Portlet portlet )
270 throws Exception {
271 try {
272 Portlet port = getMapWindowPortlet( rundata, portlet );
273 MapWindowPortletPerform mwpp = new MapWindowPortletPerform( rundata.getRequest(), port,
274 rundata.getServletContext() );
275 mwpp.zoom();
276 mwpp.setLayers();
277 mwpp.setCurrentFILayer();
278 } catch ( Exception e ) {
279 e.printStackTrace();
280 }
281 }
282
283 /**
284 * performs a panning on the current map model (ViewContext)
285 *
286 * @param rundata
287 * @param portlet
288 * @throws Exception
289 */
290 public void doPan( RunData rundata, Portlet portlet )
291 throws Exception {
292 try {
293 Portlet port = getMapWindowPortlet( rundata, portlet );
294 MapWindowPortletPerform mwpp = new MapWindowPortletPerform( rundata.getRequest(), port,
295 rundata.getServletContext() );
296 mwpp.pan();
297 mwpp.setLayers();
298 mwpp.setCurrentFILayer();
299 } catch ( Exception e ) {
300 e.printStackTrace();
301 }
302 }
303
304 /**
305 * performs a recentering on the current map model (ViewContext)
306 *
307 * @param rundata
308 * @param portlet
309 * @throws Exception
310 */
311 public void doRecenter( RunData rundata, Portlet portlet )
312 throws Exception {
313 try {
314 Portlet port = getMapWindowPortlet( rundata, portlet );
315 MapWindowPortletPerform mwpp = new MapWindowPortletPerform( rundata.getRequest(), port,
316 rundata.getServletContext() );
317 mwpp.recenter();
318 mwpp.setLayers();
319 mwpp.setCurrentFILayer();
320 } catch ( Exception e ) {
321 e.printStackTrace();
322 }
323 }
324
325 /**
326 * sets layers of the view context as visible or invisble depending on the incoming request
327 *
328 * @param rundata
329 * @param portlet
330 *
331 * @throws Exception
332 */
333 public void doSetlayers( RunData rundata, Portlet portlet )
334 throws Exception {
335 try {
336 Portlet port = getMapWindowPortlet( rundata, portlet );
337 MapWindowPortletPerform mwpp = new MapWindowPortletPerform( rundata.getRequest(), port,
338 rundata.getServletContext() );
339 mwpp.setLayers();
340 mwpp.setBoundingBoxFromBBOXParam();
341 mwpp.setCurrentFILayer();
342 } catch ( Exception e ) {
343 e.printStackTrace();
344 }
345 }
346
347 /**
348 * moves the layer passed through by the HTTP request up for one position
349 *
350 * @param rundata
351 * @param portlet
352 * @throws Exception
353 */
354 public void doMoveup( RunData rundata, Portlet portlet )
355 throws Exception {
356 try {
357 Portlet port = getMapWindowPortlet( rundata, portlet );
358 MapWindowPortletPerform mwpp = new MapWindowPortletPerform( rundata.getRequest(), port,
359 rundata.getServletContext() );
360 mwpp.setLayers();
361 mwpp.moveUp();
362 mwpp.setBoundingBoxFromBBOXParam();
363 mwpp.setCurrentFILayer();
364 } catch ( Exception e ) {
365 e.printStackTrace();
366 }
367 }
368
369 /**
370 * moves the layer passed through by the HTTP request down for one position
371 *
372 * @param rundata
373 * @param portlet
374 * @throws Exception
375 */
376 public void doMovedown( RunData rundata, Portlet portlet )
377 throws Exception {
378 try {
379 Portlet port = getMapWindowPortlet( rundata, portlet );
380 MapWindowPortletPerform mwpp = new MapWindowPortletPerform( rundata.getRequest(), port,
381 rundata.getServletContext() );
382 mwpp.setLayers();
383 mwpp.moveDown();
384 mwpp.setBoundingBoxFromBBOXParam();
385 mwpp.setCurrentFILayer();
386 } catch ( Exception e ) {
387 e.printStackTrace();
388 }
389 }
390
391 /**
392 * move the map view (just bounding box) to the next entry in the history
393 *
394 * @param rundata
395 * @param portlet
396 * @throws Exception
397 */
398 public void doHistoryforward( RunData rundata, Portlet portlet )
399 throws Exception {
400 try {
401 Portlet port = getMapWindowPortlet( rundata, portlet );
402 MapWindowPortletPerform mwpp = new MapWindowPortletPerform( rundata.getRequest(), port,
403 rundata.getServletContext() );
404 mwpp.setLayers();
405 mwpp.setCurrentFILayer();
406 mwpp.doHistoryforward();
407 } catch ( Exception e ) {
408 e.printStackTrace();
409 }
410 }
411
412 /**
413 * move the map view (just bounding box) to the previous entry in the history
414 *
415 * @param rundata
416 * @param portlet
417 * @throws Exception
418 */
419 public void doHistorybackward( RunData rundata, Portlet portlet )
420 throws Exception {
421 try {
422 Portlet port = getMapWindowPortlet( rundata, portlet );
423 MapWindowPortletPerform mwpp = new MapWindowPortletPerform( rundata.getRequest(), port,
424 rundata.getServletContext() );
425 mwpp.setLayers();
426 mwpp.setCurrentFILayer();
427 mwpp.doHistorybackward();
428 } catch ( Exception e ) {
429 e.printStackTrace();
430 }
431 }
432
433 /**
434 *
435 * @param rundata
436 * @param portlet
437 * @throws Exception
438 */
439 public void doAddows( RunData rundata, Portlet portlet )
440 throws Exception {
441 try {
442 Portlet port = getMapWindowPortlet( rundata, portlet );
443 MapWindowPortletPerform mwpp = new MapWindowPortletPerform( rundata.getRequest(), port,
444 rundata.getServletContext() );
445 mwpp.doAddows();
446 } catch ( Exception e ) {
447 e.printStackTrace();
448 }
449 }
450
451 /**
452 *
453 * @param rundata
454 * @param portlet
455 * @throws Exception
456 */
457 public void doRemoveows( RunData rundata, Portlet portlet )
458 throws Exception {
459 try {
460 Portlet port = getMapWindowPortlet( rundata, portlet );
461 MapWindowPortletPerform mwpp = new MapWindowPortletPerform( rundata.getRequest(), port,
462 rundata.getServletContext() );
463 mwpp.doRemoveows();
464 } catch ( Exception e ) {
465 e.printStackTrace();
466 }
467 }
468
469 /**
470 * selects the current context of a MapWindowPortlet
471 *
472 * @param data
473 * @param portlet
474 * @throws PortalException
475 */
476 public void doSelectwmc( RunData data, Portlet portlet )
477 throws PortalException {
478 try {
479 Portlet port = portlet.getPortletConfig().getPortletSet().getPortletByName( "iGeoPortal:SelectWMCPortlet" );
480 SelectWMCPortletPerform swp = new SelectWMCPortletPerform( data.getRequest(), port,
481 data.getServletContext() );
482 swp.doSelectwmc();
483 } catch ( Exception e ) {
484 e.printStackTrace();
485 LOG.logError( e.getMessage(), e );
486 throw new PortalException( e.getMessage() );
487 }
488 }
489
490 /**
491 * selects the current context of a MapWindowPortlet
492 *
493 * @param data
494 * @param portlet
495 * @throws PortalException
496 */
497 public void doLoadwmc( RunData data, Portlet portlet )
498 throws PortalException {
499 try {
500 Portlet port = portlet.getPortletConfig().getPortletSet().getPortletByName( "iGeoPortal:SelectWMCPortlet" );
501 SelectWMCPortletPerform swp = new SelectWMCPortletPerform( data.getRequest(), port,
502 data.getServletContext() );
503 User user = data.getUser();
504 org.deegree.security.drm.model.User du = null;
505 if ( !"anon".equals( user.getUserName() ) ) {
506 du = new org.deegree.security.drm.model.User( 1, user.getUserName(), user.getPassword(),
507 user.getFirstName(), user.getLastName(), user.getEmail(),
508 null );
509 }
510 swp.doLoadwmc( du );
511 } catch ( Exception e ) {
512 e.printStackTrace();
513 LOG.logError( e.getMessage(), e );
514 throw new PortalException( e.getMessage() );
515 }
516 }
517
518 /**
519 * Changes the scale.
520 *
521 * @param data
522 * @param portlet
523 * @throws PortalException
524 */
525 public void doChangescale( RunData data, Portlet portlet )
526 throws PortalException {
527 try {
528 Portlet port = portlet.getPortletConfig().getPortletSet().getPortletByName(
529 "iGeoPortal:ScaleChooserPortlet" );
530 ScaleChooserPortletPerform swp = new ScaleChooserPortletPerform( data.getRequest(), port,
531 data.getServletContext() );
532 swp.doChangeScale();
533 } catch ( Exception e ) {
534 LOG.logError( e.getMessage(), e );
535 throw new PortalException( e.getMessage() );
536 }
537 }
538 }