package restx.factory; import com.google.common.base.Function; import static com.google.common.base.Preconditions.checkNotNull; /** * User: xavierhanin * Date: 1/31/13 * Time: 5:43 PM */ public final class NamedComponent<T> { public static <T> Function<NamedComponent<T>, T> toComponent() { return new Function<NamedComponent<T>, T>() { @Override public T apply(NamedComponent<T> namedComponent) { return namedComponent.getComponent(); } }; } public static <T> Function<NamedComponent<T>, Name<T>> toName() { return new Function<NamedComponent<T>, Name<T>>() { @Override public Name<T> apply(NamedComponent<T> namedComponent) { return namedComponent.getName(); } }; } public static <T> NamedComponent<T> of(Class<T> clazz, String name, T component) { return new NamedComponent<>(new Name<>(clazz, name), component); } public static <T> NamedComponent<T> of(Class<T> clazz, String name, int priority, T component) { return new NamedComponent<>(new Name<>(clazz, name), priority, component); } private final Name<T> name; private final int priority; private final T component; public NamedComponent(Name<T> name, T component) { this(name, 0, component); } public NamedComponent(Name<T> name, int priority, T component) { this.name = checkNotNull(name); this.priority = priority; this.component = checkNotNull(component); } public Name<T> getName() { return name; } public int getPriority() { return priority; } public T getComponent() { return component; } @Override public String toString() { return "NamedComponent{" + "name=" + name + ", priority=" + priority + ", component=" + component + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; NamedComponent that = (NamedComponent) o; if (!component.equals(that.component)) return false; if (!name.equals(that.name)) return false; return true; } @Override public int hashCode() { int result = name.hashCode(); result = 31 * result + component.hashCode(); return result; } }