samples/aserverinfo/src/org/apidesign/aserverinfo/AServerInfo.java
changeset 90 30a0c70c6579
child 91 3280450405a0
     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 +}