JAL-1686 ViewStyle.hashCode implemented
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 29 Apr 2015 08:13:08 +0000 (09:13 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 29 Apr 2015 08:13:08 +0000 (09:13 +0100)
src/jalview/viewmodel/styles/ViewStyle.java
test/jalview/viewmodel/styles/ViewStyleTest.java

index d6e529c..3ed5634 100644 (file)
@@ -270,11 +270,44 @@ public class ViewStyle implements ViewStyleI
     // return equivalent(this, (ViewStyle) other);
   }
 
+  /**
+   * Overridden to ensure that whenever vs1.equals(vs2) then vs1.hashCode() ==
+   * vs2.hashCode()
+   */
   @Override
   public int hashCode()
   {
-    return 0; // TODO
+    /*
+     * No need to include all properties, just a selection...
+     */
+    int hash = 0;
+    int m = 1;
+    // Boolean.hashCode returns 1231 or 1237
+    hash += m++ * Boolean.valueOf(this.abovePIDThreshold).hashCode();
+    hash += m++ * Boolean.valueOf(this.centreColumnLabels).hashCode();
+    hash += m++ * Boolean.valueOf(this.colourAppliesToAllGroups).hashCode();
+    hash += m++ * Boolean.valueOf(this.displayReferenceSeq).hashCode();
+    hash += m++ * Boolean.valueOf(this.renderGaps).hashCode();
+    hash += m++ * Boolean.valueOf(this.rightAlignIds).hashCode();
+    hash += m++ * Boolean.valueOf(this.scaleProteinAsCdna).hashCode();
+    hash += m++ * Boolean.valueOf(this.scaleRightWrapped).hashCode();
+    hash += m++ * Boolean.valueOf(this.seqNameItalics).hashCode();
+    hash += m++ * Boolean.valueOf(this.showAnnotation).hashCode();
+    hash += m++ * Boolean.valueOf(this.showBoxes).hashCode();
+    hash += m++ * Boolean.valueOf(this.showdbrefs).hashCode();
+    hash += m++ * Boolean.valueOf(this.showJVSuffix).hashCode();
+    hash += m++ * Boolean.valueOf(this.showSequenceFeatures).hashCode();
+    hash += m++ * Boolean.valueOf(this.showUnconserved).hashCode();
+    hash += m++ * Boolean.valueOf(this.wrapAlignment).hashCode();
+    hash += m++ * this.charHeight;
+    hash += m++ * this.charWidth;
+    hash += m++ * fontSize;
+    hash += m++ * fontStyle;
+    hash += m++ * idWidth;
+    hash += String.valueOf(this.fontName).hashCode();
+    return hash;
   }
+
   /**
    * @return the upperCasebold
    */
index 9a0820f..32d048f 100644 (file)
@@ -51,6 +51,7 @@ public class ViewStyleTest
               + value2 + ") - not set in copy constructor?";
       assertEquals(msg, value1, value2);
     }
+    assertEquals("Hashcode not equals", vs1.hashCode(), vs2.hashCode());
   }
 
   /**
@@ -64,7 +65,6 @@ public class ViewStyleTest
           throws IllegalAccessException
   {
     Class<?> type = field.getType();
-    final int numValue = 1 + r.nextInt(100);
 
     if (type.equals(boolean.class) || type.equals(Boolean.class))
     {
@@ -167,6 +167,12 @@ public class ViewStyleTest
       changeValue(vs2, field);
       assertFalse("equals method ignores " + field.getName(),
               vs1.equals(vs2));
+
+      if (vs1.hashCode() == vs2.hashCode())
+      {
+        // uncomment next line to see which fields hashCode ignores
+        // System.out.println("hashCode ignores " + field.getName());
+      }
       // restore original value before testing the next field
       field.set(vs2, oldValue);
     }