package restx.factory; import restx.common.MoreObjects; import static com.google.common.base.Preconditions.checkNotNull; /** * User: xavierhanin * Date: 1/31/13 * Time: 5:40 PM */ public final class Name<T> { private final String name; private final Class<T> clazz; public static <T> Name<T> of(Class<T> clazz, String name) { return new Name<>(clazz, name); } public static <T> Name<T> of(Class<T> clazz) { return new Name<>(clazz, clazz.getSimpleName()); } public Name(Class<T> clazz, String name) { this.name = checkNotNull(name); this.clazz = checkNotNull(clazz); } public String getSimpleName() { String simpleName = clazz.getSimpleName(); if (!simpleName.equalsIgnoreCase(name)) { simpleName = name + "[" + simpleName + "]"; } return simpleName; } public String asId() { return "[" + clazz.getName() + "]" + name; } public String getName() { return name; } public Class<T> getClazz() { return clazz; } @Override public String toString() { return "Name{" + "name='" + name + '\'' + ", clazz=" + MoreObjects.toString(clazz) + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Name name1 = (Name) o; if (!clazz.equals(name1.clazz)) return false; if (!name.equals(name1.name)) return false; return true; } @Override public int hashCode() { int result = name.hashCode(); result = 31 * result + clazz.hashCode(); return result; } }