1   package ch.ige.edossier.web.struts;
2   
3   import java.text.SimpleDateFormat;
4   import java.util.List;
5   import javax.servlet.http.HttpServletRequest;
6   import javax.servlet.http.HttpServletResponse;
7   import javax.servlet.http.HttpSession;
8   import org.apache.log4j.Logger;
9   import org.apache.struts.action.*;
10  import ch.ige.edossier.web.server.EDossierControl;
11  import ch.ige.edossier.web.vo.AnswerVO;
12  import ch.ige.edossier.web.vo.ImageVO;
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 [M6] - Ansicht Antworten (Pflichtenheft b32.03_PF_eDossier.pdf, Seite 17)<br>
18   * KANN-ZIEL [K6] - Attachement (Pflichtenheft b32.03_PF_eDossier.pdf, Seite 17)<br>
19   * Die Klasse AnswerShowAction holt die Antwort zu einer Beanstandung
20   * <p>
21   * Copyright (c) 2004, Eidgenössisches Institut für Geistiges Eigentum
22   * @author    Anita Rueegsegger, Marc Bouquet
23   * @version   $Id: AnswerShowAction.java,v 1.11 2004/11/01 13:52:20 ruegsegger Exp $
24   */
25  public class AnswerShowAction extends Action
26  {
27    // Attribute für Log4j-Logging
28    private static final Logger LOG = Logger.getLogger( AnswerShowAction.class );
29  
30    /**
31     * Die Methode execute wird aufgerufen, wenn auf der interception.jsp das Icon Antwort angewählt wird oder
32     * eine Antwort erfasst wurde. In der Methode werden die Daten für die Antwort 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        // bereinigen der Session
55        if( ( ImageVO )session.getAttribute( "imageVO" ) != null )
56        {
57          session.removeAttribute( "imageVO" );
58        }
59  
60        String idInterception = httpServletRequest.getParameter( "idInterception" );
61        int interceptionId = Integer.parseInt( idInterception );
62  
63        checkSessionObjects( session, eFacade, interceptionId );
64        this.setSessionObjects( session, interceptionId );
65  
66        AnswerVO answerVO = eFacade.getAnswer( interceptionId );
67  
68        if( answerVO != null )
69        {
70          ImageVO imageVO = eFacade.getAttachement( answerVO );
71  
72          // prüft ob das Attachement ein Bild ist
73          if( imageVO != null )
74          {
75            if( !imageVO.getImageType().equals( "application/pdf" ) )
76            {
77              // Attachment wird auf null gesetzt, da es ein Bild ist
78              answerVO.setAttachement( null );
79              // imageVO mit den Bild-Daten wird in der Session gespeichert
80              session.setAttribute( "imageVO", imageVO );
81            }
82          }
83  
84          session.setAttribute( "answerVO", answerVO );
85          return( actionMapping.findForward( "forward" ) );
86        }
87        else
88        {
89          errors.add( "answerVO", new ActionError( "error.noanswer" ) );
90          saveErrors( httpServletRequest, errors );
91          return( new ActionForward( actionMapping.getInput() ) );
92        }
93      }
94      catch( Exception ex )
95      {
96        LOG.debug( "Message: " + ex.getMessage() );
97        errors.add( "answerVO", new ActionError( "error.answer", ex.getMessage() ) );
98        saveErrors( httpServletRequest, errors );
99        return( new ActionForward( actionMapping.getInput() ) );
100     }
101   }
102 
103   /**
104    * Diese Methode überprüft in der Session, ob bereits ein ImageVO und ein InterceptionVO vorhanden ist.
105    * Ist ein Image-Object vorhanden wird dieses gelöscht.
106    * Ist kein Interception-Object vorhanden, wird dieses in der Session gespeichert.
107    * @param session HttpSession Referenz auf die aktuelle Session
108    * @param eFacade EDossierFacade Referenz auf Facade
109    * @param interceptionId int Interception-Id für das selektieren des benötigten Datensatzes
110    * @throws Exception Unerwarterer Fehler
111    */
112   private void checkSessionObjects( HttpSession session, EDossierFacade eFacade, int interceptionId ) throws Exception
113   {
114     // bereinigen der Session
115     if( ( ImageVO )session.getAttribute( "imageVO" ) != null )
116     {
117       session.removeAttribute( "imageVO" );
118     }
119 
120     // Fügt die Interception in die Session, sofern diese noch nicht vorhanden ist.
121     if( ( InterceptionVO )session.getAttribute( "interceptionVO" ) == null )
122     {
123       session.setAttribute( "interceptionVO", eFacade.getInterception( interceptionId ) );
124     }
125   }
126 
127   /**
128    * Diese Methode fügt die Objects in die aktuelle Session hinzu
129    * @param session HttpSession Referenz auf die aktuelle Session
130    * @param interceptionId int Interception-Id
131    */
132   private void setSessionObjects( HttpSession session, int interceptionId )
133   {
134     SimpleDateFormat sdf = new SimpleDateFormat( "dd.MM.yyyy" );
135 
136     List listInterceptionVO = ( List )session.getAttribute( "alInterceptionVO" );
137     InterceptionVO interceptionVO = null;
138     for( int i = 0; i < listInterceptionVO.size(); i++ )
139     {
140       interceptionVO = ( InterceptionVO )listInterceptionVO.get( i );
141       if( interceptionVO.getInterceptionId() == interceptionId )
142       {
143         String answer_dat = sdf.format( interceptionVO.getAnswerDat() );
144         session.setAttribute( "answer_dat", answer_dat );
145         LOG.debug( "Answer Dat set on Session: " + answer_dat );
146         break;
147       }
148     }
149   }
150 }
151