X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fschemes%2FColourSchemes.java;h=e2a8cb31425ababfe725c11473bc4f7314894217;hb=refs%2Fheads%2Fspike%2FJAL-4047%2FJAL-4048_columns_in_sequenceID;hp=21faa2a43e8165817df5be5d1468c530931eadc3;hpb=94379c810f9115b8564ee7bac46ed119218d5fd2;p=jalview.git diff --git a/src/jalview/schemes/ColourSchemes.java b/src/jalview/schemes/ColourSchemes.java index 21faa2a..e2a8cb3 100644 --- a/src/jalview/schemes/ColourSchemes.java +++ b/src/jalview/schemes/ColourSchemes.java @@ -1,11 +1,34 @@ +/* + * 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.schemes; -import jalview.api.AlignViewportI; -import jalview.datamodel.AnnotatedCollectionI; - import java.util.LinkedHashMap; +import java.util.Locale; import java.util.Map; +import jalview.api.AlignViewportI; +import jalview.datamodel.AnnotatedCollectionI; +import jalview.datamodel.SequenceCollectionI; +import jalview.datamodel.SequenceI; + public class ColourSchemes { /* @@ -14,7 +37,7 @@ public class ColourSchemes private static ColourSchemes instance = new ColourSchemes(); /* - * a map from scheme name to an instance of it + * a map from scheme name (lower-cased) to an instance of it */ private Map schemes; @@ -44,17 +67,22 @@ public class ColourSchemes * store in an order-preserving map, so items can be added to menus * in the order in which they are 'discovered' */ - schemes = new LinkedHashMap(); + schemes = new LinkedHashMap<>(); for (JalviewColourScheme cs : JalviewColourScheme.values()) { try { - registerColourScheme(cs.getSchemeClass().newInstance()); + registerColourScheme( + cs.getSchemeClass().getDeclaredConstructor().newInstance()); } catch (InstantiationException | IllegalAccessException e) { - System.err.println("Error instantiating colour scheme for " + jalview.bin.Console.errPrintln("Error instantiating colour scheme for " + cs.toString() + " " + e.getMessage()); + e.printStackTrace(); + } catch (ReflectiveOperationException roe) + { + roe.printStackTrace(); } } } @@ -69,7 +97,7 @@ public class ColourSchemes String name = cs.getSchemeName(); if (name == null) { - System.err.println("ColourScheme name may not be null"); + jalview.bin.Console.errPrintln("ColourScheme name may not be null"); return; } @@ -77,7 +105,7 @@ public class ColourSchemes * name is lower-case for non-case-sensitive lookup * (name in the colour keeps its true case) */ - String lower = name.toLowerCase(); + String lower = getColourSchemeShortName(cs); if (schemes.containsKey(lower)) { System.err @@ -86,6 +114,19 @@ public class ColourSchemes schemes.put(lower, cs); } + private String getColourSchemeShortName(ColourSchemeI cs) + { + return getColourSchemeShortName(cs.getSchemeName()); + } + + private String getColourSchemeShortName(String name) + { + if (name == null) + return null; + return name.toLowerCase(Locale.ROOT).replaceAll("%", "pc") + .replaceAll("[^a-z0-9]", "-").replaceAll("--+", "-"); + } + /** * Removes a colour scheme by name * @@ -93,9 +134,12 @@ public class ColourSchemes */ public void removeColourScheme(String name) { - schemes.remove(name); + if (name != null) + { + schemes.remove(getColourSchemeShortName(name)); + } } - + /** * Returns an instance of the colour scheme with which the given view may be * coloured @@ -103,32 +147,39 @@ public class ColourSchemes * @param name * name of the colour scheme * @param viewport + * @param forData + * the data to be coloured + * @param optional + * map from hidden representative sequences to the sequences they + * represent * @return */ - public ColourSchemeI getColourScheme(String name, AlignViewportI viewport) + public ColourSchemeI getColourScheme(String name, AlignViewportI viewport, + AnnotatedCollectionI forData, + Map hiddenRepSequences) { if (name == null) { return null; } - ColourSchemeI cs = schemes.get(name.toLowerCase()); - return cs == null ? null : cs.getInstance(viewport.getAlignment(), - viewport.getHiddenRepSequences()); + ColourSchemeI cs = schemes.get(getColourSchemeShortName(name)); + return cs == null ? null : cs.getInstance(viewport, forData); } /** - * Returns an instance of the colour scheme with which the given data may be + * Returns an instance of the colour scheme with which the given view may be * coloured * * @param name + * name of the colour scheme * @param forData + * the data to be coloured * @return */ public ColourSchemeI getColourScheme(String name, AnnotatedCollectionI forData) { - ColourSchemeI cs = schemes.get(name.toLowerCase()); - return cs == null ? null : cs.getInstance(forData, null); + return getColourScheme(name, null, forData, null); } /** @@ -141,4 +192,20 @@ public class ColourSchemes { return schemes.values(); } + + /** + * Answers true if there is a scheme with the given name, else false. The test + * is not case-sensitive. + * + * @param name + * @return + */ + public boolean nameExists(String name) + { + if (name == null) + { + return false; + } + return schemes.containsKey(getColourSchemeShortName(name)); + } }