KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > applications > packaging > providerhandlers > PackageDiscovery


1 /*
2  * This software is OSI Certified Open Source Software.
3  * OSI Certified is a certification mark of the Open Source Initiative.
4  * The license (Mozilla version 1.0) can be read at the MMBase site.
5  * See http://www.MMBase.org/license
6  */

7 package org.mmbase.applications.packaging.providerhandlers;
8
9 import java.util.Iterator JavaDoc;
10
11 import org.mmbase.applications.packaging.BundleManager;
12 import org.mmbase.applications.packaging.PackageManager;
13 import org.mmbase.applications.packaging.ProviderManager;
14 import org.mmbase.util.logging.Logger;
15 import org.mmbase.util.logging.Logging;
16
17 /**
18  * DiskProvider, Handler for Disk Providers. gets packages and bundles from
19  * the provider and feeds them to the package and bundle managers.
20  *
21  * @author Daniel Ockeloen (MMBased)
22  */

23 public class PackageDiscovery implements Runnable JavaDoc {
24     private static Logger log = Logging.getLoggerInstance(PackageDiscovery.class);
25     private Thread JavaDoc kicker;
26     private int delay = 10;
27     private int runtimes = 5;
28     private int runtimecount = 1;
29
30
31     public PackageDiscovery() {
32     start();
33     }
34
35     public void resetSleepCounter() {
36         runtimecount = 1;
37     delay = 10;
38         if (kicker == null) {
39         start();
40         } else {
41             kicker.interrupt();
42         }
43     }
44
45
46     /**
47      * Starts the main Thread.
48      */

49     public void start() {
50         /*
51          * Start up the main thread
52          */

53         if (kicker == null) {
54             kicker = new Thread JavaDoc(this, "package discovery thread");
55             kicker.start();
56         }
57     }
58
59
60     /**
61      * Main loop, exception protected
62      */

63     public void run() {
64         while (kicker != null && runtimes>runtimecount) {
65             try {
66                 getPackages();
67                 runtimecount++;
68                 Thread.sleep(delay * 1000);
69         delay += delay * 2; // wait double the time next time
70
} catch (InterruptedException JavaDoc e) {
71             } catch (Exception JavaDoc e) {
72                 log.error("problem in package discovery thread");
73         }
74         }
75     kicker = null;
76     }
77
78     public void getPackages() {
79         // get all the providers lines up for a call
80
Iterator JavaDoc i = ProviderManager.getProviders();
81         while (i.hasNext()) {
82             ProviderInterface pi = (ProviderInterface)i.next();
83             try {
84             pi.getPackages();
85                 PackageManager.removeOfflinePackages(pi);
86                 BundleManager.removeOfflineBundles(pi);
87             } catch (Exception JavaDoc e) {
88                 log.error("Something went wring in package discovery : "+pi.getPath());
89                 e.printStackTrace();
90             }
91         }
92     }
93
94 }
95
96
Popular Tags