package restx.factory; import com.google.common.base.Optional; import static com.google.common.base.Preconditions.checkNotNull; /** * User: xavierhanin * Date: 1/31/13 * Time: 6:03 PM */ public class BoundlessComponentBox<T> implements ComponentBox<T> { public static final ComponentBox.BoxFactory FACTORY = new ComponentBox.BoxFactory() { public <T> ComponentBox<T> of(NamedComponent<T> namedComponent) { return new BoundlessComponentBox<>(namedComponent); } @Override public String toString() { return "BoundlessComponentBox.FACTORY"; } }; private final NamedComponent<T> namedComponent; public BoundlessComponentBox(NamedComponent<T> namedComponent) { this.namedComponent = checkNotNull(namedComponent); } @Override public ComponentBox<T> customize(ComponentCustomizer<T> customizer) { NamedComponent<T> customized = customizer.customize(namedComponent); if (customized != namedComponent) { return new BoundlessComponentBox<T>(customized); } return this; } @Override public void close() { if (namedComponent.getComponent() instanceof AutoCloseable) { try { ((AutoCloseable) namedComponent.getComponent()).close(); } catch (Exception e) { throw new RuntimeException(e); } } } public synchronized Optional<NamedComponent<T>> pick() { return Optional.of(namedComponent); } @Override public Name<T> getName() { return namedComponent.getName(); } @Override public String toString() { return "BoundlessComponentBox{" + "namedComponent=" + namedComponent + '}'; } }