samples/aserverinfo/src/org/apidesign/aserverinfo/builder/ServerInfo.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 03 Apr 2020 16:32:36 +0200
changeset 416 9ed8788a1a4e
parent 300 b704be5f8463
permissions -rw-r--r--
Using HTTPS to download the libraries
     1 package org.apidesign.aserverinfo.builder;
     2 
     3 import org.apidesign.aserverinfo.spi.NameProvider;
     4 import org.apidesign.aserverinfo.spi.ResetHandler;
     5 import org.apidesign.aserverinfo.spi.ShutdownHandler;
     6 import org.apidesign.aserverinfo.spi.URLProvider;
     7 
     8 /**
     9  * Mutable "setter" methods for the builder pattern.
    10  *
    11  * @author Jaroslav Tulach <jtulach@netbeans.org>
    12  */
    13 // BEGIN: aserverinfo.builder.factory
    14 public class ServerInfo {
    15 
    16     public static ServerInfo empty() {
    17         return new ServerInfo(null, null, null, null);
    18     }
    19 
    20     public final ServerInfo nameProvider(NameProvider np) {
    21         this.name = np;
    22         return this;
    23     }
    24 
    25     public final ServerInfo urlProvider(URLProvider up) {
    26         this.url = up;
    27         return this;
    28     }
    29     // BEGIN: aserverinfo.builder.setter
    30     public final ServerInfo reset(ResetHandler h) {
    31         this.reset = h;
    32         return this;
    33     }
    34     // END: aserverinfo.builder.setter
    35     
    36     /** All one needs to do when there is a need to add new
    37      * style of creation is to add new method for a builder.
    38      * @param handler
    39      * @return
    40      * @since 2.0
    41      */
    42     public final ServerInfo shutdown(ShutdownHandler handler) {
    43         this.shutdown = handler;
    44         return this;
    45     }
    46     
    47     /** Creates the server connector based on current values in the 
    48      * info. Builder factory method.
    49      * @return server connector
    50      */
    51     public final ServerConnector connect() {
    52         return new ServerConnector(name, url, reset, shutdown);
    53     }
    54     // FINISH: aserverinfo.builder.factory
    55 
    56     private NameProvider name;
    57     private URLProvider url;
    58     private ResetHandler reset;
    59     private ShutdownHandler shutdown;
    60 
    61     private ServerInfo(
    62         NameProvider name, URLProvider url,
    63         ResetHandler reset, ShutdownHandler shutdown
    64     ) {
    65         this.name = name;
    66         this.url = url;
    67         this.reset = reset;
    68         this.shutdown = shutdown;
    69     }
    70 
    71 }