trunk/com/so/news/storage/Purger.java
author chris <chris@marvin>
Tue Jan 20 10:21:03 2009 +0100 (2009-01-20)
changeset 0 f907866f0e4b
permissions -rw-r--r--
Initial import.
     1 /*
     2  *   StarOffice News Server
     3  *   see AUTHORS for the list of contributors
     4  *
     5  *   This program is free software: you can redistribute it and/or modify
     6  *   it under the terms of the GNU General Public License as published by
     7  *   the Free Software Foundation, either version 3 of the License, or
     8  *   (at your option) any later version.
     9  *
    10  *   This program is distributed in the hope that it will be useful,
    11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13  *   GNU General Public License for more details.
    14  *
    15  *   You should have received a copy of the GNU General Public License
    16  *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
    17  */
    18 
    19 package com.so.news.storage;
    20 
    21 import java.util.Date;
    22 
    23 import com.so.news.Config;
    24 import com.so.news.Debug;
    25 
    26 /**
    27  * The purger is started in configurable intervals to search
    28  * for old messages that can be purged.
    29  * @author Christian Lins
    30  */
    31 public class Purger extends Thread
    32 {
    33   private int interval;
    34   
    35   public Purger()
    36   {
    37     setDaemon(true); // Daemons run only along with the main thread
    38     setPriority(Thread.MIN_PRIORITY);
    39 
    40     this.interval = Config.getInstance().get("n3tpd.article.lifetime", 30) * 24 * 60 * 60 * 1000; // Milliseconds
    41     if(this.interval < 0)
    42       this.interval = Integer.MAX_VALUE;
    43   }
    44   
    45   /**
    46    * Runloop of this Purger class.
    47    */
    48   @Override
    49   public void run()
    50   {
    51     for(;;)
    52     {
    53       purge();
    54 
    55       try
    56       {
    57         sleep(interval);
    58       }
    59       catch(InterruptedException e)
    60       {
    61         e.printStackTrace(Debug.getInstance().getStream());
    62       }
    63     }
    64   }
    65 
    66   /**
    67    * Loops through all messages and deletes them if their time
    68    * has come.
    69    */
    70   private void purge()
    71   {
    72     Debug.getInstance().log("Purging old messages...");
    73 
    74     try
    75     {
    76       for(;;)
    77       {
    78         Article art = null; //Database.getInstance().getOldestArticle();
    79         if(art == null) // No articles in the database
    80           break;
    81         
    82         if(art.getDate().getTime() < (new Date().getTime() + this.interval))
    83         {
    84           Database.getInstance().delete(art);
    85           Debug.getInstance().log("Deleted: " + art);
    86         }
    87         else
    88           break;
    89       }
    90     }
    91     catch(Exception ex)
    92     {
    93       ex.printStackTrace();
    94     }
    95   }
    96 }