KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > webman > content > eventhandler > CEBrowseHandler


1 package de.webman.content.eventhandler;
2
3 import com.teamkonzept.web.*;
4 import com.teamkonzept.webman.*;
5 import de.webman.acl.*;
6 import com.teamkonzept.webman.mainint.*;
7 import de.webman.content.*;
8 import de.webman.content.workflow.*;
9 import de.webman.content.workflow.db.*;
10 import com.teamkonzept.webman.mainint.db.queries.*;
11 import com.teamkonzept.webman.mainint.events.*;
12 import com.teamkonzept.lib.*;
13 import com.teamkonzept.field.*;
14 import com.teamkonzept.field.db.*;
15 import com.teamkonzept.db.*;
16 import de.webman.util.legacy.Legacy;
17
18 import java.sql.*;
19 import java.util.*;
20
21 import org.apache.log4j.Category;
22 /**
23  * Auflisten aller Contents eines Teilbaums
24  * Liste aller Artikel dieses Node aufbauen (ce_conList)
25  * Wenn subtree gesetzt ist,wird rekursiv der ganze Unterbaum verfolgt <br>
26  *
27  * @author $Author: sebastian $
28  * @version $Revision: 1.38.4.2 $
29 *
30 */

31 public class CEBrowseHandler extends DefaultEventHandler implements DatabaseDefaults, ParameterTypes, FrameConstants
32 {
33     /** logging Categorie */
34     private static final Category CAT = Category.getInstance(CEBrowseHandler.class);
35
36     /** empty constructor */
37     private CEBrowseHandler()
38     {}
39
40     /** statische Instance */
41     private static CEBrowseHandler instance = new CEBrowseHandler();
42
43     /** dynamische Erzeugung */
44     public static CEBrowseHandler getInstance()
45     {
46         return instance;
47     }
48
49
50     /** holt aus den Properties die Anzahl der anzuzeigenden Contents */
51
52     public static int getAnzahlBlaettern(String JavaDoc count)
53     {
54         if ((count == null)
55             || (count.length() != 0))
56         {
57             try
58             {
59                 PropertyManager man = PropertyManager.getPropertyManager("LEAF_THROUGH");
60                 String JavaDoc gen = man.getValue("COUNT", "0");
61                 return Integer.parseInt(gen);
62             }
63             catch (Throwable JavaDoc t)
64             {
65                 return 0;
66             }
67         }
68         else
69             return(Integer.parseInt(count));
70     }
71
72     /* blättern hoch und runter */
73
74     private static void blaetter(TKEvent evt,ContentContext ce,TKHTMLTemplate t, int size)
75     {
76         int start = 0;
77         int count = 0;
78
79         if (evt.getParameter("RICHTUNG", evt.getName()) != null)
80         {
81             if (evt.getParameter("CONLIST_START",evt.getName() ) != null)
82                 start = Integer.parseInt(evt.getParameter("CONLIST_START", evt.getName()));
83             count = getAnzahlBlaettern(evt.getParameter("CONLIST_COUNT", evt.getName()));
84             switch (Integer.parseInt(evt.getParameter("RICHTUNG", evt.getName())))
85             {
86                 case -2 : start = 0;
87                         break;
88                 case -1 :
89                     if (start > count)
90                         start = start - count;
91                     else
92                         start = 0;
93                         break;
94                 case 1 :
95                         start = start + count;
96                         if (start + count > size)
97                             start = size - count;
98                         break;
99                 case 2 :
100                     if (size > count)
101                         start = size - count;
102                     else
103                         start = 0;
104                         break;
105             default :
106                 break;
107             }
108             ce.conlist_start = Integer.toString(start);
109             ce.conlist_count = Integer.toString(count);
110             t.set("CONLIST_START", ce.conlist_start);
111             t.set("CONLIST_COUNT", ce.conlist_count);
112
113         }
114         else
115         {
116             if (ce.conlist_count == null)
117             {
118                 ce.conlist_count = Integer.toString(getAnzahlBlaettern(null));
119                 ce.conlist_start = Integer.toString(0);
120                 t.set("CONLIST_START", ce.conlist_start);
121                 t.set("CONLIST_COUNT", ce.conlist_count);
122
123             }
124         }
125     }
126
127     /** returns to the first content
128         @param context - der ContentContext
129     */

130     private static void blaetternreset(ContentContext context)
131     {
132         if (context.conlist_start != null)
133             context.conlist_start = "0";
134     }
135
136     /**
137         boolean subtree
138     */

139     public void handleEvent(TKEvent evt) throws TKException
140     {
141         try
142         {
143             // zum Sortieren wird auch das Navigationsframe neu geladen
144
if ((evt.getParameter("SORT_NEW", evt.getName()) != null) && (evt.getParameter("SORT_NEW", evt.getName()).equals( "TRUE" )))
145             {
146
147                 TKHTMLTemplate frame = evt.getPrepHTMLTemplate( "f_ce.tmpl" );
148                 HTMLUtils.fillFrameSet( frame, LEFT_FRAME_WIDTH, "CE_SHOWLIST", "CE_GROUP_LIST" );
149                 // die liste der offenen nodes kommt ins template
150
TKVector openNodes = new TKVector(); // initial bei Root den Baum oeffnen
151
if( evt.getParams().hasMultiple( PARAMETER, "OPEN_NODES" ) ) {
152                     openNodes = evt.getParams().getVector( PARAMETER, "OPEN_NODES" );
153                 }
154                 else {
155                     if (evt.getParameter(PARAMETER, "OPEN_NODES") != null)
156                         openNodes.put( 0, evt.getParameter( PARAMETER, "OPEN_NODES" ) );
157                     else
158                         openNodes.put( 0,"-1");
159                 }
160                 TKStandardIterator iterator1 = new TKStandardIterator( openNodes, frame.getListIterator(), "OPEN_NODES", "OPEN_NODES" );
161                 frame.setListIterator( iterator1 );
162
163
164                 ContentContext ce = null;
165                 ce = ContentContext.reCalculateContext(evt.getParameter(PARAMETER, "NAVIGATION_CONTEXT"));
166                 ce.sort_by = evt.getParameter("SORT_BY", evt.getName());
167                 ce.sortUpDown = evt.getParameter("SORT_UP_DOWN", evt.getName());
168                 ce.fillIntoTemplate(frame);
169                 frame.set("NAVIGATION_CONTEXT",ce.calculateNavContext());
170
171                 evt.finishTemplate(frame);
172                 return;
173             }
174
175             boolean subtree; // wird der Unterbaum angezeigt ?
176

177             CEUtils.checkEvent(evt);
178
179             if (evt.getName().equalsIgnoreCase("CE_GROUP_LIST"))
180             {
181                 subtree = false;
182             }
183             else if (evt.getName().equalsIgnoreCase("CE_TREE"))
184             {
185                 subtree = true;
186             }
187             else
188             {
189                 subtree = evt.getParameter(PARAMETER, "EVT_SUBTREE") != null;
190             }
191
192             TKHTMLTemplate t = evt.getPrepHTMLTemplate( "ce_conList.tmpl" );
193
194             // übernehme Liste der Selectierten Contents
195
CEUtils.keepSelectedContents(evt, t);
196
197             // Kontext wird durchgeschliffen
198
ContentContext ceContext = null;
199             if (evt.getParameter(PARAMETER, "RECALCULATE") != null)
200             {
201                 ceContext = ContentContext.reCalculateContext(evt.getParameter(PARAMETER, "NAVIGATION_CONTEXT"));
202                 if (evt.getName().equalsIgnoreCase("CE_SEARCH"))
203                 {
204                     ceContext.searchString = evt.getParameter(PARAMETER, "SEARCHSTRING");
205                     ceContext.searchKennung = evt.getParameter(PARAMETER, "S_KENNUNG");
206                     ceContext.subtree = subtree;
207                     blaetternreset(ceContext);
208                 }
209                 ceContext.fillIntoTemplate(t);
210                 subtree = ceContext.subtree;
211             }
212             else
213             {
214
215                 ceContext = CEUtils.keepCEContext(evt, t);
216                 ceContext.subtree = subtree;
217
218             }
219
220             // Soll ein Gruppenknoten verfolgt werden ?
221
boolean isGroup = ceContext.conNodeType.intValue() == GROUP_INTEGER.intValue();
222
223             // statische Daten der Versionsverwaltung abrufen
224
VersionStatics statics = VersionStatics.setup();
225
226             // relevante Stati ermitteln, da Singlenodes z.B. redaktionsseitig nicht gelöscht werden können,
227
// fallen dort z.B. bestimmte Zustände weg (singles:off)
228
TKHashtable statusPool = VersionStatus.selectSingles (statics,false);
229
230             // relevante Stati für Filteroperationen ermitteln, bei subtree-Verfolgung mischen sich u.U.
231
// single- und groupnodes, daher werden bei subtree die single-Statis NICHT ausgeblendet
232
TKHashtable filterStatusPool = VersionStatus.selectSingles (statics,!isGroup /*&& !subtree*/);
233
234             // Filterdaten für Zustände aus filterStatusPool (s.o.) aus Formular einlesen und durchschleifen
235
TKHashtable filter = null;
236
237             // 0 ist Standard, <0 Nutzerdefiniert, >0 Vordef. Filter
238
if (ceContext.filterId.intValue() > 0)
239             {
240                 VersionStatusFilter f =
241                     (VersionStatusFilter) statics.getFilters().get (ceContext.filterId);
242                 if (f != null)
243                 {
244                     filter = f.makeFilter (t,filterStatusPool);
245                     ceContext.filterMode = f.filter_mode == VersionStatusFilter.SOURCE_MODE_ID? "SRC" : "DEST";
246                 }
247
248             } else if (ceContext.filterId.intValue() < 0)
249             {
250                 // Filter aus den Parametern bauen
251
filter = VersionSelection.makeContentFilter
252                     (t,filterStatusPool,evt.getParams().getClass (PARAMETER));
253             }
254
255             // Falls nicht definiert -> Standardfilter
256
if (filter == null)
257             {
258                 filter = VersionSelection.initContentFilter (statusPool);
259                 ceContext.filterMode = "SRC";
260                 t.set("FILTER_MODE",ceContext.filterMode);
261                 VersionSelection.fillFilterIntoTemplate (t,statusPool,filter);
262             }
263
264             TKVector allInstances = VersionCache.getVersionInfo(ceContext, subtree, ceContext.searchKennung != null && ceContext.searchKennung.length() != 0 ? true : false, ceContext.searchString);
265
266             // FILTER wird angewendet
267
TKVector filteredInstances = new TKVector();
268             for (int i = 0; i < allInstances.size(); i++)
269             {
270                 Content c = (Content) allInstances.elementAt(i);
271
272                 if (c.filterTransitions(filter, ceContext.filterMode))
273                 {
274                         filteredInstances.addElement(c);
275                 }
276             }
277
278             CAT.debug("filter done");
279
280             // das hier entweder anwenden oder raus damit -> Template !!!
281
// addFullPath(allInstances);
282

283             // Iterator über relevante Zustände übergeben (wird im template für die Anzeige
284
// der möglichen Transitionen relevanter Versionen gebraucht
285
t.setListIterator (new TKStandardPluginIterator
286                 ("VERSION_STATUS","STATUS",filterStatusPool,true,t.getListIterator()));
287
288             /* iterator über alle möglichen Statuse beim mutiplen
289                Statuswechsel */

290             t.setListIterator (new TKStandardPluginIterator
291                 ("MUTIPLE_STADIEN",null,VersionStatus.selectNotNewVersion(statics),false,t.getListIterator()));
292
293             // Iterator über vordefinierte Filterübergeben
294
t.setListIterator (new TKStandardPluginIterator
295                 ("PREDEFINED_FILTERS",null,statics.getInternationalFilters(),true,t.getListIterator()));
296
297             // blättern
298
blaetter(evt, ceContext,t, filteredInstances.size());
299
300             // gefilterte Instanzen anzeigen
301
t.setListIterator( new TKStandardPluginIterator
302                 ("CONTENTS_PER_NODE", null, filteredInstances, false, t.getListIterator()));
303
304
305             if (allInstances.size() == 0) t.set ("NO_CONTENTS_PER_NODE", Boolean.TRUE);
306             t.set("CONTENTS_PER_NODE_SIZE", Integer.toString(filteredInstances.size()));
307
308             // CE_NEW_NODE erlaubt?
309
LoginFactory factory = LoginFactory.getInstance();
310             Login login = factory.getLogin(evt.getRemoteUser());
311             Event event = EventFactory.getInstance().getEvent("CE_NEW_NODE");
312             if (login.isAllowed(event.getID(), ContextConstants.CONTENT_EDIT))
313             {
314                 t.set("CE_NEW_NODE", "1");
315             }
316             event = EventFactory.getInstance().getEvent("CE_COMPACT");
317             if (login.isAllowed(event.getID(), ContextConstants.CONTENT_EDIT))
318             {
319                 t.set("CE_COMPACT", "1");
320             }
321             event = EventFactory.getInstance().getEvent("CE_SEARCH");
322             if (login.isAllowed(event.getID(), ContextConstants.CONTENT_EDIT))
323             {
324                 t.set("CE_SEARCH", "1");
325             }
326             event = EventFactory.getInstance().getEvent("CE_SWITCH_MUTIPLE");
327             if (event != null && login.isAllowed(event.getID(), ContextConstants.CONTENT_EDIT))
328             {
329                 t.set("CE_SWITCH_MUTIPLE", "1");
330             }
331             // Verfolgungsmodus (rekursiv oder flach) durchschleifen
332
if (subtree) t.set ("SUBTREE",new Boolean JavaDoc(subtree));
333             // Navigations Context setzen
334
t.set("NAVIGATION_CONTEXT",ceContext.calculateNavContext());
335
336             if (evt.getParameter(PARAMETER, "SELECT_SEARCH_RESULTS") != null &&
337                 Boolean.valueOf(evt.getParameter(PARAMETER, "SELECT_SEARCH_RESULTS")).booleanValue())
338             {
339                 t.set("SELECT_SEARCH_RESULTS", Boolean.TRUE.toString());
340             }
341
342             TreeUtils.keepOpenNodes( evt, t );
343             evt.finishTemplate(t);
344         }
345         catch (Throwable JavaDoc e)
346         {
347             // TO DO : Analyze Exception !
348
throw WebmanExceptionHandler.getException(e);
349         }
350     }
351
352     public boolean isHandler(TKEvent evt)
353     {
354         return (evt.getName().equalsIgnoreCase("CE_GROUP_LIST") || evt.getName().equalsIgnoreCase("CE_TREE")
355                 || evt.getName().equalsIgnoreCase("CE_SEARCH"));
356
357     }
358 }
359
Popular Tags