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.DossierVO;
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   * KANN-ZIEL [K1] - Ansicht PDF (Pflichtenheft b32.03_PF_eDossier.pdf, Seite 17)<br>
19   * KANN-ZIEL [K2] - Beanstandungen Fristen (Pflichtenheft b32.03_PF_eDossier.pdf, Seite 17)<br>
20   * KANN-ZIEL [K3] - Beanstandungen Status (Pflichtenheft b32.03_PF_eDossier.pdf, Seite 17)<br>
21   * Die Klasse InterceptionAction bereitet die Beanstandungs-Informationen auf
22   * <p>
23   * Copyright (c) 2004, Eidgenössisches Institut für Geistiges Eigentum
24   * @author    Anita Rueegsegger, Marc Bouquet
25   * @version   $Id: InterceptionAction.java,v 1.13 2004/11/02 02:01:47 bouquet Exp $
26   */
27  public class InterceptionAction extends Action
28  {
29    private static final Logger LOG = Logger.getLogger( InterceptionAction.class );
30  
31    /**
32     * Die Methode execute wird aufgerufen, wenn auf der dossier.jsp das Icon Beanstandungen angewählt wird.
33     * In der Methode werden die Informationen einer Beanstandung geholt und aufbereitet.
34     * @param actionMapping ActionMapping
35     * @param actionForm ActionForm
36     * @param httpServletRequest HttpServletRequest
37     * @param httpServletResponse HttpServletResponse
38     * @throws Exception Unerwarteter Fehler
39     * @return ActionForward
40     */
41    public ActionForward execute( ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse )
42    {
43      ActionErrors errors = new ActionErrors();
44      HttpSession session = httpServletRequest.getSession( false );
45      EDossierFacade eFacade = new EDossierControl();
46  
47      try
48      {
49        // Prüfen ob, eine gültige Session vorhanden ist.
50        if( session == null || ( ( Boolean )session.getAttribute( "token" ) ).booleanValue() == false )
51        {
52          return( actionMapping.findForward( "index" ) );
53        }
54  
55        String idDossier = httpServletRequest.getParameter( "idDossier" );
56        int dossierId = Integer.parseInt( idDossier );
57  
58        List listInterceptionVO = eFacade.getInterceptions( dossierId );
59        this.setSessionAttributes( session, dossierId );
60        session.setAttribute( "alInterceptionVO", listInterceptionVO );
61  
62        AccountVO accountVO = ( AccountVO )session.getAttribute( "accountVO" );
63        reloadSessionObjects( session, accountVO.getAccountId() );
64      }
65      catch( Exception ex )
66      {
67        LOG.error( "Error: " + ex.getMessage() );
68        errors.add( "dossierVO", new ActionError( "errors.dossier", ex.getMessage() ) );
69        saveErrors( httpServletRequest, errors );
70        return( new ActionForward( actionMapping.getInput() ) );
71      }
72      return( actionMapping.findForward( "forward" ) );
73    }
74  
75    /**
76     * Die Methode aktualisiert die Session-Objekte aufgrund eines geänderten Status in der Beanstandung
77     * @param session HttpSession aktuelle Session
78     * @param accountId int Account-Id zum selektieren der Dossiers
79     */
80    private void reloadSessionObjects( HttpSession session, int accountId )
81    {
82      RefreshState refrehState = new RefreshState();
83      // aktualisieren der Dossiers
84      DossierOverviewVO dossierOverVO = refrehState.updateDossiers( accountId );
85  
86      if( dossierOverVO != null )
87      {
88        session.setAttribute( "dossierOverviewVO", dossierOverVO );
89      }
90    }
91  
92    /**
93     * Setzt Gesuch-Nummer und Referenz des ausgewählten Dossiers auf der Session
94     * @param session HttpSession aktuelle Session
95     * @param selectedDossierId int Primarykey des selektierten Dossiers
96     */
97    private void setSessionAttributes( HttpSession session, int selectedDossierId )
98    {
99      DossierOverviewVO dossierOverviewVO = ( DossierOverviewVO )session.getAttribute( "dossierOverviewVO" );
100     List[] list = dossierOverviewVO.getListDossier();
101     List dossierList;
102     DossierVO dossierVO;
103 
104     for( int i = 0; i < list.length; i++ )
105     {
106       dossierList = list[ i ];
107 
108       for( int j = 0; j < dossierList.size(); j++ )
109       {
110         dossierVO = ( DossierVO )dossierList.get( j );
111         int dossierId = dossierVO.getDossierId();
112 
113         if( selectedDossierId == dossierId )
114         {
115           session.setAttribute( "guardNr", dossierVO.getGuardNr() );
116           session.setAttribute( "reference", dossierVO.getReference() );
117           break;
118         }
119       }
120     }
121   }
122 }
123