class ProductReferenceDeviceGatewayProvider implements DataReferenceProvider {

    private final ReactiveRepository<DeviceProductEntity, String> repository;

    @Override
    public String getId() {
        return DataReferenceManager.TYPE_DEVICE_GATEWAY;
    }

    @Override
    public Flux<DataReferenceInfo> getReference(String dataId) {
        return repository
            .createQuery()
            .where(DeviceProductEntity::getAccessId, dataId)
            .fetch()
            .map(e -> DataReferenceInfo
                .of(e.getAccessId(),
                    DataReferenceManager.TYPE_DEVICE_GATEWAY,
                    e.getId(),
                    e.getName()));
    }

    @Override
    public Flux<DataReferenceInfo> getReferences() {<FILL_FUNCTION_BODY>}
}

        return repository
            .createQuery()
            .fetch()
            .filter(e -> StringUtils.hasText(e.getAccessId()))
            .map(e -> DataReferenceInfo
                .of(e.getAccessId(),
                    DataReferenceManager.TYPE_DEVICE_GATEWAY,
                    e.getId(),
                    e.getName()));
    
<no_super_class>