KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > webman > acl > eventhandler > ACCEOpenMultDirEventHandler


1 package de.webman.acl.eventhandler;
2
3 import com.teamkonzept.web.*;
4 import com.teamkonzept.webman.*;
5 import com.teamkonzept.webman.mainint.*;
6 import com.teamkonzept.webman.mainint.db.queries.*;
7 import de.webman.acl.*;
8 import com.teamkonzept.webman.mainint.events.*;
9 import com.teamkonzept.lib.*;
10 import com.teamkonzept.db.*;
11
12 /**
13 * oeffnet oder schliesst ein Verzeichnis im Tree -- kann mehrere Aeste oeffnen --
14 * NODE_ID ist die id des jeweils zu oeffnenden node:
15 * - bei geschlossenen dirs ist die NODE_ID = der CONTENT_NODE_ID,
16 * d.h. dass das noch geschlossene dir geoeffnet wird
17 * - bei offenen dirs ist die NODE_ID die id des parents des zu schliessenden node,
18 * d.h. dass nicht explizit geschlossen wird, sondern das parentdir des noch offenen
19 * dirs geoeffnet wird, damit ist das zu schliessende dir dann auch zu
20 *
21  * @author $Author: mischa $
22  * @version $Revision: 1.5 $
23 */

24 public class ACCEOpenMultDirEventHandler extends DefaultEventHandler implements ParameterTypes, FrameConstants
25 {
26     private ACCEOpenMultDirEventHandler()
27     {}
28     
29     private static ACCEOpenMultDirEventHandler instance = new ACCEOpenMultDirEventHandler();
30     
31     public static ACCEOpenMultDirEventHandler getInstance()
32     {
33         return instance;
34     }
35     
36     public void handleEvent(TKEvent evt) throws TKException
37     {
38         try
39         {
40             WebManEvent.checkEvent(evt.getRemoteUser(), evt.getName(), ContextConstants.ACCESS_CONTROL);
41
42             // openNodeId enthaelt die id des neu zu oeffnenden node
43
// closeNodeId enthaelt die id des zu schliessenden node bei einem geschlossenen
44
// node, -1 bei einem offenen node
45
TKHTMLTemplate left = evt.getPrepHTMLTemplate( "ac_ce_nodeList.tmpl" );
46             String JavaDoc dest = evt.getParameter( PARAMETER, "CONTENT_NODE_ID" );
47             String JavaDoc openNodeId = evt.getParameter( PARAMETER, "NODE_ID" );
48             String JavaDoc closeNodeId = evt.getParameter( PARAMETER, "CONTENT_NODE_PARENT" );
49
50             String JavaDoc uId = evt.getParameter( PARAMETER, "LOGIN_ID");
51             if (uId != null && uId.length() > 0)
52             {
53                 left.set("LOGIN_ID", uId);
54                 Login login=LoginFactory.getInstance().getLogin(new Integer JavaDoc(uId));
55                 if (login != null)
56                 {
57                     left.set("LOGIN_NAME", login.getName());
58                 }
59             }
60             
61             TKVector openNodes = new TKVector();
62             if( evt.getParams().hasMultiple( PARAMETER, "OPEN_NODES" ) ) {
63                 openNodes = evt.getParams().getVector( PARAMETER, "OPEN_NODES" );
64             }
65             else {
66                 openNodes.put( 0, evt.getParameter( PARAMETER, "OPEN_NODES" ) );
67             }
68             openNodes = TreeUtils.updateOpenNodes( openNodes, openNodeId, closeNodeId, dest, TKDBContentTreeIsChild.class );
69
70             // und fuer jedes element wird
71
// dann mit TKDBContentTreeGetOpen der entspr. teilbaum geholt
72
// die teilbaeume muessen jetzt gemischt werden
73
TKDBResult tree = null;
74             TKDBResult branch;
75             TKQuery q;
76             int size = openNodes.size();
77             for( int i = 0; i<size ; i++ ) {
78                 String JavaDoc id = (String JavaDoc) openNodes.get( i );
79                 if( id!=null ) {
80                     q = TKDBManager.newQuery(TKDBContentTreeGetOpen.class);
81                     if( id.equals( "-1" ) ) {
82                         q.setQueryParams( "NODE_ID", TKNull.NULL );
83                     }
84                     else {
85                         q.setQueryParams( "NODE_ID", new Integer JavaDoc(id) );
86                     }
87                     q.execute();
88                     branch = new TKDBResult( q.fetchResultSet() );
89                     if( tree != null ) {
90                         tree = TreeUtils.mergeIntoTree( tree, branch, "CONTENT_NODE_ID" );
91                     }
92                     else {
93                         tree = branch;
94                     }
95                 }
96             }
97
98             // die liste der jetzt offenen nodes kommt ins template
99
TKStandardIterator iterator1 = new TKStandardIterator( openNodes, left.getListIterator(), "OPEN_NODES", "OPEN_NODES" );
100             left.setListIterator( iterator1 );
101
102             int maxDepth = TreeUtils.getMaxDepth( tree, "CONTENT" );
103             TKOpenContentTreeIterator iterator2 = new TKOpenContentTreeIterator( tree, left.getListIterator(), "CE_NODE_LIST", Integer.parseInt( dest ), maxDepth );
104             left.setListIterator( iterator2 );
105
106             left.set( "MAXDEPTH_PLUS_ONE", Integer.toString(maxDepth+1));
107             left.set( "MAXDEPTH_PLUS_TWO", Integer.toString(maxDepth+2));
108
109             left.set( "RTARGET", RIGHT_TARGET );
110             left.set( "LTARGET", LEFT_TARGET );
111             WebManEvent.fillEventsIntoTemplate(evt.getRemoteUser(), left, ACCESS_CONTROL);
112             evt.finishTemplate(left);
113         }
114         catch (Throwable JavaDoc e)
115         {
116             // TO DO : Analyze Exception !
117
throw WebmanExceptionHandler.getException(e);
118         }
119     }
120     
121     public boolean isHandler(TKEvent evt)
122     {
123         return evt.getName().equalsIgnoreCase("AC_CE_OPEN_MULTDIR");
124     }
125 }
126
Popular Tags