X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2Ffeatures%2FFeatureAttributes.java;h=bcf404b4b0b3c87df7574a7fece0fd96d7f0d72d;hb=bed0c230be450b16213e30ee1dcaf3e76ddfc669;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..bcf404b 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,20 +119,35 @@ 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;
+ }
}
}
}
@@ -284,9 +319,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
@@ -357,4 +391,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();
+ }
+
+ }
}