<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    package org.apache.archiva.indexer.merger;<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 java.io.File;<a name="line.21"></a>
<FONT color="green">022</FONT>    import java.io.Serializable;<a name="line.22"></a>
<FONT color="green">023</FONT>    import java.util.Date;<a name="line.23"></a>
<FONT color="green">024</FONT>    <a name="line.24"></a>
<FONT color="green">025</FONT>    /**<a name="line.25"></a>
<FONT color="green">026</FONT>     * @author Olivier Lamy<a name="line.26"></a>
<FONT color="green">027</FONT>     */<a name="line.27"></a>
<FONT color="green">028</FONT>    public class TemporaryGroupIndex<a name="line.28"></a>
<FONT color="green">029</FONT>        implements Serializable<a name="line.29"></a>
<FONT color="green">030</FONT>    {<a name="line.30"></a>
<FONT color="green">031</FONT>        private long creationTime = new Date().getTime();<a name="line.31"></a>
<FONT color="green">032</FONT>    <a name="line.32"></a>
<FONT color="green">033</FONT>        private File directory;<a name="line.33"></a>
<FONT color="green">034</FONT>    <a name="line.34"></a>
<FONT color="green">035</FONT>        private String indexId;<a name="line.35"></a>
<FONT color="green">036</FONT>    <a name="line.36"></a>
<FONT color="green">037</FONT>        private String groupId;<a name="line.37"></a>
<FONT color="green">038</FONT>    <a name="line.38"></a>
<FONT color="green">039</FONT>        private int mergedIndexTtl;<a name="line.39"></a>
<FONT color="green">040</FONT>    <a name="line.40"></a>
<FONT color="green">041</FONT>        public TemporaryGroupIndex(File directory, String indexId, String groupId, int mergedIndexTtl)<a name="line.41"></a>
<FONT color="green">042</FONT>        {<a name="line.42"></a>
<FONT color="green">043</FONT>            this.directory = directory;<a name="line.43"></a>
<FONT color="green">044</FONT>            this.indexId = indexId;<a name="line.44"></a>
<FONT color="green">045</FONT>            this.groupId = groupId;<a name="line.45"></a>
<FONT color="green">046</FONT>            this.mergedIndexTtl = mergedIndexTtl;<a name="line.46"></a>
<FONT color="green">047</FONT>        }<a name="line.47"></a>
<FONT color="green">048</FONT>    <a name="line.48"></a>
<FONT color="green">049</FONT>        public long getCreationTime()<a name="line.49"></a>
<FONT color="green">050</FONT>        {<a name="line.50"></a>
<FONT color="green">051</FONT>            return creationTime;<a name="line.51"></a>
<FONT color="green">052</FONT>        }<a name="line.52"></a>
<FONT color="green">053</FONT>    <a name="line.53"></a>
<FONT color="green">054</FONT>        public TemporaryGroupIndex setCreationTime( long creationTime )<a name="line.54"></a>
<FONT color="green">055</FONT>        {<a name="line.55"></a>
<FONT color="green">056</FONT>            this.creationTime = creationTime;<a name="line.56"></a>
<FONT color="green">057</FONT>            return this;<a name="line.57"></a>
<FONT color="green">058</FONT>        }<a name="line.58"></a>
<FONT color="green">059</FONT>    <a name="line.59"></a>
<FONT color="green">060</FONT>        public File getDirectory()<a name="line.60"></a>
<FONT color="green">061</FONT>        {<a name="line.61"></a>
<FONT color="green">062</FONT>            return directory;<a name="line.62"></a>
<FONT color="green">063</FONT>        }<a name="line.63"></a>
<FONT color="green">064</FONT>    <a name="line.64"></a>
<FONT color="green">065</FONT>        public TemporaryGroupIndex setDirectory( File directory )<a name="line.65"></a>
<FONT color="green">066</FONT>        {<a name="line.66"></a>
<FONT color="green">067</FONT>            this.directory = directory;<a name="line.67"></a>
<FONT color="green">068</FONT>            return this;<a name="line.68"></a>
<FONT color="green">069</FONT>        }<a name="line.69"></a>
<FONT color="green">070</FONT>    <a name="line.70"></a>
<FONT color="green">071</FONT>        public String getIndexId()<a name="line.71"></a>
<FONT color="green">072</FONT>        {<a name="line.72"></a>
<FONT color="green">073</FONT>            return indexId;<a name="line.73"></a>
<FONT color="green">074</FONT>        }<a name="line.74"></a>
<FONT color="green">075</FONT>    <a name="line.75"></a>
<FONT color="green">076</FONT>        public TemporaryGroupIndex setIndexId( String indexId )<a name="line.76"></a>
<FONT color="green">077</FONT>        {<a name="line.77"></a>
<FONT color="green">078</FONT>            this.indexId = indexId;<a name="line.78"></a>
<FONT color="green">079</FONT>            return this;<a name="line.79"></a>
<FONT color="green">080</FONT>        }<a name="line.80"></a>
<FONT color="green">081</FONT>    <a name="line.81"></a>
<FONT color="green">082</FONT>        public String getGroupId()<a name="line.82"></a>
<FONT color="green">083</FONT>        {<a name="line.83"></a>
<FONT color="green">084</FONT>            return groupId;<a name="line.84"></a>
<FONT color="green">085</FONT>        }<a name="line.85"></a>
<FONT color="green">086</FONT>    <a name="line.86"></a>
<FONT color="green">087</FONT>        public void setGroupId( String groupId )<a name="line.87"></a>
<FONT color="green">088</FONT>        {<a name="line.88"></a>
<FONT color="green">089</FONT>            this.groupId = groupId;<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>        public int getMergedIndexTtl() {<a name="line.92"></a>
<FONT color="green">093</FONT>            return mergedIndexTtl;<a name="line.93"></a>
<FONT color="green">094</FONT>        }<a name="line.94"></a>
<FONT color="green">095</FONT>    <a name="line.95"></a>
<FONT color="green">096</FONT>        public void setMergedIndexTtl(int mergedIndexTtl) {<a name="line.96"></a>
<FONT color="green">097</FONT>            this.mergedIndexTtl = mergedIndexTtl;<a name="line.97"></a>
<FONT color="green">098</FONT>        }<a name="line.98"></a>
<FONT color="green">099</FONT>    <a name="line.99"></a>
<FONT color="green">100</FONT>        @Override<a name="line.100"></a>
<FONT color="green">101</FONT>        public int hashCode()<a name="line.101"></a>
<FONT color="green">102</FONT>        {<a name="line.102"></a>
<FONT color="green">103</FONT>            return Long.toString( creationTime ).hashCode();<a name="line.103"></a>
<FONT color="green">104</FONT>        }<a name="line.104"></a>
<FONT color="green">105</FONT>    <a name="line.105"></a>
<FONT color="green">106</FONT>        @Override<a name="line.106"></a>
<FONT color="green">107</FONT>        public boolean equals( Object o )<a name="line.107"></a>
<FONT color="green">108</FONT>        {<a name="line.108"></a>
<FONT color="green">109</FONT>            if ( this == o )<a name="line.109"></a>
<FONT color="green">110</FONT>            {<a name="line.110"></a>
<FONT color="green">111</FONT>                return true;<a name="line.111"></a>
<FONT color="green">112</FONT>            }<a name="line.112"></a>
<FONT color="green">113</FONT>            if ( !( o instanceof TemporaryGroupIndex ) )<a name="line.113"></a>
<FONT color="green">114</FONT>            {<a name="line.114"></a>
<FONT color="green">115</FONT>                return false;<a name="line.115"></a>
<FONT color="green">116</FONT>            }<a name="line.116"></a>
<FONT color="green">117</FONT>            return this.creationTime == ( (TemporaryGroupIndex) o ).creationTime;<a name="line.117"></a>
<FONT color="green">118</FONT>        }<a name="line.118"></a>
<FONT color="green">119</FONT>    }<a name="line.119"></a>




























































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