X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fschemes%2FColourSchemes.java;h=d31fbba4c752c19aaffd3be8c6def41e13b3c1ac;hb=9495cd9a452073db15529f4844dc9888a6847d00;hp=817fb0136767e4106fd656db2d554faea0e0c58a;hpb=8b55eedb9d76a8c65b80f756c4412bf029906bf7;p=jalview.git diff --git a/src/jalview/schemes/ColourSchemes.java b/src/jalview/schemes/ColourSchemes.java index 817fb01..d31fbba 100644 --- a/src/jalview/schemes/ColourSchemes.java +++ b/src/jalview/schemes/ColourSchemes.java @@ -1,14 +1,30 @@ +/* + * 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.binding.JalviewUserColours; +import jalview.api.AlignViewportI; import jalview.datamodel.AnnotatedCollectionI; import jalview.datamodel.SequenceCollectionI; import jalview.datamodel.SequenceI; -import java.awt.Color; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStreamReader; import java.util.LinkedHashMap; import java.util.Map; @@ -20,7 +36,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; @@ -50,17 +66,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 " + cs.toString() + " " + e.getMessage()); + e.printStackTrace(); + } catch (ReflectiveOperationException roe) + { + roe.printStackTrace(); } } } @@ -99,15 +120,19 @@ public class ColourSchemes */ public void removeColourScheme(String name) { - schemes.remove(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 viewport * @param forData * the data to be coloured * @param optional @@ -116,7 +141,7 @@ public class ColourSchemes * @return */ public ColourSchemeI getColourScheme(String name, - AnnotatedCollectionI forData, + AlignViewportI viewport, AnnotatedCollectionI forData, Map hiddenRepSequences) { if (name == null) @@ -124,7 +149,8 @@ public class ColourSchemes return null; } ColourSchemeI cs = schemes.get(name.toLowerCase()); - return cs == null ? null : cs.getInstance(forData, hiddenRepSequences); + return cs == null ? null + : cs.getInstance(viewport, forData); } /** @@ -140,7 +166,7 @@ public class ColourSchemes public ColourSchemeI getColourScheme(String name, AnnotatedCollectionI forData) { - return getColourScheme(name, forData, null); + return getColourScheme(name, null, forData, null); } /** @@ -167,124 +193,6 @@ public class ColourSchemes { return false; } - name = name.toLowerCase(); - for (ColourSchemeI scheme : getColourSchemes()) - { - if (name.equals(scheme.getSchemeName().toLowerCase())) - { - return true; - } - } - return false; - } - - /** - * Loads a user defined colour scheme from file. The file should contain a - * definition of residue colours in XML format as defined in - * JalviewUserColours.xsd. - * - * @param filePath - * - * @return - */ - public static UserColourScheme loadColourScheme(String filePath) - { - UserColourScheme ucs = null; - Color[] newColours = null; - File file = new File(filePath); - try - { - InputStreamReader in = new InputStreamReader( - new FileInputStream(file), "UTF-8"); - - jalview.schemabinding.version2.JalviewUserColours jucs = new jalview.schemabinding.version2.JalviewUserColours(); - - org.exolab.castor.xml.Unmarshaller unmar = new org.exolab.castor.xml.Unmarshaller( - jucs); - jucs = (jalview.schemabinding.version2.JalviewUserColours) unmar - .unmarshal(in); - - /* - * non-case-sensitive colours are for 20 amino acid codes, - * B, Z, X and Gap - * optionally, lower-case alternatives for all except Gap - */ - newColours = new Color[24]; - Color[] lowerCase = new Color[23]; - boolean caseSensitive = false; - - String name; - int index; - for (int i = 0; i < jucs.getColourCount(); i++) - { - name = jucs.getColour(i).getName(); - if (ResidueProperties.aa3Hash.containsKey(name)) - { - index = ResidueProperties.aa3Hash.get(name).intValue(); - } - else - { - index = ResidueProperties.aaIndex[name.charAt(0)]; - } - if (index == -1) - { - continue; - } - - Color color = new Color(Integer.parseInt(jucs.getColour(i) - .getRGB(), 16)); - if (name.toLowerCase().equals(name)) - { - caseSensitive = true; - lowerCase[index] = color; - } - else - { - newColours[index] = color; - } - } - - /* - * instantiate the colour scheme - */ - ucs = new UserColourScheme(newColours); - ucs.setName(jucs.getSchemeName()); - if (caseSensitive) - { - ucs.setLowerCaseColours(lowerCase); - } - } catch (Exception ex) - { - // Could be old Jalview Archive format - try - { - InputStreamReader in = new InputStreamReader(new FileInputStream( - file), "UTF-8"); - - jalview.binding.JalviewUserColours jucs = new jalview.binding.JalviewUserColours(); - - jucs = JalviewUserColours.unmarshal(in); - - newColours = new Color[jucs.getColourCount()]; - - for (int i = 0; i < 24; i++) - { - newColours[i] = new Color(Integer.parseInt(jucs.getColour(i) - .getRGB(), 16)); - } - ucs = new UserColourScheme(newColours); - ucs.setName(jucs.getSchemeName()); - } catch (Exception ex2) - { - ex2.printStackTrace(); - } - - if (newColours == null) - { - System.out.println("Error loading User ColourFile\n" + ex); - } - } - - return ucs; + return schemes.containsKey(name.toLowerCase()); } }