diff --git a/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldManagerMessageProcessor.java b/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldManagerMessageProcessor.java
index 1dd5b01401..0990365748 100644
--- a/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldManagerMessageProcessor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/calculatedField/CalculatedFieldManagerMessageProcessor.java
@@ -141,7 +141,7 @@ public class CalculatedFieldManagerMessageProcessor extends AbstractContextAware
}
public void onEntityLifecycleMsg(CalculatedFieldEntityLifecycleMsg msg) throws CalculatedFieldException {
- log.info("Processing entity lifecycle event: [{}] for entity: [{}]", msg.getData().getEvent(), msg.getData().getEntityId());
+ log.debug("Processing entity lifecycle event: [{}] for entity: [{}]", msg.getData().getEvent(), msg.getData().getEntityId());
var entityType = msg.getData().getEntityId().getEntityType();
var event = msg.getData().getEvent();
switch (entityType) {
diff --git a/common/script/script-api/pom.xml b/common/script/script-api/pom.xml
index da60567814..3655692217 100644
--- a/common/script/script-api/pom.xml
+++ b/common/script/script-api/pom.xml
@@ -111,14 +111,6 @@
awaitility
test
-
- org.locationtech.spatial4j
- spatial4j
-
-
- org.locationtech.jts
- jts-core
-
diff --git a/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbUtils.java b/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbUtils.java
index 12eb308fee..72792c1093 100644
--- a/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbUtils.java
+++ b/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbUtils.java
@@ -25,9 +25,9 @@ import org.mvel2.execution.ExecutionArrayList;
import org.mvel2.execution.ExecutionHashMap;
import org.mvel2.util.MethodStub;
import org.thingsboard.common.util.JacksonUtil;
-import org.thingsboard.script.api.Coordinates;
-import org.thingsboard.script.api.GeoUtil;
-import org.thingsboard.script.api.RangeUnit;
+import org.thingsboard.common.util.geo.Coordinates;
+import org.thingsboard.common.util.geo.GeoUtil;
+import org.thingsboard.common.util.geo.RangeUnit;
import org.thingsboard.server.common.data.StringUtils;
import java.io.IOException;
diff --git a/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbUtilsTest.java b/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbUtilsTest.java
index e3860ed89a..1063a8e8de 100644
--- a/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbUtilsTest.java
+++ b/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbUtilsTest.java
@@ -1150,6 +1150,26 @@ public class TbUtilsTest {
Assertions.assertTrue(TbUtils.isNaN(Double.NaN));
}
+ @Test
+ public void isInsidePolygon() {
+ // outside the polygon
+ String perimeter = "[[[50.75581142688204,29.097910166341073],[50.16785158177623,29.35066098977171],[50.164329922384674,29.773743889862114],[50.16785158177623,30.801230932938843],[50.459245308833495,30.92760634465418],[50.486522489629564,30.68548421850448],[50.703612031034005,30.872660513473573]],[[50.606017492632766,29.36165015600782],[50.54317104075835,29.762754723626013],[50.41021974600505,29.455058069014804]]]";
+ Assertions.assertFalse(TbUtils.isInsidePolygon(50.50869555168039, 30.80123093293884, perimeter));
+ // inside the polygon
+ Assertions.assertTrue(TbUtils.isInsidePolygon(50.50520628167696, 30.339685951022016, perimeter));
+ // inside the hole
+ Assertions.assertFalse(TbUtils.isInsidePolygon(50.52265651287081, 29.488025567723156, perimeter));
+ }
+
+ @Test
+ public void isInsideCircle() {
+ // outside the circle
+ String perimeter = "{\"latitude\":50.32254778825905,\"longitude\":28.207787701215757,\"radius\":47477.33130420423}";
+ Assertions.assertFalse(TbUtils.isInsideCircle(50.81490715736681, 28.05943395702824, perimeter));
+ // inside the circle
+ Assertions.assertTrue(TbUtils.isInsideCircle(50.599397971892444, 28.086906872618542, perimeter));
+ }
+
private static List toList(byte[] data) {
List result = new ArrayList<>(data.length);
for (Byte b : data) {
diff --git a/common/util/pom.xml b/common/util/pom.xml
index 430a6e7df9..82768cdb68 100644
--- a/common/util/pom.xml
+++ b/common/util/pom.xml
@@ -103,6 +103,14 @@
com.fasterxml.jackson.datatype
jackson-datatype-jdk8
+
+ org.locationtech.spatial4j
+ spatial4j
+
+
+ org.locationtech.jts
+ jts-core
+
diff --git a/common/script/script-api/src/main/java/org/thingsboard/script/api/Coordinates.java b/common/util/src/main/java/org/thingsboard/common/util/geo/Coordinates.java
similarity index 94%
rename from common/script/script-api/src/main/java/org/thingsboard/script/api/Coordinates.java
rename to common/util/src/main/java/org/thingsboard/common/util/geo/Coordinates.java
index 671ab58d5c..dc1998bff1 100644
--- a/common/script/script-api/src/main/java/org/thingsboard/script/api/Coordinates.java
+++ b/common/util/src/main/java/org/thingsboard/common/util/geo/Coordinates.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.script.api;
+package org.thingsboard.common.util.geo;
import lombok.Data;
diff --git a/common/script/script-api/src/main/java/org/thingsboard/script/api/GeoUtil.java b/common/util/src/main/java/org/thingsboard/common/util/geo/GeoUtil.java
similarity index 99%
rename from common/script/script-api/src/main/java/org/thingsboard/script/api/GeoUtil.java
rename to common/util/src/main/java/org/thingsboard/common/util/geo/GeoUtil.java
index 408b051303..11a6799348 100644
--- a/common/script/script-api/src/main/java/org/thingsboard/script/api/GeoUtil.java
+++ b/common/util/src/main/java/org/thingsboard/common/util/geo/GeoUtil.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.script.api;
+package org.thingsboard.common.util.geo;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
diff --git a/common/script/script-api/src/main/java/org/thingsboard/script/api/Perimeter.java b/common/util/src/main/java/org/thingsboard/common/util/geo/Perimeter.java
similarity index 95%
rename from common/script/script-api/src/main/java/org/thingsboard/script/api/Perimeter.java
rename to common/util/src/main/java/org/thingsboard/common/util/geo/Perimeter.java
index e05486bee0..238fa19af5 100644
--- a/common/script/script-api/src/main/java/org/thingsboard/script/api/Perimeter.java
+++ b/common/util/src/main/java/org/thingsboard/common/util/geo/Perimeter.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.script.api;
+package org.thingsboard.common.util.geo;
import lombok.Data;
diff --git a/common/script/script-api/src/main/java/org/thingsboard/script/api/PerimeterType.java b/common/util/src/main/java/org/thingsboard/common/util/geo/PerimeterType.java
similarity index 94%
rename from common/script/script-api/src/main/java/org/thingsboard/script/api/PerimeterType.java
rename to common/util/src/main/java/org/thingsboard/common/util/geo/PerimeterType.java
index f6a0eea77e..c3b334abd7 100644
--- a/common/script/script-api/src/main/java/org/thingsboard/script/api/PerimeterType.java
+++ b/common/util/src/main/java/org/thingsboard/common/util/geo/PerimeterType.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.script.api;
+package org.thingsboard.common.util.geo;
public enum PerimeterType {
CIRCLE, POLYGON
diff --git a/common/script/script-api/src/main/java/org/thingsboard/script/api/RangeUnit.java b/common/util/src/main/java/org/thingsboard/common/util/geo/RangeUnit.java
similarity index 95%
rename from common/script/script-api/src/main/java/org/thingsboard/script/api/RangeUnit.java
rename to common/util/src/main/java/org/thingsboard/common/util/geo/RangeUnit.java
index 6a594d1668..56883ca43f 100644
--- a/common/script/script-api/src/main/java/org/thingsboard/script/api/RangeUnit.java
+++ b/common/util/src/main/java/org/thingsboard/common/util/geo/RangeUnit.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.script.api;
+package org.thingsboard.common.util.geo;
public enum RangeUnit {
METER(1000.0), KILOMETER(1.0), FOOT(3280.84), MILE(0.62137), NAUTICAL_MILE(0.539957);
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/AbstractGeofencingNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/AbstractGeofencingNode.java
index ea0d62ebc0..ff6b3acb88 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/AbstractGeofencingNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/AbstractGeofencingNode.java
@@ -21,16 +21,16 @@ import com.google.gson.JsonParser;
import org.locationtech.spatial4j.context.jts.JtsSpatialContext;
import org.locationtech.spatial4j.context.jts.JtsSpatialContextFactory;
import org.thingsboard.common.util.JacksonUtil;
+import org.thingsboard.common.util.geo.Coordinates;
+import org.thingsboard.common.util.geo.GeoUtil;
+import org.thingsboard.common.util.geo.Perimeter;
+import org.thingsboard.common.util.geo.PerimeterType;
+import org.thingsboard.common.util.geo.RangeUnit;
import org.thingsboard.rule.engine.api.TbContext;
import org.thingsboard.rule.engine.api.TbNode;
import org.thingsboard.rule.engine.api.TbNodeConfiguration;
import org.thingsboard.rule.engine.api.TbNodeException;
import org.thingsboard.rule.engine.api.util.TbNodeUtils;
-import org.thingsboard.script.api.Coordinates;
-import org.thingsboard.script.api.GeoUtil;
-import org.thingsboard.script.api.Perimeter;
-import org.thingsboard.script.api.PerimeterType;
-import org.thingsboard.script.api.RangeUnit;
import org.thingsboard.server.common.data.StringUtils;
import org.thingsboard.server.common.msg.TbMsg;
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingActionNodeConfiguration.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingActionNodeConfiguration.java
index edd60d422b..bf195b44cc 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingActionNodeConfiguration.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingActionNodeConfiguration.java
@@ -16,7 +16,7 @@
package org.thingsboard.rule.engine.geo;
import lombok.Data;
-import org.thingsboard.script.api.PerimeterType;
+import org.thingsboard.common.util.geo.PerimeterType;
import java.util.concurrent.TimeUnit;
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingFilterNodeConfiguration.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingFilterNodeConfiguration.java
index 68a1299fc4..32a161635f 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingFilterNodeConfiguration.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingFilterNodeConfiguration.java
@@ -16,9 +16,9 @@
package org.thingsboard.rule.engine.geo;
import lombok.Data;
+import org.thingsboard.common.util.geo.PerimeterType;
+import org.thingsboard.common.util.geo.RangeUnit;
import org.thingsboard.rule.engine.api.NodeConfiguration;
-import org.thingsboard.script.api.PerimeterType;
-import org.thingsboard.script.api.RangeUnit;
/**
* Created by ashvayka on 19.01.18.
diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/geo/GeoUtilTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/geo/GeoUtilTest.java
index 2fb5523c1e..b5438fe529 100644
--- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/geo/GeoUtilTest.java
+++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/geo/GeoUtilTest.java
@@ -19,8 +19,8 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
-import org.thingsboard.script.api.Coordinates;
-import org.thingsboard.script.api.GeoUtil;
+import org.thingsboard.common.util.geo.Coordinates;
+import org.thingsboard.common.util.geo.GeoUtil;
@ExtendWith(MockitoExtension.class)
public class GeoUtilTest {
diff --git a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingFilterNodeTest.java b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingFilterNodeTest.java
index 54f1384d10..71c35d27f4 100644
--- a/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingFilterNodeTest.java
+++ b/rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/geo/TbGpsGeofencingFilterNodeTest.java
@@ -21,12 +21,12 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.thingsboard.common.util.JacksonUtil;
+import org.thingsboard.common.util.geo.Coordinates;
+import org.thingsboard.common.util.geo.PerimeterType;
+import org.thingsboard.common.util.geo.RangeUnit;
import org.thingsboard.rule.engine.api.TbContext;
import org.thingsboard.rule.engine.api.TbNodeConfiguration;
import org.thingsboard.rule.engine.api.TbNodeException;
-import org.thingsboard.script.api.Coordinates;
-import org.thingsboard.script.api.PerimeterType;
-import org.thingsboard.script.api.RangeUnit;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.msg.TbMsgType;