extensions/net.sf.basedb.ftp/trunk/src/net/sf/basedb/clients/ftp/FtpServiceController.java

Code
Comments
Other
Rev Date Author Line
716 02 Jun 08 nicklas 1 /**
716 02 Jun 08 nicklas 2   $Id $
716 02 Jun 08 nicklas 3
716 02 Jun 08 nicklas 4   Copyright (C) 2008 Nicklas Nordborg
716 02 Jun 08 nicklas 5
1381 15 Aug 11 martin 6   This file is part of the FTP Server extension for BASE.
716 02 Jun 08 nicklas 7   Available at http://baseplugins.thep.lu.se/
1381 15 Aug 11 martin 8   BASE main site: http://base.thep.lu.se/
1381 15 Aug 11 martin 9   -----------------------------------------------------------
1381 15 Aug 11 martin 10   
1381 15 Aug 11 martin 11   This is free software; you can redistribute it and/or
716 02 Jun 08 nicklas 12   modify it under the terms of the GNU General Public License
1381 15 Aug 11 martin 13   as published by the Free Software Foundation; either version 3
716 02 Jun 08 nicklas 14   of the License, or (at your option) any later version.
1381 15 Aug 11 martin 15   
1381 15 Aug 11 martin 16   The software is distributed in the hope that it will be useful,
716 02 Jun 08 nicklas 17   but WITHOUT ANY WARRANTY; without even the implied warranty of
716 02 Jun 08 nicklas 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
716 02 Jun 08 nicklas 19   GNU General Public License for more details.
1381 15 Aug 11 martin 20   
1381 15 Aug 11 martin 21   You should have received a copy of the GNU General Public License
1381 15 Aug 11 martin 22   along with BASE. If not, see <http://www.gnu.org/licenses/>.
716 02 Jun 08 nicklas 23
716 02 Jun 08 nicklas 24 */
714 30 May 08 nicklas 25 package net.sf.basedb.clients.ftp;
714 30 May 08 nicklas 26
717 03 Jun 08 nicklas 27 import java.io.InputStream;
717 03 Jun 08 nicklas 28 import java.net.URL;
717 03 Jun 08 nicklas 29
717 03 Jun 08 nicklas 30 import org.slf4j.Logger;
717 03 Jun 08 nicklas 31 import org.slf4j.LoggerFactory;
717 03 Jun 08 nicklas 32
714 30 May 08 nicklas 33 import net.sf.basedb.clients.web.extensions.service.ServiceControllerAction;
717 03 Jun 08 nicklas 34 import net.sf.basedb.core.ConfigurationException;
2312 04 Apr 14 nicklas 35 import net.sf.basedb.core.SessionControl;
714 30 May 08 nicklas 36
716 02 Jun 08 nicklas 37 /**
716 02 Jun 08 nicklas 38   Action for hooking into the BASE extensions system. This action
716 02 Jun 08 nicklas 39   is used to control a single {@link BaseFtpServer} instance, which
716 02 Jun 08 nicklas 40   should already exist. Actions are created by 
716 02 Jun 08 nicklas 41   {@link FtpServiceControllerFactory}.
716 02 Jun 08 nicklas 42   
716 02 Jun 08 nicklas 43   @author Nicklas
716 02 Jun 08 nicklas 44   @version 1.0
716 02 Jun 08 nicklas 45   @see FtpServiceControllerFactory
716 02 Jun 08 nicklas 46 */
714 30 May 08 nicklas 47 public class FtpServiceController 
714 30 May 08 nicklas 48   implements ServiceControllerAction 
714 30 May 08 nicklas 49 {
717 03 Jun 08 nicklas 50   private static final Logger log = LoggerFactory.getLogger(FtpServiceController.class);
714 30 May 08 nicklas 51
741 13 Aug 08 nicklas 52   private final String configFile;
2312 04 Apr 14 nicklas 53   private SessionControl sc;
717 03 Jun 08 nicklas 54   private BaseFtpServer server;
714 30 May 08 nicklas 55   
716 02 Jun 08 nicklas 56   /**
716 02 Jun 08 nicklas 57     Creates a new service controller action for controlling
716 02 Jun 08 nicklas 58     a single ftp server service
741 13 Aug 08 nicklas 59     @param configFile The path to configuration file (classpath based),
741 13 Aug 08 nicklas 60       if null the default (/ftp-config.xml) is used
716 02 Jun 08 nicklas 61   */
741 13 Aug 08 nicklas 62   public FtpServiceController(String configFile)
714 30 May 08 nicklas 63   {
741 13 Aug 08 nicklas 64     this.configFile = configFile == null ? "/ftp-config.xml" : configFile;
714 30 May 08 nicklas 65   }
714 30 May 08 nicklas 66   
716 02 Jun 08 nicklas 67   /*
716 02 Jun 08 nicklas 68     From the ServiceControllerAction interface
716 02 Jun 08 nicklas 69     -------------------------------------------
716 02 Jun 08 nicklas 70   */
714 30 May 08 nicklas 71   @Override
714 30 May 08 nicklas 72   public boolean isRunning() 
714 30 May 08 nicklas 73   {
717 03 Jun 08 nicklas 74     return server != null && server.isRunning();
714 30 May 08 nicklas 75   }
714 30 May 08 nicklas 76
714 30 May 08 nicklas 77   @Override
714 30 May 08 nicklas 78   public void start() 
714 30 May 08 nicklas 79   {
2312 04 Apr 14 nicklas 80     if (sc != null && !BaseFtpServer.isRegisteredAsClient())
2312 04 Apr 14 nicklas 81     {
2312 04 Apr 14 nicklas 82       log.info("Registering BASE FTP Server");
2312 04 Apr 14 nicklas 83       try
2312 04 Apr 14 nicklas 84       {
2312 04 Apr 14 nicklas 85         BaseFtpServer.registerAsClient(sc);
2312 04 Apr 14 nicklas 86       }
2312 04 Apr 14 nicklas 87       catch (Exception ex)
2312 04 Apr 14 nicklas 88       {
2312 04 Apr 14 nicklas 89         log.warn("Could not register FTP Server", ex);
2312 04 Apr 14 nicklas 90       }
2312 04 Apr 14 nicklas 91     }
719 05 Jun 08 nicklas 92     try
719 05 Jun 08 nicklas 93     {
719 05 Jun 08 nicklas 94       getServer().start();
719 05 Jun 08 nicklas 95     }
719 05 Jun 08 nicklas 96     catch (RuntimeException ex)
719 05 Jun 08 nicklas 97     {
719 05 Jun 08 nicklas 98       server = null;
719 05 Jun 08 nicklas 99       throw ex;
719 05 Jun 08 nicklas 100     }
714 30 May 08 nicklas 101   }
714 30 May 08 nicklas 102
714 30 May 08 nicklas 103   @Override
714 30 May 08 nicklas 104   public void stop() 
714 30 May 08 nicklas 105   {
717 03 Jun 08 nicklas 106     if (server != null)
717 03 Jun 08 nicklas 107     {
717 03 Jun 08 nicklas 108       server.stop();
717 03 Jun 08 nicklas 109       server = null;
717 03 Jun 08 nicklas 110     }
714 30 May 08 nicklas 111   }
716 02 Jun 08 nicklas 112   // ----------------------------------------------
714 30 May 08 nicklas 113
716 02 Jun 08 nicklas 114   /*
716 02 Jun 08 nicklas 115     From the Object class
717 03 Jun 08 nicklas 116     ---------------------------------------------
716 02 Jun 08 nicklas 117   */
716 02 Jun 08 nicklas 118   @Override
716 02 Jun 08 nicklas 119   public String toString() 
716 02 Jun 08 nicklas 120   {
716 02 Jun 08 nicklas 121     return "BASE FTP Server";
716 02 Jun 08 nicklas 122   }
716 02 Jun 08 nicklas 123   // ----------------------------------------------
716 02 Jun 08 nicklas 124   
2312 04 Apr 14 nicklas 125   void setSessionControl(SessionControl sc)
2312 04 Apr 14 nicklas 126   {
2312 04 Apr 14 nicklas 127     this.sc = sc;
2312 04 Apr 14 nicklas 128   }
2312 04 Apr 14 nicklas 129   
717 03 Jun 08 nicklas 130   /**
717 03 Jun 08 nicklas 131     Get or create the {@link BaseFtpServer}. A controller can only be associated
717 03 Jun 08 nicklas 132     with a single ftp server.
717 03 Jun 08 nicklas 133   */
717 03 Jun 08 nicklas 134   private BaseFtpServer getServer()
717 03 Jun 08 nicklas 135   {
717 03 Jun 08 nicklas 136     if (server == null)
717 03 Jun 08 nicklas 137     {
717 03 Jun 08 nicklas 138       log.info("Creating BASE FTP Server");
717 03 Jun 08 nicklas 139       try
717 03 Jun 08 nicklas 140       {
741 13 Aug 08 nicklas 141         log.debug("configuration file=" + configFile);
741 13 Aug 08 nicklas 142         URL configUrl = BaseFtpServer.class.getResource(configFile);
717 03 Jun 08 nicklas 143         InputStream is = configUrl == null ? null : configUrl.openStream();
717 03 Jun 08 nicklas 144         if (is == null)
717 03 Jun 08 nicklas 145         {
741 13 Aug 08 nicklas 146           throw new ConfigurationException("Can't find the configuration file. " +
741 13 Aug 08 nicklas 147               "Make sure '" + configFile + "' is in the CLASSPATH.");
717 03 Jun 08 nicklas 148         }
741 13 Aug 08 nicklas 149         server = new BaseFtpServer(configFile);
717 03 Jun 08 nicklas 150         log.info("BASE FTP Server created successfully");
717 03 Jun 08 nicklas 151       }
717 03 Jun 08 nicklas 152       catch (RuntimeException ex)
717 03 Jun 08 nicklas 153       {
717 03 Jun 08 nicklas 154         log.error("Could not create BASE FTP Server", ex);
717 03 Jun 08 nicklas 155         throw ex;
717 03 Jun 08 nicklas 156       }
717 03 Jun 08 nicklas 157       catch (Exception ex)
717 03 Jun 08 nicklas 158       {
717 03 Jun 08 nicklas 159         log.error("Could not create BASE FTP Server", ex);
717 03 Jun 08 nicklas 160         throw new RuntimeException(ex);
717 03 Jun 08 nicklas 161       }
717 03 Jun 08 nicklas 162     }
717 03 Jun 08 nicklas 163     return server;
717 03 Jun 08 nicklas 164   }
716 02 Jun 08 nicklas 165
714 30 May 08 nicklas 166 }