*/
package jalview.util;
+import static jalview.util.UrlConstants.DB_ACCESSION;
import static jalview.util.UrlConstants.SEQUENCE_ID;
-import static jalview.util.UrlConstants.SEQUENCE_NAME;
import jalview.datamodel.DBRefEntry;
import jalview.datamodel.SequenceI;
private boolean dynamic = false;
- private boolean uses_seq_id = false;
+ private boolean uses_db_accession = false;
private String invalidMessage = null;
public UrlLink(String link)
{
int sep = link.indexOf("|");
- int psqid = link.indexOf("$" + SEQUENCE_ID);
- int nsqid = link.indexOf("$" + SEQUENCE_NAME);
+ int psqid = link.indexOf("$" + DB_ACCESSION);
+ int nsqid = link.indexOf("$" + SEQUENCE_ID);
if (psqid > -1)
{
dynamic = true;
- uses_seq_id = true;
+ uses_db_accession = true;
sep = parseTargetAndLabel(sep, psqid, link);
- parseUrl(link, SEQUENCE_ID, psqid, sep);
+ parseUrl(link, DB_ACCESSION, psqid, sep);
}
else if (nsqid > -1)
{
dynamic = true;
sep = parseTargetAndLabel(sep, nsqid, link);
- parseUrl(link, SEQUENCE_NAME, nsqid, sep);
+ parseUrl(link, SEQUENCE_ID, nsqid, sep);
}
else
{
target = link.substring(0, sep);
sep = link.lastIndexOf("|");
label = link.substring(0, sep);
- url_prefix = link.substring(sep + 1);
+ url_prefix = link.substring(sep + 1).trim();
regexReplace = null; // implies we trim any prefix if necessary //
// regexReplace=".*\\|?(.*)";
url_suffix = null;
@Override
public String toString()
{
- String var = (uses_seq_id ? SEQUENCE_ID : SEQUENCE_NAME);
+ String var = (uses_db_accession ? DB_ACCESSION : SEQUENCE_ID);
return label
+ "|"
*/
protected void parseUrl(String link, String varName, int sqidPos, int sep)
{
- url_prefix = link.substring(sep + 1, sqidPos);
+ url_prefix = link.substring(sep + 1, sqidPos).trim();
// delimiter at start of regex: e.g. $SEQUENCE_ID=/
String startDelimiter = "$" + varName + "=/";
}
/**
+ * Create a set of URL links for a sequence
*
- * @param urlLink
* @param seq
+ * The sequence to create links for
* @param linkset
+ * Map of links: key = id | link, value = [target, label, id, link]
*/
public void createLinksFromSeq(final SequenceI seq,
Map<String, List<String>> linkset)
* Create a static URL link
*
* @param linkset
+ * Map of links: key = id | link, value = [target, label, id, link]
*/
- public void createStaticLink(Map<String, List<String>> linkset)
+ protected void createStaticLink(Map<String, List<String>> linkset)
{
if (!linkset.containsKey(label + "|" + getUrl_prefix()))
{
}
/**
- * Create a dynamic URL link
+ * Create dynamic URL links
*
* @param seq
+ * The sequence to create links for
* @param linkset
+ * Map of links: key = id | link, value = [target, label, id, link]
*/
- public void createDynamicLinks(final SequenceI seq,
+ protected void createDynamicLinks(final SequenceI seq,
Map<String, List<String>> linkset)
{
// collect id string too
descr = null;
}
- if (usesSeqId()) // link is ID
+ if (usesDBAccession()) // link is ID
{
// collect matching db-refs
DBRefEntry[] dbr = DBRefUtils.selectRefs(seq.getDBRefs(),
for (int r = 0; r < dbr.length; r++)
{
// create Bare ID link for this URL
- createBareURLLink(dbr[r].getAccessionId(), linkset, true);
+ createBareURLLink(dbr[r].getAccessionId(), true, linkset);
}
}
}
- else if (!usesSeqId() && id != null) // link is name
+ else if (!usesDBAccession() && id != null) // link is name
{
// create Bare ID link for this URL
- createBareURLLink(id, linkset, false);
+ createBareURLLink(id, false, linkset);
}
// Create urls from description but only for URL links which are regex
if (descr != null && getRegexReplace() != null)
{
// create link for this URL from description where regex matches
- createBareURLLink(descr, linkset, false);
+ createBareURLLink(descr, false, linkset);
}
}
/*
* Create a bare URL Link
+ * Returns map where key = id | link, and value = [target, label, id, link]
*/
- protected void createBareURLLink(String id,
- Map<String, List<String>> linkset, Boolean combineLabel)
+ protected void createBareURLLink(String id, Boolean combineLabel,
+ Map<String, List<String>> linkset)
{
String[] urls = makeUrls(id, true);
if (urls != null)
String thisLabel = label;
if (combineLabel)
{
+ // incorporate label with idstring
thisLabel = label + "|" + urls[u];
}
* "PF3|http://us.expasy.org/cgi-bin/niceprot.pl?$SEQUENCE_ID=/PFAM:(.+)/=$"
* , "NOTFER|http://notfer.org/$SEQUENCE_ID=/(?<!\\s)(.+)/=$",
*/
- "NESTED|http://nested/$" + SEQUENCE_ID
+ "NESTED|http://nested/$" + DB_ACCESSION
+ "=/^(?:Label:)?(?:(?:gi\\|(\\d+))|([^:]+))/=$/nested" };
String[] idstrings = new String[] {
/*
return dynamic;
}
- public boolean usesSeqId()
+ public boolean usesDBAccession()
{
- return uses_seq_id;
+ return uses_db_accession;
}
public void setLabel(String newlabel)