2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.lametrictime.internal.api.cloud.impl;
15 import java.util.logging.Logger;
17 import javax.ws.rs.client.Client;
18 import javax.ws.rs.client.ClientBuilder;
19 import javax.ws.rs.core.MediaType;
21 import org.eclipse.jdt.annotation.NonNullByDefault;
22 import org.eclipse.jdt.annotation.Nullable;
23 import org.openhab.binding.lametrictime.internal.GsonProvider;
24 import org.openhab.binding.lametrictime.internal.api.cloud.CloudConfiguration;
25 import org.openhab.binding.lametrictime.internal.api.cloud.LaMetricTimeCloud;
26 import org.openhab.binding.lametrictime.internal.api.cloud.dto.IconFilter;
27 import org.openhab.binding.lametrictime.internal.api.cloud.dto.Icons;
28 import org.openhab.binding.lametrictime.internal.api.common.impl.AbstractClient;
29 import org.openhab.binding.lametrictime.internal.api.filter.LoggingFilter;
32 * Implementation class for LaMetricTimeCloud interface.
34 * @author Gregory Moyer - Initial contribution
37 public class LaMetricTimeCloudImpl extends AbstractClient implements LaMetricTimeCloud {
38 private final CloudConfiguration config;
40 public LaMetricTimeCloudImpl(CloudConfiguration config) {
44 public LaMetricTimeCloudImpl(CloudConfiguration config, ClientBuilder clientBuilder) {
50 public Icons getIcons() {
51 return getClient().target(config.getBaseUri()).path("/icons").request(MediaType.APPLICATION_JSON_TYPE)
56 public Icons getIcons(@Nullable IconFilter filter) {
57 return getClient().target(config.getBaseUri()).path("/icons").queryParam("page", filter.getPage())
58 .queryParam("page_size", filter.getPageSize()).queryParam("fields", filter.getFieldsString())
59 .queryParam("order", filter.getOrderString()).request(MediaType.APPLICATION_JSON_TYPE).get(Icons.class);
63 protected Client createClient() {
64 ClientBuilder builder = getClientBuilder();
66 // setup Gson (de)serialization
67 GsonProvider<Object> gsonProvider = new GsonProvider<>();
68 builder.register(gsonProvider);
70 // turn on logging if requested
71 if (config.isLogging()) {
73 new LoggingFilter(Logger.getLogger(LaMetricTimeCloudImpl.class.getName()), config.getLogMax()));
76 return builder.build();