diff --git a/rest-client/pom.xml b/rest-client/pom.xml
index c12ba7be2c..159ef826a0 100644
--- a/rest-client/pom.xml
+++ b/rest-client/pom.xml
@@ -51,6 +51,10 @@
com.auth0
java-jwt
+
+ org.apache.httpcomponents.core5
+ httpcore5
+
diff --git a/rest-client/src/main/java/org/thingsboard/rest/client/RestClient.java b/rest-client/src/main/java/org/thingsboard/rest/client/RestClient.java
index bd1d7b05c3..102fb90d1f 100644
--- a/rest-client/src/main/java/org/thingsboard/rest/client/RestClient.java
+++ b/rest-client/src/main/java/org/thingsboard/rest/client/RestClient.java
@@ -22,6 +22,7 @@ import com.google.common.base.Strings;
import lombok.Getter;
import lombok.SneakyThrows;
import org.apache.commons.io.IOUtils;
+import org.apache.hc.core5.net.URIBuilder;
import org.apache.commons.lang3.concurrent.LazyInitializer;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.core.io.ByteArrayResource;
@@ -93,6 +94,8 @@ import org.thingsboard.server.common.data.asset.AssetSearchQuery;
import org.thingsboard.server.common.data.audit.ActionType;
import org.thingsboard.server.common.data.audit.AuditLog;
import org.thingsboard.server.common.data.cf.CalculatedField;
+import org.thingsboard.server.common.data.cf.CalculatedFieldInfo;
+import org.thingsboard.server.common.data.cf.CalculatedFieldType;
import org.thingsboard.server.common.data.device.DeviceSearchQuery;
import org.thingsboard.server.common.data.domain.Domain;
import org.thingsboard.server.common.data.domain.DomainInfo;
@@ -210,11 +213,13 @@ import org.thingsboard.server.common.data.widget.WidgetsBundle;
import java.io.Closeable;
import java.io.IOException;
import java.net.URI;
+import java.net.URISyntaxException;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
@@ -4309,6 +4314,46 @@ public class RestClient implements Closeable {
}
+ @SneakyThrows(URISyntaxException.class)
+ public PageData getCalculatedFields(PageLink pageLink,
+ Set types,
+ EntityType entityType,
+ Set entities,
+ Set names) {
+ var urlBuilder = new URIBuilder(baseURL).appendPath("/api/calculatedFields");
+ urlBuilder.addParameter("pageSize", String.valueOf(pageLink.getPageSize()));
+ urlBuilder.addParameter("page", String.valueOf(pageLink.getPage()));
+ if (!isEmpty(pageLink.getTextSearch())) {
+ urlBuilder.addParameter("textSearch", pageLink.getTextSearch());
+ }
+ if (pageLink.getSortOrder() != null) {
+ urlBuilder.addParameter("sortProperty", pageLink.getSortOrder().getProperty());
+ urlBuilder.addParameter("sortOrder", pageLink.getSortOrder().getDirection().name());
+ }
+ if (!CollectionUtils.isEmpty(types)) {
+ for (CalculatedFieldType type : types) {
+ urlBuilder.addParameter("types", type.name());
+ }
+ }
+ if (entityType != null) {
+ urlBuilder.addParameter("entityType", entityType.name());
+ }
+ if (!CollectionUtils.isEmpty(entities)) {
+ for (UUID entity : entities) {
+ urlBuilder.addParameter("entities", entity.toString());
+ }
+ }
+ if (!CollectionUtils.isEmpty(names)) {
+ for (String name : names) {
+ urlBuilder.addParameter("name", name);
+ }
+ }
+ return restTemplate.exchange(
+ urlBuilder.build(),
+ HttpMethod.GET, HttpEntity.EMPTY,
+ new ParameterizedTypeReference>() {}).getBody();
+ }
+
public void deleteCalculatedField(CalculatedFieldId calculatedFieldId) {
restTemplate.delete(baseURL + "/api/calculatedField/{calculatedFieldId}", calculatedFieldId.getId());
}