1   package ch.ige.edossier.web.struts;
2   
3   import java.util.List;
4   import javax.servlet.http.HttpServletRequest;
5   import javax.servlet.http.HttpServletResponse;
6   import javax.servlet.http.HttpSession;
7   import org.apache.log4j.Logger;
8   import org.apache.struts.action.*;
9   import ch.ige.edossier.util.RefreshState;
10  import ch.ige.edossier.web.server.EDossierControl;
11  import ch.ige.edossier.web.vo.AccountVO;
12  import ch.ige.edossier.web.vo.DossierOverviewVO;
13  import ch.ige.edossier.web.vo.InterceptionVO;
14  
15  /**
16   * B32.03 - eDossier-Interceptions - Diplomarbeit an der Software-Schule Schweiz<br>
17   * MUSS-ZIEL [M5] - Beanstandungen bearbeiten (Pflichtenheft b32.03_PF_eDossier.pdf, Seite 16)<br>
18   * Die Klasse InterceptionDetailAction holt die Informationen einer Beanstandung
19   * <p>
20   * Copyright (c) 2004, Eidgenössisches Institut für Geistiges Eigentum
21   * @author    Anita Rueegsegger, Marc Bouquet
22   * @version   $Id: InterceptionDetailAction.java,v 1.9 2004/11/01 13:52:20 ruegsegger Exp $
23   */
24  public class InterceptionDetailAction extends Action
25  {
26    // Attribute für Log4j-Logging
27    private static final Logger LOG = Logger.getLogger( InterceptionDetailAction.class );
28  
29    /**
30     * Die Methode execute wird aufgerufen, wenn auf der interception.jsp ein Link auf die Detail-Ansicht ausgewählt wird.
31     * der Link für die Detailansicht Beanstandunge angewählt wird.
32     * In der Methode werden die Informationen einer Beanstandung aufbereitet
33     * @param actionMapping ActionMapping
34     * @param actionForm ActionForm
35     * @param httpServletRequest HttpServletRequest
36     * @param httpServletResponse HttpServletResponse
37     * @throws Exception
38     * @return ActionForward
39     */
40    public ActionForward execute( ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse )
41    {
42      ActionErrors errors = new ActionErrors();
43      HttpSession session = httpServletRequest.getSession( false );
44      EDossierFacade eFacade = new EDossierControl();
45  
46      try
47      {
48        // Prüfen ob, eine gültige Session vorhanden ist.
49        if( session == null || ( ( Boolean )session.getAttribute( "token" ) ).booleanValue() == false )
50        {
51          return( actionMapping.findForward( "index" ) );
52        }
53  
54        String idInterception = httpServletRequest.getParameter( "idInterception" );
55        int interceptionId = Integer.parseInt( idInterception );
56  
57        InterceptionVO interceptionVO = eFacade.getInterception( interceptionId );
58        session.setAttribute( "interceptionVO", interceptionVO );
59  
60        AccountVO accountVO = ( AccountVO )session.getAttribute( "accountVO" );
61        // Aktualisieren der Session-Objekte der Status in der Datenbank wird auf 2 = Gelesen gesetzt
62        reloadSessionObjects( session, Integer.parseInt( idInterception ), 2, accountVO.getAccountId(), interceptionVO.getDossierId() );
63      }
64      catch( Exception ex )
65      {
66        if( ex == null )
67        {
68          return( actionMapping.findForward( "index" ) );
69        }
70        else
71        {
72          LOG.error( "Error: " + ex.getMessage() );
73          errors.add( "dossierVO", new ActionError( "errors.dossier", ex.getMessage() ) );
74          saveErrors( httpServletRequest, errors );
75          return( new ActionForward( actionMapping.getInput() ) );
76        }
77      }
78      return( actionMapping.findForward( "forward" ) );
79    }
80  
81    /**
82     * Die Methode aktualisiert die Session-Objekte aufgrund eines geänderten Status in der Beanstandung
83     * @param session HttpSession aktuelle Session
84     * @param idInterception int Interception-Id zum aktualisieren des Status
85     * @param state int Status der auf der Datenbank eingetragen wird
86     * @param accountId int Account-Id zum selektieren der Dossiers
87     * @param dossierId int Dossier-Id zum selektieren der Interceptions
88     */
89    private void reloadSessionObjects( HttpSession session, int idInterception, int state, int accountId, int dossierId )
90    {
91      RefreshState refrehState = new RefreshState();
92  
93      if( refrehState.setState( idInterception, state ) )
94      {
95        // aktualisieren der Dossiers
96        DossierOverviewVO dossierOverVO = refrehState.updateDossiers( accountId );
97  
98        if( dossierOverVO != null )
99        {
100         session.setAttribute( "dossierOverviewVO", dossierOverVO );
101 
102         // aktualisieren der Interceptions
103         List listDossiers = refrehState.updateInterceptions( dossierId );
104         if( listDossiers != null && listDossiers.size() > 0 )
105         {
106           session.setAttribute( "alInterceptionVO", listDossiers );
107         }
108       }
109     }
110   }
111 }
112