KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > webman > content > workflow > WorkflowEngine


1 package de.webman.content.workflow;
2
3 import com.teamkonzept.lib.TKHashtable;
4 import com.teamkonzept.db.*;
5 import com.teamkonzept.lib.TKVector;
6 import com.teamkonzept.lib.TKSortableInteger;
7 import com.teamkonzept.webman.mainint.events.TKUserException;
8 import com.teamkonzept.webman.mainint.db.queries.*;
9 import de.webman.content.workflow.db.*;
10 import de.webman.content.*;
11
12 import java.util.Vector JavaDoc;
13 import java.util.Enumeration JavaDoc;
14 import java.util.Hashtable JavaDoc;
15 import java.sql.*;
16
17 import org.apache.log4j.Category;
18
19 /**
20  * Klasse zum Ermitteln der korrekten Workflowuebergaenge
21  * @author $Author: alex $
22  * @version $Revision: 1.8 $
23 */

24 public class WorkflowEngine
25 {
26     /** Logging Category */
27     private static Category cat = Category.getInstance(WorkflowEngine.class);
28     
29     /**
30         ermittelt Workflow auf Objekt Basis,
31         Ergebnisse werden in den Content reingesetzt
32     */

33     public static void getInterestingVersionsPerInstance(Content content)
34     {
35             // erst mal sehn ob es wirklich nötig ist,
36
// den content in einen string zu verwandeln ...
37
if ( cat.isDebugEnabled() ){
38         cat.debug("Started Workflow for content " + content);
39             }
40         // Versionen holen entweder sind es alle oder die im Cache markierten
41
// hier brauchen wir noch die neue ?
42
TKVector versions = content.getAllVersions();
43         TKHashtable interesting = new TKHashtable();
44         
45         // rekursiver Aufruf
46
interesting = getInteresting(versions, interesting);
47         // Ordnung der Versionen !!!
48
content.setInterestingVersions(interesting);
49     }
50     
51     private static TKHashtable getInteresting(TKVector versions, TKHashtable interesting)
52     {
53         if (versions.size() == 0)
54             return interesting;
55         ContentVersion version = (ContentVersion)versions.elementAt(0);
56         versions.removeElementAt(0);
57         Integer JavaDoc statusId = new Integer JavaDoc( version.getStatus().status_id);
58         if (interesting.size() == 0)
59             interesting.put(statusId, version);
60         else
61         {
62             updateInteresting(statusId, interesting, version);
63         }
64         return getInteresting(versions, interesting);
65         
66     }
67     
68     
69     /**
70         geht mit dem aktuellen Status die bisher ermittelten interessanten durch
71         und updatet die Menge entsprechend
72         ToDO: scheint nicht ganz allgemeingueltig zu sein
73         @param status Der neue Status
74         @param interesting die bisher ermittelten interessanten Versionen
75         @param versionData alle Daten zu der aktuellen Version des Status
76     */

77     private static void updateInteresting(Integer JavaDoc status, TKHashtable interesting, ContentVersion versionData)
78     {
79         VersionStatics statics = VersionStatics.setup();
80         Enumeration JavaDoc e = interesting.keys();
81         while (e.hasMoreElements())
82         {
83             Integer JavaDoc fromStatus = (Integer JavaDoc)e.nextElement();
84                 
85             TKHashtable dest = (TKHashtable) statics.getTransitions().get (fromStatus);
86             VersionStatusTransitionDBData dbData =
87                 (VersionStatusTransitionDBData) dest.get (status);
88             if (dbData.delete)
89             {
90                 interesting.remove (fromStatus);
91             }
92         }
93         interesting.put (status,versionData);
94     }
95     
96 }
97
98
Popular Tags