From: Jim Procter Date: Fri, 26 Jan 2018 18:30:48 +0000 (+0000) Subject: Merge branch 'releases/Release_2_10_3_Branch' into bugs/JAL-2780_JAL-2781_pdbnegativenums X-Git-Tag: Release_2_10_4~68^2~42 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=18a5049c91f0672d4b3b01334c6cd4731b6157aa;hp=c8b3c0f55aae92e1491a2476c967f9e80895bf99;p=jalview.git Merge branch 'releases/Release_2_10_3_Branch' into bugs/JAL-2780_JAL-2781_pdbnegativenums --- diff --git a/RELEASE b/RELEASE index f1faf34..eb9d7cd 100644 --- a/RELEASE +++ b/RELEASE @@ -1,2 +1,2 @@ jalview.release=releases/Release_2_10_3_Branch -jalview.version=2.10.3 +jalview.version=2.10.3b1 diff --git a/benchmarking/README b/benchmarking/README index fac0bf6..ccf53c1 100644 --- a/benchmarking/README +++ b/benchmarking/README @@ -7,16 +7,19 @@ You will need to install Maven: https://maven.apache.org/install.html This builds a jalview.jar file and puts it into dist/ + 2. Make a lib directory in benchmarking/ if not already present and cd into this directory. + 3. Purge any previous maven dependencies: mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false + 4. Run mvn install:install-file -Dfile=../dist/jalview.jar -DgroupId=jalview.org -DartifactId=jalview -Dversion=1.0 -Dpackaging=jar -DlocalRepositoryPath=lib - to install the jalview.jar file in the local maven repository. The pom.xml in the benchmarking references this installation, so if you change the names the pom.xml file will also need to be updated. + 5. Build and run jmh benchmarking. In the benchmarking directory: mvn clean install java -jar target/benchmarks.jar @@ -24,4 +27,14 @@ to install the jalview.jar file in the local maven repository. The pom.xml in th To get JSON output instead use: java -jar target/benchmarks.jar -rf json - JSON output can be viewed quickly by drag-dropping on http://jmh.morethan.io/ \ No newline at end of file + JSON output can be viewed quickly by drag-dropping on http://jmh.morethan.io/ + + To get help use the standard -h option: + java -jar target/benchmarks.jar -h + + More information here: + http://openjdk.java.net/projects/code-tools/jmh/ + http://java-performance.info/jmh/ + + + 6. If you make changes to the Jalview code everything will need to be refreshed, by performing steps 3-5 again. diff --git a/build.xml b/build.xml index 4931cfb..a414491 100755 --- a/build.xml +++ b/build.xml @@ -431,13 +431,14 @@ - + - + + diff --git a/help/help.jhm b/help/help.jhm index 010bca8..732f01b 100755 --- a/help/help.jhm +++ b/help/help.jhm @@ -22,7 +22,7 @@ - + diff --git a/help/html/releases.html b/help/html/releases.html index a36e31a..83d2ce4 100755 --- a/help/html/releases.html +++ b/help/html/releases.html @@ -68,22 +68,26 @@ li:before { - +
- 2.10.3b1
5/12/2017
+ 2.10.3b1
24/1/2018
- - +
  • Updated Certum Codesigning Certificate + (Valid till 30th November 2018)
+ Desktop
      +
    • Only one structure is loaded when several sequences and structures are selected for viewing/superposing
    • Alignment doesn't appear to scroll vertically via trackpad and scrollwheel
    • Jalview hangs if up/down arrows pressed in cursor mode when cursor lies in hidden region at start of alignment
    • Helix annotation has 'notches' when scrolled into view if columns are hidden
    • Annotation column filter can be slow to reset (ie after hitting cancel) for large numbers of hidden columns
    • -
    • User preference for disabling inclusion of sequence limits when exporting as flat file has no effect
    • -
        +
      • User preference for disabling inclusion of sequence limits when exporting as flat file has no effect
      • +
      • Reproducible cross-reference relationships when retrieving sequences from EnsemblGenomes
      • +
      +
diff --git a/help/html/whatsNew.html b/help/html/whatsNew.html index 4bf1cec..6d75f0f 100755 --- a/help/html/whatsNew.html +++ b/help/html/whatsNew.html @@ -24,14 +24,12 @@

- What's new in Jalview 2.10.3 ? + What's new in Jalview 2.10.3b1 ?

- Version 2.10.3 was released in November 2017. The major focus was to - improve Jalview's sequence features datamodel and the scalability of - the alignment rendering system. The full list of bug fixes and new - features can be found in the 2.10.3 - Release Notes. Key improvements include: + This is the January 2018 patch release, which addresses critical bugs including trackpad function in OSX, and display of multiple 3D structures. + The full list bugs fixed in this release can be found in the 2.10.3b1 + Release Notes. In addition, Jalview 2.10.3 provides:

  • Faster and more responsive UI when importing and working diff --git a/resources/lang/Messages.properties b/resources/lang/Messages.properties index 94f7eff..f526699 100644 --- a/resources/lang/Messages.properties +++ b/resources/lang/Messages.properties @@ -673,7 +673,8 @@ label.2d_rna_structure_line = 2D RNA {0} (alignment) label.2d_rna_sequence_name = 2D RNA - {0} label.edit_name_and_description_current_group = Edit name and description of current group label.from_file = From File -label.enter_pdb_id = Enter PDB Id (or pdbid:chaincode) +label.enter_pdb_id = Enter PDB Id +label.enter_pdb_id_tip = Enter PDB Id (or pdbid:chaincode) label.text_colour = Text Colour... label.structure = Structure label.show_pdbstruct_dialog = 3D Structure Data... @@ -1319,6 +1320,13 @@ label.select_hidden_colour = Select hidden colour label.overview = Overview label.reset_to_defaults = Reset to defaults label.oview_calc = Recalculating overview... -option.enable_disable_autosearch = When ticked, search is performed automatically. +option.enable_disable_autosearch = When ticked, search is performed automatically option.autosearch = Autosearch -label.retrieve_ids = Retrieve IDs \ No newline at end of file +label.retrieve_ids = Retrieve IDs +label.best_quality = Best Quality +label.best_resolution = Best Resolution +label.most_protein_chain = Most Protein Chain +label.most_bound_molecules = Most Bound Molecules +label.most_polymer_residues = Most Polymer Residues +label.cached_structures = Cached Structures +label.free_text_search = Free Text Search diff --git a/resources/lang/Messages_es.properties b/resources/lang/Messages_es.properties index e8fd411..77f053e 100644 --- a/resources/lang/Messages_es.properties +++ b/resources/lang/Messages_es.properties @@ -626,6 +626,7 @@ label.2d_rna_sequence_name = 2D RNA - {0} label.edit_name_and_description_current_group = Editar el nombre y la descripción del grupo actual label.from_file = desde fichero label.enter_pdb_id = Introducir PDB Id +label.enter_pdb_id_tip = Introducir PDB Id (o pdbid:chaincode) label.text_colour = Color de texto... label.structure = Estructura label.create_sequence_details_report_annotation_for = Anotación para {0} @@ -1319,3 +1320,13 @@ label.select_hidden_colour = Seleccionar color de las regiones ocultas label.overview = Resumen label.reset_to_defaults = Restablecen a los predeterminados label.oview_calc = Recalculando resumen +option.enable_disable_autosearch = Marcar para buscar automáticamente +option.autosearch = Auto búsqueda +label.retrieve_ids = Recuperar IDs +label.best_quality = Mejor Calidad +label.best_resolution = Mejor Resolución +label.most_protein_chain = Más Cadena de Proteína +label.most_bound_molecules = Más Moléculas Ligadas +label.most_polymer_residues = Más Residuos de Polímeros +label.cached_structures = Estructuras en Caché +label.free_text_search = Búsqueda de texto libre diff --git a/src/jalview/ext/ensembl/EnsemblCdna.java b/src/jalview/ext/ensembl/EnsemblCdna.java index 6d031b7..952f01e 100644 --- a/src/jalview/ext/ensembl/EnsemblCdna.java +++ b/src/jalview/ext/ensembl/EnsemblCdna.java @@ -24,9 +24,6 @@ import jalview.datamodel.SequenceFeature; import jalview.io.gff.SequenceOntologyFactory; import jalview.io.gff.SequenceOntologyI; -import java.util.HashMap; -import java.util.Map; - import com.stevesoft.pat.Regex; /** @@ -47,13 +44,6 @@ public class EnsemblCdna extends EnsemblSeqProxy private static final Regex ACCESSION_REGEX = new Regex( "(ENS([A-Z]{3}|)[TG][0-9]{11}$)" + "|" + "(CCDS[0-9.]{3,}$)"); - private static Map params = new HashMap(); - - static - { - params.put("object_type", "transcript"); - } - /* * fetch exon features on genomic sequence (to identify the cdna regions) * and cds and variation features (to retain) @@ -139,13 +129,13 @@ public class EnsemblCdna extends EnsemblSeqProxy } /** - * Parameter object_type=cdna added to ensure cdna and not peptide is returned - * (JAL-2529) + * Parameter object_type=Transcaript added to ensure cdna and not peptide is + * returned (JAL-2529) */ @Override - protected Map getAdditionalParameters() + protected String getObjectType() { - return params; + return OBJECT_TYPE_TRANSCRIPT; } } diff --git a/src/jalview/ext/ensembl/EnsemblFeatures.java b/src/jalview/ext/ensembl/EnsemblFeatures.java index 7570822..cb6f548 100644 --- a/src/jalview/ext/ensembl/EnsemblFeatures.java +++ b/src/jalview/ext/ensembl/EnsemblFeatures.java @@ -82,7 +82,7 @@ class EnsemblFeatures extends EnsemblRestClient public AlignmentI getSequenceRecords(String query) throws IOException { // TODO: use a vararg String... for getSequenceRecords instead? - List queries = new ArrayList(); + List queries = new ArrayList<>(); queries.add(query); FileParse fp = getSequenceReader(queries); if (fp == null || !fp.isValid()) @@ -109,9 +109,17 @@ class EnsemblFeatures extends EnsemblRestClient urlstring.append("?content-type=text/x-gff3"); /* + * specify object_type=gene in case is shared by transcript and/or protein; + * currently only fetching features for gene sequences; + * refactor in future if needed to fetch for transcripts + */ + urlstring.append("&").append(OBJECT_TYPE).append("=") + .append(OBJECT_TYPE_GENE); + + /* * specify features to retrieve * @see http://rest.ensembl.org/documentation/info/overlap_id - * could make the list a configurable entry in jalview.properties + * could make the list a configurable entry in .jalview_properties */ for (EnsemblFeatureType feature : featuresWanted) { diff --git a/src/jalview/ext/ensembl/EnsemblGene.java b/src/jalview/ext/ensembl/EnsemblGene.java index 50dfa90..0d5fc26 100644 --- a/src/jalview/ext/ensembl/EnsemblGene.java +++ b/src/jalview/ext/ensembl/EnsemblGene.java @@ -98,6 +98,12 @@ public class EnsemblGene extends EnsemblSeqProxy return EnsemblSeqType.GENOMIC; } + @Override + protected String getObjectType() + { + return OBJECT_TYPE_GENE; + } + /** * Returns an alignment containing the gene(s) for the given gene or * transcript identifier, or external identifier (e.g. Uniprot id). If given a @@ -146,6 +152,8 @@ public class EnsemblGene extends EnsemblSeqProxy } if (geneAlignment.getHeight() == 1) { + // ensure id has 'correct' case for the Ensembl identifier + geneId = geneAlignment.getSequenceAt(0).getName(); getTranscripts(geneAlignment, geneId); } if (al == null) @@ -170,7 +178,7 @@ public class EnsemblGene extends EnsemblSeqProxy */ List getGeneIds(String accessions) { - List geneIds = new ArrayList(); + List geneIds = new ArrayList<>(); for (String acc : accessions.split(getAccessionSeparator())) { @@ -305,7 +313,7 @@ public class EnsemblGene extends EnsemblSeqProxy int transcriptLength = 0; final char[] geneChars = gene.getSequence(); int offset = gene.getStart(); // to convert to 0-based positions - List mappedFrom = new ArrayList(); + List mappedFrom = new ArrayList<>(); for (SequenceFeature sf : splices) { @@ -347,7 +355,7 @@ public class EnsemblGene extends EnsemblSeqProxy * transfer features to the new sequence; we use EnsemblCdna to do this, * to filter out unwanted features types (see method retainFeature) */ - List mapTo = new ArrayList(); + List mapTo = new ArrayList<>(); mapTo.add(new int[] { 1, transcriptLength }); MapList mapping = new MapList(mappedFrom, mapTo, 1, 1); EnsemblCdna cdna = new EnsemblCdna(getDomain()); @@ -395,7 +403,7 @@ public class EnsemblGene extends EnsemblSeqProxy protected List getTranscriptFeatures(String accId, SequenceI geneSequence) { - List transcriptFeatures = new ArrayList(); + List transcriptFeatures = new ArrayList<>(); String parentIdentifier = GENE_PREFIX + accId; @@ -407,7 +415,7 @@ public class EnsemblGene extends EnsemblSeqProxy for (SequenceFeature sf : sfs) { String parent = (String) sf.getValue(PARENT); - if (parentIdentifier.equals(parent)) + if (parentIdentifier.equalsIgnoreCase(parent)) { transcriptFeatures.add(sf); } @@ -444,8 +452,9 @@ public class EnsemblGene extends EnsemblSeqProxy if (SequenceOntologyFactory.getInstance().isA(sf.getType(), SequenceOntologyI.GENE)) { - String id = (String) sf.getValue(ID); - if ((GENE_PREFIX + accId).equals(id)) + // NB features as gff use 'ID'; rest services return as 'id' + String id = (String) sf.getValue("ID"); + if ((GENE_PREFIX + accId).equalsIgnoreCase(id)) { return true; } @@ -472,7 +481,7 @@ public class EnsemblGene extends EnsemblSeqProxy if (isTranscript(type)) { String parent = (String) sf.getValue(PARENT); - if (!(GENE_PREFIX + accessionId).equals(parent)) + if (!(GENE_PREFIX + accessionId).equalsIgnoreCase(parent)) { return false; } diff --git a/src/jalview/ext/ensembl/EnsemblGenome.java b/src/jalview/ext/ensembl/EnsemblGenome.java index 458a233..bde3c0f 100644 --- a/src/jalview/ext/ensembl/EnsemblGenome.java +++ b/src/jalview/ext/ensembl/EnsemblGenome.java @@ -103,7 +103,7 @@ public class EnsemblGenome extends EnsemblSeqProxy { if (isTranscript(sf.getType())) { - String id = (String) sf.getValue(ID); + String id = (String) sf.getValue("ID"); if (("transcript:" + accId).equals(id)) { return true; diff --git a/src/jalview/ext/ensembl/EnsemblLookup.java b/src/jalview/ext/ensembl/EnsemblLookup.java index 31da9c0..92763a1 100644 --- a/src/jalview/ext/ensembl/EnsemblLookup.java +++ b/src/jalview/ext/ensembl/EnsemblLookup.java @@ -34,22 +34,13 @@ import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; /** - * A client for the Ensembl lookup REST endpoint; used to find the Parent gene - * identifier given a transcript identifier. + * A client for the Ensembl lookup REST endpoint, used to find the gene + * identifier given a gene, transcript or protein identifier. * * @author gmcarstairs - * */ public class EnsemblLookup extends EnsemblRestClient { - - private static final String OBJECT_TYPE_TRANSLATION = "Translation"; - private static final String PARENT = "Parent"; - private static final String OBJECT_TYPE_TRANSCRIPT = "Transcript"; - private static final String ID = "id"; - private static final String OBJECT_TYPE_GENE = "Gene"; - private static final String OBJECT_TYPE = "object_type"; - /** * Default constructor (to use rest.ensembl.org) */ @@ -84,17 +75,26 @@ public class EnsemblLookup extends EnsemblRestClient protected URL getUrl(List ids) throws MalformedURLException { String identifier = ids.get(0); - return getUrl(identifier); + return getUrl(identifier, null); } /** + * Gets the url for lookup of the given identifier, optionally with objectType + * also specified in the request + * * @param identifier + * @param objectType * @return */ - protected URL getUrl(String identifier) + protected URL getUrl(String identifier, String objectType) { String url = getDomain() + "/lookup/id/" + identifier + CONTENT_TYPE_JSON; + if (objectType != null) + { + url += "&" + OBJECT_TYPE + "=" + objectType; + } + try { return new URL(url); @@ -123,20 +123,34 @@ public class EnsemblLookup extends EnsemblRestClient } /** + * Returns the gene id related to the given identifier, which may be for a + * gene, transcript or protein + * + * @param identifier + * @return + */ + public String getGeneId(String identifier) + { + return getGeneId(identifier, null); + } + + /** * Calls the Ensembl lookup REST endpoint and retrieves the 'Parent' for the * given identifier, or null if not found * * @param identifier + * @param objectType + * (optional) * @return */ - public String getGeneId(String identifier) + public String getGeneId(String identifier, String objectType) { List ids = Arrays.asList(new String[] { identifier }); BufferedReader br = null; try { - URL url = getUrl(identifier); + URL url = getUrl(identifier, objectType); if (url != null) { br = getHttpResponse(url, ids); @@ -181,28 +195,19 @@ public class EnsemblLookup extends EnsemblRestClient String type = val.get(OBJECT_TYPE).toString(); if (OBJECT_TYPE_GENE.equalsIgnoreCase(type)) { + // got the gene - just returns its id geneId = val.get(ID).toString(); } else if (OBJECT_TYPE_TRANSCRIPT.equalsIgnoreCase(type)) { + // got the transcript - return its (Gene) Parent geneId = val.get(PARENT).toString(); } else if (OBJECT_TYPE_TRANSLATION.equalsIgnoreCase(type)) { + // got the protein - get its Parent, restricted to type Transcript String transcriptId = val.get(PARENT).toString(); - try - { - geneId = getGeneId(transcriptId); - } catch (StackOverflowError e) - { - /* - * unlikely data condition error! - */ - System.err - .println("** Ensembl lookup " - + getUrl(transcriptId).toString() - + " looping on Parent!"); - } + geneId = getGeneId(transcriptId, OBJECT_TYPE_TRANSCRIPT); } } catch (ParseException e) { diff --git a/src/jalview/ext/ensembl/EnsemblSeqProxy.java b/src/jalview/ext/ensembl/EnsemblSeqProxy.java index 577111e..b2ebb1a 100644 --- a/src/jalview/ext/ensembl/EnsemblSeqProxy.java +++ b/src/jalview/ext/ensembl/EnsemblSeqProxy.java @@ -48,8 +48,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; /** * Base class for Ensembl sequence fetchers @@ -61,10 +59,6 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient { private static final String ALLELES = "alleles"; - protected static final String PARENT = "Parent"; - - protected static final String ID = "ID"; - protected static final String NAME = "Name"; protected static final String DESCRIPTION = "description"; @@ -209,7 +203,8 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient try { /* - * get 'dummy' genomic sequence with exon, cds and variation features + * get 'dummy' genomic sequence with gene, transcript, + * exon, cds and variation features */ SequenceI genomicSequence = null; EnsemblFeatures gffFetcher = new EnsemblFeatures(getDomain()); @@ -225,7 +220,7 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient /* * transfer features to the query sequence */ - SequenceI querySeq = alignment.findName(accId); + SequenceI querySeq = alignment.findName(accId, true); if (transferFeatures(accId, genomicSequence, querySeq)) { @@ -472,14 +467,11 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient urlstring.append("?type=").append(getSourceEnsemblType().getType()); urlstring.append(("&Accept=text/x-fasta")); - Map params = getAdditionalParameters(); - if (params != null) + String objectType = getObjectType(); + if (objectType != null) { - for (Entry entry : params.entrySet()) - { - urlstring.append("&").append(entry.getKey()).append("=") - .append(entry.getValue()); - } + urlstring.append("&").append(OBJECT_TYPE).append("=") + .append(objectType); } URL url = new URL(urlstring.toString()); @@ -487,11 +479,11 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient } /** - * Override this method to add any additional x=y URL parameters needed + * Override this method to specify object_type request parameter * * @return */ - protected Map getAdditionalParameters() + protected String getObjectType() { return null; } @@ -560,7 +552,6 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient protected MapList getGenomicRangesFromFeatures(SequenceI sourceSequence, String accId, int start) { - // SequenceFeature[] sfs = sourceSequence.getSequenceFeatures(); List sfs = sourceSequence.getFeatures() .getPositionalFeatures(); if (sfs.isEmpty()) @@ -572,7 +563,7 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient * generously initial size for number of cds regions * (worst case titin Q8WZ42 has c. 313 exons) */ - List regions = new ArrayList(100); + List regions = new ArrayList<>(100); int mappedLength = 0; int direction = 1; // forward boolean directionSet = false; @@ -871,7 +862,8 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient { String parent = (String) sf.getValue(PARENT); // using contains to allow for prefix "gene:", "transcript:" etc - if (parent != null && !parent.contains(identifier)) + if (parent != null + && !parent.toUpperCase().contains(identifier.toUpperCase())) { // this genomic feature belongs to a different transcript return false; @@ -899,14 +891,14 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient protected List findFeatures(SequenceI sequence, String term, String parentId) { - List result = new ArrayList(); + List result = new ArrayList<>(); List sfs = sequence.getFeatures() .getFeaturesByOntology(term); for (SequenceFeature sf : sfs) { String parent = (String) sf.getValue(PARENT); - if (parent != null && parent.equals(parentId)) + if (parent != null && parent.equalsIgnoreCase(parentId)) { result.add(sf); } diff --git a/src/jalview/ext/ensembl/EnsemblSequenceFetcher.java b/src/jalview/ext/ensembl/EnsemblSequenceFetcher.java index 598dba1..c4abb20 100644 --- a/src/jalview/ext/ensembl/EnsemblSequenceFetcher.java +++ b/src/jalview/ext/ensembl/EnsemblSequenceFetcher.java @@ -45,6 +45,18 @@ abstract class EnsemblSequenceFetcher extends DbSourceProxyImpl protected static final String ENSEMBL_REST = "http://rest.ensembl.org"; + protected static final String OBJECT_TYPE_TRANSLATION = "Translation"; + + protected static final String OBJECT_TYPE_TRANSCRIPT = "Transcript"; + + protected static final String OBJECT_TYPE_GENE = "Gene"; + + protected static final String PARENT = "Parent"; + + protected static final String ID = "id"; + + protected static final String OBJECT_TYPE = "object_type"; + /* * possible values for the 'feature' parameter of the /overlap REST service * @see http://rest.ensembl.org/documentation/info/overlap_id diff --git a/src/jalview/ext/ensembl/EnsemblSymbol.java b/src/jalview/ext/ensembl/EnsemblSymbol.java index 75598a0..e3b6c93 100644 --- a/src/jalview/ext/ensembl/EnsemblSymbol.java +++ b/src/jalview/ext/ensembl/EnsemblSymbol.java @@ -44,8 +44,6 @@ public class EnsemblSymbol extends EnsemblXref { private static final String GENE = "gene"; private static final String TYPE = "type"; - private static final String ID = "id"; - /** * Constructor given the target domain to fetch data from * diff --git a/src/jalview/fts/core/GFTSPanel.java b/src/jalview/fts/core/GFTSPanel.java index 9802d4b..86710e1 100644 --- a/src/jalview/fts/core/GFTSPanel.java +++ b/src/jalview/fts/core/GFTSPanel.java @@ -92,7 +92,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI protected JTabbedPane tabs = new JTabbedPane(); protected IProgressIndicator progressIndicator; - protected JComboBox cmb_searchTarget = new JComboBox(); + protected JComboBox cmb_searchTarget = new JComboBox<>(); protected JButton btn_ok = new JButton(); @@ -151,7 +151,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI protected int pageLimit; - protected HashSet paginatorCart = new HashSet(); + protected HashSet paginatorCart = new HashSet<>(); private static final int MIN_WIDTH = 670; @@ -293,7 +293,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI private void jbInit() throws Exception { - txt_search = new JvCacheableInputBox(getCacheKey()); + txt_search = new JvCacheableInputBox<>(getCacheKey()); populateCmbSearchTargetOptions(); Integer width = getTempUserPrefs().get("FTSPanel.width") == null ? 800 : getTempUserPrefs().get("FTSPanel.width"); @@ -681,7 +681,8 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI if (tabs != null) { tabs.setOpaque(true); - tabs.insertTab("Free Text Search", null, this, "", 0); + tabs.insertTab(MessageManager.getString("label.free_text_search"), + null, this, "", 0); mainFrame.setContentPane(tabs); tabs.setVisible(true); } @@ -871,7 +872,7 @@ public abstract class GFTSPanel extends JPanel implements GFTSPanelI */ public void populateCmbSearchTargetOptions() { - List searchableTargets = new ArrayList(); + List searchableTargets = new ArrayList<>(); try { Collection foundFTSTargets = getFTSRestClient() diff --git a/src/jalview/gui/StructureChooser.java b/src/jalview/gui/StructureChooser.java index 7c386f1..217f653 100644 --- a/src/jalview/gui/StructureChooser.java +++ b/src/jalview/gui/StructureChooser.java @@ -525,7 +525,7 @@ public class StructureChooser extends GStructureChooser * structures */ protected void populateFilterComboBox(boolean haveData, - boolean cachedPDBExists) + boolean cachedPDBExist) { /* * temporarily suspend the change listener behaviour @@ -535,25 +535,33 @@ public class StructureChooser extends GStructureChooser cmb_filterOption.removeAllItems(); if (haveData) { - cmb_filterOption.addItem(new FilterOption("Best Quality", + cmb_filterOption.addItem(new FilterOption( + MessageManager.getString("label.best_quality"), "overall_quality", VIEWS_FILTER, false)); - cmb_filterOption.addItem(new FilterOption("Best Resolution", + cmb_filterOption.addItem(new FilterOption( + MessageManager.getString("label.best_resolution"), "resolution", VIEWS_FILTER, false)); - cmb_filterOption.addItem(new FilterOption("Most Protein Chain", + cmb_filterOption.addItem(new FilterOption( + MessageManager.getString("label.most_protein_chain"), "number_of_protein_chains", VIEWS_FILTER, false)); - cmb_filterOption.addItem(new FilterOption("Most Bound Molecules", + cmb_filterOption.addItem(new FilterOption( + MessageManager.getString("label.most_bound_molecules"), "number_of_bound_molecules", VIEWS_FILTER, false)); - cmb_filterOption.addItem(new FilterOption("Most Polymer Residues", + cmb_filterOption.addItem(new FilterOption( + MessageManager.getString("label.most_polymer_residues"), "number_of_polymer_residues", VIEWS_FILTER, true)); } cmb_filterOption.addItem( - new FilterOption("Enter PDB Id", "-", VIEWS_ENTER_ID, false)); + new FilterOption(MessageManager.getString("label.enter_pdb_id"), + "-", VIEWS_ENTER_ID, false)); cmb_filterOption.addItem( - new FilterOption("From File", "-", VIEWS_FROM_FILE, false)); + new FilterOption(MessageManager.getString("label.from_file"), + "-", VIEWS_FROM_FILE, false)); - if (cachedPDBExists) + if (cachedPDBExist) { - FilterOption cachedOption = new FilterOption("Cached Structures", + FilterOption cachedOption = new FilterOption( + MessageManager.getString("label.cached_structures"), "-", VIEWS_LOCAL_PDB, false); cmb_filterOption.addItem(cachedOption); cmb_filterOption.setSelectedItem(cachedOption); diff --git a/src/jalview/jbgui/GStructureChooser.java b/src/jalview/jbgui/GStructureChooser.java index 7c4672a..9bcaa5a 100644 --- a/src/jalview/jbgui/GStructureChooser.java +++ b/src/jalview/jbgui/GStructureChooser.java @@ -91,7 +91,7 @@ public abstract class GStructureChooser extends JPanel protected JInternalFrame mainFrame = new JInternalFrame(frameTitle); - protected JComboBox cmb_filterOption = new JComboBox(); + protected JComboBox cmb_filterOption = new JComboBox<>(); protected AlignmentPanel ap; @@ -182,7 +182,7 @@ public abstract class GStructureChooser extends JPanel protected FTSDataColumnI[] previousWantedFields; - protected static Map tempUserPrefs = new HashMap(); + protected static Map tempUserPrefs = new HashMap<>(); private JTable tbl_summary = new JTable() { @@ -474,7 +474,7 @@ public abstract class GStructureChooser extends JPanel chk_rememberSettings.setFont(new java.awt.Font("Verdana", 0, 12)); chk_rememberSettings.setVisible(false); txt_search.setToolTipText(JvSwingUtils.wrapTooltip(true, - MessageManager.getString("label.enter_pdb_id"))); + MessageManager.getString("label.enter_pdb_id_tip"))); cmb_filterOption.setToolTipText( MessageManager.getString("info.select_filter_option")); txt_search.getDocument().addDocumentListener(new DocumentListener() @@ -803,7 +803,7 @@ public abstract class GStructureChooser extends JPanel */ public class AssciateSeqPanel extends JPanel implements ItemListener { - private JComboBox cmb_assSeq = new JComboBox(); + private JComboBox cmb_assSeq = new JComboBox<>(); private JLabel lbl_associateSeq = new JLabel(); diff --git a/test/jalview/ext/ensembl/EnsemblCdnaTest.java b/test/jalview/ext/ensembl/EnsemblCdnaTest.java index 6611e05..779962c 100644 --- a/test/jalview/ext/ensembl/EnsemblCdnaTest.java +++ b/test/jalview/ext/ensembl/EnsemblCdnaTest.java @@ -228,6 +228,9 @@ public class EnsemblCdnaTest sf.setValue("Parent", "transcript:" + accId); assertTrue(testee.retainFeature(sf, accId)); + // test is not case-sensitive + assertTrue(testee.retainFeature(sf, accId.toLowerCase())); + // feature with wrong parent is not retained sf.setValue("Parent", "transcript:XYZ"); assertFalse(testee.retainFeature(sf, accId)); diff --git a/test/jalview/ext/ensembl/EnsemblGeneTest.java b/test/jalview/ext/ensembl/EnsemblGeneTest.java index 5920b89..1b1a2b4 100644 --- a/test/jalview/ext/ensembl/EnsemblGeneTest.java +++ b/test/jalview/ext/ensembl/EnsemblGeneTest.java @@ -173,7 +173,8 @@ public class EnsemblGeneTest // NMD_transcript_variant treated like transcript in Ensembl SequenceFeature sf3 = new SequenceFeature("NMD_transcript_variant", "", 22000, 22500, 0f, null); - sf3.setValue("Parent", "gene:" + geneId); + // id matching should not be case-sensitive + sf3.setValue("Parent", "gene:" + geneId.toLowerCase()); sf3.setValue("transcript_id", "transcript3"); genomic.addSequenceFeature(sf3); @@ -259,6 +260,9 @@ public class EnsemblGeneTest sf.setValue("ID", "gene:" + accId); assertTrue(testee.identifiesSequence(sf, accId)); + // test is not case-sensitive + assertTrue(testee.identifiesSequence(sf, accId.toLowerCase())); + // transcript not valid: sf = new SequenceFeature("transcript", "", 1, 2, 0f, null); sf.setValue("ID", "gene:" + accId); diff --git a/test/jalview/gui/StructureChooserTest.java b/test/jalview/gui/StructureChooserTest.java index 4535c93..91fe602 100644 --- a/test/jalview/gui/StructureChooserTest.java +++ b/test/jalview/gui/StructureChooserTest.java @@ -65,7 +65,7 @@ public class StructureChooserTest PDBEntry dbRef = new PDBEntry(); dbRef.setId("1tim"); - Vector pdbIds = new Vector(); + Vector pdbIds = new Vector<>(); pdbIds.add(dbRef); seq.setPDBId(pdbIds); @@ -133,7 +133,7 @@ public class StructureChooserTest assertTrue(sc.getCmbFilterOption().getSelectedItem() != null); FilterOption filterOpt = (FilterOption) sc.getCmbFilterOption() .getSelectedItem(); - assertEquals("Cached PDB Entries", filterOpt.getName()); + assertEquals("Cached Structures", filterOpt.getName()); } @Test(groups = { "Network" })