View Javadoc
1   package org.pojomatic.annotations;
2   
3   import java.util.Collections;
4   import java.util.EnumSet;
5   import java.util.Set;import java.util.Arrays;
6   
7   import org.pojomatic.Pojomatic;
8   import org.pojomatic.internal.PropertyRole;
9   
10  /**
11   * A policy for defining which sets of {@link Pojomatic} operations
12   * ({@code equals}, {@code hashCode} and {@code toString}) should use all properties by default.
13   * This is set class-wide using {@link AutoProperty}.
14   * @see PojomaticPolicy
15   */
16  public enum DefaultPojomaticPolicy {
17  
18    /**
19     * Use all properties for both {@code hashCode} and {@code equals} by default.
20     * Anything included in {@code public int hashCode()} should also be included in
21     * {@code public boolean equals(Object)} to preserve the general
22     * contract of {@link Object#hashCode()}.
23     *
24     * @see Object#hashCode()
25     * @see Object#equals(Object)
26     */
27    HASHCODE_EQUALS(PropertyRole.HASH_CODE, PropertyRole.EQUALS),
28  
29    /**
30     * Use all properties for {@code equals} only by default.
31     *
32     * @see Object#equals(Object)
33     */
34    EQUALS(PropertyRole.EQUALS),
35  
36    /**
37     * Use all properties for both {@code equals} and {@code toString} by default.
38     *
39     * @see Object#equals(Object)
40     * @see Object#toString()
41     */
42    EQUALS_TO_STRING(PropertyRole.EQUALS, PropertyRole.TO_STRING),
43  
44    /**
45     * Use all properties for both {@code toString} only by default.
46     *
47     * @see Object#toString()
48     */
49    TO_STRING(PropertyRole.TO_STRING),
50  
51    /**
52     * Use all properties for {@code hashCode}, {@code equals} and {@code toString} by default.
53     */
54    ALL(PropertyRole.EQUALS, PropertyRole.HASH_CODE, PropertyRole.TO_STRING),
55  
56    /**
57     * Do not use any properties for any of {@code hashCode}, {@code equals} or {@code toString}
58     * by default.
59     */
60    NONE();
61  
62    /**
63     * @return the roles this specified by this policy.
64     */
65    public Set<PropertyRole> getRoles() {
66      return roles;
67    }
68  
69    private DefaultPojomaticPolicy(PropertyRole... roles) {
70      Set<PropertyRole> roleSet = EnumSet.noneOf(PropertyRole.class);
71      roleSet.addAll(Arrays.asList(roles));
72      this.roles = Collections.unmodifiableSet(roleSet);
73    }
74  
75    private final Set<PropertyRole> roles;
76  }