31
31
import java .util .Map ;
32
32
import java .util .Set ;
33
33
import java .util .function .Function ;
34
- import java .util .stream .Collectors ;
35
34
36
35
import javax .servlet .ServletContext ;
37
36
@@ -188,13 +187,13 @@ public static class ControllerConfig {
188
187
private String defaultRequest ;
189
188
private String statusCode ;
190
189
private List <URL > includes = new ArrayList <>();
191
- private final Map <String , Event > firstVisitEventList = new LinkedHashMap <>();
192
- private final Map <String , Event > preprocessorEventList = new LinkedHashMap <>();
193
- private final Map <String , Event > postprocessorEventList = new LinkedHashMap <>();
194
- private final Map <String , Event > afterLoginEventList = new LinkedHashMap <>();
195
- private final Map <String , Event > beforeLogoutEventList = new LinkedHashMap <>();
196
- private final Map <String , String > eventHandlerMap = new HashMap <>();
197
- private final Map <String , String > viewHandlerMap = new HashMap <>();
190
+ private Map <String , Event > firstVisitEventList = new LinkedHashMap <>();
191
+ private Map <String , Event > preprocessorEventList = new LinkedHashMap <>();
192
+ private Map <String , Event > postprocessorEventList = new LinkedHashMap <>();
193
+ private Map <String , Event > afterLoginEventList = new LinkedHashMap <>();
194
+ private Map <String , Event > beforeLogoutEventList = new LinkedHashMap <>();
195
+ private Map <String , String > eventHandlerMap = new HashMap <>();
196
+ private Map <String , String > viewHandlerMap = new HashMap <>();
198
197
private MultivaluedMapContext <String , RequestMap > requestMapMap = new MultivaluedMapContext <>();
199
198
private Map <String , ViewMap > viewMapMap = new HashMap <>();
200
199
@@ -310,35 +309,6 @@ public Map<String, ViewMap> getViewMapMap() throws WebAppConfigurationException
310
309
return pushIncludes (ccfg -> ccfg .viewMapMap );
311
310
}
312
311
313
- /**
314
- * Computes the name of an XML element.
315
- *
316
- * @param el the element containing "type" and/or "name" attributes
317
- * @return the derived name.
318
- * @throws NullPointerException when {@code el} is {@code null}
319
- */
320
- private static String elementToName (Element el ) {
321
- String eventName = el .getAttribute ("name" );
322
- return eventName .isEmpty ()
323
- ? el .getAttribute ("type" ) + "::" + el .getAttribute ("path" ) + "::" + el .getAttribute ("invoke" )
324
- : eventName ;
325
- }
326
-
327
- /**
328
- * Collects some events defined in an XML tree.
329
- *
330
- * @param root the root of the XML tree
331
- * @param childName the name of the element inside {@code root} containing the events
332
- * @return a map associating element derived names to an event objects.
333
- */
334
- private static void collectEvents (Element root , String childName , Map <String , Event > coll ) {
335
- Element child = UtilXml .firstChildElement (root , childName );
336
- if (child != null ) {
337
- UtilXml .childElementList (child , "event" ).stream ()
338
- .forEachOrdered (ev -> coll .put (elementToName (ev ), new Event (ev )));
339
- }
340
- }
341
-
342
312
private void loadGeneralConfig (Element rootElement ) {
343
313
this .errorpage = UtilXml .childElementValue (rootElement , "errorpage" );
344
314
this .statusCode = UtilXml .childElementValue (rootElement , "status-code" );
@@ -352,19 +322,75 @@ private void loadGeneralConfig(Element rootElement) {
352
322
if (defaultRequestElement != null ) {
353
323
this .defaultRequest = defaultRequestElement .getAttribute ("request-uri" );
354
324
}
355
- collectEvents (rootElement , "firstvisit" , firstVisitEventList );
356
- collectEvents (rootElement , "preprocessor" , preprocessorEventList );
357
- collectEvents (rootElement , "postprocessor" , postprocessorEventList );
358
- collectEvents (rootElement , "after-login" , afterLoginEventList );
359
- collectEvents (rootElement , "before-logout" , beforeLogoutEventList );
325
+ // first visit event
326
+ Element firstvisitElement = UtilXml .firstChildElement (rootElement , "firstvisit" );
327
+ if (firstvisitElement != null ) {
328
+ for (Element eventElement : UtilXml .childElementList (firstvisitElement , "event" )) {
329
+ String eventName = eventElement .getAttribute ("name" );
330
+ if (eventName .isEmpty ()) {
331
+ eventName = eventElement .getAttribute ("type" ) + "::" + eventElement .getAttribute ("path" ) + "::" + eventElement .getAttribute ("invoke" );
332
+ }
333
+ this .firstVisitEventList .put (eventName , new Event (eventElement ));
334
+ }
335
+ }
336
+ // preprocessor events
337
+ Element preprocessorElement = UtilXml .firstChildElement (rootElement , "preprocessor" );
338
+ if (preprocessorElement != null ) {
339
+ for (Element eventElement : UtilXml .childElementList (preprocessorElement , "event" )) {
340
+ String eventName = eventElement .getAttribute ("name" );
341
+ if (eventName .isEmpty ()) {
342
+ eventName = eventElement .getAttribute ("type" ) + "::" + eventElement .getAttribute ("path" ) + "::" + eventElement .getAttribute ("invoke" );
343
+ }
344
+ this .preprocessorEventList .put (eventName , new Event (eventElement ));
345
+ }
346
+ }
347
+ // postprocessor events
348
+ Element postprocessorElement = UtilXml .firstChildElement (rootElement , "postprocessor" );
349
+ if (postprocessorElement != null ) {
350
+ for (Element eventElement : UtilXml .childElementList (postprocessorElement , "event" )) {
351
+ String eventName = eventElement .getAttribute ("name" );
352
+ if (eventName .isEmpty ()) {
353
+ eventName = eventElement .getAttribute ("type" ) + "::" + eventElement .getAttribute ("path" ) + "::" + eventElement .getAttribute ("invoke" );
354
+ }
355
+ this .postprocessorEventList .put (eventName , new Event (eventElement ));
356
+ }
357
+ }
358
+ // after-login events
359
+ Element afterLoginElement = UtilXml .firstChildElement (rootElement , "after-login" );
360
+ if (afterLoginElement != null ) {
361
+ for (Element eventElement : UtilXml .childElementList (afterLoginElement , "event" )) {
362
+ String eventName = eventElement .getAttribute ("name" );
363
+ if (eventName .isEmpty ()) {
364
+ eventName = eventElement .getAttribute ("type" ) + "::" + eventElement .getAttribute ("path" ) + "::" + eventElement .getAttribute ("invoke" );
365
+ }
366
+ this .afterLoginEventList .put (eventName , new Event (eventElement ));
367
+ }
368
+ }
369
+ // before-logout events
370
+ Element beforeLogoutElement = UtilXml .firstChildElement (rootElement , "before-logout" );
371
+ if (beforeLogoutElement != null ) {
372
+ for (Element eventElement : UtilXml .childElementList (beforeLogoutElement , "event" )) {
373
+ String eventName = eventElement .getAttribute ("name" );
374
+ if (eventName .isEmpty ()) {
375
+ eventName = eventElement .getAttribute ("type" ) + "::" + eventElement .getAttribute ("path" ) + "::" + eventElement .getAttribute ("invoke" );
376
+ }
377
+ this .beforeLogoutEventList .put (eventName , new Event (eventElement ));
378
+ }
379
+ }
360
380
}
361
381
362
382
private void loadHandlerMap (Element rootElement ) {
363
- Map <Boolean , Map <String , String >> handlers = UtilXml .childElementList (rootElement , "handler" ).stream ()
364
- .collect (Collectors .partitioningBy (el -> "view" .equals (el .getAttribute ("type" )),
365
- Collectors .toMap (el -> el .getAttribute ("name" ), el -> el .getAttribute ("className" ))));
366
- viewHandlerMap .putAll (handlers .get (true ));
367
- eventHandlerMap .putAll (handlers .get (false ));
383
+ for (Element handlerElement : UtilXml .childElementList (rootElement , "handler" )) {
384
+ String name = handlerElement .getAttribute ("name" );
385
+ String type = handlerElement .getAttribute ("type" );
386
+ String className = handlerElement .getAttribute ("class" );
387
+
388
+ if ("view" .equals (type )) {
389
+ this .viewHandlerMap .put (name , className );
390
+ } else {
391
+ this .eventHandlerMap .put (name , className );
392
+ }
393
+ }
368
394
}
369
395
370
396
protected void loadIncludes (Element rootElement ) {
0 commit comments