There are 4 boolean state-returning methods, but my solution is probably more relevant when there are more states. Instead of having 4 boolean state members, the Component class would have an EnumSet<State>
.
public enum State {
HAS_ONE_CHANNEL, HAS_VALID_CERTIFICATE, IS_TESTED, IS_FREQUENTLY_USED;
}
public enum Category {
C24(EnumSet.of(States.HAS_ONE_CHANNEL, ...)),
C95(EnumSet.of(...)),
...;
private EnumSet<State> enumSet;
private Category(EnumSet<State> enumSet) {
this.enumSet = enumSet;
}
public boolean equals(EnumSet<State> otherEnumSet) {
return enumSet.equals(otherEnumSet);
}
// returns null if not found
public static Category find(EnumSet<State> otherEnumSet) {
// TODO instead of looping, it would be more efficient to build a HashMap<EnumSet<State>, Category>> once
for (Category category : Category.values()) {
if (category.equals(otherEnumSet))
return category;
}
return null;
}
}