package com.compomics.util.protein_sequences_manager;
import com.compomics.util.protein_sequences_manager.enums.SequenceContentType;
import java.net.MalformedURLException;
import java.net.URL;
/**
* A UniProt query.
*
* @author Kenneth Verheggen
*/
public class UniProtQuery {
/**
* The query type.
*/
private final SequenceContentType queryType;
/**
* The taxonomy.
*/
private final int taxonomy;
/**
* The query URL.
*/
private final URL queryURL;
/**
* Constructor.
*
* @param taxonomy the taxonomy
* @param queryType the query type
* @throws MalformedURLException thrown if a MalformedURLException occurs
*/
public UniProtQuery(int taxonomy, SequenceContentType queryType) throws MalformedURLException {
this.taxonomy = taxonomy;
this.queryType = queryType;
this.queryURL = getUniProtQueryURL(taxonomy, queryType);
}
/**
* Get the UniProt query URL.
*
* @param taxonomy the taxonomy
* @param type the type
* @return the URL
* @throws MalformedURLException thrown if a MalformedURLException occurs
*/
private URL getUniProtQueryURL(int taxonomy, SequenceContentType type) throws MalformedURLException {
String queryPlaceHolder = "@INSERT_QUERY@";
String uniprotQueryTemplate = "http://www.uniprot.org/uniprot/?query=@INSERT_QUERY@+AND+organism:" + taxonomy;
if (type.equals(SequenceContentType.REVIEWED)) {
uniprotQueryTemplate = uniprotQueryTemplate.replace(queryPlaceHolder, "reviewed:yes");
} else if (type.equals(SequenceContentType.UNREVIEWED)) {
uniprotQueryTemplate = uniprotQueryTemplate.replace(queryPlaceHolder, "reviewed:no");
} else if (type.equals(SequenceContentType.REVIEWED_AND_ISOFORMS)) {
uniprotQueryTemplate = uniprotQueryTemplate.replace(queryPlaceHolder, "reviewed:yes") + "&include:yes";
} else if (type.equals(SequenceContentType.UNREVIEWED_AND_ISOFORMS)) {
uniprotQueryTemplate = uniprotQueryTemplate.replace(queryPlaceHolder, "reviewed:no") + "&include:yes";
} else {
throw new MalformedURLException("Could not create valid URL for " + taxonomy + " " + type.toString().toLowerCase());
}
return new URL(uniprotQueryTemplate + "&format=fasta");
}
/**
* Returns the query type.
*
* @return the query type
*/
public SequenceContentType getQueryType() {
return queryType;
}
/**
* Returns the taxonomy.
*
* @return the taxonomy
*/
public int getTaxonomy() {
return taxonomy;
}
/**
* Returns the query URL.
*
* @return the query URL
*/
public URL getQueryURL() {
return queryURL;
}
}