<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    package org.apache.archiva.webdav.util;<a name="line.1"></a>
<FONT color="green">002</FONT>    /*<a name="line.2"></a>
<FONT color="green">003</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
<FONT color="green">004</FONT>     * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
<FONT color="green">005</FONT>     * distributed with this work for additional information<a name="line.5"></a>
<FONT color="green">006</FONT>     * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
<FONT color="green">007</FONT>     * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
<FONT color="green">008</FONT>     * "License"); you may not use this file except in compliance<a name="line.8"></a>
<FONT color="green">009</FONT>     * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
<FONT color="green">010</FONT>     *<a name="line.10"></a>
<FONT color="green">011</FONT>     *   http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
<FONT color="green">012</FONT>     *<a name="line.12"></a>
<FONT color="green">013</FONT>     * Unless required by applicable law or agreed to in writing,<a name="line.13"></a>
<FONT color="green">014</FONT>     * software distributed under the License is distributed on an<a name="line.14"></a>
<FONT color="green">015</FONT>     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.15"></a>
<FONT color="green">016</FONT>     * KIND, either express or implied.  See the License for the<a name="line.16"></a>
<FONT color="green">017</FONT>     * specific language governing permissions and limitations<a name="line.17"></a>
<FONT color="green">018</FONT>     * under the License.<a name="line.18"></a>
<FONT color="green">019</FONT>     */<a name="line.19"></a>
<FONT color="green">020</FONT>    <a name="line.20"></a>
<FONT color="green">021</FONT>    import org.apache.archiva.indexer.merger.IndexMerger;<a name="line.21"></a>
<FONT color="green">022</FONT>    import org.apache.archiva.indexer.merger.TemporaryGroupIndex;<a name="line.22"></a>
<FONT color="green">023</FONT>    import org.slf4j.Logger;<a name="line.23"></a>
<FONT color="green">024</FONT>    import org.slf4j.LoggerFactory;<a name="line.24"></a>
<FONT color="green">025</FONT>    import org.springframework.web.context.WebApplicationContext;<a name="line.25"></a>
<FONT color="green">026</FONT>    import org.springframework.web.context.support.WebApplicationContextUtils;<a name="line.26"></a>
<FONT color="green">027</FONT>    <a name="line.27"></a>
<FONT color="green">028</FONT>    import javax.servlet.http.HttpSessionEvent;<a name="line.28"></a>
<FONT color="green">029</FONT>    import javax.servlet.http.HttpSessionListener;<a name="line.29"></a>
<FONT color="green">030</FONT>    import java.util.HashMap;<a name="line.30"></a>
<FONT color="green">031</FONT>    import java.util.Map;<a name="line.31"></a>
<FONT color="green">032</FONT>    <a name="line.32"></a>
<FONT color="green">033</FONT>    /**<a name="line.33"></a>
<FONT color="green">034</FONT>     * this http session listener will delete repository group index requested by a user<a name="line.34"></a>
<FONT color="green">035</FONT>     * at this end of the http session<a name="line.35"></a>
<FONT color="green">036</FONT>     *<a name="line.36"></a>
<FONT color="green">037</FONT>     * @author Olivier Lamy<a name="line.37"></a>
<FONT color="green">038</FONT>     * @since 1.4-M2<a name="line.38"></a>
<FONT color="green">039</FONT>     */<a name="line.39"></a>
<FONT color="green">040</FONT>    public class TemporaryGroupIndexSessionCleaner<a name="line.40"></a>
<FONT color="green">041</FONT>        implements HttpSessionListener<a name="line.41"></a>
<FONT color="green">042</FONT>    {<a name="line.42"></a>
<FONT color="green">043</FONT>    <a name="line.43"></a>
<FONT color="green">044</FONT>        private Logger log = LoggerFactory.getLogger( getClass() );<a name="line.44"></a>
<FONT color="green">045</FONT>    <a name="line.45"></a>
<FONT color="green">046</FONT>        private IndexMerger indexMerger;<a name="line.46"></a>
<FONT color="green">047</FONT>    <a name="line.47"></a>
<FONT color="green">048</FONT>        public static final String TEMPORARY_INDEX_SESSION_KEY = TemporaryGroupIndexSessionCleaner.class.getName();<a name="line.48"></a>
<FONT color="green">049</FONT>    <a name="line.49"></a>
<FONT color="green">050</FONT>        public void sessionCreated( HttpSessionEvent httpSessionEvent )<a name="line.50"></a>
<FONT color="green">051</FONT>        {<a name="line.51"></a>
<FONT color="green">052</FONT>            // ensure the map is here to avoid NPE<a name="line.52"></a>
<FONT color="green">053</FONT>            if ( httpSessionEvent.getSession().getAttribute( TEMPORARY_INDEX_SESSION_KEY ) == null )<a name="line.53"></a>
<FONT color="green">054</FONT>            {<a name="line.54"></a>
<FONT color="green">055</FONT>                httpSessionEvent.getSession().setAttribute( TEMPORARY_INDEX_SESSION_KEY,<a name="line.55"></a>
<FONT color="green">056</FONT>                                                            new HashMap&lt;String, TemporaryGroupIndex&gt;() );<a name="line.56"></a>
<FONT color="green">057</FONT>            }<a name="line.57"></a>
<FONT color="green">058</FONT>    <a name="line.58"></a>
<FONT color="green">059</FONT>            if ( indexMerger == null )<a name="line.59"></a>
<FONT color="green">060</FONT>            {<a name="line.60"></a>
<FONT color="green">061</FONT>                WebApplicationContext webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(<a name="line.61"></a>
<FONT color="green">062</FONT>                    httpSessionEvent.getSession().getServletContext() );<a name="line.62"></a>
<FONT color="green">063</FONT>                indexMerger = webApplicationContext.getBean( IndexMerger.class );<a name="line.63"></a>
<FONT color="green">064</FONT>            }<a name="line.64"></a>
<FONT color="green">065</FONT>        }<a name="line.65"></a>
<FONT color="green">066</FONT>    <a name="line.66"></a>
<FONT color="green">067</FONT>        public void sessionDestroyed( HttpSessionEvent httpSessionEvent )<a name="line.67"></a>
<FONT color="green">068</FONT>        {<a name="line.68"></a>
<FONT color="green">069</FONT>            Map&lt;String, TemporaryGroupIndex&gt; tempFilesPerKey =<a name="line.69"></a>
<FONT color="green">070</FONT>                (Map&lt;String, TemporaryGroupIndex&gt;) httpSessionEvent.getSession().getAttribute(<a name="line.70"></a>
<FONT color="green">071</FONT>                    TEMPORARY_INDEX_SESSION_KEY );<a name="line.71"></a>
<FONT color="green">072</FONT>    <a name="line.72"></a>
<FONT color="green">073</FONT>            for ( TemporaryGroupIndex temporaryGroupIndex : tempFilesPerKey.values() )<a name="line.73"></a>
<FONT color="green">074</FONT>            {<a name="line.74"></a>
<FONT color="green">075</FONT>                log.info( "cleanup temporaryGroupIndex {} directory {}", temporaryGroupIndex.getIndexId(),<a name="line.75"></a>
<FONT color="green">076</FONT>                          temporaryGroupIndex.getDirectory().getAbsolutePath() );<a name="line.76"></a>
<FONT color="green">077</FONT>                getIndexMerger( httpSessionEvent ).cleanTemporaryGroupIndex( temporaryGroupIndex );<a name="line.77"></a>
<FONT color="green">078</FONT>            }<a name="line.78"></a>
<FONT color="green">079</FONT>        }<a name="line.79"></a>
<FONT color="green">080</FONT>    <a name="line.80"></a>
<FONT color="green">081</FONT>        private IndexMerger getIndexMerger( HttpSessionEvent httpSessionEvent )<a name="line.81"></a>
<FONT color="green">082</FONT>        {<a name="line.82"></a>
<FONT color="green">083</FONT>            if ( indexMerger == null )<a name="line.83"></a>
<FONT color="green">084</FONT>            {<a name="line.84"></a>
<FONT color="green">085</FONT>                WebApplicationContext webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(<a name="line.85"></a>
<FONT color="green">086</FONT>                    httpSessionEvent.getSession().getServletContext() );<a name="line.86"></a>
<FONT color="green">087</FONT>                indexMerger = webApplicationContext.getBean( IndexMerger.class );<a name="line.87"></a>
<FONT color="green">088</FONT>            }<a name="line.88"></a>
<FONT color="green">089</FONT>            return indexMerger;<a name="line.89"></a>
<FONT color="green">090</FONT>        }<a name="line.90"></a>
<FONT color="green">091</FONT>    }<a name="line.91"></a>
<FONT color="green">092</FONT>    <a name="line.92"></a>




























































</PRE>
</BODY>
</HTML>