X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Futil%2FGroupUrlLink.java;h=bac23dcc4ea00da9a04fad0cab25b1070801d970;hb=c19d2a91ca05e052e3408bf5852d88eb5d0608f1;hp=ef32e998c9a665e4bec13f0f5e92c7a0b7e58f55;hpb=a124e525dece0edc422cd2f8888d03ea14f65f15;p=jalview.git diff --git a/src/jalview/util/GroupUrlLink.java b/src/jalview/util/GroupUrlLink.java index ef32e99..bac23dc 100644 --- a/src/jalview/util/GroupUrlLink.java +++ b/src/jalview/util/GroupUrlLink.java @@ -1,19 +1,22 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5) - * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b2) + * Copyright (C) 2015 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; @@ -21,10 +24,24 @@ import jalview.datamodel.Sequence; import jalview.datamodel.SequenceI; import java.util.Hashtable; -import java.util.Vector; public class GroupUrlLink { + public class UrlStringTooLongException extends Exception + { + public UrlStringTooLongException(int lng) + { + urlLength = lng; + } + + public int urlLength; + + public String toString() + { + return "Generated url is estimated to be too long (" + urlLength + + ")"; + } + } /** * Helper class based on the UrlLink class which enables URLs to be @@ -65,18 +82,20 @@ public class GroupUrlLink { if (tokens == null) { - tokens = new String[] - { "SEQUENCEIDS", "SEQUENCES", "DATASETID" }; + tokens = new String[] { "SEQUENCEIDS", "SEQUENCES", "DATASETID" }; } } + /** * test for GroupURLType bitfield (with default tokens) */ public static final int SEQUENCEIDS = 1; + /** * test for GroupURLType bitfield (with default tokens) */ public static final int SEQUENCES = 2; + /** * test for GroupURLType bitfield (with default tokens) */ @@ -347,9 +366,11 @@ public class GroupUrlLink * @return null or Object[] { int[] { number of seqs substituted},boolean[] { * which seqs were substituted }, StringBuffer[] { substituted lists * for each token }, String[] { url } } + * @throws UrlStringTooLongException */ public Object[] makeUrls(String[] idstrings, String[] seqstrings, String dsstring, boolean onlyIfMatches) + throws UrlStringTooLongException { Hashtable rstrings = replacementArgs(idstrings, seqstrings, dsstring); return makeUrls(rstrings, onlyIfMatches); @@ -369,17 +390,18 @@ public class GroupUrlLink Hashtable rstrings = new Hashtable(); rstrings.put(tokens[0], idstrings); rstrings.put(tokens[1], seqstrings); - rstrings.put(tokens[2], new String[] - { dsstring }); + rstrings.put(tokens[2], new String[] { dsstring }); if (idstrings.length != seqstrings.length) { throw new Error( - "idstrings and seqstrings contain one string each per sequence."); + MessageManager + .getString("error.idstring_seqstrings_only_one_per_sequence")); } return rstrings; } public Object[] makeUrls(Hashtable repstrings, boolean onlyIfMatches) + throws UrlStringTooLongException { return makeUrlsIf(true, repstrings, onlyIfMatches); } @@ -391,17 +413,17 @@ public class GroupUrlLink * @param string * @param b * @return URL stub objects ready to pass to constructFrom + * @throws UrlStringTooLongException */ public Object[] makeUrlStubs(String[] ids, String[] seqstr, - String string, boolean b) + String string, boolean b) throws UrlStringTooLongException { Hashtable rstrings = replacementArgs(ids, seqstr, string); Object[] stubs = makeUrlsIf(false, rstrings, b); if (stubs != null) { - return new Object[] - { stubs[0], stubs[1], rstrings, new boolean[] - { b } }; + return new Object[] { stubs[0], stubs[1], rstrings, + new boolean[] { b } }; } // TODO Auto-generated method stub return null; @@ -413,8 +435,10 @@ public class GroupUrlLink * * @param stubs * @return URL string. + * @throws UrlStringTooLongException */ public String constructFrom(Object[] stubs) + throws UrlStringTooLongException { Object[] results = makeUrlsIf(true, (Hashtable) stubs[2], ((boolean[]) stubs[3])[0]); @@ -432,9 +456,11 @@ public class GroupUrlLink * seqs }, boolean[] { which matched }, (if createFullUrl also has * StringBuffer[] { segment generated from inputs that is used in URL * }, String[] { url })} + * @throws UrlStringTooLongException */ protected Object[] makeUrlsIf(boolean createFullUrl, Hashtable repstrings, boolean onlyIfMatches) + throws UrlStringTooLongException { int pass = 0; @@ -458,18 +484,19 @@ public class GroupUrlLink { if (maxs != idseq[i].length) { - throw new Error( - "Cannot have mixed length replacement vectors. Replacement vector for " - + (mtch[i]) + " is " + idseq[i].length - + " strings long, and have already seen a " - + maxs + " length vector."); + throw new Error(MessageManager.formatMessage( + "error.cannot_have_mixed_length_replacement_vectors", + new String[] { (mtch[i]), + Integer.valueOf(idseq[i].length).toString(), + Integer.valueOf(maxs).toString() })); } } } else { throw new Error( - "Cannot have zero length vector of replacement strings - either 1 value or n values."); + MessageManager + .getString("error.cannot_have_zero_length_vector_replacement_strings")); } } // iterate through input, collating segments to be inserted into url @@ -528,6 +555,11 @@ public class GroupUrlLink rematchat = rg.matchedTo(); thismatched[sq] |= true; urllength += rg.charsMatched(); // count length + if ((urllength + 32) > Platform.getMaxCommandLineLength()) + { + throw new UrlStringTooLongException(urllength); + } + if (!createFullUrl) { continue; // don't bother making the URL replacement text. @@ -654,16 +686,13 @@ public class GroupUrlLink // platform if ((urllength + 32) > Platform.getMaxCommandLineLength()) { - System.err.println("URL estimated to be too long " + urllength); - return null; + throw new UrlStringTooLongException(urllength); } if (!createFullUrl) { // just return the essential info about what the URL would be generated // from - return new Object[] - { new int[] - { seqsmatched }, thismatched }; + return new Object[] { new int[] { seqsmatched }, thismatched }; } // otherwise, create the URL completely. @@ -678,10 +707,8 @@ public class GroupUrlLink } } - return new Object[] - { new int[] - { seqsmatched }, thismatched, matched, new String[] - { submiturl.toString() } }; + return new Object[] { new int[] { seqsmatched }, thismatched, matched, + new String[] { submiturl.toString() } }; } /** @@ -788,8 +815,8 @@ public class GroupUrlLink public static void main(String argv[]) { - String[] links = new String[] - { + // note - JAL-1383 - these services are all dead + String[] links = new String[] { "EnVision2|IDS|http://www.ebi.ac.uk/enfin-srv/envision2/pages/linkin.jsf?workflow=Enfin%20Default%20Workflow&datasetName=linkInDatasetFromJalview&input=$SEQUENCEIDS$&inputType=0|,", "EnVision2|Seqs|http://www.ebi.ac.uk/enfin-srv/envision2/pages/linkin.jsf?workflow=Enfin%20Default%20Workflow&datasetName=linkInDatasetFromJalview&input=$SEQUENCES$&inputType=1|,", "EnVision2|IDS|http://www.ebi.ac.uk/enfin-srv/envision2/pages/linkin.jsf?workflow=Enfin%20Default%20Workflow&datasetName=$DATASETID$&input=$SEQUENCEIDS$&inputType=0|,", @@ -805,8 +832,8 @@ public class GroupUrlLink */ }; - SequenceI[] seqs = new SequenceI[] - { new Sequence("StupidLabel:gi|9234|pdb|102L|A", + SequenceI[] seqs = new SequenceI[] { new Sequence( + "StupidLabel:gi|9234|pdb|102L|A", "asdiasdpasdpadpwpadasdpaspdw"), }; String[][] seqsandids = formStrings(seqs); for (int i = 0; i < links.length; i++) @@ -824,13 +851,27 @@ public class GroupUrlLink System.out .println(" Without onlyIfMatches:"); - Object[] urls = ul.makeUrls(seqsandids[0], seqsandids[1], - "mydataset", false); - testUrls(ul, seqsandids, urls); + Object[] urls; + try + { + urls = ul.makeUrls(seqsandids[0], seqsandids[1], "mydataset", + false); + testUrls(ul, seqsandids, urls); + } catch (UrlStringTooLongException ex) + { + System.out.println("too long exception " + ex); + } System.out .println(" With onlyIfMatches set:"); - urls = ul.makeUrls(seqsandids[0], seqsandids[1], "mydataset", true); - testUrls(ul, seqsandids, urls); + try + { + urls = ul.makeUrls(seqsandids[0], seqsandids[1], "mydataset", + true); + testUrls(ul, seqsandids, urls); + } catch (UrlStringTooLongException ex) + { + System.out.println("too long exception " + ex); + } } else {