/* * 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. * * 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 . * 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 { /** * A comparator that puts SEQUENCE_ID template links before DB_ACCESSION * links, and otherwise orders by link name (not case sensitive). It expects * to compare strings formatted as "Name|URLTemplate" where the template may * include $SEQUENCE_ID$ or $DB_ACCESSION$ or neither. */ 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 } String[] tokens1 = link1.split("\\|"); String[] tokens2 = link2.split("\\|"); if (tokens1.length < 2 || tokens2.length < 2) { // for failsafe only return String.CASE_INSENSITIVE_ORDER.compare(link1, link2); } String name1 = tokens1[0]; String name2 = tokens2[0]; String pattern1 = tokens1[1]; String pattern2 = tokens2[1]; if (pattern1.contains(UrlConstants.SEQUENCE_ID) && pattern2.contains(UrlConstants.DB_ACCESSION)) { return -1; } if (pattern2.contains(UrlConstants.SEQUENCE_ID) && pattern1.contains(UrlConstants.DB_ACCESSION)) { return 1; } return String.CASE_INSENSITIVE_ORDER.compare(name1, name2); } }; 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 '