View Javadoc

1   ////////////////////////////////////////////////////////////////////////////////
2   //CabaWeb
3   //Copyright (C) 2004  Thomas Vogt <Thomas.Vogt@TVC-Software.com>
4   //
5   //This library is free software; you can redistribute it and/or
6   //modify it under the terms of the GNU Lesser General Public
7   //License as published by the Free Software Foundation; either
8   //version 2.1 of the License, or (at your option) any later version.
9   //
10  //This library is distributed in the hope that it will be useful,
11  //but WITHOUT ANY WARRANTY; without even the implied warranty of
12  //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  //Lesser General Public License for more details.
14  //
15  //You should have received a copy of the GNU Lesser General Public
16  //License along with this library; if not, write to the Free Software
17  //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  ////////////////////////////////////////////////////////////////////////////////
19  package org.fhw.cabaweb.calculation;
20  
21  import java.util.ArrayList;
22  import java.util.Collection;
23  import java.util.Iterator;
24  
25  import java.io.IOException;
26  import java.util.Properties;
27  
28  import javax.mail.AuthenticationFailedException;
29  import javax.mail.MessagingException;
30  import javax.mail.SendFailedException;
31  import javax.mail.internet.AddressException;
32  
33  import org.apache.commons.logging.Log;
34  import org.apache.commons.logging.LogFactory;
35  import org.apache.struts.util.MessageResources;
36  
37  import org.fhw.cabaweb.calculation.common.CommonCalculation;
38  import org.fhw.cabaweb.calculation.threads.BerechneBewertung;
39  import org.fhw.cabaweb.calculation.threads.BerechneHauptwerte;
40  import org.fhw.cabaweb.calculation.threads.BerechneVollUndGrenzkosten;
41  import org.fhw.cabaweb.calculation.threads.CheckEntscheidungen;
42  import org.fhw.cabaweb.calculation.threads.Lock;
43  import org.fhw.cabaweb.data.DataInterfaceErgebnissdaten;
44  import org.fhw.cabaweb.data.DataInterfaceErgebnissdatenDouble;
45  import org.fhw.cabaweb.data.DataInterfaceErgebnissdatenInteger;
46  import org.fhw.cabaweb.data.DataInterfaceGruppenmitglieder;
47  import org.fhw.cabaweb.data.DataInterfaceProjekte;
48  import org.fhw.cabaweb.data.DataInterfaceProjektgruppen;
49  import org.fhw.cabaweb.data.constants.Constants;
50  import org.fhw.cabaweb.data.dataobjects.Ergebniss;
51  import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
52  import org.fhw.cabaweb.ojb.dataobjects.Projekte;
53  import org.fhw.cabaweb.ojb.dataobjects.Projektgruppen;
54  import org.fhw.cabaweb.tools.MailUtilities;
55  import org.fhw.cabaweb.tools.StringUtilities;
56  
57  /***
58   * Klasse f&uuml;r Tests auf eclipse Ebene ohne den Application Server (Tomcat).
59   *
60   * @author  <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
61   * @version Version 1.0 01.09.2004
62   */
63  class TestDemo
64  {
65      /*** Commons Logging Instanz */
66      private static Log log = LogFactory.getLog("org.fhw.cabaweb.calculation");
67      public static void main(String[] args)
68      {
69  
70          Integer projektnummer = new Integer(2);
71          Integer quartal = new Integer(0);
72          Integer gruppennummer = new Integer(17);
73          Integer reportnummer = new Integer(1);
74          Integer sprachnummer = new Integer(1);
75          Integer artDerBerechnung = new Integer(1);
76  
77  /*
78          ProjektgruppenUndMitgliederInitialisierung.ProjektgruppenInitialisieren(projektnummer);
79          ProjektgruppenUndMitgliederInitialisierung.GruppenmitgliederInitialisieren(projektnummer);
80          ErgebnissDatenInitialisierung.ergebnissDatenInitialisieren(projektnummer);
81          VoreinstellungsDatenInitialisierung.VoreinstellungsDatenInitialisieren(projektnummer);
82          VoreinstellungsDatenInitialisierung.VoreinstellungenInitialisieren(projektnummer);
83          ReporterzeugungenInitialisierung.ReporterzeugungenInitialisieren(projektnummer);
84  */
85  //        ResetQuartalStart(projektnummer);
86  /*
87          if(args.length == 2 && args[0] != null && args[1] != null)
88          {
89              projektnummer = new Integer(args[0]);
90              artDerBerechnung = new Integer(args[1]);
91  
92              if (log.isDebugEnabled())
93              {
94                  switch (artDerBerechnung.intValue())
95                  {
96                      case -99 :
97                          log.debug(" Reset Projektnummer: " + projektnummer + " nach START");
98                      break;
99                      case -1 :
100                         log.debug(" Reset Projektnummer: " + projektnummer + " -1");
101                     break;
102                     case 0 :
103                         log.debug(" DO NOTHING : " + projektnummer);
104                     break;
105                     case 1 :
106                         log.debug(" Berechne Projektnummer: " + projektnummer + " +1");
107                     break;
108                 }
109             }
110         }
111 */
112 
113         switch (artDerBerechnung.intValue())
114         {
115             case -99 :
116                 ResetQuartalStart(projektnummer);
117             break;
118             case -1 :
119                 ResetQuartal(projektnummer);
120             break;
121             case 0 :
122                 log.info(" DO NOTHING : " + projektnummer);
123             break;
124             case 1 :
125                 BerechneQuartal(projektnummer);
126             break;
127         }
128 
129 /*        
130         DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
131         
132         Collection projektgruppen = dipg.sucheProjektnummer(projektnummer);
133         Iterator projektgruppeniterator = projektgruppen.iterator();
134         
135         while (projektgruppeniterator.hasNext())
136         {
137             Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
138         
139             if (projektgruppe.getAktiv().booleanValue() == false || projektgruppe.getGruppenname().compareTo("Default") == 0 || projektgruppe.getGruppenname().compareTo("Projektleiter") == 0 || projektgruppe.getGruppenname().compareTo("Administratorgruppe") == 0)
140                 projektgruppeniterator.remove();
141         }
142 
143         projektgruppeniterator = projektgruppen.iterator();
144         
145         Lock lock = new Lock(projektgruppen.size());
146 
147         projektgruppeniterator = projektgruppen.iterator();
148         lock.setFinishSemaphore(projektgruppen.size());
149         
150         while (projektgruppeniterator.hasNext())
151         {
152             Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
153             gruppennummer = projektgruppe.getGruppennummer();
154         
155             BerechneBewertung mt = new BerechneBewertung(lock, projektnummer, gruppennummer, quartal);
156             mt.setName("P " + projektnummer + " - G " + gruppennummer + " - Q " + quartal);
157             mt.setPriority(3);
158             mt.start();
159         }
160         
161         while (lock.getFinishSemaphore() > 0)
162         {
163             synchronized (lock)
164             {
165                 try
166                 {
167         
168                     Thread.sleep(25);
169         
170                     if (lock.getSemaphore() == projektgruppen.size())
171                     {
172                         lock.notifyAll();
173                     }
174                 }
175                 catch (Exception e)
176                 {
177                     log.error(e.getMessage(), e);
178                 }
179             }
180         }
181 */        
182 /*        
183         try
184         {
185             reportnummer = new Integer(4);
186 
187         	CachableByteArrayOutputStreamManager cbaosm = CachableByteArrayOutputStreamManager.getInstance();
188             //			Document test = ExportReport.createDocument(projektnummer,gruppennummer, quartal, reportnummer, sprachnummer);
189 
190             CachableByteArrayOutputStream baos = cbaosm.getCachableByteArrayOutputStream(projektnummer, gruppennummer, quartal, reportnummer, sprachnummer, "XML");
191             FileOutputStream outStream = new FileOutputStream("output.xml");
192             outStream.write(baos.toByteArray());
193             outStream.flush();
194             outStream.close();
195 
196             baos = cbaosm.getCachableByteArrayOutputStream(projektnummer, gruppennummer, quartal, reportnummer, sprachnummer, "PDF");
197             outStream = new FileOutputStream("output.pdf");
198             outStream.write(baos.toByteArray());
199             outStream.flush();
200             outStream.close();
201 
202             baos = cbaosm.getCachableByteArrayOutputStream(projektnummer, gruppennummer, quartal, reportnummer, sprachnummer, "XSLFO");
203             outStream = new FileOutputStream("output-fo.xml");
204             outStream.write(baos.toByteArray());
205             outStream.flush();
206             outStream.close();
207 */
208 /*
209             baos = cbaosm.getCachableByteArrayOutputStream(projektnummer, gruppennummer, quartal, reportnummer, sprachnummer, "HTML");
210             outStream = new FileOutputStream("output.html");
211             outStream.write(baos.toByteArray());
212             outStream.flush();
213             outStream.close();
214 
215             baos = cbaosm.getCachableByteArrayOutputStream(projektnummer, gruppennummer, quartal, reportnummer, sprachnummer, "PDF");
216             outStream = new FileOutputStream("output.pdf");
217             outStream.write(baos.toByteArray());
218             outStream.flush();
219             outStream.close();
220 
221             baos = cbaosm.getCachableByteArrayOutputStream(projektnummer, gruppennummer, quartal, reportnummer, sprachnummer, "RTF");
222             outStream = new FileOutputStream("output.rtf");
223             outStream.write(baos.toByteArray());
224             outStream.flush();
225             outStream.close();
226 */
227 /*
228         }
229         catch (Exception e)
230         {
231             log.error(e.getMessage(), e);
232         }
233 
234         if (log.isDebugEnabled())
235         {
236             log.debug("FINISHED");
237         }
238 */    
239     }
240 
241     /***
242      * Berechnet ein Quartal f&uuml;r die &uuml;bergebene Projektnummer
243      *
244      * @param projektnummer Die Projektnummer
245      */
246     public synchronized static void BerechneQuartal(Integer projektnummer)
247     {
248         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
249         DataInterfaceProjekte dip = new DataInterfaceProjekte();
250         boolean rueckgabewert = false;
251         Projekte projekt = (Projekte) dip.sucheProjektnummer(projektnummer);
252         Integer quartal = projekt.getAktuellesQuartal();
253 
254         if (log.isDebugEnabled())
255         {
256             log.debug(" Berechne Quartal " + (quartal.intValue() + 1));
257         }
258 
259         if (quartal.intValue() == -1)
260         {
261             Startwerte.StartwerteEintragen(projektnummer);
262         }
263         else
264         {
265             CheckEntscheidungen(projektnummer, new Integer(quartal.intValue() + 1));
266         }
267 
268         ErstelleIndices(projektnummer, new Integer(quartal.intValue() + 1));
269 
270         BerechneWerte(projektnummer, quartal);
271 
272         projekt.setAktuellesQuartal(new Integer(quartal.intValue() + 1));
273 
274         rueckgabewert = dip.editieren(projekt);
275 
276         if (rueckgabewert == false)
277         {
278             SendStatusMail(projektnummer, new Integer(quartal.intValue() + 1), 1, false);
279             log.error(" Weiterschaltung des Quartals fehlgeschlagen");
280         }
281         else
282         {
283             SendStatusMail(projektnummer, new Integer(quartal.intValue() + 1), 1, true);
284         }
285     }
286 
287     /***
288      * Setzt um ein Quartal f&uuml;r die &uuml;bergebene Projektnummer zur&uuml;ck
289      *
290      * @param projektnummer Die Projektnummer
291      */
292     private synchronized static void ResetQuartal(Integer projektnummer)
293     {
294         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
295         DataInterfaceProjekte dip = new DataInterfaceProjekte();
296         boolean rueckgabewert = false;
297         Projekte projekt = (Projekte) dip.sucheProjektnummer(projektnummer);
298         Integer quartal = projekt.getAktuellesQuartal();
299 
300         if (log.isDebugEnabled())
301         {
302             log.debug(" Reset Quartal nach " + (quartal.intValue() - 1));
303         }
304 
305         if (quartal.intValue() >= -1)
306         {
307             quartal = new Integer(quartal.intValue() - 1);
308         }
309 
310         projekt.setAktuellesQuartal(quartal);
311 
312         rueckgabewert = dip.editieren(projekt);
313 
314         if (rueckgabewert == false)
315         {
316             SendStatusMail(projektnummer, new Integer(quartal.intValue() + 1), -1, false);
317             log.error(" Reset des Quartals fehlgeschlagen");
318         }
319         else
320         {
321             SendStatusMail(projektnummer, new Integer(quartal.intValue() + 1), -1, true);
322         }
323     }
324 
325     /***
326      * Setzt auf das Quartal -1 f&uuml;r die &uuml;bergebene Projektnummer zur&uuml;ck
327      *
328      * @param projektnummer Die Projektnummer
329      */
330     private synchronized static void ResetQuartalStart(Integer projektnummer)
331     {
332         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
333         DataInterfaceProjekte dip = new DataInterfaceProjekte();
334         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
335         DataInterfaceErgebnissdatenDouble died = new DataInterfaceErgebnissdatenDouble();
336         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
337         DataInterfaceErgebnissdatenInteger diei = new DataInterfaceErgebnissdatenInteger();
338         boolean rueckgabewert = false;
339         Projekte projekt = (Projekte) dip.sucheProjektnummer(projektnummer);
340 
341         if (log.isDebugEnabled())
342         {
343             log.debug(" Reset Quartal nach -1");
344         }
345 
346         projekt.setAktuellesQuartal(new Integer(-1));
347 
348         rueckgabewert = dip.editieren(projekt);
349 
350         if (rueckgabewert == false)
351         {
352             log.error(" Reset des Quartals fehlgeschlagen");
353         }
354 
355         if (log.isDebugEnabled())
356         {
357             log.debug(" Loeschen der DOUBLE Ergebnisse");
358         }
359 
360         Collection ergebnisse = died.sucheKombination(projektnummer, null, null);
361         Iterator ergebnisiterator = ergebnisse.iterator();
362 
363         while (ergebnisiterator.hasNext())
364         {
365             rueckgabewert = died.loeschen(ergebnisiterator.next());
366 
367             if (rueckgabewert == false)
368             {
369                 log.error(" Loeschen DOUBLE Ergebnis fehlgeschlagen");
370             }
371         }
372 
373         if (log.isDebugEnabled())
374         {
375             log.debug(" Loeschen der INTEGER Ergebnisse");
376         }
377 
378         ergebnisse = diei.sucheKombination(projektnummer, null, null);
379         ergebnisiterator = ergebnisse.iterator();
380 
381         while (ergebnisiterator.hasNext())
382         {
383             rueckgabewert = diei.loeschen(ergebnisiterator.next());
384 
385             if (rueckgabewert == false)
386             {
387                 log.error(" Loeschen INTEGER Ergebnis fehlgeschlagen");
388             }
389         }
390 
391         Startwerte.StartwerteEintragen(projektnummer);
392 
393         SendStatusMail(projektnummer, new Integer(-1), -99, true);
394     }
395 
396     /***
397      * Checkt die Entscheidungen des Unterenehmens und übernimmt sie im Zweifelsfall aus dem VorQuartal.
398      *
399      * @param projektnummer Die Projektnummer
400      */
401     private synchronized static void CheckEntscheidungen(Integer projektnummer, Integer quartal)
402     {
403         if (log.isDebugEnabled())
404         {
405             log.debug(" CheckEntscheidungen");
406         }
407 
408         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
409         DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
410 
411         Collection projektgruppen = dipg.sucheProjektnummer(projektnummer);
412         Iterator projektgruppeniterator = projektgruppen.iterator();
413 
414         while (projektgruppeniterator.hasNext())
415         {
416             Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
417 
418             if (projektgruppe.getAktiv().booleanValue() == false || projektgruppe.getGruppenname().compareTo("Default") == 0 || projektgruppe.getGruppenname().compareTo("Projektleiter") == 0 || projektgruppe.getGruppenname().compareTo("Administratorgruppe") == 0)
419                 projektgruppeniterator.remove();
420         }
421 
422         projektgruppeniterator = projektgruppen.iterator();
423 
424         Lock lock = new Lock(projektgruppen.size());
425 
426         while (projektgruppeniterator.hasNext())
427         {
428             Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
429             Integer gruppennummer = projektgruppe.getGruppennummer();
430 
431             CheckEntscheidungen mt = new CheckEntscheidungen(lock, projektnummer, gruppennummer, quartal);
432             mt.setName("P " + projektnummer + " - G " + gruppennummer + " - Q " + quartal);
433             mt.setPriority(3);
434             mt.start();
435         }
436 
437         while (lock.getFinishSemaphore() > 0)
438         {
439             synchronized (lock)
440             {
441                 try
442                 {
443                     Thread.sleep(25);
444 
445                     if (lock.getSemaphore() == projektgruppen.size())
446                     {
447                         lock.notifyAll();
448                     }
449                 }
450                 catch (Exception e)
451                 {
452                     log.error(e.getMessage(), e);
453                 }
454             }
455         }
456     }
457 
458     /***
459      * Berechnet die Werte f&uuml;r das Projekt und das angegebene Quartal
460      *
461      * @param projektnummer Die Projektnummer
462      * @param quartal Das Quartal
463      */
464     private synchronized static void BerechneWerte(Integer projektnummer, Integer quartal)
465     {
466         if (log.isDebugEnabled())
467         {
468             log.debug(" BerechneHauptwerte");
469         }
470 
471         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
472         DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
473 
474         Collection projektgruppen = dipg.sucheProjektnummer(projektnummer);
475         Iterator projektgruppeniterator = projektgruppen.iterator();
476 
477         while (projektgruppeniterator.hasNext())
478         {
479             Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
480 
481             if (projektgruppe.getAktiv().booleanValue() == false || projektgruppe.getGruppenname().compareTo("Default") == 0 || projektgruppe.getGruppenname().compareTo("Projektleiter") == 0 || projektgruppe.getGruppenname().compareTo("Administratorgruppe") == 0)
482                 projektgruppeniterator.remove();
483         }
484 
485         projektgruppeniterator = projektgruppen.iterator();
486 
487         Lock lock = new Lock(projektgruppen.size());
488 
489         while (projektgruppeniterator.hasNext())
490         {
491             Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
492             Integer gruppennummer = projektgruppe.getGruppennummer();
493 
494             BerechneHauptwerte mt = new BerechneHauptwerte(lock, projektnummer, gruppennummer, quartal);
495             mt.setName("P " + projektnummer + " - G " + gruppennummer + " - Q " + quartal);
496             mt.setPriority(3);
497             mt.start();
498         }
499 
500         while (lock.getFinishSemaphore() > 0)
501         {
502             synchronized (lock)
503             {
504                 try
505                 {
506                     Thread.sleep(25);
507 
508                     if (lock.getSemaphore() == projektgruppen.size())
509                     {
510                         lock.notifyAll();
511                     }
512                 }
513                 catch (Exception e)
514                 {
515                     log.error(e.getMessage(), e);
516                 }
517             }
518         }
519 
520         if (log.isDebugEnabled())
521         {
522             log.debug("BerechneVollUndGrenzkosten");
523         }
524 
525         projektgruppeniterator = projektgruppen.iterator();
526         lock.setFinishSemaphore(projektgruppen.size());
527 
528         while (projektgruppeniterator.hasNext())
529         {
530             Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
531             Integer gruppennummer = projektgruppe.getGruppennummer();
532 
533             BerechneVollUndGrenzkosten mt = new BerechneVollUndGrenzkosten(lock, projektnummer, gruppennummer, quartal);
534             mt.setName("P " + projektnummer + " - G " + gruppennummer + " - Q " + quartal);
535             mt.setPriority(3);
536             mt.start();
537         }
538 
539         while (lock.getFinishSemaphore() > 0)
540         {
541             synchronized (lock)
542             {
543                 try
544                 {
545 
546                     Thread.sleep(25);
547 
548                     if (lock.getSemaphore() == projektgruppen.size())
549                     {
550                         lock.notifyAll();
551                     }
552                 }
553                 catch (Exception e)
554                 {
555                     log.error(e.getMessage(), e);
556                 }
557             }
558         }
559 
560         if (log.isDebugEnabled())
561         {
562             log.debug("BerechneBewertung");
563         }
564 
565         projektgruppeniterator = projektgruppen.iterator();
566         lock.setFinishSemaphore(projektgruppen.size());
567 
568         while (projektgruppeniterator.hasNext())
569         {
570             Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
571             Integer gruppennummer = projektgruppe.getGruppennummer();
572 
573             BerechneBewertung mt = new BerechneBewertung(lock, projektnummer, gruppennummer, quartal);
574             mt.setName("P " + projektnummer + " - G " + gruppennummer + " - Q " + quartal);
575             mt.setPriority(3);
576             mt.start();
577         }
578 
579         while (lock.getFinishSemaphore() > 0)
580         {
581             synchronized (lock)
582             {
583                 try
584                 {
585 
586                     Thread.sleep(25);
587 
588                     if (lock.getSemaphore() == projektgruppen.size())
589                     {
590                         lock.notifyAll();
591                     }
592                 }
593                 catch (Exception e)
594                 {
595                     log.error(e.getMessage(), e);
596                 }
597             }
598         }
599     }
600 
601     /***
602      * Berechnet die Indices f&uuml;r das Projekt und das angegebene Quartal
603      *
604      * @param projektnummer Die Projektnummer
605      * @param quartal Das Quartal
606      */
607     private synchronized static void ErstelleIndices(Integer projektnummer, Integer quartal)
608     {
609         if (log.isDebugEnabled())
610         {
611             log.debug("ErstelleIndices");
612         }
613 
614         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
615         DataInterfaceProjektgruppen dipg = new DataInterfaceProjektgruppen();
616         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
617         DataInterfaceErgebnissdaten die = new DataInterfaceErgebnissdaten();
618 
619         Collection projektgruppen = dipg.sucheProjektnummer(projektnummer);
620         Iterator projektgruppeniterator = projektgruppen.iterator();
621 
622         Double inflation = new Double(0.0);
623         Double inflationVorhersage = new Double(0.0);
624         Double lohnerhoehung = new Double(0.0);
625         Double lohnerhoehungVorhersage = new Double(0.0);
626         Double saison = new Double(0.0);
627         Double saisonVorhersage = new Double(0.0);
628         Double konjunktur = new Double(0.0);
629         Double konjunkturVorhersage = new Double(0.0);
630 
631         while (projektgruppeniterator.hasNext())
632         {
633             Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
634 
635             if (projektgruppe.getAktiv().booleanValue() == false || projektgruppe.getGruppenname().compareTo("Default") == 0 || projektgruppe.getGruppenname().compareTo("Projektleiter") == 0 || projektgruppe.getGruppenname().compareTo("Administratorgruppe") == 0)
636                 projektgruppeniterator.remove();
637         }
638 
639         projektgruppeniterator = projektgruppen.iterator();
640 
641         if (projektgruppeniterator.hasNext())
642         {
643             Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
644             Integer gruppennummer = projektgruppe.getGruppennummer();
645 
646             inflation = ErstelleIndices.Inflation(projektnummer, gruppennummer, quartal);
647             inflationVorhersage = ErstelleIndices.InflationVorhersage(projektnummer, gruppennummer, quartal);
648             lohnerhoehung = ErstelleIndices.Lohnerhoehung(projektnummer, gruppennummer, quartal);
649             lohnerhoehungVorhersage = ErstelleIndices.LohnerhoehungVorhersage(projektnummer, gruppennummer, quartal);
650             saison = ErstelleIndices.Saison(projektnummer, gruppennummer, quartal);
651             saisonVorhersage = ErstelleIndices.SaisonVorhersage(projektnummer, gruppennummer, quartal);
652             konjunktur = ErstelleIndices.Konjunktur(projektnummer, gruppennummer, quartal);
653             konjunkturVorhersage = ErstelleIndices.KonjunkturVorhersage(projektnummer, gruppennummer, quartal);
654         }
655 
656         projektgruppeniterator = projektgruppen.iterator();
657 
658         while (projektgruppeniterator.hasNext())
659         {
660             Projektgruppen projektgruppe = (Projektgruppen) projektgruppeniterator.next();
661             Integer gruppennummer = projektgruppe.getGruppennummer();
662 
663             ArrayList aktuellesQuartal = (ArrayList) die.sucheQuartal(projektnummer, gruppennummer, quartal);
664             Ergebniss ergebnis = null;
665 
666             //          Tab. 20 (11)
667             /* Setze Inflationsrate */
668             ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENINFLATIONSRATE_KEY);
669             ergebnis.setObjectWert(inflation);
670             CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
671 
672             //          Tab. 20 (11V)
673             /* Setze Vorhersage Inflationsrate */
674             ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENINFLATIONSRATEVORHERSAGE_KEY);
675             ergebnis.setObjectWert(inflationVorhersage);
676             CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
677 
678             //          Tab. 20 (12)
679             /* Setze Lohnerhoehungsrate */
680             ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENLOHNERHOEHUNG_KEY);
681             ergebnis.setObjectWert(lohnerhoehung);
682             CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
683 
684             //          Tab. 20 (12V)
685             /* Setze Vorhersage Lohnerhoehung */
686             ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENLOHNERHOEHUNGVORHERSAGE_KEY);
687             ergebnis.setObjectWert(lohnerhoehungVorhersage);
688             CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
689 
690             //          Tab. 20 (13)
691             /* Setze Saisonindex */
692             ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENSAISONINDEX_KEY);
693             ergebnis.setObjectWert(saison);
694             CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
695 
696             //          Tab. 20 (13V)
697             /* Setze Vorhersage Saisonindex */
698             ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENSAISONINDEXVORHERSAGE_KEY);
699             ergebnis.setObjectWert(saisonVorhersage);
700             CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
701 
702             //          Tab. 20 (14)
703             /* Setze Konjunkturindex */
704             ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENKONJUNKTURINDEX_KEY);
705             ergebnis.setObjectWert(konjunktur);
706             CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
707 
708             //          Tab. 20 (14V)
709             /* Setze Vorhersage Konjunkturindex */
710             ergebnis = CommonCalculation.SucheErgebnissFeldname(aktuellesQuartal, Constants.EF_GRUNDDATENKONJUNKURINDEXVORHERSAGE_KEY);
711             ergebnis.setObjectWert(konjunkturVorhersage);
712             CommonCalculation.WertEintragen(ergebnis, gruppennummer, quartal);
713         }
714     }
715 
716     /***
717      * Verschickt eMails mit Information über die erfolgte Berechnung.
718      *
719      * @param projektnummer Die Projektnummer
720      * @param quartal Das Quartal
721      * @param artDerBerechnung Die Art der Berechnung (-99, -1, 0, 1)
722      * @param success War der Vorgang erfolgreich (true/false)
723      */
724     private synchronized static void SendStatusMail(Integer projektnummer, Integer quartal, int artDerBerechnung, boolean success)
725     {
726         if (log.isDebugEnabled())
727         {
728             log.debug("Email");
729         }
730 
731         Properties properties = StringUtilities.getPropertiesFromFile("cabaweb.properties");
732 
733         String smtphost = properties.getProperty("SMTPHost");
734         String smtpport = properties.getProperty("SMTPPort");
735         String smtpuser = properties.getProperty("SMTPUser");
736         String smtppassword = properties.getProperty("SMTPPassword");
737         String absenderadresse = properties.getProperty("AbsenderAdresse");
738         String adminadresse = properties.getProperty("AdminAdresse");
739         String absoluteURL = properties.getProperty("AbsoluteURL");
740 
741         /*** Data Interface (indirekter Zugriff auf die OJB Ebene) initialisieren */
742         DataInterfaceGruppenmitglieder dig = new DataInterfaceGruppenmitglieder();
743 
744         Collection gruppenmitglieder = dig.sucheProjektnummer(projektnummer);
745         Iterator gruppenmitgliederiterator = gruppenmitglieder.iterator();
746 
747         while (gruppenmitgliederiterator.hasNext())
748         {
749             Gruppenmitglieder gruppenmitglied = (Gruppenmitglieder) gruppenmitgliederiterator.next();
750 
751             if (gruppenmitglied.getAktiv().booleanValue() == false || gruppenmitglied.getProjektgruppe().getAktiv().booleanValue() == false || gruppenmitglied.getProjektgruppe().getProjekte().getAktiv().booleanValue() == false || gruppenmitglied.getProjektgruppe().getGruppenname().compareTo("Default") == 0)
752                 gruppenmitgliederiterator.remove();
753         }
754 
755         gruppenmitgliederiterator = gruppenmitglieder.iterator();
756 
757         MessageResources grpmessages = MessageResources.getMessageResources("org.fhw.cabaweb.webfrontend.resources.CalculationResources");
758 
759         String subject = null;
760         String mailbody = null;
761         String successString = null;
762 
763         while (gruppenmitgliederiterator.hasNext())
764         {
765             Gruppenmitglieder gruppenmitglied = (Gruppenmitglieder) gruppenmitgliederiterator.next();
766 
767             try
768             {
769                 if (success)
770                     successString = grpmessages.getMessage("description.successful");
771                 else
772                     successString = grpmessages.getMessage("description.failure");
773 
774                 switch (artDerBerechnung)
775                 {
776                     case -99 :
777                         subject = grpmessages.getMessage("message.de.emailsubject.reset", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString);
778                         mailbody = grpmessages.getMessage("message.de.emailtext.reset", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString) + "\n\n";
779                         mailbody += "\n-----------------------------------------------------------------\n";
780                         mailbody += grpmessages.getMessage("message.en.emailtext.reset", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString) + "\n\n";
781                         MailUtilities.sendMail(smtphost, smtpport, smtpuser, smtppassword, absenderadresse, gruppenmitglied.getMitgliedsemailadresse(), null, subject, mailbody);
782                         break;
783                     case -1 :
784                         subject = grpmessages.getMessage("message.de.emailsubject.reset", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString);
785                         mailbody = grpmessages.getMessage("message.de.emailtext.reset", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString) + "\n\n";
786                         mailbody += "\n-----------------------------------------------------------------\n";
787                         mailbody += grpmessages.getMessage("message.en.emailtext.reset", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString) + "\n\n";
788                         MailUtilities.sendMail(smtphost, smtpport, smtpuser, smtppassword, absenderadresse, gruppenmitglied.getMitgliedsemailadresse(), null, subject, mailbody);
789                         break;
790                     case 0 :
791                         subject = "";
792                         break;
793                     case 1 :
794                         subject = grpmessages.getMessage("message.de.emailsubject.calc", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString);
795                         mailbody = grpmessages.getMessage("message.de.emailtext.calc", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString, absoluteURL) + "\n\n";
796                         mailbody += "\n-----------------------------------------------------------------\n";
797                         mailbody += grpmessages.getMessage("message.en.emailtext.calc", gruppenmitglied.getProjektgruppe().getProjekte().getProjektname(), quartal, successString, absoluteURL) + "\n\n";
798                         MailUtilities.sendMail(smtphost, smtpport, smtpuser, smtppassword, absenderadresse, gruppenmitglied.getMitgliedsemailadresse(), null, subject, mailbody);
799                         break;
800                 }
801             }
802             catch (IOException ex)
803             {
804                 log.error(MailUtilities.SendErrorMailToAdmin("IOException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex.getLocalizedMessage()));
805                 log.error(" IOException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
806             }
807             catch (AuthenticationFailedException ex)
808             {
809                 log.error(MailUtilities.SendErrorMailToAdmin("AuthenticationFailedException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex.getLocalizedMessage()));
810                 log.error(" AuthenticationFailedException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
811             }
812             catch (SendFailedException ex)
813             {
814                 log.error(MailUtilities.SendErrorMailToAdmin("SendFailedException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex.getLocalizedMessage()));
815                 log.error(" SendFailedException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
816             }
817             catch (AddressException ex)
818             {
819                 log.error(MailUtilities.SendErrorMailToAdmin("AddressException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex.getLocalizedMessage()));
820                 log.error(" AddressException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
821             }
822             catch (MessagingException ex)
823             {
824                 log.error(MailUtilities.SendErrorMailToAdmin("MessagingException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex.getLocalizedMessage()));
825                 log.error(" MessagingException - Failure sending mail to " + gruppenmitglied.getMitgliedsemailadresse(), ex);
826             }
827         }
828     }
829 }