Skip to content
Snippets Groups Projects
Commit 9faba870 authored by jakubs's avatar jakubs
Browse files

SSDM-3907: make it possible to configure the old ftp resolver

SVN: 36861
parent bb431b6b
No related branches found
No related tags found
No related merge requests found
...@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.dss.generic.server.cifs; ...@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.dss.generic.server.cifs;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.util.Properties;
import org.alfresco.jlan.server.SrvSession; import org.alfresco.jlan.server.SrvSession;
import org.alfresco.jlan.server.auth.ClientInfo; import org.alfresco.jlan.server.auth.ClientInfo;
...@@ -50,7 +51,6 @@ import ch.systemsx.cisd.openbis.dss.generic.server.ftp.DSSFileSystemView; ...@@ -50,7 +51,6 @@ import ch.systemsx.cisd.openbis.dss.generic.server.ftp.DSSFileSystemView;
import ch.systemsx.cisd.openbis.dss.generic.server.ftp.FtpPathResolverConfig; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.FtpPathResolverConfig;
import ch.systemsx.cisd.openbis.dss.generic.server.ftp.IFtpPathResolverRegistry; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.IFtpPathResolverRegistry;
import ch.systemsx.cisd.openbis.dss.generic.server.ftp.NonExistingFtpFile; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.NonExistingFtpFile;
import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.V3FtpPathResolverRegistry;
import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider; import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
import ch.systemsx.cisd.openbis.generic.shared.IServiceForDataStoreServer; import ch.systemsx.cisd.openbis.generic.shared.IServiceForDataStoreServer;
import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService; import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
...@@ -91,10 +91,11 @@ public class DataSetCifsView implements DiskInterface ...@@ -91,10 +91,11 @@ public class DataSetCifsView implements DiskInterface
public DeviceContext createContext(String shareName, ConfigElement args) throws DeviceContextException public DeviceContext createContext(String shareName, ConfigElement args) throws DeviceContextException
{ {
operationLog.info("create context for share " + shareName + ": " + Utils.render(args)); operationLog.info("create context for share " + shareName + ": " + Utils.render(args));
FtpPathResolverConfig resolverConfig = new FtpPathResolverConfig(CifsServerConfig.getServerProperties()); Properties serverProperties = CifsServerConfig.getServerProperties();
FtpPathResolverConfig resolverConfig = new FtpPathResolverConfig(serverProperties);
resolverConfig.logStartupInfo("CIFS"); resolverConfig.logStartupInfo("CIFS");
// pathResolverRegistry = new FtpPathResolverRegistry(resolverConfig);
pathResolverRegistry = new V3FtpPathResolverRegistry(resolverConfig); pathResolverRegistry = resolverConfig.getResolverRegistry();
return new DiskDeviceContext(shareName); return new DiskDeviceContext(shareName);
} }
......
...@@ -19,38 +19,40 @@ package ch.systemsx.cisd.openbis.dss.generic.server.ftp; ...@@ -19,38 +19,40 @@ package ch.systemsx.cisd.openbis.dss.generic.server.ftp;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Properties;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Properties;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import ch.systemsx.cisd.common.exceptions.UserFailureException;
import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogCategory;
import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.logging.LogFactory;
import ch.systemsx.cisd.common.properties.ExtendedProperties; import ch.systemsx.cisd.common.properties.ExtendedProperties;
import ch.systemsx.cisd.common.properties.PropertyUtils; import ch.systemsx.cisd.common.properties.PropertyUtils;
import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.V3FtpPathResolverRegistry;
/** /**
*
*
* @author Franz-Josef Elmer * @author Franz-Josef Elmer
*/ */
public class FtpPathResolverConfig public class FtpPathResolverConfig
{ {
final static String DATASET_DISPLAY_TEMPLATE_KEY = "dataset.display.template"; final static String DATASET_DISPLAY_TEMPLATE_KEY = "dataset.display.template";
final static String SHOW_PARENTS_AND_CHILDREN_KEY = "dataset.show-parents-and-children"; final static String SHOW_PARENTS_AND_CHILDREN_KEY = "dataset.show-parents-and-children";
final static String DATASET_FILELIST_SUBPATH_KEY = "dataset.filelist.subpath."; final static String DATASET_FILELIST_SUBPATH_KEY = "dataset.filelist.subpath.";
final static String DATASET_FILELIST_FILTER_KEY = "dataset.filelist.filter."; final static String DATASET_FILELIST_FILTER_KEY = "dataset.filelist.filter.";
final static String PATH_RESOLVER_KEY = "resolver-class";
private static final String DEFAULT_DATASET_TEMPLATE = "${dataSetCode}"; private static final String DEFAULT_DATASET_TEMPLATE = "${dataSetCode}";
private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
FtpPathResolverConfig.class); FtpPathResolverConfig.class);
private boolean showParentsAndChildren; private boolean showParentsAndChildren;
private String dataSetDisplayTemplate = ""; private String dataSetDisplayTemplate = "";
private Map<String /* dataset type */, String /* path */> fileListSubPaths = private Map<String /* dataset type */, String /* path */> fileListSubPaths =
...@@ -59,12 +61,16 @@ public class FtpPathResolverConfig ...@@ -59,12 +61,16 @@ public class FtpPathResolverConfig
private Map<String /* dataset type */, String /* filter pattern */> fileListFilters = private Map<String /* dataset type */, String /* filter pattern */> fileListFilters =
new HashMap<String, String>(); new HashMap<String, String>();
private final String resolverClass;
public FtpPathResolverConfig(Properties props) public FtpPathResolverConfig(Properties props)
{ {
dataSetDisplayTemplate = dataSetDisplayTemplate =
PropertyUtils.getProperty(props, DATASET_DISPLAY_TEMPLATE_KEY, DEFAULT_DATASET_TEMPLATE); PropertyUtils.getProperty(props, DATASET_DISPLAY_TEMPLATE_KEY, DEFAULT_DATASET_TEMPLATE);
showParentsAndChildren = PropertyUtils.getBoolean(props, SHOW_PARENTS_AND_CHILDREN_KEY, false); showParentsAndChildren = PropertyUtils.getBoolean(props, SHOW_PARENTS_AND_CHILDREN_KEY, false);
resolverClass = PropertyUtils.getProperty(props, PATH_RESOLVER_KEY, V3FtpPathResolverRegistry.class.getCanonicalName());
ExtendedProperties fileListSubPathProps = ExtendedProperties fileListSubPathProps =
ExtendedProperties.getSubset(props, DATASET_FILELIST_SUBPATH_KEY, true); ExtendedProperties.getSubset(props, DATASET_FILELIST_SUBPATH_KEY, true);
for (Object key : fileListSubPathProps.keySet()) for (Object key : fileListSubPathProps.keySet())
...@@ -84,7 +90,7 @@ public class FtpPathResolverConfig ...@@ -84,7 +90,7 @@ public class FtpPathResolverConfig
fileListFilters.put(dataSetType, filter); fileListFilters.put(dataSetType, filter);
} }
} }
public String getDataSetDisplayTemplate() public String getDataSetDisplayTemplate()
{ {
return dataSetDisplayTemplate; return dataSetDisplayTemplate;
...@@ -104,7 +110,7 @@ public class FtpPathResolverConfig ...@@ -104,7 +110,7 @@ public class FtpPathResolverConfig
{ {
return Collections.unmodifiableMap(fileListFilters); return Collections.unmodifiableMap(fileListFilters);
} }
public void logStartupInfo(String serverType) public void logStartupInfo(String serverType)
{ {
operationLog.info(serverType + " Server data set display template : " + dataSetDisplayTemplate); operationLog.info(serverType + " Server data set display template : " + dataSetDisplayTemplate);
...@@ -124,6 +130,33 @@ public class FtpPathResolverConfig ...@@ -124,6 +130,33 @@ public class FtpPathResolverConfig
+ "set type '%s' : '%s'", serverType, filterEntry.getKey(), filterEntry.getValue()); + "set type '%s' : '%s'", serverType, filterEntry.getKey(), filterEntry.getValue());
operationLog.info(message); operationLog.info(message);
} }
}
public IFtpPathResolverRegistry getResolverRegistry()
{
try
{
Class<?> clazz = Class.forName(resolverClass);
Object instance = clazz.newInstance();
IFtpPathResolverRegistry registry = (IFtpPathResolverRegistry) instance;
registry.initialize(this);
operationLog.info("Succesfully initialized path resolver of type " + registry.getClass().getName());
return registry;
} catch (ClassNotFoundException ex)
{
throw new UserFailureException("Failed to create PathResolverRegistry. Couldn't find class " + resolverClass, ex);
} catch (InstantiationException ex)
{
throw new UserFailureException("Failed to create PathResolverRegistry. Couldn't instantiate object of a class " + resolverClass, ex);
} catch (IllegalAccessException ex)
{
throw new UserFailureException("Failed to create PathResolverRegistry. Couldn't instantiate object of a class " + resolverClass, ex);
} catch (ClassCastException ex)
{
throw new UserFailureException("Failed to create PathResolverRegistry. Couldn't cast object of a class " + resolverClass + " to "
+ IFtpPathResolverRegistry.class.getName(),
ex);
}
} }
} }
...@@ -46,7 +46,8 @@ public class FtpPathResolverRegistry implements IFtpPathResolverRegistry ...@@ -46,7 +46,8 @@ public class FtpPathResolverRegistry implements IFtpPathResolverRegistry
/** /**
* initializes the registry with all known {@link IFtpPathResolver}-s. * initializes the registry with all known {@link IFtpPathResolver}-s.
*/ */
public FtpPathResolverRegistry(FtpPathResolverConfig config) @Override
public void initialize(FtpPathResolverConfig config)
{ {
pathResolvers.add(new RootFolderResolver()); pathResolvers.add(new RootFolderResolver());
pathResolvers.add(new SpaceFolderResolver()); pathResolvers.add(new SpaceFolderResolver());
......
...@@ -77,7 +77,6 @@ import ch.systemsx.cisd.common.logging.LogCategory; ...@@ -77,7 +77,6 @@ import ch.systemsx.cisd.common.logging.LogCategory;
import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.logging.LogFactory;
import ch.systemsx.cisd.common.properties.PropertyParametersUtil; import ch.systemsx.cisd.common.properties.PropertyParametersUtil;
import ch.systemsx.cisd.common.utilities.SystemTimeProvider; import ch.systemsx.cisd.common.utilities.SystemTimeProvider;
import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.V3FtpPathResolverRegistry;
import ch.systemsx.cisd.openbis.dss.generic.shared.utils.DssPropertyParametersUtil; import ch.systemsx.cisd.openbis.dss.generic.shared.utils.DssPropertyParametersUtil;
import ch.systemsx.cisd.openbis.generic.shared.IServiceForDataStoreServer; import ch.systemsx.cisd.openbis.generic.shared.IServiceForDataStoreServer;
import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService; import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService;
...@@ -121,8 +120,7 @@ public class FtpServer implements FileSystemFactory, org.apache.sshd.server.File ...@@ -121,8 +120,7 @@ public class FtpServer implements FileSystemFactory, org.apache.sshd.server.File
DssPropertyParametersUtil.loadServiceProperties(), "ftp.server", true).getProperties(); DssPropertyParametersUtil.loadServiceProperties(), "ftp.server", true).getProperties();
this.config = new FtpServerConfig(ftpProperties); this.config = new FtpServerConfig(ftpProperties);
FtpPathResolverConfig resolverConfig = new FtpPathResolverConfig(ftpProperties); FtpPathResolverConfig resolverConfig = new FtpPathResolverConfig(ftpProperties);
this.pathResolverRegistry = new V3FtpPathResolverRegistry(resolverConfig); this.pathResolverRegistry = resolverConfig.getResolverRegistry();
// this.pathResolverRegistry = new FtpPathResolverRegistry(resolverConfig);
if (config.isStartServer()) if (config.isStartServer())
{ {
...@@ -239,7 +237,6 @@ public class FtpServer implements FileSystemFactory, org.apache.sshd.server.File ...@@ -239,7 +237,6 @@ public class FtpServer implements FileSystemFactory, org.apache.sshd.server.File
return s; return s;
} }
@SuppressWarnings("unchecked")
private List<NamedFactory<Command>> creatSubsystemFactories() private List<NamedFactory<Command>> creatSubsystemFactories()
{ {
return Arrays.<NamedFactory<Command>> asList(new SftpSubsystem.Factory()); return Arrays.<NamedFactory<Command>> asList(new SftpSubsystem.Factory());
......
...@@ -24,6 +24,11 @@ import org.apache.ftpserver.ftplet.FtpFile; ...@@ -24,6 +24,11 @@ import org.apache.ftpserver.ftplet.FtpFile;
public interface IFtpPathResolverRegistry public interface IFtpPathResolverRegistry
{ {
/**
* Method called once to initialize object
*/
void initialize(FtpPathResolverConfig config);
/** /**
* Returns an {@link FtpFile} for <var>path</var>. * Returns an {@link FtpFile} for <var>path</var>.
* <p> * <p>
......
...@@ -19,15 +19,12 @@ package ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3; ...@@ -19,15 +19,12 @@ package ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3;
import org.apache.ftpserver.ftplet.FtpFile; import org.apache.ftpserver.ftplet.FtpFile;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi;
import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogCategory;
import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.logging.LogFactory;
import ch.systemsx.cisd.openbis.dss.generic.server.ftp.FtpPathResolverConfig; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.FtpPathResolverConfig;
import ch.systemsx.cisd.openbis.dss.generic.server.ftp.FtpPathResolverContext; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.FtpPathResolverContext;
import ch.systemsx.cisd.openbis.dss.generic.server.ftp.IFtpPathResolver;
import ch.systemsx.cisd.openbis.dss.generic.server.ftp.IFtpPathResolverRegistry; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.IFtpPathResolverRegistry;
import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpNonExistingFile; import ch.systemsx.cisd.openbis.dss.generic.server.ftp.v3.file.V3FtpNonExistingFile;
import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
/** /**
* A registry of ftp resolvers. It keeps the style of old-style resolver regisrty, but actually only calls itself root resolver. * A registry of ftp resolvers. It keeps the style of old-style resolver regisrty, but actually only calls itself root resolver.
...@@ -40,19 +37,8 @@ public class V3FtpPathResolverRegistry implements IFtpPathResolverRegistry ...@@ -40,19 +37,8 @@ public class V3FtpPathResolverRegistry implements IFtpPathResolverRegistry
private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
V3FtpPathResolverRegistry.class); V3FtpPathResolverRegistry.class);
private IApplicationServerApi v3api; @Override
public void initialize(FtpPathResolverConfig config)
public IApplicationServerApi getV3api()
{
if (v3api == null)
v3api = ServiceProvider.getV3ApplicationService();
return v3api;
}
/**
* initializes the registry with all known {@link IFtpPathResolver}-s.
*/
public V3FtpPathResolverRegistry(FtpPathResolverConfig config)
{ {
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment