Merge branch 'documentation/JAL-3407_2.11.1_release' into develop
[jalview.git] / src / jalview / util / matcher / Condition.java
index 4d14063..f47b367 100644 (file)
@@ -1,27 +1,82 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.util.matcher;
 
 import jalview.util.MessageManager;
 
-import java.util.HashMap;
-import java.util.Map;
-
 /**
  * An enumeration for binary conditions that a user might choose from when
  * setting filter or match conditions for values
  */
 public enum Condition
 {
-  Contains(false), NotContains(false), Matches(false), NotMatches(false),
-  Present(false), NotPresent(false),
-  EQ(true), NE(true), LT(true), LE(true), GT(true), GE(true);
+  Contains(false, true, "Contains"),
+  NotContains(false, true, "NotContains"), Matches(false, true, "Matches"),
+  NotMatches(false, true, "NotMatches"), Present(false, false, "Present"),
+  NotPresent(false, false, "NotPresent"), EQ(true, true, "EQ"),
+  NE(true, true, "NE"), LT(true, true, "LT"), LE(true, true, "LE"),
+  GT(true, true, "GT"), GE(true, true, "GE");
 
-  private static Map<Condition, String> displayNames = new HashMap<>();
-  
   private boolean numeric;
 
-  Condition(boolean isNumeric)
+  private boolean needsAPattern;
+
+  /*
+   * value used to save a Condition to the 
+   * Jalview project file or restore it from project; 
+   * it should not be changed even if enum names change in future
+   */
+  private String stableName;
+
+  /**
+   * Answers the enum value whose 'stable name' matches the argument (not case
+   * sensitive), or null if no match
+   * 
+   * @param stableName
+   * @return
+   */
+  public static Condition fromString(String stableName)
+  {
+    for (Condition c : values())
+    {
+      if (c.stableName.equalsIgnoreCase(stableName))
+      {
+        return c;
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Constructor
+   * 
+   * @param isNumeric
+   * @param needsPattern
+   * @param stablename
+   */
+  Condition(boolean isNumeric, boolean needsPattern, String stablename)
   {
     numeric = isNumeric;
+    needsAPattern = needsPattern;
+    stableName = stablename;
   }
 
   /**
@@ -36,6 +91,22 @@ public enum Condition
   }
 
   /**
+   * Answers true if the condition requires a pattern to compare against, else
+   * false
+   * 
+   * @return
+   */
+  public boolean needsAPattern()
+  {
+    return needsAPattern;
+  }
+
+  public String getStableName()
+  {
+    return stableName;
+  }
+
+  /**
    * Answers a display name for the match condition, suitable for showing in
    * drop-down menus. The value may be internationalized using the resource key
    * "label.matchCondition_" with the enum name appended.
@@ -45,14 +116,7 @@ public enum Condition
   @Override
   public String toString()
   {
-    String name = displayNames.get(this);
-    if (name != null)
-    {
-      return name;
-    }
-    name = MessageManager
-            .getStringOrReturn("label.matchCondition_", name());
-    displayNames.put(this, name);
-    return name;
+    return MessageManager.getStringOrReturn("label.matchCondition_",
+            name());
   }
 }