AServerInfo projectized, except the final advice to create the "clonning factory"
1 package org.apidesign.aserverinfo;
4 import java.util.concurrent.Callable;
5 import org.openide.util.Exceptions;
6 import org.openide.util.Lookup;
8 public final class AServerInfo {
9 private final Callable<String> name;
10 private final Callable<URL> url;
11 private final Callable<Void> reset;
12 private final Callable<Void> shutdown;
14 public AServerInfo(Callable<String> name, Callable<URL> url, Callable<Void> reset, Callable<Void> s) {
21 public String getName() {
22 return call(name, "noname");
26 return call(url, null);
29 public void reset() throws Exception {
33 public void shutdown() throws Exception {
39 private static <T> T call(Callable<T> name, T defValue) {
42 } catch (Exception ex) {
47 // BEGIN: aserverinfo.create
48 public interface NameProvider {
49 public String getName();
51 public interface URLProvider {
54 public interface ResetHandler {
58 public static AServerInfo create(final Lookup interfaces)
59 // END: aserverinfo.create
61 Callable<String> nameP = new Callable<String>() {
62 public String call() throws Exception {
63 NameProvider p = interfaces.lookup(NameProvider.class);
64 return p == null ? "noname" : p.getName();
67 Callable<URL> urlP = new Callable<URL>() {
68 public URL call() throws Exception {
69 URLProvider p = interfaces.lookup(URLProvider.class);
70 return p == null ? null : p.getURL();
73 Callable<Void> resetP = new Callable<Void>() {
74 public Void call() throws Exception {
75 ResetHandler h = interfaces.lookup(ResetHandler.class);
83 return new AServerInfo(nameP, urlP, resetP, null);
86 // BEGIN: aserverinfo.regularcreate
87 public static AServerInfo create(NameProvider nameProvider, URLProvider urlProvider, ResetHandler reset)
88 // END: aserverinfo.regularcreate
90 return create(nameProvider, urlProvider, reset, null);
93 // BEGIN: aserverinfo.regularcreate.withshutdown
95 public interface ShutdownHandler {
96 public void shutdown();
100 public static AServerInfo create(NameProvider nameProvider, URLProvider urlProvider, ResetHandler reset, ShutdownHandler shutdown)
101 // END: aserverinfo.regularcreate.withshutdown
103 final NameProvider np = nameProvider;
104 final URLProvider up = urlProvider;
105 final ResetHandler h = reset;
106 final ShutdownHandler s = shutdown;
108 Callable<String> nameP = new Callable<String>() {
109 public String call() throws Exception {
110 return np == null ? "noname" : np.getName();
113 Callable<URL> urlP = new Callable<URL>() {
114 public URL call() throws Exception {
115 return up == null ? null : up.getURL();
118 Callable<Void> resetP = new Callable<Void>() {
119 public Void call() throws Exception {
126 Callable<Void> shutP = new Callable<Void>() {
127 public Void call() throws Exception {
135 return new AServerInfo(nameP, urlP, resetP, shutP);