X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fschemes%2FColourSchemes.java;fp=src%2Fjalview%2Fschemes%2FColourSchemes.java;h=99e97592c55bb2c8f52de2a32c1f9ad908825391;hb=9f70ff4b6d193b340031997634c9e3602486bc8e;hp=0000000000000000000000000000000000000000;hpb=76844c43faeeeba369deaf42f1998ca0fb33d956;p=jalview.git diff --git a/src/jalview/schemes/ColourSchemes.java b/src/jalview/schemes/ColourSchemes.java new file mode 100644 index 0000000..99e9759 --- /dev/null +++ b/src/jalview/schemes/ColourSchemes.java @@ -0,0 +1,190 @@ +/* + * 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.datamodel.AnnotatedCollectionI; +import jalview.datamodel.SequenceCollectionI; +import jalview.datamodel.SequenceI; + +import java.util.LinkedHashMap; +import java.util.Map; + +public class ColourSchemes +{ + /* + * singleton instance of this class + */ + private static ColourSchemes instance = new ColourSchemes(); + + /* + * a map from scheme name (lower-cased) to an instance of it + */ + private Map schemes; + + /** + * Returns the singleton instance of this class + * + * @return + */ + public static ColourSchemes getInstance() + { + return instance; + } + + private ColourSchemes() + { + loadColourSchemes(); + } + + /** + * Loads an instance of each standard or user-defined colour scheme + * + * @return + */ + void loadColourSchemes() + { + /* + * store in an order-preserving map, so items can be added to menus + * in the order in which they are 'discovered' + */ + schemes = new LinkedHashMap(); + + for (JalviewColourScheme cs : JalviewColourScheme.values()) + { + try + { + registerColourScheme(cs.getSchemeClass().newInstance()); + } catch (InstantiationException | IllegalAccessException e) + { + System.err.println("Error instantiating colour scheme for " + + cs.toString() + " " + e.getMessage()); + } + } + } + + /** + * Registers a colour scheme + * + * @param cs + */ + public void registerColourScheme(ColourSchemeI cs) + { + String name = cs.getSchemeName(); + if (name == null) + { + System.err.println("ColourScheme name may not be null"); + return; + } + + /* + * name is lower-case for non-case-sensitive lookup + * (name in the colour keeps its true case) + */ + String lower = name.toLowerCase(); + if (schemes.containsKey(lower)) + { + System.err + .println("Warning: overwriting colour scheme named " + name); + } + schemes.put(lower, cs); + } + + /** + * Removes a colour scheme by name + * + * @param name + */ + public void removeColourScheme(String name) + { + if (name != null) + { + schemes.remove(name.toLowerCase()); + } + } + + /** + * 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 + * @param optional + * map from hidden representative sequences to the sequences they + * represent + * @return + */ + public ColourSchemeI getColourScheme(String name, + AnnotatedCollectionI forData, + Map hiddenRepSequences) + { + if (name == null) + { + return null; + } + ColourSchemeI cs = schemes.get(name.toLowerCase()); + return cs == null ? null : cs.getInstance(forData, hiddenRepSequences); + } + + /** + * 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) + { + return getColourScheme(name, forData, null); + } + + /** + * Returns an iterable set of the colour schemes, in the order in which they + * were added + * + * @return + */ + public Iterable getColourSchemes() + { + 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(name.toLowerCase()); + } +}