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