diff -r 000000000000 -r 30a0c70c6579 samples/aserverinfo/src/org/apidesign/aserverinfo/AServerInfo.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/samples/aserverinfo/src/org/apidesign/aserverinfo/AServerInfo.java Sat Jun 14 09:53:51 2008 +0200 @@ -0,0 +1,140 @@ +package org.apidesign.aserverinfo; + +import java.net.URL; +import java.util.concurrent.Callable; +import org.openide.util.Exceptions; +import org.openide.util.Lookup; + +public final class AServerInfo { + private final Callable name; + private final Callable url; + private final Callable reset; + private final Callable shutdown; + + public AServerInfo(Callable name, Callable url, Callable reset, Callable s) { + this.name = name; + this.url = url; + this.reset = reset; + this.shutdown = s; + } + + public String getName() { + return call(name, "noname"); + } + + public URL getURL() { + return call(url, null); + } + + public void reset() throws Exception { + reset.call(); + } + + public void shutdown() throws Exception { + shutdown.call(); + } + + + + private static T call(Callable name, T defValue) { + try { + return name.call(); + } catch (Exception ex) { + return defValue; + } + } + + // BEGIN: aserverinfo.create + public interface NameProvider { + public String getName(); + } + public interface URLProvider { + public URL getURL(); + } + public interface ResetHandler { + public void reset(); + } + + public static AServerInfo create(final Lookup interfaces) + // END: aserverinfo.create + { + Callable nameP = new Callable() { + public String call() throws Exception { + NameProvider p = interfaces.lookup(NameProvider.class); + return p == null ? "noname" : p.getName(); + } + }; + Callable urlP = new Callable() { + public URL call() throws Exception { + URLProvider p = interfaces.lookup(URLProvider.class); + return p == null ? null : p.getURL(); + } + }; + Callable resetP = new Callable() { + public Void call() throws Exception { + ResetHandler h = interfaces.lookup(ResetHandler.class); + if (h != null) { + h.reset(); + } + return null; + } + }; + + return new AServerInfo(nameP, urlP, resetP, null); + } + + // BEGIN: aserverinfo.regularcreate + public static AServerInfo create(NameProvider nameProvider, URLProvider urlProvider, ResetHandler reset) + // END: aserverinfo.regularcreate + { + return create(nameProvider, urlProvider, reset, null); + } + + // BEGIN: aserverinfo.regularcreate.withshutdown + /** @since 2.0 */ + public interface ShutdownHandler { + public void shutdown(); + } + + /** @since 2.0 */ + public static AServerInfo create(NameProvider nameProvider, URLProvider urlProvider, ResetHandler reset, ShutdownHandler shutdown) + // END: aserverinfo.regularcreate.withshutdown + { + final NameProvider np = nameProvider; + final URLProvider up = urlProvider; + final ResetHandler h = reset; + final ShutdownHandler s = shutdown; + + Callable nameP = new Callable() { + public String call() throws Exception { + return np == null ? "noname" : np.getName(); + } + }; + Callable urlP = new Callable() { + public URL call() throws Exception { + return up == null ? null : up.getURL(); + } + }; + Callable resetP = new Callable() { + public Void call() throws Exception { + if (h != null) { + h.reset(); + } + return null; + } + }; + Callable shutP = new Callable() { + public Void call() throws Exception { + if (s != null) { + s.shutdown(); + } + return null; + } + }; + + return new AServerInfo(nameP, urlP, resetP, shutP); + } + + + +}