samples/aserverinfo/src/org/apidesign/aserverinfo/magicalbagfactory/ServerConnector.java
Renaming the AServerInfo class to ServerConnector and spliting it into three separate classes.
1 package org.apidesign.aserverinfo.magicalbagfactory;
4 import org.apidesign.aserverinfo.spi.NameProvider;
5 import org.apidesign.aserverinfo.spi.ResetHandler;
6 import org.apidesign.aserverinfo.spi.ShutdownHandler;
7 import org.apidesign.aserverinfo.spi.URLProvider;
8 import org.openide.util.Lookup;
10 /** A class to connect to server, identify it and manipulate with
11 * it 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) {
43 private final NameProvider name;
44 private final URLProvider url;
45 private final ResetHandler reset;
46 private final ShutdownHandler shutdown;
48 private ServerConnector(
49 NameProvider name, URLProvider url,
50 ResetHandler reset, ShutdownHandler shutdown
55 this.shutdown = shutdown;
58 // BEGIN: aserverinfo.magicalbag.create
59 public static ServerConnector create(final Lookup interfaces) {
60 NameProvider nameP = new NameProvider() {
61 public String getName() {
62 NameProvider p = interfaces.lookup(NameProvider.class);
63 return p == null ? "noname" : p.getName();
66 URLProvider urlP = new URLProvider() {
68 URLProvider p = interfaces.lookup(URLProvider.class);
69 return p == null ? null : p.getURL();
72 ResetHandler resetP = new ResetHandler() {
74 ResetHandler h = interfaces.lookup(ResetHandler.class);
80 // code present since version 2.0
81 ShutdownHandler shutH = new ShutdownHandler() {
82 public void shutdown() {
83 ShutdownHandler h = interfaces.lookup(ShutdownHandler.class);
90 return new ServerConnector(nameP, urlP, resetP, shutH);
92 // END: aserverinfo.magicalbag.create