KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > webman > sitetree > eventhandler > STOpenMultDirHandler


1 package de.webman.sitetree.eventhandler;
2
3 import com.teamkonzept.web.*;
4 import com.teamkonzept.webman.*;
5 import com.teamkonzept.webman.db.TKWebmanDBManager;
6 import com.teamkonzept.webman.mainint.*;
7 import com.teamkonzept.webman.mainint.db.*;
8 import com.teamkonzept.webman.mainint.db.queries.*;
9 import com.teamkonzept.webman.mainint.events.*;
10 import com.teamkonzept.lib.*;
11 import com.teamkonzept.field.*;
12 import com.teamkonzept.field.db.*;
13 import com.teamkonzept.db.*;
14 import com.teamkonzept.publishing.markups.*;
15 import de.webman.acl.*;
16
17 /**
18  * Opens and closes nodes in the site structure.
19  *
20  * @author $Author: uli $
21  * @version $Revision: 1.6 $
22  */

23 public class STOpenMultDirHandler
24     extends DefaultEventHandler
25     implements ParameterTypes,
26                FrameConstants,
27                DatabaseDefaults
28 {
29
30     /**
31      * The singleton instance.
32      */

33     private static final STOpenMultDirHandler INSTANCE = new STOpenMultDirHandler();
34
35     /**
36      * Avoids outside intstantiation.
37      */

38     private STOpenMultDirHandler()
39     {
40         // NOP
41
}
42
43     /**
44      * Returns the singleton instance.
45      *
46      * @return the singleton instance.
47      */

48     public static STOpenMultDirHandler getInstance ()
49     {
50         return INSTANCE;
51     }
52
53     /**
54      * Handles the specified event.
55      *
56      * @param event the event to be handled.
57      * @throws TKException if any error occurred during event handling.
58      */

59     public void handleEvent (TKEvent event)
60         throws TKException
61     {
62         try
63         {
64             WebManEvent.checkEvent(event.getRemoteUser(), event.getName(), ContextConstants.SITE_TREE);
65
66             // oeffnet oder schliesst ein Verzeichnis im Tree -- kann mehrere Aeste oeffnen --
67
// NODE_ID ist die id des jeweils zu oeffnenden node:
68
// - bei geschlossenen dirs ist die NODE_ID = der CONTENT_NODE_ID,
69
// d.h. dass das noch geschlossene dir geoeffnet wird
70
// - bei offenen dirs ist die NODE_ID die id des parents des zu schliessenden node,
71
// d.h. dass nicht explizit geschlossen wird, sondern das parentdir des noch offenen
72
// dirs geoeffnet wird, damit ist das zu schliessende dir dann auch zu
73
// openNodeId: enthaelt die id des neu zu oeffnenden node
74
// closeNodeId: enthaelt die id des zu schliessenden node bei einem geschlossenen node, -1 bei einem offenen node
75
TKHTMLTemplate left = event.getPrepHTMLTemplate("st_nodeList.tmpl");
76             String JavaDoc destination = event.getParameter(PARAMETER, "SITE_NODE_ID");
77             String JavaDoc openNodeId = event.getParameter(PARAMETER, "NODE_ID");
78             String JavaDoc closeNodeId = event.getParameter(PARAMETER, "SITE_NODE_PARENT");
79
80             TKVector openNodes = new TKVector();
81
82             if (event.getParams().hasMultiple(PARAMETER, "OPEN_NODES"))
83             {
84                 openNodes = event.getParams().getVector(PARAMETER, "OPEN_NODES");
85             }
86             else
87             {
88                 openNodes.put(0, event.getParameter(PARAMETER, "OPEN_NODES"));
89             }
90
91             openNodes = TreeUtils.updateOpenNodes(openNodes, openNodeId, closeNodeId, destination, TKDBSiteTreeIsChild.class);
92
93             // und fuer jedes element wird
94
// dann mit TKDBContentTreeGetOpen der entspr. teilbaum geholt
95
// die teilbaeume muessen jetzt gemischt werden (gleiche teile raus)
96
TKDBResult tree = null;
97             TKDBResult branch = null;
98             TKQuery q = null;
99             int size = openNodes.size();
100
101             for (int i = 0; i<size ; i++)
102             {
103                 String JavaDoc id = (String JavaDoc) openNodes.get(i);
104
105                 if (id != null)
106                 {
107                     q = TKDBManager.newQuery(TKDBSiteTreeGetOpen.class);
108
109                     if (id.equals("-1"))
110                     {
111                         q.setQueryParams("NODE_ID", TKNull.NULL);
112                     }
113                     else
114                     {
115                         q.setQueryParams("NODE_ID", new Integer JavaDoc(id));
116                     }
117
118                     q.execute();
119                     branch = new TKDBResult(q.fetchResultSet());
120                     tree = tree == null
121                                 ? branch
122                                 : TreeUtils.mergeIntoTree(tree, branch, "SITE_NODE_ID");
123                 }
124             }
125
126             int maxDepth = TreeUtils.getMaxDepth(tree, "SITE");
127
128             left.setListIterator(new TKOpenSiteTreeIterator(tree, left.getListIterator(), "ST_NODE_LIST", Integer.parseInt(destination), maxDepth));
129             left.setListIterator(new TKStandardIterator(openNodes, left.getListIterator(), "OPEN_NODES", "OPEN_NODES"));
130
131             left.set("MAXDEPTH_PLUS_ONE", Integer.toString(maxDepth+1));
132             left.set("MAXDEPTH_PLUS_TWO", Integer.toString(maxDepth+2));
133             left.set("RTARGET", RIGHT_TARGET);
134             left.set("LTARGET", LEFT_TARGET);
135
136             if (LoginFactory.getInstance()
137                             .getLogin(event.getRemoteUser())
138                             .isAllowed(EventFactory.getInstance()
139                                                    .getEvent("DU_START")
140                                                    .getID(),
141                                        ContextConstants.DUPLICATION_TOOL))
142             {
143                 left.set("DU_START", "1");
144             }
145
146             if (LoginFactory.getInstance()
147                             .getLogin(event.getRemoteUser())
148                             .isAllowed(EventFactory.getInstance()
149                                                    .getEvent("GR_GENERATE")
150                                                    .getID(),
151                                        ContextConstants.GENERATOR))
152             {
153                 left.set("GR_GENERATE", "1");
154             }
155
156             WebManEvent.fillEventsIntoTemplate(event.getRemoteUser(), left, SITE_TREE);
157             event.finishTemplate(left);
158         }
159         catch (Throwable JavaDoc e)
160         {
161             // TO DO : Analyze Exception !
162
throw WebmanExceptionHandler.getException(e);
163         }
164     }
165
166     /**
167      * Checks wether this handler is capable to handle the specified event.
168      *
169      * @param event the event to be handled.
170      * @return <CODE>true</CODE> if this handler is capable to handle the
171      * specified event, otherwise <CODE>false</CODE>.
172      */

173     public boolean isHandler (TKEvent event)
174     {
175         return event.getName().equalsIgnoreCase("ST_OPEN_MULTDIR");
176     }
177
178 }
179
Popular Tags