1   package ch.ige.edossier.web.server;
2   
3   import java.sql.SQLException;
4   import java.util.*;
5   import org.apache.log4j.Logger;
6   import ch.ige.edossier.util.ImageProcessor;
7   import ch.ige.edossier.util.ServerProperties;
8   import ch.ige.edossier.web.server.dao.*;
9   import ch.ige.edossier.web.vo.*;
10  
11  /**
12   * B32.03 - eDossier-Interceptions - Diplomarbeit an der Software-Schule Schweiz<br>
13   * Die Klasse DossierAssembler ist die Steuerklasse für die Datenaufbereitung der Dossier's.
14   * <p>
15   * Copyright (c) 2004, Eidgenössisches Institut für Geistiges Eigentum
16   * @author    Anita Rueegsegger, Marc Bouquet
17   * @version   $Id: DossierAssembler.java,v 1.25 2004/11/01 13:52:23 ruegsegger Exp $
18   */
19  public class DossierAssembler
20  {
21    // Attribute für Log4j-Logging
22    private static final Logger LOG = Logger.getLogger( DossierAssembler.class );
23  
24    private Properties properties = null;
25  
26    /**
27     * Standard-Konstruktor
28     */
29    public DossierAssembler()
30    {}
31  
32    /**
33     * Gibt ein DossierOverviewVO zurück das pro Dossier-Status eine Liste beinhaltet
34     * @param accountId int Nummer zum selektieren der Datensätze
35     * @throws Exception Unerwarteter Fehler
36     * @return DossierOverviewVO mit Dossier-Value-Objects in Listen
37     */
38    public DossierOverviewVO getDossiers( int accountId ) throws Exception
39    {
40      DossierDAO dossierDAO = new DossierDAO();
41      List listDossierVO = dossierDAO.selectByAccount( accountId );
42  
43      DossierOverviewVO overviewVO = new DossierOverviewVO();
44  
45      for( int i = 0; i < listDossierVO.size(); i++ )
46      {
47        DossierVO dossierVO = ( DossierVO )listDossierVO.get( i );
48  
49        switch( dossierVO.getStateId() )
50        {
51          case InterceptionVO.STATUS_NEW:
52            overviewVO.getListNewDossier().add( dossierVO );
53            break;
54          case InterceptionVO.STATUS_READ:
55            overviewVO.getListOpenDossier().add( dossierVO );
56            break;
57          case InterceptionVO.STATUS_ANSWERD:
58            overviewVO.getListOpenDossier().add( dossierVO );
59            break;
60          case InterceptionVO.STATUS_FINISHED:
61            overviewVO.getListFinishedNewDossier().add( dossierVO );
62            break;
63        }
64      }
65      return overviewVO;
66    }
67  
68    /**
69     * Gibt ein Dossier-Value-Object zurück mit allen Daten zu einem Dossier.
70     * @param dossierId int Nummer zum selektieren des Datensatzes
71     * @throws Exception Unerwarteter Fehler
72     * @return DossierVO Value-Object
73     */
74    public DossierVO getDossier( int dossierId ) throws Exception
75    {
76      List listAdrBailor = new ArrayList();
77      List listAdrMasterAgent = new ArrayList();
78      List listAdrAgent = new ArrayList();
79  
80      DossierVO dossierVO = new DossierDAO().select( dossierId );
81  
82      if( dossierVO != null )
83      {
84        getDetailAddress( dossierId, listAdrBailor, listAdrMasterAgent, listAdrAgent );
85        dossierVO.setListAdrBailor( listAdrBailor );
86        dossierVO.setListAdrMasterAgent( listAdrMasterAgent );
87        dossierVO.setListAdrAgent( listAdrAgent );
88        dossierVO.setListPriorityVO( getPriorities( dossierId ) );
89        dossierVO.setListTMKindVO( getTMKinds( dossierId, dossierVO.getLanguageCd() ) );
90        dossierVO.setTmTypeVO( new TMTypeDAO().select( dossierVO.getTmtypeId() ) );
91        dossierVO.setLanguage( getLanguage( dossierVO.getLanguageCd() ) );
92        dossierVO.setImageVO( writeBildFile( dossierVO ) );
93        return dossierVO;
94      }
95      return null;
96    }
97  
98    /**
99     * Diese Methode erstellt aus der Address-Liste, Listen für jeder Rolle.
100    * @param dossierId int Dossier-Id
101    * @param listAdrBailor List mit allen Hinterleger-Adressen
102    * @param listAdrMasterAgent List mit allen Hauptvertreter-Adressen
103    * @param listAdrAgent List mit allen Vertreter-Adressen
104    * @throws Exception Unerwartete Exception
105    */
106   private void getDetailAddress( int dossierId, List listAdrBailor, List listAdrMasterAgent, List listAdrAgent ) throws Exception
107   {
108     Iterator iter = getAddress( dossierId ).iterator();
109     while( iter.hasNext() )
110     {
111       AddressVO addressVO = ( AddressVO )iter.next();
112 
113       switch( addressVO.getRoleId() )
114       {
115         case 1:
116           listAdrBailor.add( addressVO );
117           break;
118         case 2:
119           listAdrMasterAgent.add( addressVO );
120           break;
121         case 3:
122           listAdrAgent.add( addressVO );
123           break;
124       }
125     }
126   }
127 
128   /**
129    * Diese Methode gibt eine Liste zurück mit allen Adressen die zu einem Dossier gehören.
130    * @param dossierId int Nummer zum selektieren der Datensätze
131    * @throws Exception Unerwarteter Fehler
132    * @return List von Address-Value-Objects
133    */
134   private List getAddress( int dossierId ) throws Exception
135   {
136     try
137     {
138       return new AddressDAO().select( dossierId );
139     }
140     catch( SQLException sqlex )
141     {
142       LOG.error( "SQL-Fehler im AddressDAO.select(dossierId): " + sqlex.getMessage() );
143       throw sqlex;
144     }
145   }
146 
147   /**
148    * Diese Methode gibt eine Liste zurück mit allen Prioritäts-Informationen die zu einem Dossier gehören.
149    * @param dossierId int Nummer zum selektieren der Datensätze
150    * @throws Exception Unerwarteter Fehler
151    * @return List von Priority-Value-Objects
152    */
153   private List getPriorities( int dossierId ) throws Exception
154   {
155     try
156     {
157       return new PriorityDAO().select( dossierId );
158     }
159     catch( SQLException sqlex )
160     {
161       LOG.error( "SQL-Fehler im PriorityDAO.select(dossierId): " + sqlex.getMessage() );
162       throw sqlex;
163     }
164   }
165 
166   /**
167    * Diese Methode gibt eine Liste zurück mit allen Markenarten die zu einem Dossier gehören.
168    * @param dossierId int Nummer zum selektieren der Datensätze
169    * @param languageCd int Sprachcode zum selektieren der sprachabhängigen Datensätze
170    * @throws Exception Unerwarteter Fehler
171    * @return List von Priority-Value-Objects
172    */
173   private List getTMKinds( int dossierId, int languageCd ) throws Exception
174   {
175     try
176     {
177       return new TMKindDAO().select( dossierId, languageCd );
178     }
179     catch( SQLException sqlex )
180     {
181       LOG.error( "SQL-Fehler im TMKindDAO.select(dossierId, languageCd): " + sqlex.getMessage() );
182       throw sqlex;
183     }
184   }
185 
186   /**
187    * Gibt die Sprache aus der Properties-Datei zurück.
188    * @param languageCd int Nummer zum selektieren der Sprache
189    * @throws Exception Unerwarteter Fehler
190    * @return String Sprache
191    */
192   private String getLanguage( int languageCd ) throws Exception
193   {
194     properties = ServerProperties.loadServerProperties();
195     // Setzt den Sprachcode aus der Properties-Datei
196     String language = properties.getProperty( languageCd + "_language" );
197     // ist der Return-Wert null, wird ein Standardtext aus der Properties-Datei gesetzt
198     if( language == null )
199     {
200       language = "---";
201     }
202     return language;
203   }
204 
205   /**
206    * Diese Methode erzeugt das Bild, sowie ein Value-Object mit Detailinformationen, dass auf der Detail-Seite
207    * angezeigt wird.
208    * @param dossierVO DossierVO Value-Object mit den Grunddaten
209    * @throws Exception Unerwarteter Fehler
210    * @return ImageVO Value-Object mit den Bild-Informationen
211    */
212   private ImageVO writeBildFile( DossierVO dossierVO ) throws Exception
213   {
214     ImageVO imageVO = new DossierDAO().selectImage( dossierVO.getDossierId() );
215 
216     if( imageVO.getImage() != null && imageVO.getImage().length > 0 )
217     {
218       properties = ServerProperties.loadServerProperties();
219       String imageName = "bild_" + dossierVO.getDossierId() + ".jpg";
220       String path = ( properties.getProperty( "pathImages" ) ) + imageName;
221       imageVO.setImagePath( "/tmp/" + imageName );
222 
223       Map map = ImageProcessor.getInstance().writeImage( path, imageVO.getImage() );
224       return ImageProcessor.getInstance().defineDimension( imageVO, map );
225     }
226     else
227     {
228       return null;
229     }
230   }
231 }
232