X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2Ffeatures%2FFeatureAttributes.java;h=d2745115de84f688bc6d0342ece596351b535d13;hb=d1e20f6a5654ea6baf378afa3277b4e751c69a96;hp=e359b62c5051ad6afbce6a89d40de373fd65b6d7;hpb=9e926ac4305fd9dff38b6e079e55b4f50664d544;p=jalview.git diff --git a/src/jalview/datamodel/features/FeatureAttributes.java b/src/jalview/datamodel/features/FeatureAttributes.java index e359b62..d274511 100644 --- a/src/jalview/datamodel/features/FeatureAttributes.java +++ b/src/jalview/datamodel/features/FeatureAttributes.java @@ -1,3 +1,23 @@ +/* + * 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.datamodel.features; import java.util.ArrayList; @@ -87,8 +107,8 @@ public class FeatureAttributes Datatype type; /** - * Note one instance of this attribute, recording unique, non-null names, - * and the min/max of any numerical values + * Note one instance of this attribute, recording unique, non-null + * descriptions, and the min/max of any numerical values * * @param desc * @param value @@ -99,26 +119,43 @@ public class FeatureAttributes if (value != null) { - try - { - float f = Float.valueOf(value); - min = hasValue ? Float.min(min, f) : f; - max = hasValue ? Float.max(max, f) : f; - hasValue = true; - type = (type == null || type == Datatype.Number) ? Datatype.Number - : Datatype.Mixed; - } catch (NumberFormatException e) + value = value.trim(); + + /* + * Parse numeric value unless we have previously + * seen text data for this attribute type + */ + if (type == null || type == Datatype.Number) { - // not a number, ignore for min-max purposes - type = (type == null || type == Datatype.Character) - ? Datatype.Character - : Datatype.Mixed; + try + { + float f = Float.valueOf(value); + min = hasValue ? Math.min(min, f) : f; + max = hasValue ? Math.max(max, f) : f; + hasValue = true; + type = (type == null || type == Datatype.Number) + ? Datatype.Number + : Datatype.Mixed; + } catch (NumberFormatException e) + { + /* + * non-numeric data: treat attribute as Character (or Mixed) + */ + type = (type == null || type == Datatype.Character) + ? Datatype.Character + : Datatype.Mixed; + min = 0f; + max = 0f; + hasValue = false; + } } } } /** - * Answers the description of the attribute, if recorded and unique, or null if either no, or more than description is recorded + * Answers the description of the attribute, if recorded and unique, or null + * if either no, or more than description is recorded + * * @return */ public String getDescription() @@ -284,9 +321,8 @@ public class FeatureAttributes /** * Answers the [min, max] value range of the given attribute for the given - * feature type, if known, else null. Attributes which only have text values - * would normally return null, however text values which happen to be numeric - * could result in a 'min-max' range. + * feature type, if known, else null. Attributes with a mixture of text and + * numeric values are considered text (do not return a min-max range). * * @param featureType * @param attName @@ -320,7 +356,7 @@ public class FeatureAttributes { return; } - + Map atts = attributes.get(featureType); if (atts == null) { @@ -357,4 +393,27 @@ public class FeatureAttributes } return null; } + + /** + * Resets all attribute metadata + */ + public void clear() + { + attributes.clear(); + } + + /** + * Resets attribute metadata for one feature type + * + * @param featureType + */ + public void clear(String featureType) + { + Map map = attributes.get(featureType); + if (map != null) + { + map.clear(); + } + + } }