samples/aserverinfo/src/org/apidesign/aserverinfo/magicalbagfactory/ServerConnector.java
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/samples/aserverinfo/src/org/apidesign/aserverinfo/magicalbagfactory/ServerConnector.java Sat Nov 15 06:53:43 2008 +0100
1.3 @@ -0,0 +1,93 @@
1.4 +package org.apidesign.aserverinfo.magicalbagfactory;
1.5 +
1.6 +import java.net.URL;
1.7 +import org.apidesign.aserverinfo.spi.NameProvider;
1.8 +import org.apidesign.aserverinfo.spi.ResetHandler;
1.9 +import org.apidesign.aserverinfo.spi.ShutdownHandler;
1.10 +import org.apidesign.aserverinfo.spi.URLProvider;
1.11 +import org.openide.util.Lookup;
1.12 +
1.13 +/** A class to connect to server, identify it and manipulate with
1.14 + * it state. The <a href="http://apidesign.org">Practical API Design</a>
1.15 + * book used to call it AServerInfo.
1.16 + * <p>
1.17 + */
1.18 +public final class ServerConnector {
1.19 + public String getName() {
1.20 + return name == null ? "noname" : name.getName();
1.21 + }
1.22 +
1.23 + public URL getURL() {
1.24 + return url == null ? null : url.getURL();
1.25 + }
1.26 +
1.27 + public void reset() {
1.28 + if (reset != null) {
1.29 + reset.reset();
1.30 + }
1.31 + }
1.32 +
1.33 + /** Additional method for API clients not available from first version.
1.34 + * @since 2.0
1.35 + */
1.36 + public void shutdown() {
1.37 + if (shutdown != null) {
1.38 + shutdown.shutdown();
1.39 + }
1.40 + }
1.41 +
1.42 + //
1.43 + // private part
1.44 + //
1.45 +
1.46 + private final NameProvider name;
1.47 + private final URLProvider url;
1.48 + private final ResetHandler reset;
1.49 + private final ShutdownHandler shutdown;
1.50 +
1.51 + private ServerConnector(
1.52 + NameProvider name, URLProvider url,
1.53 + ResetHandler reset, ShutdownHandler shutdown
1.54 + ) {
1.55 + this.name = name;
1.56 + this.url = url;
1.57 + this.reset = reset;
1.58 + this.shutdown = shutdown;
1.59 + }
1.60 +
1.61 + // BEGIN: aserverinfo.magicalbag.create
1.62 + public static ServerConnector create(final Lookup interfaces) {
1.63 + NameProvider nameP = new NameProvider() {
1.64 + public String getName() {
1.65 + NameProvider p = interfaces.lookup(NameProvider.class);
1.66 + return p == null ? "noname" : p.getName();
1.67 + }
1.68 + };
1.69 + URLProvider urlP = new URLProvider() {
1.70 + public URL getURL() {
1.71 + URLProvider p = interfaces.lookup(URLProvider.class);
1.72 + return p == null ? null : p.getURL();
1.73 + }
1.74 + };
1.75 + ResetHandler resetP = new ResetHandler() {
1.76 + public void reset() {
1.77 + ResetHandler h = interfaces.lookup(ResetHandler.class);
1.78 + if (h != null) {
1.79 + h.reset();
1.80 + }
1.81 + }
1.82 + };
1.83 + // code present since version 2.0
1.84 + ShutdownHandler shutH = new ShutdownHandler() {
1.85 + public void shutdown() {
1.86 + ShutdownHandler h = interfaces.lookup(ShutdownHandler.class);
1.87 + if (h != null) {
1.88 + h.shutdown();
1.89 + }
1.90 + }
1.91 + };
1.92 +
1.93 + return new ServerConnector(nameP, urlP, resetP, shutH);
1.94 + }
1.95 + // END: aserverinfo.magicalbag.create
1.96 +}