1 package org.apache.archiva.webdav.util;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 import org.apache.archiva.indexer.merger.IndexMerger;
22 import org.apache.archiva.indexer.merger.TemporaryGroupIndex;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25 import org.springframework.web.context.WebApplicationContext;
26 import org.springframework.web.context.support.WebApplicationContextUtils;
27
28 import javax.servlet.http.HttpSessionEvent;
29 import javax.servlet.http.HttpSessionListener;
30 import java.util.HashMap;
31 import java.util.Map;
32
33
34
35
36
37
38
39
40 public class TemporaryGroupIndexSessionCleaner
41 implements HttpSessionListener
42 {
43
44 private Logger log = LoggerFactory.getLogger( getClass() );
45
46 private IndexMerger indexMerger;
47
48 public static final String TEMPORARY_INDEX_SESSION_KEY = TemporaryGroupIndexSessionCleaner.class.getName();
49
50 public void sessionCreated( HttpSessionEvent httpSessionEvent )
51 {
52
53 if ( httpSessionEvent.getSession().getAttribute( TEMPORARY_INDEX_SESSION_KEY ) == null )
54 {
55 httpSessionEvent.getSession().setAttribute( TEMPORARY_INDEX_SESSION_KEY,
56 new HashMap<String, TemporaryGroupIndex>() );
57 }
58
59 if ( indexMerger == null )
60 {
61 WebApplicationContext webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(
62 httpSessionEvent.getSession().getServletContext() );
63 indexMerger = webApplicationContext.getBean( IndexMerger.class );
64 }
65 }
66
67 public void sessionDestroyed( HttpSessionEvent httpSessionEvent )
68 {
69 Map<String, TemporaryGroupIndex> tempFilesPerKey =
70 (Map<String, TemporaryGroupIndex>) httpSessionEvent.getSession().getAttribute(
71 TEMPORARY_INDEX_SESSION_KEY );
72
73 for ( TemporaryGroupIndex temporaryGroupIndex : tempFilesPerKey.values() )
74 {
75 log.info( "cleanup temporaryGroupIndex {} directory {}", temporaryGroupIndex.getIndexId(),
76 temporaryGroupIndex.getDirectory().getAbsolutePath() );
77 getIndexMerger( httpSessionEvent ).cleanTemporaryGroupIndex( temporaryGroupIndex );
78 }
79 }
80
81 private IndexMerger getIndexMerger( HttpSessionEvent httpSessionEvent )
82 {
83 if ( indexMerger == null )
84 {
85 WebApplicationContext webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(
86 httpSessionEvent.getSession().getServletContext() );
87 indexMerger = webApplicationContext.getBean( IndexMerger.class );
88 }
89 return indexMerger;
90 }
91 }
92