extensions/net.sf.basedb.xfiles/trunk/src/net/sf/basedb/xfiles/ftp/FtpConnectionManagerActionFactory.java

Code
Comments
Other
Rev Date Author Line
2521 25 Jun 14 nicklas 1 /**
2521 25 Jun 14 nicklas 2   $Id$
2521 25 Jun 14 nicklas 3
2521 25 Jun 14 nicklas 4   Copyright (C) 2014 Nicklas Nordborg
2521 25 Jun 14 nicklas 5
2521 25 Jun 14 nicklas 6   This file is part of BASE - BioArray Software Environment.
2521 25 Jun 14 nicklas 7   Available at http://base.thep.lu.se/
2521 25 Jun 14 nicklas 8
2521 25 Jun 14 nicklas 9   BASE is free software; you can redistribute it and/or
2521 25 Jun 14 nicklas 10   modify it under the terms of the GNU General Public License
2521 25 Jun 14 nicklas 11   as published by the Free Software Foundation; either version 3
2521 25 Jun 14 nicklas 12   of the License, or (at your option) any later version.
2521 25 Jun 14 nicklas 13
2521 25 Jun 14 nicklas 14   BASE is distributed in the hope that it will be useful,
2521 25 Jun 14 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
2521 25 Jun 14 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2521 25 Jun 14 nicklas 17   GNU General Public License for more details.
2521 25 Jun 14 nicklas 18
2521 25 Jun 14 nicklas 19   You should have received a copy of the GNU General Public License
2521 25 Jun 14 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
2521 25 Jun 14 nicklas 21 */
2521 25 Jun 14 nicklas 22 package net.sf.basedb.xfiles.ftp;
2521 25 Jun 14 nicklas 23
2572 13 Aug 14 nicklas 24 import net.sf.basedb.core.DbControl;
2521 25 Jun 14 nicklas 25 import net.sf.basedb.core.plugin.About;
2521 25 Jun 14 nicklas 26 import net.sf.basedb.util.extensions.ActionFactory;
2521 25 Jun 14 nicklas 27 import net.sf.basedb.util.extensions.Extension;
2521 25 Jun 14 nicklas 28 import net.sf.basedb.util.extensions.ExtensionsUtil;
2521 25 Jun 14 nicklas 29 import net.sf.basedb.util.extensions.InvokationContext;
2521 25 Jun 14 nicklas 30 import net.sf.basedb.util.uri.ConnectionManagerFactory;
2521 25 Jun 14 nicklas 31
2521 25 Jun 14 nicklas 32 /**
2521 25 Jun 14 nicklas 33   Action factory for ftp connection manager factory. This factory
2521 25 Jun 14 nicklas 34   will create a singleton instance of {@link FtpConnectionManagerFactory}
2521 25 Jun 14 nicklas 35   upon the first use. This instance will be used for all further
2521 25 Jun 14 nicklas 36   uses of this extension.
2521 25 Jun 14 nicklas 37
2521 25 Jun 14 nicklas 38   @author Nicklas
2521 25 Jun 14 nicklas 39   @since 1.0
2521 25 Jun 14 nicklas 40 */
2521 25 Jun 14 nicklas 41 public class FtpConnectionManagerActionFactory
2521 25 Jun 14 nicklas 42   implements ActionFactory<ConnectionManagerFactory>
2521 25 Jun 14 nicklas 43 {
2521 25 Jun 14 nicklas 44   
2521 25 Jun 14 nicklas 45   private volatile FtpConnectionManagerFactory factory;
2521 25 Jun 14 nicklas 46   
2521 25 Jun 14 nicklas 47   public FtpConnectionManagerActionFactory()
2521 25 Jun 14 nicklas 48   {}
2521 25 Jun 14 nicklas 49   
2521 25 Jun 14 nicklas 50   /*
2521 25 Jun 14 nicklas 51     From the ActionFactory interface
2521 25 Jun 14 nicklas 52     ---------------------------------
2521 25 Jun 14 nicklas 53   */
2521 25 Jun 14 nicklas 54   @Override
2521 25 Jun 14 nicklas 55   public boolean prepareContext(
2521 25 Jun 14 nicklas 56       InvokationContext<? super ConnectionManagerFactory> context)
2521 25 Jun 14 nicklas 57   {
2521 25 Jun 14 nicklas 58     return true;
2521 25 Jun 14 nicklas 59   }
2521 25 Jun 14 nicklas 60   
2521 25 Jun 14 nicklas 61   @Override
2521 25 Jun 14 nicklas 62   public ConnectionManagerFactory[] getActions(
2521 25 Jun 14 nicklas 63       InvokationContext<? super ConnectionManagerFactory> context)
2521 25 Jun 14 nicklas 64   {
2521 25 Jun 14 nicklas 65     if (factory == null)
2521 25 Jun 14 nicklas 66     {
2521 25 Jun 14 nicklas 67       initFactory(context);
2521 25 Jun 14 nicklas 68     }
2583 18 Aug 14 nicklas 69     if (context.getClientContext() != null)
2572 13 Aug 14 nicklas 70     {
2583 18 Aug 14 nicklas 71       DbControl dc = context.getClientContext().getDbControl();
2583 18 Aug 14 nicklas 72       if (dc != null && !dc.isClosed())
2583 18 Aug 14 nicklas 73       {
2583 18 Aug 14 nicklas 74         // Initialize a connection cache hooked up to the current transaction
2583 18 Aug 14 nicklas 75         FtpConnectionManager.CONNECTION_CACHE.init(dc);
2583 18 Aug 14 nicklas 76       }
2572 13 Aug 14 nicklas 77     }
2521 25 Jun 14 nicklas 78     return new ConnectionManagerFactory[] { factory };
2521 25 Jun 14 nicklas 79   }
2521 25 Jun 14 nicklas 80   // --------------------------------------------
2521 25 Jun 14 nicklas 81   
4754 16 Apr 18 nicklas 82   private synchronized void initFactory(InvokationContext<?> context)
2521 25 Jun 14 nicklas 83   {
2521 25 Jun 14 nicklas 84     if (factory != null) return;
4754 16 Apr 18 nicklas 85     Extension<?> ext = context.getExtension();
2521 25 Jun 14 nicklas 86     About about = ext.getAbout();
2521 25 Jun 14 nicklas 87     
2521 25 Jun 14 nicklas 88     String id = ext.getId();
2521 25 Jun 14 nicklas 89     String name = ExtensionsUtil.getName(ext);
2521 25 Jun 14 nicklas 90     String description = about != null ? about.getDescription() : null;
2521 25 Jun 14 nicklas 91     
2521 25 Jun 14 nicklas 92     FtpConnectionManagerFactory tmp = new FtpConnectionManagerFactory();
2521 25 Jun 14 nicklas 93     tmp.init(id, name, description);
2521 25 Jun 14 nicklas 94     factory = tmp;
2521 25 Jun 14 nicklas 95   }
2521 25 Jun 14 nicklas 96   
2521 25 Jun 14 nicklas 97 }