samples/aserverinfo/src/org/apidesign/aserverinfo/magicalbagfactory/ServerConnector.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 15 Nov 2008 06:53:43 +0100
changeset 292 60bb8519cb2d
permissions -rw-r--r--
Renaming the AServerInfo class to ServerConnector and spliting it into three separate classes.
     1 package org.apidesign.aserverinfo.magicalbagfactory;
     2 
     3 import java.net.URL;
     4 import org.apidesign.aserverinfo.spi.NameProvider;
     5 import org.apidesign.aserverinfo.spi.ResetHandler;
     6 import org.apidesign.aserverinfo.spi.ShutdownHandler;
     7 import org.apidesign.aserverinfo.spi.URLProvider;
     8 import org.openide.util.Lookup;
     9 
    10 /** A class to connect to server, identify it and manipulate with
    11  * it state. The <a href="http://apidesign.org">Practical API Design</a>
    12  * book used to call it AServerInfo.
    13  * <p>
    14  */
    15 public final class ServerConnector {
    16     public String getName() {
    17         return name == null ? "noname" : name.getName();
    18     }
    19 
    20     public URL getURL() {
    21         return url == null ? null : url.getURL();
    22     }
    23 
    24     public void reset() {
    25         if (reset != null) {
    26             reset.reset();
    27         }
    28     }
    29 
    30     /** Additional method for API clients not available from first version.
    31      * @since 2.0
    32      */
    33     public void shutdown() {
    34         if (shutdown != null) {
    35             shutdown.shutdown();
    36         }
    37     }
    38 
    39     //
    40     // private part
    41     //
    42     
    43     private final NameProvider name;
    44     private final URLProvider url;
    45     private final ResetHandler reset;
    46     private final ShutdownHandler shutdown;
    47 
    48     private ServerConnector(
    49         NameProvider name, URLProvider url,
    50         ResetHandler reset, ShutdownHandler shutdown
    51     ) {
    52         this.name = name;
    53         this.url = url;
    54         this.reset = reset;
    55         this.shutdown = shutdown;
    56     }
    57 
    58     // BEGIN: aserverinfo.magicalbag.create
    59     public static ServerConnector create(final Lookup interfaces) {
    60         NameProvider nameP = new NameProvider() {
    61             public String getName() {
    62                 NameProvider p = interfaces.lookup(NameProvider.class);
    63                 return p == null ? "noname" : p.getName();
    64             }
    65         };
    66         URLProvider urlP = new URLProvider() {
    67             public URL getURL() {
    68                 URLProvider p = interfaces.lookup(URLProvider.class);
    69                 return p == null ? null : p.getURL();
    70             }
    71         };
    72         ResetHandler resetP = new ResetHandler() {
    73             public void reset() {
    74                 ResetHandler h = interfaces.lookup(ResetHandler.class);
    75                 if (h != null) {
    76                     h.reset();
    77                 }
    78             }
    79         };
    80         // code present since version 2.0
    81         ShutdownHandler shutH = new ShutdownHandler() {
    82             public void shutdown() {
    83                 ShutdownHandler h = interfaces.lookup(ShutdownHandler.class);
    84                 if (h != null) {
    85                     h.shutdown();
    86                 }
    87             }
    88         };
    89         
    90         return new ServerConnector(nameP, urlP, resetP, shutH);
    91     }
    92     // END: aserverinfo.magicalbag.create
    93 }