KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > petals > binding > filetransferbc > listeners > FileTransferBCExternalListenerManager


1 /**
2  *
3  */

4 package org.objectweb.petals.binding.filetransferbc.listeners;
5
6 import java.util.HashMap JavaDoc;
7 import java.util.Map JavaDoc;
8 import java.util.logging.Level JavaDoc;
9 import java.util.logging.Logger JavaDoc;
10
11 import org.objectweb.petals.binding.filetransferbc.FileTransferBCException;
12 import org.objectweb.petals.component.common.PEtALSComponentSDKException;
13 import org.objectweb.petals.component.common.bc.AbstractBindingComponent;
14 import org.objectweb.petals.component.common.bc.ExternalListenerManager;
15 import org.objectweb.petals.component.common.util.PetalsExtensionsUtil;
16 import org.objectweb.petals.tools.jbicommon.descriptor.Extensions;
17
18 /**
19  * The external listener manager for file transfer BC.
20  *
21  * @author chamerling - eBM WebSourcing
22  *
23  */

24 public class FileTransferBCExternalListenerManager implements
25     ExternalListenerManager {
26
27     private Logger JavaDoc logger;
28
29     private AbstractBindingComponent component;
30
31     private Map JavaDoc<String JavaDoc, FileTransferBCListener> listeners;
32
33     /**
34      * Creates a new instance of {@link FileTransferBCExternalListenerManager}
35      *
36      * @param logger
37      * @param channel
38      * @param context
39      * @param jbiListener
40      * @param workDir
41      * @param mapDirConfig
42      */

43     public FileTransferBCExternalListenerManager(Logger JavaDoc logger,
44         AbstractBindingComponent component) {
45         this.logger = logger;
46         this.component = component;
47         this.listeners = new HashMap JavaDoc<String JavaDoc, FileTransferBCListener>();
48     }
49
50     /*
51      * (non-Javadoc)
52      *
53      * @see org.objectweb.petals.component.common.bc.ExternalListenerManager#startListening(java.lang.String)
54      */

55     public void startListening(String JavaDoc address, Extensions extensions)
56         throws PEtALSComponentSDKException {
57         logger.log(Level.INFO, "Starting polling directory " + address);
58         
59         long pollingPeriod = retrievePollingPeriod(extensions);
60
61         // Create and register the listener
62
FileTransferBCListener listener = null;
63         if (!listeners.containsKey(address)) {
64             listener = new FileTransferBCListener(logger, component, address, pollingPeriod);
65             try {
66                 listener.init();
67             } catch (FileTransferBCException e) {
68                 throw new PEtALSComponentSDKException(e);
69             }
70             listeners.put(address, listener);
71         } else {
72             throw new PEtALSComponentSDKException(
73                 "A file transfer listener is already started for the following address:"
74                     + address);
75         }
76
77         // Start listening for new files to transfer. Scanning period is set to
78
// 2 seconds.
79
listener.startProcessing();
80     }
81
82     /*
83      * (non-Javadoc)
84      *
85      * @see org.objectweb.petals.component.common.bc.ExternalListenerManager#stopListening(java.lang.String)
86      */

87     public void stopListening(String JavaDoc address) {
88         logger.log(Level.FINE, "Stopping listening on address " + address);
89         FileTransferBCListener listener = listeners.get(address);
90         if (listener != null) {
91             listener.stopProcessing();
92         }
93         listeners.remove(address);
94     }
95
96     /**
97      * Retrieve plooing period from the extensions. If polling is not found, the
98      * default value is set to 2000 ms.
99      *
100      * @param extensions
101      * @return the polling period in ms
102      */

103     private long retrievePollingPeriod(Extensions extensions) {
104         long polling = 2000;
105
106         String JavaDoc tmp = PetalsExtensionsUtil.extractValueFromKeyValueExtension(
107             extensions, "polling-period");
108         if (tmp != null) {
109             try {
110                 polling = Long.parseLong(tmp);
111             } catch (NumberFormatException JavaDoc e) {
112                 logger.log(Level.FINE,
113                     "Polling period parse exception, value is set to "
114                         + polling);
115             }
116         }
117
118         return polling;
119     }
120
121 }
122
Popular Tags