1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/samples/aserverinfo/src/org/apidesign/aserverinfo/AServerInfo.java Sat Jun 14 09:53:51 2008 +0200
1.3 @@ -0,0 +1,140 @@
1.4 +package org.apidesign.aserverinfo;
1.5 +
1.6 +import java.net.URL;
1.7 +import java.util.concurrent.Callable;
1.8 +import org.openide.util.Exceptions;
1.9 +import org.openide.util.Lookup;
1.10 +
1.11 +public final class AServerInfo {
1.12 + private final Callable<String> name;
1.13 + private final Callable<URL> url;
1.14 + private final Callable<Void> reset;
1.15 + private final Callable<Void> shutdown;
1.16 +
1.17 + public AServerInfo(Callable<String> name, Callable<URL> url, Callable<Void> reset, Callable<Void> s) {
1.18 + this.name = name;
1.19 + this.url = url;
1.20 + this.reset = reset;
1.21 + this.shutdown = s;
1.22 + }
1.23 +
1.24 + public String getName() {
1.25 + return call(name, "noname");
1.26 + }
1.27 +
1.28 + public URL getURL() {
1.29 + return call(url, null);
1.30 + }
1.31 +
1.32 + public void reset() throws Exception {
1.33 + reset.call();
1.34 + }
1.35 +
1.36 + public void shutdown() throws Exception {
1.37 + shutdown.call();
1.38 + }
1.39 +
1.40 +
1.41 +
1.42 + private static <T> T call(Callable<T> name, T defValue) {
1.43 + try {
1.44 + return name.call();
1.45 + } catch (Exception ex) {
1.46 + return defValue;
1.47 + }
1.48 + }
1.49 +
1.50 + // BEGIN: aserverinfo.create
1.51 + public interface NameProvider {
1.52 + public String getName();
1.53 + }
1.54 + public interface URLProvider {
1.55 + public URL getURL();
1.56 + }
1.57 + public interface ResetHandler {
1.58 + public void reset();
1.59 + }
1.60 +
1.61 + public static AServerInfo create(final Lookup interfaces)
1.62 + // END: aserverinfo.create
1.63 + {
1.64 + Callable<String> nameP = new Callable<String>() {
1.65 + public String call() throws Exception {
1.66 + NameProvider p = interfaces.lookup(NameProvider.class);
1.67 + return p == null ? "noname" : p.getName();
1.68 + }
1.69 + };
1.70 + Callable<URL> urlP = new Callable<URL>() {
1.71 + public URL call() throws Exception {
1.72 + URLProvider p = interfaces.lookup(URLProvider.class);
1.73 + return p == null ? null : p.getURL();
1.74 + }
1.75 + };
1.76 + Callable<Void> resetP = new Callable<Void>() {
1.77 + public Void call() throws Exception {
1.78 + ResetHandler h = interfaces.lookup(ResetHandler.class);
1.79 + if (h != null) {
1.80 + h.reset();
1.81 + }
1.82 + return null;
1.83 + }
1.84 + };
1.85 +
1.86 + return new AServerInfo(nameP, urlP, resetP, null);
1.87 + }
1.88 +
1.89 + // BEGIN: aserverinfo.regularcreate
1.90 + public static AServerInfo create(NameProvider nameProvider, URLProvider urlProvider, ResetHandler reset)
1.91 + // END: aserverinfo.regularcreate
1.92 + {
1.93 + return create(nameProvider, urlProvider, reset, null);
1.94 + }
1.95 +
1.96 + // BEGIN: aserverinfo.regularcreate.withshutdown
1.97 + /** @since 2.0 */
1.98 + public interface ShutdownHandler {
1.99 + public void shutdown();
1.100 + }
1.101 +
1.102 + /** @since 2.0 */
1.103 + public static AServerInfo create(NameProvider nameProvider, URLProvider urlProvider, ResetHandler reset, ShutdownHandler shutdown)
1.104 + // END: aserverinfo.regularcreate.withshutdown
1.105 + {
1.106 + final NameProvider np = nameProvider;
1.107 + final URLProvider up = urlProvider;
1.108 + final ResetHandler h = reset;
1.109 + final ShutdownHandler s = shutdown;
1.110 +
1.111 + Callable<String> nameP = new Callable<String>() {
1.112 + public String call() throws Exception {
1.113 + return np == null ? "noname" : np.getName();
1.114 + }
1.115 + };
1.116 + Callable<URL> urlP = new Callable<URL>() {
1.117 + public URL call() throws Exception {
1.118 + return up == null ? null : up.getURL();
1.119 + }
1.120 + };
1.121 + Callable<Void> resetP = new Callable<Void>() {
1.122 + public Void call() throws Exception {
1.123 + if (h != null) {
1.124 + h.reset();
1.125 + }
1.126 + return null;
1.127 + }
1.128 + };
1.129 + Callable<Void> shutP = new Callable<Void>() {
1.130 + public Void call() throws Exception {
1.131 + if (s != null) {
1.132 + s.shutdown();
1.133 + }
1.134 + return null;
1.135 + }
1.136 + };
1.137 +
1.138 + return new AServerInfo(nameP, urlP, resetP, shutP);
1.139 + }
1.140 +
1.141 +
1.142 +
1.143 +}