11package engineer .nightowl .sonos .api ;
22
3- import engineer .nightowl .sonos .api .resource .*;
3+ import engineer .nightowl .sonos .api .resource .AudioClipResource ;
4+ import engineer .nightowl .sonos .api .resource .AuthorizeResource ;
5+ import engineer .nightowl .sonos .api .resource .FavoriteResource ;
6+ import engineer .nightowl .sonos .api .resource .GroupResource ;
7+ import engineer .nightowl .sonos .api .resource .GroupVolumeResource ;
8+ import engineer .nightowl .sonos .api .resource .HomeTheaterResource ;
9+ import engineer .nightowl .sonos .api .resource .HouseholdResource ;
10+ import engineer .nightowl .sonos .api .resource .MusicServiceAccountsResource ;
11+ import engineer .nightowl .sonos .api .resource .PlaybackMetadataResource ;
12+ import engineer .nightowl .sonos .api .resource .PlaybackResource ;
13+ import engineer .nightowl .sonos .api .resource .PlaybackSessionResource ;
14+ import engineer .nightowl .sonos .api .resource .PlayerVolumeResource ;
15+ import engineer .nightowl .sonos .api .resource .PlaylistResource ;
16+ import engineer .nightowl .sonos .api .resource .SettingsResource ;
417import org .apache .http .impl .client .CloseableHttpClient ;
518import org .apache .http .impl .client .HttpClientBuilder ;
619import org .slf4j .Logger ;
922import java .io .IOException ;
1023import java .util .Properties ;
1124
12- public class SonosApiClient
25+ public class SonosApiClient implements AutoCloseable
1326{
1427 // Resources
1528 private final AudioClipResource audioClipResource ;
@@ -30,25 +43,38 @@ public class SonosApiClient
3043 // Internal classes
3144 private final Logger logger = LoggerFactory .getLogger (getClass ());
3245 private final Properties properties = new Properties ();
46+
3347 // Can be overridden by implementing applications
3448 private SonosApiConfiguration configuration ;
3549 private CloseableHttpClient httpClient ;
3650
3751 /**
3852 * Main client for Sonos API.
3953 *
40- * @param configuration - a {@link engineer.nightowl.sonos.api.SonosApiConfiguration} containing integration
54+ * @param configuration a {@link engineer.nightowl.sonos.api.SonosApiConfiguration} containing integration
4155 * information such as API keys
56+ *
57+ * @see SonosApiClient#SonosApiClient(SonosApiConfiguration, CloseableHttpClient)
4258 */
4359 public SonosApiClient (final SonosApiConfiguration configuration )
60+ {
61+ this (configuration , null );
62+ }
63+
64+ /**
65+ * Create a client with a custom HTTP client
66+ *
67+ * @param configuration a {@link engineer.nightowl.sonos.api.SonosApiConfiguration} containing integration
68+ * information such as API keys
69+ * @param httpClient a custom {@link CloseableHttpClient} - if null, a default client is initialised
70+ */
71+ public SonosApiClient (final SonosApiConfiguration configuration , final CloseableHttpClient httpClient )
4472 {
4573 loadProperties ();
46- if (logger .isInfoEnabled ())
47- {
48- logger .info ("Initialising sonos-api-java:{}" , properties .getProperty ("sonosapijava.version" ));
49- }
74+ logger .info ("Initialising sonos-api-java:{}" , properties .getProperty ("sonosapijava.version" ));
75+
5076 this .configuration = configuration ;
51- httpClient = generateHttpClient ();
77+ this . httpClient = ( httpClient == null ? generateHttpClient () : httpClient );
5278
5379 // Setup resources
5480 audioClipResource = new AudioClipResource (this );
@@ -74,6 +100,7 @@ public SonosApiClient(final SonosApiConfiguration configuration)
74100 */
75101 private CloseableHttpClient generateHttpClient ()
76102 {
103+ logger .debug ("Using default HttpClient" );
77104 return HttpClientBuilder .create ().build ();
78105 }
79106
@@ -87,7 +114,7 @@ public void closeHttpClient()
87114 httpClient .close ();
88115 } catch (final IOException ioe )
89116 {
90- logger .warn ("Unable to close HTTP client " , ioe );
117+ logger .warn ("Unable to close HttpClient " , ioe );
91118 }
92119 }
93120
@@ -280,4 +307,14 @@ public SettingsResource settings()
280307 {
281308 return settingsResource ;
282309 }
310+
311+
312+ /**
313+ * Closes the HttpClient
314+ */
315+ @ Override
316+ public void close ()
317+ {
318+ closeHttpClient ();
319+ }
283320}
0 commit comments