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