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