private final Logger logger = LoggerFactory.getLogger(PubSubAPI.class);
private final HttpClient httpClient;
+ private final OAuthFactory oAuthFactory;
private final OAuthClientService oAuthService;
+ private final String oAuthServiceHandleId;
private final String projectId;
private final ScheduledThreadPoolExecutor scheduler;
private final Map<String, Set<PubSubSubscriptionListener>> subscriptionListeners = new HashMap<>();
String clientId, String clientSecret) {
this.httpClient = httpClientFactory.getCommonHttpClient();
this.projectId = projectId;
- this.oAuthService = oAuthFactory.createOAuthClientService(String.format(PUBSUB_HANDLE_FORMAT, ownerId),
- TOKEN_URL, AUTH_URL, clientId, clientSecret, PUBSUB_SCOPE, false);
+ this.oAuthFactory = oAuthFactory;
+ this.oAuthServiceHandleId = String.format(PUBSUB_HANDLE_FORMAT, ownerId);
+ this.oAuthService = oAuthFactory.createOAuthClientService(oAuthServiceHandleId, TOKEN_URL, AUTH_URL, clientId,
+ clientSecret, PUBSUB_SCOPE, false);
scheduler = new ScheduledThreadPoolExecutor(3, new NamedThreadFactory(ownerId, true));
}
public void dispose() {
subscriptionListeners.clear();
scheduler.shutdownNow();
+ oAuthFactory.ungetOAuthService(oAuthServiceHandleId);
+ }
+
+ public void deleteOAuthServiceAndAccessToken() {
+ oAuthFactory.deleteServiceAndAccessToken(oAuthServiceHandleId);
}
public void authorizeClient(String authorizationCode) throws InvalidPubSubAuthorizationCodeException, IOException {
private final Logger logger = LoggerFactory.getLogger(SDMAPI.class);
private final HttpClient httpClient;
+ private final OAuthFactory oAuthFactory;
private final OAuthClientService oAuthService;
+ private final String oAuthServiceHandleId;
private final String projectId;
private final Set<SDMAPIRequestListener> requestListeners = ConcurrentHashMap.newKeySet();
public SDMAPI(HttpClientFactory httpClientFactory, OAuthFactory oAuthFactory, String ownerId, String projectId,
String clientId, String clientSecret) {
this.httpClient = httpClientFactory.getCommonHttpClient();
- this.oAuthService = oAuthFactory.createOAuthClientService(String.format(SDM_HANDLE_FORMAT, ownerId), TOKEN_URL,
- AUTH_URL, clientId, clientSecret, SDM_SCOPE, false);
+ this.oAuthFactory = oAuthFactory;
+ this.oAuthServiceHandleId = String.format(SDM_HANDLE_FORMAT, ownerId);
+ this.oAuthService = oAuthFactory.createOAuthClientService(oAuthServiceHandleId, TOKEN_URL, AUTH_URL, clientId,
+ clientSecret, SDM_SCOPE, false);
this.projectId = projectId;
}
public void dispose() {
requestListeners.clear();
+ oAuthFactory.ungetOAuthService(oAuthServiceHandleId);
+ }
+
+ public void deleteOAuthServiceAndAccessToken() {
+ oAuthFactory.deleteServiceAndAccessToken(oAuthServiceHandleId);
}
public void authorizeClient(String authorizationCode) throws InvalidSDMAuthorizationCodeException, IOException {
}
}
+ @Override
+ public void handleRemoval() {
+ PubSubAPI localPubSubAPI = pubSubAPI;
+ if (localPubSubAPI != null) {
+ localPubSubAPI.deleteOAuthServiceAndAccessToken();
+ }
+ SDMAPI localSDMAPI = sdmAPI;
+ if (localSDMAPI != null) {
+ localSDMAPI.deleteOAuthServiceAndAccessToken();
+ }
+ super.handleRemoval();
+ }
+
@Override
public Collection<Class<? extends ThingHandlerService>> getServices() {
return List.of(SDMDiscoveryService.class);