samples/aserverinfo/src/org/apidesign/aserverinfo/AServerInfo.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sun, 09 Nov 2008 15:44:53 +0100
changeset 290 f1828e0123fe
parent 154 0fd5e9c500b9
permissions -rw-r--r--
Showing API for AServerInfo
     1 package org.apidesign.aserverinfo;
     2 
     3 import java.net.URL;
     4 import org.openide.util.Lookup;
     5 
     6 // BEGIN: aserverinfo.api
     7 public final class AServerInfo {
     8     public String getName() {
     9         return name == null ? "noname" : name.getName();
    10     }
    11     
    12     public URL getURL() {
    13         return url == null ? null : url.getURL();
    14     }
    15     
    16     public void reset() {
    17         if (reset != null) {
    18             reset.reset();
    19         }
    20     }
    21     
    22     public void shutdown() {
    23         if (shutdown != null) {
    24             shutdown.shutdown();
    25         }
    26     }
    27 // FINISH: aserverinfo.api
    28 
    29     //
    30     // private part
    31     //
    32     
    33     private final NameProvider name;
    34     private final URLProvider url;
    35     private final ResetHandler reset;
    36     private final ShutdownHandler shutdown;
    37 
    38     private AServerInfo(
    39         NameProvider name, URLProvider url,
    40         ResetHandler reset, ShutdownHandler shutdown
    41     ) {
    42         this.name = name;
    43         this.url = url;
    44         this.reset = reset;
    45         this.shutdown = shutdown;
    46     }
    47 
    48     //
    49     // factories
    50     //
    51 
    52     // BEGIN: aserverinfo.create
    53     public interface NameProvider {
    54         public String getName();
    55     }
    56     public interface URLProvider {
    57         public URL getURL();
    58     }
    59     public interface ResetHandler {
    60         public void reset();
    61     }
    62     
    63     public static AServerInfo create(final Lookup interfaces) 
    64     // END: aserverinfo.create
    65     {
    66         NameProvider nameP = new NameProvider() {
    67             public String getName() {
    68                 NameProvider p = interfaces.lookup(NameProvider.class);
    69                 return p == null ? "noname" : p.getName();
    70             }
    71         };
    72         URLProvider urlP = new URLProvider() {
    73             public URL getURL() {
    74                 URLProvider p = interfaces.lookup(URLProvider.class);
    75                 return p == null ? null : p.getURL();
    76             }
    77         };
    78         ResetHandler resetP = new ResetHandler() {
    79             public void reset() {
    80                 ResetHandler h = interfaces.lookup(ResetHandler.class);
    81                 if (h != null) {
    82                     h.reset();
    83                 }
    84             }
    85         };
    86         
    87         return new AServerInfo(nameP, urlP, resetP, null);
    88     }
    89     
    90     // BEGIN: aserverinfo.regularcreate
    91     public static AServerInfo create(
    92         NameProvider nameProvider, 
    93         URLProvider urlProvider, 
    94         ResetHandler reset
    95     )
    96     // END: aserverinfo.regularcreate
    97     {
    98         return new AServerInfo(nameProvider, urlProvider, reset, null);
    99     }
   100     
   101     // BEGIN: aserverinfo.regularcreate.withshutdown
   102     /** @since 2.0 */
   103     public interface ShutdownHandler {
   104         public void shutdown();
   105     }
   106     
   107     /** @since 2.0 */
   108     public static AServerInfo create(
   109         NameProvider nameProvider, 
   110         URLProvider urlProvider, 
   111         ResetHandler reset, 
   112         ShutdownHandler shutdown
   113     )
   114     // END: aserverinfo.regularcreate.withshutdown
   115     {
   116         return new AServerInfo(nameProvider, urlProvider, reset, shutdown);
   117     }
   118 
   119     //
   120     // cumulative factory methods
   121     //
   122     
   123     // BEGIN: aserverinfo.cumulative.factory
   124     public static AServerInfo empty() {
   125         return new AServerInfo(null, null, null, null);
   126     }
   127     
   128     public final AServerInfo nameProvider(final NameProvider np) {
   129         return new AServerInfo(np, this.url, this.reset, this.shutdown);
   130     }
   131     // END: aserverinfo.cumulative.factory
   132 
   133     public final AServerInfo urlProvider(final URLProvider up) {
   134         return new AServerInfo(this.name, up, this.reset, this.shutdown);
   135     }
   136     public final AServerInfo reset(final ResetHandler h) {
   137         return new AServerInfo(this.name, this.url, h, this.shutdown);
   138     }
   139     public final AServerInfo shutdown(final ShutdownHandler s) {
   140         return new AServerInfo(this.name, this.url, this.reset, s);
   141     }
   142 }