samples/aserverinfo/src/org/apidesign/aserverinfo/cummulativefactory/ServerConnector.java
1 package org.apidesign.aserverinfo.cummulativefactory;
3 import org.apidesign.aserverinfo.spi.NameProvider;
4 import org.apidesign.aserverinfo.spi.ResetHandler;
5 import org.apidesign.aserverinfo.spi.URLProvider;
7 import org.apidesign.aserverinfo.spi.ShutdownHandler;
9 // BEGIN: aserverinfo.api
10 /** A class to connect to server, identify it and manipulate with
11 * its state. The <a href="http://apidesign.org">Practical API Design</a>
12 * book used to call it AServerInfo.
15 public final class ServerConnector {
16 public String getName() {
17 return name == null ? "noname" : name.getName();
21 return url == null ? null : url.getURL();
30 /** Additional method for API clients not available from first version.
33 public void shutdown() {
34 if (shutdown != null) {
38 // FINISH: aserverinfo.api
41 // cumulative factory methods
44 // BEGIN: aserverinfo.cumulative.factory
45 public static ServerConnector empty() {
46 return new ServerConnector(null, null, null, null);
49 public final ServerConnector nameProvider(NameProvider np) {
50 return new ServerConnector(np, this.url, this.reset, this.shutdown);
53 public final ServerConnector urlProvider(URLProvider up) {
54 return new ServerConnector(this.name, up, this.reset, this.shutdown);
56 public final ServerConnector reset(ResetHandler h) {
57 return new ServerConnector(this.name, this.url, h, this.shutdown);
59 /** All one needs to do when there is a need to add new
60 * style of creation is to add new <em>clonning</em> method.
65 public final ServerConnector shutdown(ShutdownHandler handler) {
66 return new ServerConnector(this.name, this.url, this.reset, handler);
68 // END: aserverinfo.cumulative.factory
74 private final NameProvider name;
75 private final URLProvider url;
76 private final ResetHandler reset;
77 private final ShutdownHandler shutdown;
79 private ServerConnector(
80 NameProvider name, URLProvider url,
81 ResetHandler reset, ShutdownHandler shutdown
86 this.shutdown = shutdown;