
org.biojava.nbio.structure.scop.ScopFactory Maven / Gradle / Ivy
Show all versions of biojava-structure Show documentation
/*
* BioJava development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. If you do not have a copy,
* see:
*
* http://www.gnu.org/copyleft/lesser.html
*
* Copyright for this code is held jointly by the individual
* authors. These should be listed in @author doc comments.
*
* For more information on the BioJava project and its aims,
* or to join the biojava-l mailing list, visit the home page
* at:
*
* http://www.biojava.org/
*
*/
package org.biojava.nbio.structure.scop;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.Map;
/**
* Controls the global ScopDatabase being used.
*
* Defaults to a {@link RemoteScopInstallation}, which is fast for small numbers
* of queries. For many queries, using {@link #getSCOP(String, boolean) getSCOP(version,true)}
* may be faster, since it makes only one network request.
*
*
Example: Fetch the structure corresponding to an old version of scop
*
*
* ScopInstallation scop = new ScopInstallation();
* scop.setScopVersion("1.69");
* ScopFactory.setScopDatabase(scop);
* AtomCache cache = new AtomCache();
* cache.setFetchFileEvenIfObsolete(true); //fetch older PDBs
* cache.setStrictSCOP(false); // correct simple errors in domain names
* Structure s = cache.getStructure("d3hbia_");
* @author sbliven
*
*/
public class ScopFactory {
private static final Logger logger = LoggerFactory.getLogger(ScopFactory.class);
// berkeley 2
public static final String VERSION_2_0_5 = "2.05";
public static final String VERSION_2_0_4 = "2.04";
public static final String VERSION_2_0_3 = "2.03";
public static final String VERSION_2_0_2 = "2.02";
public static final String VERSION_2_0_1 = "2.01";
// berkeley 1 (aliases of above)
public static final String VERSION_1_75C = VERSION_2_0_3;
public static final String VERSION_1_75B = VERSION_2_0_2;
public static final String VERSION_1_75A = VERSION_2_0_1;
// original SCOP
// latest SCOP release from SCOP website = 1.75;
public static final String VERSION_1_75 = "1.75";
// outdated stable versions
public static final String VERSION_1_73 = "1.73";
public static final String VERSION_1_71 = "1.71";
public static final String VERSION_1_69 = "1.69";
public static final String VERSION_1_67 = "1.67";
public static final String VERSION_1_65 = "1.65";
public static final String VERSION_1_63 = "1.63";
public static final String VERSION_1_61 = "1.61";
public static final String VERSION_1_59 = "1.59";
public static final String VERSION_1_57 = "1.57";
public static final String VERSION_1_55 = "1.55";
// The most recent version as of compilation time
public static final String LATEST_VERSION = VERSION_2_0_5;
// Hold one instance for each version
private static Map versionedScopDBs = new HashMap();
private static String defaultVersion = LATEST_VERSION;
/**
* Get the current default instance for the default version
* @return
*/
public static ScopDatabase getSCOP(){
return getSCOP(defaultVersion);
}
/**
*
* @param forceLocalData Whether to use a local installation or a remote installation
* @return
* @see #getSCOP(String, boolean)
*/
public static ScopDatabase getSCOP(boolean forceLocalData) {
return getSCOP(defaultVersion, forceLocalData);
}
/**
* requests a particular version of SCOP.
*
* Where possible, this will be the current default instance.
* Otherwise a new instance will be created.
* @param version
* @return
*/
public static ScopDatabase getSCOP(String version){
// Default to a remote installation
return getSCOP(version,false);
}
/**
* Gets an instance of the specified scop version.
*
*
* The particular implementation returned is influenced by the forceLocalData
* parameter. When false, the instance returned will generally be a
* {@link RemoteScopInstallation}, although this may be influenced by
* previous calls to this class. When true, the result is guaranteed to
* implement {@link LocalScopDatabase} (generally a {@link BerkeleyScopInstallation}).
*
*
* Note that
* @param version A version number, such as {@link #VERSION_1_75A}
* @param forceLocalData Whether to use a local installation or a remote installation
* @return an
*/
public static ScopDatabase getSCOP(String version, boolean forceLocalData){
if( version == null ) {
version = defaultVersion;
}
ScopDatabase scop = versionedScopDBs.get(version);
if ( forceLocalData) {
// Use a local installation
if( scop == null || !(scop instanceof LocalScopDatabase) ) {
logger.info("Creating new {}, version {}", BerkeleyScopInstallation.class.getSimpleName(), version);
BerkeleyScopInstallation berkeley = new BerkeleyScopInstallation();
berkeley.setScopVersion(version);
versionedScopDBs.put(version,berkeley);
return berkeley;
}
return scop;
} else {
// Use a remote installation
if( scop == null ) {
logger.info("Creating new {}, version {}", RemoteScopInstallation.class.getSimpleName(), version);
scop = new RemoteScopInstallation();
scop.setScopVersion(version);
versionedScopDBs.put(version,scop);
}
return scop;
}
}
/**
* Set the default scop version
* @param version A version number, such as {@link #VERSION_1_75A}
*/
public static void setScopDatabase(String version) {
getSCOP(version);
defaultVersion = version;
}
/**
* Set the default scop version
* @param version A version number, such as {@link #VERSION_1_75A}
* @param forceLocalData Whether to use a local installation or a remote installation
*/
public static void setScopDatabase(String version, boolean forceLocalData) {
logger.debug("ScopFactory: Setting ScopDatabase to version: {}, forced local: {}", version, forceLocalData);
getSCOP(version,forceLocalData);
defaultVersion = version;
}
/**
* Set the default scop version and instance
* @param scop
*/
public static void setScopDatabase(ScopDatabase scop){
logger.debug("ScopFactory: Setting ScopDatabase to type: {}", scop.getClass().getName());
defaultVersion = scop.getScopVersion();
versionedScopDBs.put(defaultVersion,scop);
}
}