Skip to content

Commit

Permalink
Updated to use ThingHandlerService
Browse files Browse the repository at this point in the history
Signed-off-by: Arjan Mels <github@mels.email>
  • Loading branch information
Arjan Mels committed Apr 25, 2022
1 parent 8f45cd3 commit 8448f81
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,21 @@

import static org.openhab.binding.groupepsa.internal.GroupePSABindingConstants.*;

import java.util.Hashtable;
import java.util.Set;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.jetty.client.HttpClient;
import org.openhab.binding.groupepsa.internal.bridge.GroupePSABridgeHandler;
import org.openhab.binding.groupepsa.internal.discovery.GroupePSADiscoveryService;
import org.openhab.binding.groupepsa.internal.things.GroupePSAHandler;
import org.openhab.core.auth.client.oauth2.OAuthFactory;
import org.openhab.core.config.discovery.DiscoveryService;
import org.openhab.core.io.net.http.HttpClientFactory;
import org.openhab.core.thing.Bridge;
import org.openhab.core.thing.Thing;
import org.openhab.core.thing.ThingTypeUID;
import org.openhab.core.thing.binding.BaseThingHandlerFactory;
import org.openhab.core.thing.binding.ThingHandler;
import org.openhab.core.thing.binding.ThingHandlerFactory;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
Expand All @@ -51,7 +47,6 @@ public class GroupePSAHandlerFactory extends BaseThingHandlerFactory {

private final OAuthFactory oAuthFactory;
protected final HttpClient httpClient;
private @Nullable ServiceRegistration<?> groupePSADiscoveryServiceRegistration;

@Activate
public GroupePSAHandlerFactory(@Reference OAuthFactory oAuthFactory,
Expand All @@ -72,28 +67,9 @@ public boolean supportsThingType(ThingTypeUID thingTypeUID) {
if (THING_TYPE_VEHICLE.equals(thingTypeUID)) {
return new GroupePSAHandler(thing);
} else if (THING_TYPE_BRIDGE.equals(thingTypeUID)) {
GroupePSABridgeHandler handler = new GroupePSABridgeHandler((Bridge) thing, oAuthFactory, httpClient);
registerGroupePSADiscoveryService(handler);
return handler;
return new GroupePSABridgeHandler((Bridge) thing, oAuthFactory, httpClient);
}

return null;
}

@Override
protected synchronized void removeHandler(ThingHandler thingHandler) {
if (thingHandler instanceof GroupePSABridgeHandler) {
ServiceRegistration<?> serviceRegistration = groupePSADiscoveryServiceRegistration;
if (serviceRegistration != null) {
serviceRegistration.unregister();
groupePSADiscoveryServiceRegistration = null;
}
}
}

private void registerGroupePSADiscoveryService(GroupePSABridgeHandler handler) {
GroupePSADiscoveryService discoveryService = new GroupePSADiscoveryService(handler);
groupePSADiscoveryServiceRegistration = bundleContext.registerService(DiscoveryService.class.getName(),
discoveryService, new Hashtable<>());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import static org.openhab.binding.groupepsa.internal.GroupePSABindingConstants.VendorConstants;

import java.io.IOException;
import java.text.MessageFormat;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
Expand All @@ -26,6 +26,7 @@
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.jetty.client.HttpClient;
import org.openhab.binding.groupepsa.internal.discovery.GroupePSADiscoveryService;
import org.openhab.binding.groupepsa.internal.rest.api.GroupePSAConnectApi;
import org.openhab.binding.groupepsa.internal.rest.api.dto.Vehicle;
import org.openhab.binding.groupepsa.internal.rest.api.dto.VehicleStatus;
Expand All @@ -41,7 +42,10 @@
import org.openhab.core.thing.ThingStatusDetail;
import org.openhab.core.thing.ThingTypeUID;
import org.openhab.core.thing.binding.BaseBridgeHandler;
import org.openhab.core.thing.binding.ThingHandlerService;
import org.openhab.core.types.Command;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* The {@link GroupePSABridgeHandler} is responsible for handling commands,
Expand All @@ -51,6 +55,8 @@
*/
@NonNullByDefault
public class GroupePSABridgeHandler extends BaseBridgeHandler {
private final Logger logger = LoggerFactory.getLogger(GroupePSABridgeHandler.class);

public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = Collections.singleton(THING_TYPE_BRIDGE);
private static final long DEFAULT_POLLING_INTERVAL_M = TimeUnit.HOURS.toMinutes(1);

Expand Down Expand Up @@ -85,8 +91,7 @@ private void pollGroupePSAs() {
"@text/comm-error-query-vehicles-failed");
}
} catch (GroupePSACommunicationException e) {
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
MessageFormat.format("@text/comm-error-query-vehicles-failed", e.getMessage()));
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, e.getMessage());
}
}

Expand Down Expand Up @@ -216,4 +221,9 @@ public GroupePSAConnectApi getAPI() throws GroupePSACommunicationException {
public @Nullable VehicleStatus getVehicleStatus(String vin) throws GroupePSACommunicationException {
return getAPI().getVehicleStatus(vin);
}

@Override
public Collection<Class<? extends ThingHandlerService>> getServices() {
return Collections.singleton(GroupePSADiscoveryService.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@
import org.openhab.core.config.discovery.DiscoveryResultBuilder;
import org.openhab.core.thing.ThingTypeUID;
import org.openhab.core.thing.ThingUID;
import org.openhab.core.thing.binding.ThingHandler;
import org.openhab.core.thing.binding.ThingHandlerService;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -39,27 +42,48 @@
*
* @author Arjan Mels - Initial contribution
*/
@Component(service = ThingHandlerService.class)
@NonNullByDefault
public class GroupePSADiscoveryService extends AbstractDiscoveryService {
public class GroupePSADiscoveryService extends AbstractDiscoveryService implements ThingHandlerService {
private final Logger logger = LoggerFactory.getLogger(GroupePSADiscoveryService.class);

private final GroupePSABridgeHandler bridgeHandler;
private @Nullable GroupePSABridgeHandler bridgeHandler;

public GroupePSADiscoveryService(GroupePSABridgeHandler bridgeHandler) {
public GroupePSADiscoveryService() {
super(Collections.singleton(THING_TYPE_VEHICLE), 10, false);
this.bridgeHandler = bridgeHandler;
}

@Override
public void setThingHandler(@Nullable ThingHandler handler) {
if (handler instanceof GroupePSABridgeHandler) {
bridgeHandler = (GroupePSABridgeHandler) handler;
}
}

@Override
public @Nullable ThingHandler getThingHandler() {
return bridgeHandler;
}

@Override
public void deactivate() {
super.deactivate();
}

@Override
protected void startScan() {
try {
List<Vehicle> vehicles = bridgeHandler.getVehicles();
GroupePSABridgeHandler localBridgeHandler = bridgeHandler;
if (localBridgeHandler == null) {
return;
}
List<Vehicle> vehicles = localBridgeHandler.getVehicles();
if (vehicles == null || vehicles.isEmpty()) {
logger.warn("No vehicles found");
return;
}
for (Vehicle vehicle : vehicles) {
ThingUID bridgeUID = bridgeHandler.getThing().getUID();
ThingUID bridgeUID = localBridgeHandler.getThing().getUID();
ThingTypeUID thingTypeUID = THING_TYPE_VEHICLE;
String id = vehicle.getId();
if (id != null) {
Expand Down

0 comments on commit 8448f81

Please sign in to comment.