jtulach@90: package org.apidesign.aserverinfo; jtulach@90: jtulach@90: import java.net.URL; jtulach@90: import org.openide.util.Lookup; jtulach@90: jtulach@90: public final class AServerInfo { jtulach@92: private final NameProvider name; jtulach@92: private final URLProvider url; jtulach@92: private final ResetHandler reset; jtulach@92: private final ShutdownHandler shutdown; jtulach@90: jtulach@132: private AServerInfo( jtulach@132: NameProvider name, URLProvider url, jtulach@132: ResetHandler reset, ShutdownHandler shutdown jtulach@132: ) { jtulach@90: this.name = name; jtulach@90: this.url = url; jtulach@90: this.reset = reset; jtulach@92: this.shutdown = shutdown; jtulach@90: } jtulach@92: jtulach@90: jtulach@91: // jtulach@91: // API for clients jtulach@91: // jtulach@91: jtulach@90: public String getName() { jtulach@92: return name == null ? "noname" : name.getName(); jtulach@90: } jtulach@90: jtulach@90: public URL getURL() { jtulach@92: return url == null ? null : url.getURL(); jtulach@90: } jtulach@90: jtulach@92: public void reset() { jtulach@91: if (reset != null) { jtulach@92: reset.reset(); jtulach@91: } jtulach@90: } jtulach@90: jtulach@92: public void shutdown() { jtulach@91: if (shutdown != null) { jtulach@92: shutdown.shutdown(); jtulach@90: } jtulach@90: } jtulach@90: jtulach@91: // jtulach@91: // factories jtulach@91: // jtulach@91: jtulach@90: // BEGIN: aserverinfo.create jtulach@90: public interface NameProvider { jtulach@90: public String getName(); jtulach@90: } jtulach@90: public interface URLProvider { jtulach@90: public URL getURL(); jtulach@90: } jtulach@90: public interface ResetHandler { jtulach@90: public void reset(); jtulach@90: } jtulach@90: jtulach@90: public static AServerInfo create(final Lookup interfaces) jtulach@90: // END: aserverinfo.create jtulach@90: { jtulach@92: NameProvider nameP = new NameProvider() { jtulach@92: public String getName() { jtulach@90: NameProvider p = interfaces.lookup(NameProvider.class); jtulach@90: return p == null ? "noname" : p.getName(); jtulach@90: } jtulach@90: }; jtulach@92: URLProvider urlP = new URLProvider() { jtulach@92: public URL getURL() { jtulach@90: URLProvider p = interfaces.lookup(URLProvider.class); jtulach@90: return p == null ? null : p.getURL(); jtulach@90: } jtulach@90: }; jtulach@92: ResetHandler resetP = new ResetHandler() { jtulach@92: public void reset() { jtulach@90: ResetHandler h = interfaces.lookup(ResetHandler.class); jtulach@90: if (h != null) { jtulach@90: h.reset(); jtulach@90: } jtulach@90: } jtulach@90: }; jtulach@90: jtulach@90: return new AServerInfo(nameP, urlP, resetP, null); jtulach@90: } jtulach@90: jtulach@90: // BEGIN: aserverinfo.regularcreate jtulach@132: public static AServerInfo create( jtulach@132: NameProvider nameProvider, jtulach@132: URLProvider urlProvider, jtulach@132: ResetHandler reset jtulach@132: ) jtulach@90: // END: aserverinfo.regularcreate jtulach@90: { jtulach@92: return new AServerInfo(nameProvider, urlProvider, reset, null); jtulach@90: } jtulach@90: jtulach@90: // BEGIN: aserverinfo.regularcreate.withshutdown jtulach@90: /** @since 2.0 */ jtulach@90: public interface ShutdownHandler { jtulach@90: public void shutdown(); jtulach@90: } jtulach@90: jtulach@90: /** @since 2.0 */ jtulach@132: public static AServerInfo create( jtulach@132: NameProvider nameProvider, jtulach@132: URLProvider urlProvider, jtulach@132: ResetHandler reset, jtulach@132: ShutdownHandler shutdown jtulach@132: ) jtulach@90: // END: aserverinfo.regularcreate.withshutdown jtulach@90: { jtulach@92: return new AServerInfo(nameProvider, urlProvider, reset, shutdown); jtulach@90: } jtulach@91: jtulach@91: // jtulach@91: // cumulative factory methods jtulach@91: // jtulach@90: jtulach@91: // BEGIN: aserverinfo.cumulative.factory jtulach@91: public static AServerInfo empty() { jtulach@91: return new AServerInfo(null, null, null, null); jtulach@91: } jtulach@90: jtulach@91: public final AServerInfo nameProvider(final NameProvider np) { jtulach@92: return new AServerInfo(np, this.url, this.reset, this.shutdown); jtulach@91: } jtulach@93: // END: aserverinfo.cumulative.factory jtulach@91: jtulach@91: public final AServerInfo urlProvider(final URLProvider up) { jtulach@92: return new AServerInfo(this.name, up, this.reset, this.shutdown); jtulach@91: } jtulach@91: public final AServerInfo reset(final ResetHandler h) { jtulach@92: return new AServerInfo(this.name, this.url, h, this.shutdown); jtulach@91: } jtulach@91: public final AServerInfo shutdown(final ShutdownHandler s) { jtulach@92: return new AServerInfo(this.name, this.url, this.reset, s); jtulach@91: } jtulach@90: }