X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Futil%2FUrlLink.java;h=0141a6ac2b35eae4446a973982cca6fd25f17625;hb=7312fed439c2a32de989c6f5155203ebc0a7f854;hp=e955a6f71b0502e029d358ccabdc35346f6623e9;hpb=59d682209891099d46b960509907c79e3fb276fe;p=jalview.git diff --git a/src/jalview/util/UrlLink.java b/src/jalview/util/UrlLink.java index e955a6f..0141a6a 100644 --- a/src/jalview/util/UrlLink.java +++ b/src/jalview/util/UrlLink.java @@ -1,43 +1,110 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8) - * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.util; +import static jalview.util.UrlConstants.DB_ACCESSION; +import static jalview.util.UrlConstants.DELIM; +import static jalview.util.UrlConstants.SEP; +import static jalview.util.UrlConstants.SEQUENCE_ID; + +import jalview.datamodel.DBRefEntry; +import jalview.datamodel.SequenceI; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Map; import java.util.Vector; +/** + * A helper class to parse URL Link strings taken from applet parameters or + * jalview properties file using the com.stevesoft.pat.Regex implementation. + * Jalview 2.4 extension allows regular expressions to be used to parse ID + * strings and replace the result in the URL. Regex's operate on the whole ID + * string given to the matchURL method, if no regex is supplied, then only text + * following the first pipe symbol will be substituted. Usage documentation + * todo. + */ public class UrlLink { + private static final String SEQUENCEID_PLACEHOLDER = DELIM + SEQUENCE_ID + + DELIM; + + private static final String ACCESSION_PLACEHOLDER = DELIM + DB_ACCESSION + + DELIM; + /** - * helper class to parse URL Link strings taken from applet parameters or - * jalview properties file using the com.stevesoft.pat.Regex implementation. - * Jalview 2.4 extension allows regular expressions to be used to parse ID - * strings and replace the result in the URL. Regex's operate on the whole ID - * string given to the matchURL method, if no regex is supplied, then only - * text following the first pipe symbol will be susbstituted. Usage - * documentation todo. + * A comparator that puts SEQUENCE_ID template links before DB_ACCESSION + * links, and otherwise orders by link name + url (not case sensitive). It + * expects to compare strings formatted as "Name|URLTemplate" where the + * template may include $SEQUENCE_ID$ or $DB_ACCESSION$ or neither. */ - private String url_suffix, url_prefix, target, label, regexReplace; + public static final Comparator LINK_COMPARATOR = new Comparator() + { + @Override + public int compare(String link1, String link2) + { + if (link1 == null || link2 == null) + { + return 0; // for failsafe only + } + if (link1.contains(SEQUENCEID_PLACEHOLDER) + && link2.contains(ACCESSION_PLACEHOLDER)) + { + return -1; + } + if (link2.contains(SEQUENCEID_PLACEHOLDER) + && link1.contains(ACCESSION_PLACEHOLDER)) + { + return 1; + } + return String.CASE_INSENSITIVE_ORDER.compare(link1, link2); + } + }; + + private static final String EQUALS = "="; + + private static final String SPACE = " "; + + private String urlSuffix; + + private String urlPrefix; + + private String target; + + private String label; + + private String dbname; + + private String regexReplace; private boolean dynamic = false; + private boolean usesDBaccession = false; + private String invalidMessage = null; /** - * parse the given linkString of the form '