001 //$$Header: $$
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.enterprise.servlet;
037
038 import java.io.IOException;
039 import java.io.StringReader;
040 import java.net.URLDecoder;
041 import java.util.UUID;
042
043 import javax.servlet.ServletException;
044 import javax.servlet.http.HttpServlet;
045 import javax.servlet.http.HttpServletRequest;
046 import javax.servlet.http.HttpServletResponse;
047 import javax.servlet.http.HttpSession;
048 import javax.xml.parsers.DocumentBuilder;
049 import javax.xml.parsers.DocumentBuilderFactory;
050 import javax.xml.parsers.ParserConfigurationException;
051
052 import org.deegree.framework.log.ILogger;
053 import org.deegree.framework.log.LoggerFactory;
054 import org.deegree.framework.util.StringTools;
055 import org.deegree.framework.xml.XMLParsingException;
056 import org.deegree.framework.xml.XMLTools;
057 import org.deegree.portal.owswatch.CommonNamepspaces;
058 import org.deegree.portal.owswatch.ConfigurationsException;
059 import org.deegree.portal.owswatch.Constants;
060 import org.deegree.portal.owswatch.JSPagesReference;
061 import org.deegree.portal.owswatch.Messages;
062 import org.deegree.portal.owswatch.ServiceConfiguration;
063 import org.deegree.portal.owswatch.ServiceLog;
064 import org.deegree.portal.owswatch.ServiceWatcher;
065 import org.deegree.portal.owswatch.ServiceWatcherFactory;
066 import org.deegree.portal.owswatch.ServicesConfigurationFactory;
067 import org.deegree.portal.owswatch.ServicesConfigurationWriter;
068 import org.deegree.portal.owswatch.configs.OwsWatchConfig;
069 import org.w3c.dom.Document;
070 import org.w3c.dom.Element;
071 import org.xml.sax.InputSource;
072
073 /**
074 * The owsWatch Servlet to handle the request of the owswatch portal
075 *
076 * @author <a href="mailto:ncho@lat-lon.de">ncho</a>
077 * @author last edited by: $Author: elmasry $
078 *
079 * @version $Revision: 1.3 $, $Date: 2008-03-20 16:33:27 $
080 */
081 public class OWSWatch extends HttpServlet {
082
083 /**
084 *
085 */
086 private static final long serialVersionUID = -3136555273953816219L;
087
088 private final String SESSIONID_KEY = Constants.SESSIONID_KEY;
089
090 private static final ILogger LOG = LoggerFactory.getLogger( OWSWatch.class );
091
092 private ServiceWatcher watcher = null;
093
094 private ServicesConfigurationWriter servicesWriter = null;
095
096 private String webinfPath = null;
097
098 private String confFilePath = null;
099
100 private ServiceWatcherFactory factory = null;
101
102 private OwsWatchConfig conf = null;
103
104 /*
105 * (non-Javadoc)
106 *
107 * @see javax.servlet.GenericServlet#init()
108 */
109 @Override
110 public void init()
111 throws ServletException {
112
113 confFilePath = this.getServletContext().getRealPath( this.getInitParameter( "owsWatchConfiguration" ) );
114 webinfPath = this.getServletContext().getRealPath( "WEB-INF/conf/owswatch" );
115 if ( !webinfPath.endsWith( "/" ) ) {
116 webinfPath = webinfPath.concat( "/" );
117 }
118
119 try {
120 factory = ServiceWatcherFactory.getInstance( confFilePath, webinfPath );
121 watcher = factory.getServiceWatcherInstance();
122 conf = factory.getConf();
123
124 } catch ( ConfigurationsException e ) {
125 LOG.logError( e.getLocalizedMessage() );
126 }
127 // An error has occured parsing the configurations file
128 if ( factory == null || conf == null ) {
129 LOG.logError( "There seems to be a problem with your configurations file. owsWatch will not start" );
130 return;
131 }
132
133 watcher.compileDownTimeReport( webinfPath, conf );
134 watcher.start();
135 }
136
137 /*
138 * (non-Javadoc)
139 *
140 * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest,
141 * javax.servlet.http.HttpServletResponse)
142 */
143 @Override
144 public void doPost( HttpServletRequest request, HttpServletResponse response ) {
145 performAction( request, response );
146 }
147
148 /*
149 * (non-Javadoc)
150 *
151 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
152 * javax.servlet.http.HttpServletResponse)
153 */
154 @Override
155 public void doGet( HttpServletRequest request, HttpServletResponse response ) {
156 performAction( request, response );
157 }
158
159 /**
160 * determines which action is to be executed and calls the corresponding method of that action: LOGIN - send a
161 * REQUEST - read a PROTOCOL
162 *
163 * @param request
164 * @param response
165 * @return boolean if everything went fine. false otherwise. This class will handle the Errors
166 */
167 private boolean performAction( HttpServletRequest request, HttpServletResponse response ) {
168
169 if ( request == null ) {
170 gotoErrorPage( request, response, Messages.getMessage( "ERROR_NULL_OBJ", "HttpServletRequest" ), null, null );
171 return false;
172 }
173
174 if ( response == null ) {
175 gotoErrorPage( request, response, Messages.getMessage( "ERROR_NULL_OBJ", "HttpServletResponse" ), null,
176 null );
177 return false;
178 }
179
180 String action = request.getParameter( "action" );
181
182 LOG.logDebug( "The action is: ", action );
183
184 if ( watcher == null || ( !isLoggedIn( request ) && !"LOGIN".equals( action ) ) ) {
185 return handleLogout( request, response );
186 }
187
188 if ( action != null ) {
189 if ( action.equals( "LOGIN" ) ) {
190 handleLogin( request, response );
191 } else if ( action.equals( "LOGOUT" ) ) {
192 handleLogout( request, response );
193 } else if ( action.equals( "stopServiceMonitor" ) ) {
194 stopServiceMonitor( request, response );
195 } else if ( action.equals( "startServiceMonitor" ) ) {
196 startServiceMonitor( request, response );
197 } else if ( action.equals( "logout" ) ) {
198 handleLogout( request, response );
199 } else if ( action.equals( "gotoLogin" ) ) {
200 gotoLoginPage( request, response );
201 } else if ( action.equals( "serviceDelete" ) ) {
202 handleServiceDelete( request, response );
203 } else if ( action.equals( "serviceEdit" ) ) {
204 handleServiceEdit( request, response );
205 } else if ( action.equals( "serviceTest" ) ) {
206 handleServiceTest( request, response );
207 } else if ( action.equals( "refreshPage" ) ) {
208 handleRefreshPage( request, response );
209 } else if ( action.equals( "cancelServiceManager" ) ) {
210 handleRefreshPage( request, response );
211 } else if ( action.equals( "addService" ) ) {
212 handleAddService( request, response );
213 } else {
214 gotoErrorPage( request, response, StringTools.concat( 100,
215 Messages.getMessage( "ERROR_PARAM_UNEXPECTED",
216 "action", action ) ), null,
217 null );
218 return false;
219 }
220 } else {
221 // action is null. The request has to be an rpc
222 String requestName = request.getParameter( "rpc" );
223 if ( requestName != null ) {
224 return handleRPCRequest( request, response, requestName );
225 }
226 return true;
227 }
228 return false;
229 }
230
231 /**
232 * Takes in a POST request and directs it to the corresponding function
233 *
234 * @param requestValue
235 * String sent from the POST form
236 */
237 private boolean handleRPCRequest( HttpServletRequest request, HttpServletResponse response, String requestValue ) {
238
239 Document doc = null;
240 try {
241 doc = parseDocument( requestValue );
242 } catch ( XMLParsingException e ) {
243 gotoErrorPage( request, response, e.getLocalizedMessage(), "Go Back to the main page",
244 JSPagesReference.getString( "OWSWatch.owswatchMonitorList" ) );
245 return false;
246 }
247 if ( doc == null ) {
248 gotoErrorPage( request, response, "The RPC request is null", Messages.getString( "MESSAGE_GOTO_MAIN" ),
249 JSPagesReference.getString( "OWSWatch.owswatchMonitorList" ) );
250 return false;
251 }
252 Element root = doc.getDocumentElement();
253 String rpcType = root.getAttribute( "type" );
254 if ( "SaveService".equals( rpcType ) ) {
255 if ( handleSaveService( request, response, root ) ) {
256 return handleRefreshPage( request, response );
257 } else {
258 return false;
259 }
260 } else if ( "SaveConfigs".equals( rpcType ) ) {
261 // TODO will be used later to edit the serviceconfig.xml
262 return true;
263 } else {
264 return true;
265 }
266 }
267
268 /**
269 * Takes in a addService Request and directs to the corresponding page
270 *
271 * @return boolean if no errors were thrown, false otherwise
272 */
273 private boolean handleAddService( HttpServletRequest request, HttpServletResponse response ) {
274
275 storeSelectedServiceInSession( request );
276 HttpSession session = request.getSession( true );
277 // Indicates this is a new service
278 session.setAttribute( "EditService", Boolean.valueOf( false ) );
279 String[] ns = { factory.getServicesParser().getPrefix(), CommonNamepspaces.DEEGREEWSNS.toASCIIString() };
280 session.setAttribute( "PREFIX_NS", ns );
281 session.setAttribute( "ServiceConfigs", watcher.getServices() );
282 String nextpage = JSPagesReference.getString( "OWSWatch.editTest" );
283 try {
284 response.sendRedirect( nextpage );
285 } catch ( Exception e ) {
286 gotoErrorPage( request, response, Messages.getMessage( "ERROR_PAGE_NOT_FOUND", nextpage ),
287 Messages.getString( "MESSAGE_GOTO_MAIN" ),
288 JSPagesReference.getString( "OWSWatch.owswatchMonitorList" ) );
289 return false;
290 }
291 return true;
292 }
293
294 /**
295 * handles SaveService requests whether its a new service or edited service
296 *
297 * @param rpcRequest
298 * @return boolean if no errors happened
299 */
300 private boolean handleSaveService( HttpServletRequest request, HttpServletResponse response, Element rpcRequest ) {
301
302 ServicesConfigurationFactory parser = factory.getServicesParser();
303 ServiceConfiguration service = null;
304 try {
305 String xPath = StringTools.concat( 100, "./ServiceXML/", factory.getServicesParser().getPrefix(),
306 ":SERVICE" );
307 Element serviceElem = XMLTools.getElement( rpcRequest, xPath, ServicesConfigurationFactory.getCnxt() );
308 service = parser.parseService( serviceElem, factory.getServicesParser().getPrefix() );
309 } catch ( Exception e ) {
310 String errorMsg = Messages.arrayToString( new String[] { Messages.getString( "ERROR_SAVE_SERVICE" ),
311 e.getLocalizedMessage() }, "\n" );
312 gotoErrorPage( request, response, errorMsg, Messages.getString( "MESSAGE_GOTO_MAIN" ),
313 JSPagesReference.getString( "OWSWatch.owswatchMonitorList" ) );
314 return false;
315 }
316
317 ServiceLog serviceLog = null;
318 try {
319 if ( watcher.getServices().containsKey( service.getServiceid() ) ) {
320 serviceLog = watcher.getServiceLogs().get( service.getServiceid() );
321 } else {
322
323 serviceLog = new ServiceLog( factory.getProtDirPath(), service.getServiceid(),
324 service.getServiceName(), service.getServiceType(),
325 factory.getServletAddr(), factory.getSender() );
326 }
327 watcher.addService( service, serviceLog );
328 servicesWriter.writeDocument( watcher.getServices() );
329 } catch ( Exception e ) {
330 LOG.logError( e.getMessage(), e );
331 gotoErrorPage( request, response, e.getMessage(), Messages.getMessage( "MESSAGE_GOTO_MAIN" ),
332 JSPagesReference.getString( "OWSWatch.login" ) );
333 return false;
334 }
335
336 return true;
337 }
338
339 /**
340 * handles the administrator login
341 *
342 * @return true if no errors happened, false otherwise
343 */
344 private boolean handleLogin( HttpServletRequest request, HttpServletResponse response ) {
345
346 // If the configuration files could not be parsed correctly, the program should not proceed
347 if ( factory == null || conf == null ) {
348 gotoErrorPage( request, response, Messages.getMessage( "INCORRECT_LOGIN" ), null, null );
349 }
350
351 String user = request.getParameter( "username" );
352 String pwd = request.getParameter( "password" );
353
354 try {
355 if ( conf.isAuthenticatedUser( user, pwd ) ) {
356 servicesWriter = new ServicesConfigurationWriter( webinfPath
357 + conf.getGeneral().getServiceInstancesPath(),
358 factory.getServicesParser().getPrefix() );
359 HttpSession session = request.getSession( true );
360 session.setAttribute( "Services", this.watcher.getServices() );
361 session.setAttribute( "Logs", watcher.getServiceLogs() );
362 session.setAttribute( "GLOBAL_REFRESH", conf.getGeneral().getGlobalRefreshRate() );
363 session.setAttribute( "ThreadSuspended", false );
364 session.setAttribute( "ServiceDescription", conf.getServiceConfig() );
365 // isLoggedin
366 String sessionId = UUID.randomUUID().toString();
367 session.setAttribute( SESSIONID_KEY, sessionId );
368 session.setAttribute( "isLoggedin", true );
369 String nextpage = JSPagesReference.getString( "OWSWatch.owswatchMonitorList" );
370 response.sendRedirect( nextpage );
371 } else {
372 gotoErrorPage( request, response, Messages.getMessage( "INCORRECT_LOGIN" ),
373 Messages.getMessage( "MESSAGE_GOTO_MAIN" ),
374 JSPagesReference.getString( "OWSWatch.login" ) );
375 }
376 } catch ( Exception e ) {
377 String errorMsg = StringTools.concat( 100, Messages.getMessage( "ERROR_LOGIN" ), "</br>",
378 e.getLocalizedMessage() );
379 gotoErrorPage( request, response, errorMsg, Messages.getMessage( "MESSAGE_GOTO_MAIN" ),
380 JSPagesReference.getString( "OWSWatch.login" ) );
381 return false;
382 }
383 return true;
384 }
385
386 /**
387 * Stops Monitoring a certain service. i.e. stop refreshing the page after time intervals
388 *
389 * @param request
390 * @param response
391 */
392 private boolean stopServiceMonitor( HttpServletRequest request, HttpServletResponse response ) {
393
394 int index = Integer.parseInt( request.getParameter( "reqIndex" ) );
395 watcher.stopServiceConfiguration( index );
396 HttpSession session = request.getSession( true );
397 session.setAttribute( "Services", this.watcher.getServices() );
398 session.setAttribute( "Logs", watcher.getServiceLogs() );
399 String nextpage = JSPagesReference.getString( "OWSWatch.owswatchMonitorList" );
400 try {
401 response.sendRedirect( nextpage );
402 } catch ( Exception e ) {
403 LOG.logError( "The ServiceConfiguration could not be stopped", e );
404 return false;
405 }
406 return true;
407 }
408
409 /**
410 * Starts monitoring a certain service. i.e. starts sending GetCapabilities requests after predefined intervals
411 *
412 */
413 private boolean startServiceMonitor( HttpServletRequest request, HttpServletResponse response ) {
414
415 int index = Integer.parseInt( request.getParameter( "reqIndex" ) );
416 watcher.startServiceConfiguration( index );
417 HttpSession session = request.getSession( true );
418 session.setAttribute( "Services", this.watcher.getServices() );
419 session.setAttribute( "Logs", watcher.getServiceLogs() );
420 String nextpage = JSPagesReference.getString( "OWSWatch.owswatchMonitorList" );
421
422 try {
423 response.sendRedirect( nextpage );
424 } catch ( Exception e ) {
425 LOG.logError( "The ServiceConfiguration could not be started", e );
426 return false;
427 }
428 return true;
429 }
430
431 /**
432 * Logs the user out
433 *
434 * @return true if logout successfully, false otherwise
435 */
436 private boolean handleLogout( HttpServletRequest request, HttpServletResponse response ) {
437
438 HttpSession session = request.getSession( true );
439 session.setAttribute( "isLoggedin", false );
440 session.removeAttribute( SESSIONID_KEY );
441
442 String nextPage = JSPagesReference.getString( "OWSWatch.login" );
443 try {
444 response.sendRedirect( nextPage );
445 } catch ( Exception e ) {
446 gotoErrorPage( request, response, Messages.getMessage( "ERROR_PAGE_NOT_FOUND", nextPage ), null, null );
447 return false;
448 }
449
450 return true;
451 }
452
453 /**
454 * goto the first page
455 *
456 * @return true if no error happened, false otherwise
457 */
458 private boolean gotoLoginPage( HttpServletRequest request, HttpServletResponse response ) {
459
460 String nextPage = JSPagesReference.getString( "OWSWatch.owswatchMonitorList" );
461 try {
462 response.sendRedirect( nextPage );
463 } catch ( Exception e ) {
464 gotoErrorPage( request, response, Messages.getMessage( "ERROR_PAGE_NOT_FOUND", nextPage ), null, null );
465 return false;
466 }
467
468 return true;
469 }
470
471 /**
472 * deletes a service
473 *
474 * @return true if no errors happened, false otherwise
475 */
476 private boolean handleServiceDelete( HttpServletRequest request, HttpServletResponse response ) {
477
478 storeSelectedServiceInSession( request );
479 int serviceId = Integer.valueOf( request.getParameter( "serviceId" ) );
480 try {
481 watcher.removeService( serviceId );
482 servicesWriter.writeDocument( watcher.getServices() );
483 } catch ( Exception e ) {
484 gotoErrorPage( request, response, e.getMessage(), Messages.getMessage( "MESSAGE_GOTO_MAIN" ),
485 JSPagesReference.getString( "OWSWatch.owswatchMonitorList" ) );
486 }
487 HttpSession session = request.getSession( true );
488 session.setAttribute( "Services", watcher.getServices() );
489 session.setAttribute( "Logs", watcher.getServiceLogs() );
490 String nextpage = JSPagesReference.getString( "OWSWatch.owswatchMonitorList" );
491
492 try {
493 response.sendRedirect( nextpage );
494 } catch ( Exception e ) {
495 gotoErrorPage( request, response, Messages.getMessage( "ERROR_PAGE_NOT_FOUND", nextpage ),
496 Messages.getMessage( "MESSAGE_GOTO_MAIN" ),
497 JSPagesReference.getString( "OWSWatch.owswatchMonitorList" ) );
498 return false;
499 }
500 return true;
501 }
502
503 /**
504 * Redirects the reuqest to the ServiceManager Dialogue
505 *
506 * @return ture if no errors happened, false otherwise
507 */
508 private boolean handleServiceEdit( HttpServletRequest request, HttpServletResponse response ) {
509
510 storeSelectedServiceInSession( request );
511 HttpSession session = request.getSession( true );
512 // Indicates this is an existing service
513 session.setAttribute( "EditService", Boolean.valueOf( true ) );
514 ServiceConfiguration service = null;
515 try {
516 int serviceId = Integer.parseInt( request.getParameter( "serviceId" ) );
517 service = watcher.getService( serviceId );
518 } catch ( Exception e ) {
519 gotoErrorPage( request, response, Messages.getMessage( "ERROR_MISSING_KEY", "ServiceId" ),
520 Messages.getMessage( "MESSAGE_GOTO_MAIN" ),
521 JSPagesReference.getString( "OWSWatch.owswatchMonitorList" ) );
522 return false;
523 }
524
525 String[] ns = { factory.getServicesParser().getPrefix(), CommonNamepspaces.DEEGREEWSNS.toASCIIString() };
526 session.setAttribute( "PREFIX_NS", ns );
527 // The service to edit in the jsp page
528 session.setAttribute( "ServiceToEdit", service );
529 String nextpage = JSPagesReference.getString( "OWSWatch.editTest" );
530
531 try {
532 response.sendRedirect( nextpage );
533 } catch ( Exception e ) {
534 gotoErrorPage( request, response, Messages.getMessage( "ERROR_PAGE_NOT_FOUND", nextpage ),
535 Messages.getMessage( "MESSAGE_GOTO_MAIN" ),
536 JSPagesReference.getString( "OWSWatch.owswatchMonitorList" ) );
537 return false;
538 }
539 return true;
540 }
541
542 /**
543 * Executes the given test once
544 *
545 * @return true if no errors happened, false otherwise
546 */
547 private boolean handleServiceTest( HttpServletRequest request, HttpServletResponse response ) {
548
549 storeSelectedServiceInSession( request );
550 String Id = request.getParameter( "serviceId" );
551 watcher.execute( Integer.valueOf( Id ) );
552 HttpSession session = request.getSession( true );
553 session.setAttribute( "Services", watcher.getServices() );
554 session.setAttribute( "Logs", watcher.getServiceLogs() );
555 String nextpage = JSPagesReference.getString( "OWSWatch.owswatchMonitorList" );
556
557 try {
558 response.sendRedirect( nextpage );
559 } catch ( Exception e ) {
560 gotoErrorPage( request, response, Messages.getMessage( "ERROR_PAGE_NOT_FOUND", nextpage ),
561 Messages.getMessage( "MESSAGE_GOTO_MAIN" ),
562 JSPagesReference.getString( "OWSWatch.owswatchMonitorList" ) );
563 return false;
564 }
565 return true;
566 }
567
568 /**
569 * Gets the selectedservice(case exists) Id and stores in the session
570 *
571 */
572 private void storeSelectedServiceInSession( HttpServletRequest request ) {
573 HttpSession session = request.getSession( true );
574 String tmp = (String) request.getParameter( "selectedService" );
575 if ( tmp != null & session != null ) {
576 try {
577 session.setAttribute( "selectedService", new Integer( tmp ) );
578 } catch ( Exception e ) {
579 session.setAttribute( "selectedService", new Integer( -1 ) );
580 }
581 }
582 }
583
584 private void gotoErrorPage( HttpServletRequest request, HttpServletResponse response, String error, String urlText,
585 String url ) {
586
587 LOG.logError( "The error occured is: " + error );
588 HttpSession session = request.getSession( true );
589
590 session.setAttribute( "message", StringTools.replace( error, "\n", "<br/>", true ) );
591 if ( error == null ) {
592 error = "An unknown error has occured";
593 }
594 if ( urlText == null ) {
595 urlText = "";
596 }
597 session.setAttribute( "URLText", urlText );
598 if ( url == null ) {
599 url = "";
600 }
601 session.setAttribute( "URLAdd", url );
602 try {
603 String nextpage = JSPagesReference.getString( "OWSWatch.error" );
604 response.sendRedirect( nextpage );
605 } catch ( Exception e ) {
606 LOG.logError( "The page could not be redirected to the error page" );
607 }
608 }
609
610 /**
611 * goto the main Monitor list
612 *
613 * @return true if no errors happened, false otherwise
614 */
615 private boolean handleRefreshPage( HttpServletRequest request, HttpServletResponse response ) {
616
617 storeSelectedServiceInSession( request );
618 HttpSession session = request.getSession( true );
619 String nextpage = null;
620 if ( watcher != null ) {
621 session.setAttribute( "Services", watcher.getServices() );
622 session.setAttribute( "Logs", watcher.getServiceLogs() );
623 nextpage = JSPagesReference.getString( "OWSWatch.owswatchMonitorList" );
624 }
625
626 try {
627 response.sendRedirect( nextpage );
628 } catch ( Exception e ) {
629 gotoErrorPage( request, response, Messages.getMessage( "ERROR_PAGE_NOT_FOUND", nextpage ), null, null );
630 return false;
631 }
632 return true;
633 }
634
635 /**
636 * Creates a new instance of DocumentBuilder
637 *
638 * @return DocumentBuilder
639 * @throws IOException
640 */
641 private DocumentBuilder instantiateParser()
642 throws IOException {
643
644 DocumentBuilder parser = null;
645
646 try {
647 DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
648 fac.setNamespaceAware( true );
649 fac.setValidating( false );
650 fac.setIgnoringElementContentWhitespace( true );
651 parser = fac.newDocumentBuilder();
652 return parser;
653 } catch ( ParserConfigurationException e ) {
654 throw new IOException( "Unable to initialize DocumentBuilder: " + e.getMessage() );
655 }
656 }
657
658 /**
659 * Converts a given xml string to a document
660 *
661 * @param xmlText
662 * @return Document
663 */
664 private Document parseDocument( String xmlText )
665 throws XMLParsingException {
666
667 Document doc = null;
668 try {
669 String dec = URLDecoder.decode( xmlText, "UTF-8" );
670 doc = instantiateParser().parse( new InputSource( new StringReader( dec ) ) );
671 } catch ( Exception e ) {
672 throw new XMLParsingException( "Error parsing xml document\n" + e.getLocalizedMessage() );
673 }
674 return doc;
675 }
676
677 /**
678 * Verifies that this user is loggedin through comparing the session ID from the request paarameter with that saved
679 * in the session
680 *
681 * @param request
682 * @return true if the user is loggedin, false otherwise
683 */
684 protected boolean isLoggedIn( HttpServletRequest request ) {
685 HttpSession session = request.getSession( true );
686 String requestSession = request.getParameter( SESSIONID_KEY );
687 String sessionId = (String) session.getAttribute( SESSIONID_KEY );
688 if ( requestSession == null || sessionId == null || !requestSession.equals( sessionId ) ) {
689 return false;
690 }
691 return true;
692 }
693 }