@Override
    public boolean equals(Object obj) {
        if (obj == null || !(obj instanceof Evidence)) {
            return false;
        }
        if (this == obj) {
            return true;
        }
        final Evidence o = (Evidence) obj;
        return new EqualsBuilder()
                .append(this.source == null ? null : this.source.toLowerCase(), o.source == null ? null : o.source.toLowerCase())
                .append(this.name == null ? null : this.name.toLowerCase(), o.name == null ? null : o.name.toLowerCase())
                .append(this.value == null ? null : this.value.toLowerCase(), o.value == null ? null : o.value.toLowerCase())
                .append(this.confidence, o.getConfidence())
                .append(this.fromHint, o.isFromHint())
                .build();
    }
@Test
    public void testEquals() {
        Evidence that0 = new Evidence("file", "name", "guice-3.0", Confidence.HIGHEST);
        Evidence that1 = new Evidence("jar", "package name", "dependency", Confidence.HIGHEST);
        Evidence that2 = new Evidence("jar", "package name", "google", Confidence.HIGHEST);
        Evidence that3 = new Evidence("jar", "package name", "guice", Confidence.HIGHEST);
        Evidence that4 = new Evidence("jar", "package name", "inject", Confidence.HIGHEST);
        Evidence that5 = new Evidence("jar", "package name", "inject", Confidence.LOW);
        Evidence that6 = new Evidence("jar", "package name", "internal", Confidence.LOW);
        Evidence that7 = new Evidence("manifest", "Bundle-Description", "Guice is a lightweight dependency injection framework for Java 5 and above", Confidence.MEDIUM);
        Evidence that8 = new Evidence("Manifest", "Implementation-Title", "Spring Framework", Confidence.HIGH);

        Evidence instance = new Evidence("Manifest", "Implementation-Title", "Spring Framework", Confidence.HIGH);
        assertFalse(instance.equals(that0));
        assertFalse(instance.equals(that1));
        assertFalse(instance.equals(that2));
        assertFalse(instance.equals(that3));
        assertFalse(instance.equals(that4));
        assertFalse(instance.equals(that5));
        assertFalse(instance.equals(that6));
        assertFalse(instance.equals(that7));
        assertTrue(instance.equals(that8));
    }