diff --git a/application/pom.xml b/application/pom.xml
index ce252ecae9..45e6f23845 100644
--- a/application/pom.xml
+++ b/application/pom.xml
@@ -23,7 +23,6 @@
2.0.0-SNAPSHOT
thingsboard
- org.thingsboard
application
jar
@@ -49,10 +48,6 @@
linux-x86_64
-
- org.thingsboard
- extensions-api
-
org.thingsboard.rule-engine
rule-engine-api
@@ -61,10 +56,6 @@
org.thingsboard.rule-engine
rule-engine-components
-
- org.thingsboard
- extensions-core
-
org.thingsboard.common
transport
@@ -471,48 +462,6 @@
org.apache.maven.plugins
maven-dependency-plugin
-
- copy-extensions
- package
-
- copy
-
-
- ${project.build.directory}/extensions
-
-
- org.thingsboard.extensions
- extension-rabbitmq
- extension
-
-
- org.thingsboard.extensions
- extension-rest-api-call
- extension
-
-
- org.thingsboard.extensions
- extension-kafka
- extension
-
-
- org.thingsboard.extensions
- extension-mqtt
- extension
-
-
- org.thingsboard.extensions
- extension-sqs
- extension
-
-
- org.thingsboard.extensions
- extension-sns
- extension
-
-
-
-
copy-winsw-service
package
diff --git a/application/src/main/data/upgrade/1.5.0/schema_update.cql b/application/src/main/data/upgrade/1.5.0/schema_update.cql
index 0a3f42bd21..c2b296dbcb 100644
--- a/application/src/main/data/upgrade/1.5.0/schema_update.cql
+++ b/application/src/main/data/upgrade/1.5.0/schema_update.cql
@@ -94,3 +94,10 @@ CREATE TABLE IF NOT EXISTS thingsboard.rule_node (
PRIMARY KEY (id)
);
+DROP MATERIALIZED VIEW IF EXISTS rule_by_plugin_token;
+DROP MATERIALIZED VIEW IF EXISTS rule_by_tenant_and_search_text;
+DROP MATERIALIZED VIEW IF EXISTS plugin_by_api_token;
+DROP MATERIALIZED VIEW IF EXISTS plugin_by_tenant_and_search_text;
+
+DROP TABLE IF EXISTS rule;
+DROP TABLE IF EXISTS plugin;
diff --git a/application/src/main/data/upgrade/1.5.0/schema_update.sql b/application/src/main/data/upgrade/1.5.0/schema_update.sql
index c3c5ade4d7..83f746a6cd 100644
--- a/application/src/main/data/upgrade/1.5.0/schema_update.sql
+++ b/application/src/main/data/upgrade/1.5.0/schema_update.sql
@@ -35,4 +35,7 @@ CREATE TABLE IF NOT EXISTS rule_node (
name varchar(255),
debug_mode boolean,
search_text varchar(255)
-);
\ No newline at end of file
+);
+
+DROP TABLE rule;
+DROP TABLE plugin;
diff --git a/application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java b/application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java
index b4f910265d..6986f628a6 100644
--- a/application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java
+++ b/application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java
@@ -29,7 +29,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
-import org.thingsboard.rule.engine.api.ListeningExecutor;
import org.thingsboard.rule.engine.api.MailService;
import org.thingsboard.server.actors.service.ActorService;
import org.thingsboard.server.common.data.DataConstants;
@@ -40,7 +39,6 @@ import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
import org.thingsboard.server.common.msg.TbMsg;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
import org.thingsboard.server.common.transport.auth.DeviceAuthService;
-import org.thingsboard.server.controller.plugin.PluginWebSocketMsgEndpoint;
import org.thingsboard.server.dao.alarm.AlarmService;
import org.thingsboard.server.dao.asset.AssetService;
import org.thingsboard.server.dao.attributes.AttributesService;
@@ -48,11 +46,8 @@ import org.thingsboard.server.dao.audit.AuditLogService;
import org.thingsboard.server.dao.customer.CustomerService;
import org.thingsboard.server.dao.device.DeviceService;
import org.thingsboard.server.dao.event.EventService;
-import org.thingsboard.server.dao.plugin.PluginService;
-import org.thingsboard.server.dao.queue.MsgQueue;
import org.thingsboard.server.dao.relation.RelationService;
import org.thingsboard.server.dao.rule.RuleChainService;
-import org.thingsboard.server.dao.rule.RuleService;
import org.thingsboard.server.dao.tenant.TenantService;
import org.thingsboard.server.dao.timeseries.TimeseriesService;
import org.thingsboard.server.dao.user.UserService;
@@ -131,18 +126,10 @@ public class ActorSystemContext {
@Getter
private UserService userService;
- @Autowired
- @Getter
- private RuleService ruleService;
-
@Autowired
@Getter
private RuleChainService ruleChainService;
- @Autowired
- @Getter
- private PluginService pluginService;
-
@Autowired
@Getter
private TimeseriesService tsService;
@@ -175,11 +162,6 @@ public class ActorSystemContext {
@Getter
private DeviceRpcService deviceRpcService;
- @Autowired
- @Getter
- @Setter
- private PluginWebSocketMsgEndpoint wsMsgEndpoint;
-
@Autowired
@Getter
private JsExecutorService jsExecutor;
diff --git a/application/src/main/java/org/thingsboard/server/actors/app/AppActor.java b/application/src/main/java/org/thingsboard/server/actors/app/AppActor.java
index 73cf788b8b..e1c7e08267 100644
--- a/application/src/main/java/org/thingsboard/server/actors/app/AppActor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/app/AppActor.java
@@ -15,24 +15,26 @@
*/
package org.thingsboard.server.actors.app;
-import akka.actor.*;
+import akka.actor.ActorRef;
+import akka.actor.LocalActorRef;
+import akka.actor.OneForOneStrategy;
+import akka.actor.Props;
+import akka.actor.SupervisorStrategy;
import akka.actor.SupervisorStrategy.Directive;
+import akka.actor.Terminated;
import akka.event.Logging;
import akka.event.LoggingAdapter;
import akka.japi.Function;
import org.thingsboard.server.actors.ActorSystemContext;
-import org.thingsboard.server.actors.plugin.PluginTerminationMsg;
import org.thingsboard.server.actors.ruleChain.RuleChainManagerActor;
import org.thingsboard.server.actors.service.ContextBasedCreator;
import org.thingsboard.server.actors.service.DefaultActorService;
-import org.thingsboard.server.actors.shared.plugin.SystemPluginManager;
import org.thingsboard.server.actors.shared.rulechain.SystemRuleChainManager;
import org.thingsboard.server.actors.tenant.TenantActor;
import org.thingsboard.server.common.data.Tenant;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.PageDataIterable;
import org.thingsboard.server.common.msg.TbActorMsg;
-import org.thingsboard.server.common.msg.aware.DeviceAwareMsg;
import org.thingsboard.server.common.msg.aware.TenantAwareMsg;
import org.thingsboard.server.common.msg.cluster.SendToClusterMsg;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
@@ -41,8 +43,6 @@ import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg;
import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg;
import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.tenant.TenantService;
-import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
-import org.thingsboard.server.extensions.api.plugins.msg.ToPluginActorMsg;
import scala.concurrent.duration.Duration;
import java.util.HashMap;
@@ -58,7 +58,7 @@ public class AppActor extends RuleChainManagerActor {
private final Map tenantActors;
private AppActor(ActorSystemContext systemContext) {
- super(systemContext, new SystemRuleChainManager(systemContext), new SystemPluginManager(systemContext));
+ super(systemContext, new SystemRuleChainManager(systemContext));
this.tenantService = systemContext.getTenantService();
this.tenantActors = new HashMap<>();
}
diff --git a/application/src/main/java/org/thingsboard/server/actors/device/DeviceActor.java b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActor.java
index 93df1808d5..99d004574e 100644
--- a/application/src/main/java/org/thingsboard/server/actors/device/DeviceActor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActor.java
@@ -17,6 +17,8 @@ package org.thingsboard.server.actors.device;
import akka.event.Logging;
import akka.event.LoggingAdapter;
+import org.thingsboard.rule.engine.api.msg.DeviceAttributesEventNotificationMsg;
+import org.thingsboard.rule.engine.api.msg.DeviceNameOrTypeUpdateMsg;
import org.thingsboard.server.actors.ActorSystemContext;
import org.thingsboard.server.actors.service.ContextAwareActor;
import org.thingsboard.server.actors.service.ContextBasedCreator;
@@ -28,8 +30,6 @@ import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
import org.thingsboard.server.common.msg.timeout.DeviceActorClientSideRpcTimeoutMsg;
import org.thingsboard.server.common.msg.timeout.DeviceActorQueueTimeoutMsg;
import org.thingsboard.server.common.msg.timeout.DeviceActorServerSideRpcTimeoutMsg;
-import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg;
-import org.thingsboard.server.extensions.api.device.DeviceNameOrTypeUpdateMsg;
import org.thingsboard.server.service.rpc.ToDeviceRpcRequestActorMsg;
import org.thingsboard.server.service.rpc.ToServerRpcResponseActorMsg;
diff --git a/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java
index 2f5e20de42..625d6e94ac 100644
--- a/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java
@@ -25,6 +25,9 @@ import com.google.common.util.concurrent.ListenableFuture;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
+import org.thingsboard.rule.engine.api.RpcError;
+import org.thingsboard.rule.engine.api.msg.DeviceAttributesEventNotificationMsg;
+import org.thingsboard.rule.engine.api.msg.DeviceNameOrTypeUpdateMsg;
import org.thingsboard.server.actors.ActorSystemContext;
import org.thingsboard.server.actors.shared.AbstractContextAwareMsgProcessor;
import org.thingsboard.server.common.data.DataConstants;
@@ -41,12 +44,13 @@ import org.thingsboard.server.common.msg.TbMsgDataType;
import org.thingsboard.server.common.msg.TbMsgMetaData;
import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
+import org.thingsboard.server.common.msg.core.ActorSystemToDeviceSessionActorMsg;
import org.thingsboard.server.common.msg.core.AttributesUpdateNotification;
import org.thingsboard.server.common.msg.core.AttributesUpdateRequest;
+import org.thingsboard.server.common.msg.core.BasicActorSystemToDeviceSessionActorMsg;
import org.thingsboard.server.common.msg.core.BasicCommandAckResponse;
import org.thingsboard.server.common.msg.core.BasicGetAttributesResponse;
import org.thingsboard.server.common.msg.core.BasicStatusCodeResponse;
-import org.thingsboard.server.common.msg.core.BasicActorSystemToDeviceSessionActorMsg;
import org.thingsboard.server.common.msg.core.GetAttributesRequest;
import org.thingsboard.server.common.msg.core.RuleEngineError;
import org.thingsboard.server.common.msg.core.RuleEngineErrorMsg;
@@ -56,7 +60,6 @@ import org.thingsboard.server.common.msg.core.SessionOpenMsg;
import org.thingsboard.server.common.msg.core.TelemetryUploadRequest;
import org.thingsboard.server.common.msg.core.ToDeviceRpcRequestMsg;
import org.thingsboard.server.common.msg.core.ToDeviceRpcResponseMsg;
-import org.thingsboard.server.common.msg.core.ActorSystemToDeviceSessionActorMsg;
import org.thingsboard.server.common.msg.core.ToServerRpcRequestMsg;
import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
import org.thingsboard.server.common.msg.kv.BasicAttributeKVMsg;
@@ -68,10 +71,7 @@ import org.thingsboard.server.common.msg.session.ToDeviceMsg;
import org.thingsboard.server.common.msg.timeout.DeviceActorClientSideRpcTimeoutMsg;
import org.thingsboard.server.common.msg.timeout.DeviceActorQueueTimeoutMsg;
import org.thingsboard.server.common.msg.timeout.DeviceActorServerSideRpcTimeoutMsg;
-import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg;
-import org.thingsboard.server.extensions.api.device.DeviceNameOrTypeUpdateMsg;
-import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
-import org.thingsboard.server.extensions.api.plugins.msg.RpcError;
+import org.thingsboard.server.service.rpc.FromDeviceRpcResponse;
import org.thingsboard.server.service.rpc.ToDeviceRpcRequestActorMsg;
import org.thingsboard.server.service.rpc.ToServerRpcResponseActorMsg;
diff --git a/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorToRuleEngineMsg.java b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorToRuleEngineMsg.java
index 1426644bce..adc5531da5 100644
--- a/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorToRuleEngineMsg.java
+++ b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorToRuleEngineMsg.java
@@ -17,7 +17,6 @@ package org.thingsboard.server.actors.device;
import akka.actor.ActorRef;
import lombok.Data;
-import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.msg.MsgType;
import org.thingsboard.server.common.msg.TbActorMsg;
import org.thingsboard.server.common.msg.TbMsg;
diff --git a/application/src/main/java/org/thingsboard/server/actors/device/SessionInfo.java b/application/src/main/java/org/thingsboard/server/actors/device/SessionInfo.java
index e039b9634f..04c457c92e 100644
--- a/application/src/main/java/org/thingsboard/server/actors/device/SessionInfo.java
+++ b/application/src/main/java/org/thingsboard/server/actors/device/SessionInfo.java
@@ -16,7 +16,6 @@
package org.thingsboard.server.actors.device;
import lombok.Data;
-import org.thingsboard.server.common.data.id.SessionId;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
import org.thingsboard.server.common.msg.session.SessionType;
diff --git a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginActor.java b/application/src/main/java/org/thingsboard/server/actors/plugin/PluginActor.java
deleted file mode 100644
index 7cb31610eb..0000000000
--- a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginActor.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.actors.plugin;
-
-import akka.actor.ActorContext;
-import akka.actor.ActorRef;
-import org.thingsboard.server.actors.ActorSystemContext;
-import org.thingsboard.server.actors.service.ComponentActor;
-import org.thingsboard.server.actors.service.ContextBasedCreator;
-import org.thingsboard.server.actors.stats.StatsPersistTick;
-import org.thingsboard.server.common.data.id.PluginId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.msg.TbActorMsg;
-import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
-import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg;
-import org.thingsboard.server.common.msg.timeout.TimeoutMsg;
-import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg;
-import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg;
-import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg;
-import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg;
-import org.thingsboard.server.extensions.api.rules.RuleException;
-
-public class PluginActor extends ComponentActor {
-
- private PluginActor(ActorSystemContext systemContext, TenantId tenantId, PluginId pluginId) {
- super(systemContext, tenantId, pluginId);
- setProcessor(new PluginActorMessageProcessor(tenantId, pluginId, systemContext,
- logger, context().parent(), context().self()));
- }
-
- @Override
- protected boolean process(TbActorMsg msg) {
- //TODO Move everything here, to work with TbActorMsg
- return false;
- }
-
- @Override
- public void onReceive(Object msg) throws Exception {
- if (msg instanceof PluginWebsocketMsg) {
- onWebsocketMsg((PluginWebsocketMsg>) msg);
- } else if (msg instanceof PluginRestMsg) {
- onRestMsg((PluginRestMsg) msg);
- } else if (msg instanceof PluginCallbackMessage) {
- onPluginCallback((PluginCallbackMessage) msg);
- } else if (msg instanceof RuleToPluginMsgWrapper) {
- onRuleToPluginMsg((RuleToPluginMsgWrapper) msg);
- } else if (msg instanceof PluginRpcMsg) {
- onRpcMsg((PluginRpcMsg) msg);
- } else if (msg instanceof ClusterEventMsg) {
- onClusterEventMsg((ClusterEventMsg) msg);
- } else if (msg instanceof ComponentLifecycleMsg) {
- onComponentLifecycleMsg((ComponentLifecycleMsg) msg);
- } else if (msg instanceof ToPluginRpcResponseDeviceMsg) {
- onRpcResponse((ToPluginRpcResponseDeviceMsg) msg);
- } else if (msg instanceof PluginTerminationMsg) {
- logger.info("[{}][{}] Going to terminate plugin actor.", tenantId, id);
- context().parent().tell(msg, ActorRef.noSender());
- context().stop(self());
- } else if (msg instanceof TimeoutMsg) {
- onTimeoutMsg(context(), (TimeoutMsg) msg);
- } else if (msg instanceof StatsPersistTick) {
- onStatsPersistTick(id);
- } else {
- logger.debug("[{}][{}] Unknown msg type.", tenantId, id, msg.getClass().getName());
- }
- }
-
- private void onPluginCallback(PluginCallbackMessage msg) {
- try {
- processor.onPluginCallbackMsg(msg);
- } catch (Exception e) {
- logAndPersist("onPluginCallbackMsg", e);
- }
- }
-
- private void onTimeoutMsg(ActorContext context, TimeoutMsg msg) {
- processor.onTimeoutMsg(context, msg);
- }
-
- private void onRpcResponse(ToPluginRpcResponseDeviceMsg msg) {
- processor.onDeviceRpcMsg(msg.getResponse());
- }
-
- private void onRuleToPluginMsg(RuleToPluginMsgWrapper msg) throws RuleException {
- logger.debug("[{}] Going to process rule msg: {}", id, msg.getMsg());
- try {
- processor.onRuleToPluginMsg(msg);
- increaseMessagesProcessedCount();
- } catch (Exception e) {
- logAndPersist("onRuleMsg", e);
- }
- }
-
- private void onWebsocketMsg(PluginWebsocketMsg> msg) {
- logger.debug("[{}] Going to process web socket msg: {}", id, msg);
- try {
- processor.onWebsocketMsg(msg);
- increaseMessagesProcessedCount();
- } catch (Exception e) {
- logAndPersist("onWebsocketMsg", e);
- }
- }
-
- private void onRestMsg(PluginRestMsg msg) {
- logger.debug("[{}] Going to process rest msg: {}", id, msg);
- try {
- processor.onRestMsg(msg);
- increaseMessagesProcessedCount();
- } catch (Exception e) {
- logAndPersist("onRestMsg", e);
- }
- }
-
- private void onRpcMsg(PluginRpcMsg msg) {
- try {
- logger.debug("[{}] Going to process rpc msg: {}", id, msg);
- processor.onRpcMsg(msg);
- } catch (Exception e) {
- logAndPersist("onRpcMsg", e);
- }
- }
-
- public static class ActorCreator extends ContextBasedCreator {
- private static final long serialVersionUID = 1L;
-
- private final TenantId tenantId;
- private final PluginId pluginId;
-
- public ActorCreator(ActorSystemContext context, TenantId tenantId, PluginId pluginId) {
- super(context);
- this.tenantId = tenantId;
- this.pluginId = pluginId;
- }
-
- @Override
- public PluginActor create() throws Exception {
- return new PluginActor(context, tenantId, pluginId);
- }
- }
-
- @Override
- protected long getErrorPersistFrequency() {
- return 0;
-// return systemContext.getPluginErrorPersistFrequency();
- }
-}
diff --git a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginActorMessageProcessor.java b/application/src/main/java/org/thingsboard/server/actors/plugin/PluginActorMessageProcessor.java
deleted file mode 100644
index afd589a1c1..0000000000
--- a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginActorMessageProcessor.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.actors.plugin;
-
-import akka.actor.ActorContext;
-import akka.actor.ActorRef;
-import akka.event.LoggingAdapter;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import org.thingsboard.server.actors.ActorSystemContext;
-import org.thingsboard.server.actors.shared.ComponentMsgProcessor;
-import org.thingsboard.server.common.data.id.PluginId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
-import org.thingsboard.server.common.data.plugin.ComponentType;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
-import org.thingsboard.server.common.msg.cluster.ServerAddress;
-import org.thingsboard.server.common.msg.core.BasicStatusCodeResponse;
-import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
-import org.thingsboard.server.common.msg.session.SessionMsgType;
-import org.thingsboard.server.common.msg.session.SessionMsgType;
-import org.thingsboard.server.extensions.api.plugins.Plugin;
-import org.thingsboard.server.extensions.api.plugins.PluginInitializationException;
-import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
-import org.thingsboard.server.extensions.api.plugins.msg.ResponsePluginToRuleMsg;
-import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
-import org.thingsboard.server.common.msg.timeout.TimeoutMsg;
-import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg;
-import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg;
-import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg;
-import org.thingsboard.server.extensions.api.rules.RuleException;
-
-/**
- * @author Andrew Shvayka
- */
-public class PluginActorMessageProcessor extends ComponentMsgProcessor {
-
- private final SharedPluginProcessingContext pluginCtx;
- private final PluginProcessingContext trustedCtx;
- private PluginMetaData pluginMd;
- private Plugin pluginImpl;
- private ComponentLifecycleState state;
-
-
- protected PluginActorMessageProcessor(TenantId tenantId, PluginId pluginId, ActorSystemContext systemContext
- , LoggingAdapter logger, ActorRef parent, ActorRef self) {
- super(systemContext, logger, tenantId, pluginId);
- this.pluginCtx = new SharedPluginProcessingContext(systemContext, tenantId, pluginId, parent, self);
- this.trustedCtx = new PluginProcessingContext(pluginCtx, null);
- }
-
- @Override
- public void start(ActorContext context) throws Exception {
- logger.info("[{}] Going to start plugin actor.", entityId);
- pluginMd = systemContext.getPluginService().findPluginById(entityId);
- if (pluginMd == null) {
- throw new PluginInitializationException("Plugin not found!");
- }
- if (pluginMd.getConfiguration() == null) {
- throw new PluginInitializationException("Plugin metadata is empty!");
- }
- state = pluginMd.getState();
- if (state == ComponentLifecycleState.ACTIVE) {
- logger.info("[{}] Plugin is active. Going to initialize plugin.", entityId);
- initComponent();
- } else {
- logger.info("[{}] Plugin is suspended. Skipping plugin initialization.", entityId);
- }
- }
-
- @Override
- public void stop(ActorContext context) throws Exception {
- onStop();
- }
-
- private void initComponent() {
- try {
- pluginImpl = initComponent(pluginMd.getClazz(), ComponentType.PLUGIN, mapper.writeValueAsString(pluginMd.getConfiguration()));
- } catch (InstantiationException e) {
- throw new PluginInitializationException("No default constructor for plugin implementation!", e);
- } catch (IllegalAccessException e) {
- throw new PluginInitializationException("Illegal Access Exception during plugin initialization!", e);
- } catch (ClassNotFoundException e) {
- throw new PluginInitializationException("Plugin Class not found!", e);
- } catch (JsonProcessingException e) {
- throw new PluginInitializationException("Plugin Configuration is invalid!", e);
- } catch (Exception e) {
- throw new PluginInitializationException(e.getMessage(), e);
- }
- }
-
- public void onRuleToPluginMsg(RuleToPluginMsgWrapper msg) throws RuleException {
- if (state == ComponentLifecycleState.ACTIVE) {
- try {
- pluginImpl.process(trustedCtx, msg.getRuleTenantId(), msg.getRuleId(), msg.getMsg());
- } catch (Exception ex) {
- logger.debug("[{}] Failed to process RuleToPlugin msg: [{}] [{}]", tenantId, msg.getMsg(), ex);
- RuleToPluginMsg ruleMsg = msg.getMsg();
- SessionMsgType responceMsgType = SessionMsgType.RULE_ENGINE_ERROR;
- Integer requestId = 0;
- if (ruleMsg.getPayload() instanceof FromDeviceRequestMsg) {
- requestId = ((FromDeviceRequestMsg) ruleMsg.getPayload()).getRequestId();
- }
- trustedCtx.reply(
- new ResponsePluginToRuleMsg(ruleMsg.getUid(), tenantId, msg.getRuleId(),
- BasicStatusCodeResponse.onError(responceMsgType, requestId, ex)));
- }
- } else {
- //TODO: reply with plugin suspended message
- }
- }
-
- public void onWebsocketMsg(PluginWebsocketMsg> msg) {
- if (state == ComponentLifecycleState.ACTIVE) {
- pluginImpl.process(new PluginProcessingContext(pluginCtx, msg.getSecurityCtx()), msg);
- } else {
- //TODO: reply with plugin suspended message
- }
- }
-
- public void onRestMsg(PluginRestMsg msg) {
- if (state == ComponentLifecycleState.ACTIVE) {
- pluginImpl.process(new PluginProcessingContext(pluginCtx, msg.getSecurityCtx()), msg);
- }
- }
-
- public void onRpcMsg(PluginRpcMsg msg) {
- if (state == ComponentLifecycleState.ACTIVE) {
- pluginImpl.process(trustedCtx, msg.getRpcMsg());
- } else {
- //TODO: reply with plugin suspended message
- }
- }
-
- public void onPluginCallbackMsg(PluginCallbackMessage msg) {
- if (state == ComponentLifecycleState.ACTIVE) {
- if (msg.isSuccess()) {
- msg.getCallback().onSuccess(trustedCtx, msg.getV());
- } else {
- msg.getCallback().onFailure(trustedCtx, msg.getE());
- }
- } else {
- //TODO: reply with plugin suspended message
- }
- }
-
-
- public void onTimeoutMsg(ActorContext context, TimeoutMsg> msg) {
- if (state == ComponentLifecycleState.ACTIVE) {
- pluginImpl.process(trustedCtx, msg);
- }
- }
-
-
- public void onDeviceRpcMsg(FromDeviceRpcResponse response) {
- if (state == ComponentLifecycleState.ACTIVE) {
- pluginImpl.process(trustedCtx, response);
- }
- }
-
- @Override
- public void onClusterEventMsg(ClusterEventMsg msg) {
- if (state == ComponentLifecycleState.ACTIVE) {
- ServerAddress address = msg.getServerAddress();
- if (msg.isAdded()) {
- logger.debug("[{}] Going to process server add msg: {}", entityId, address);
- pluginImpl.onServerAdded(trustedCtx, address);
- } else {
- logger.debug("[{}] Going to process server remove msg: {}", entityId, address);
- pluginImpl.onServerRemoved(trustedCtx, address);
- }
- }
- }
-
- @Override
- public void onCreated(ActorContext context) {
- logger.info("[{}] Going to process onCreated plugin.", entityId);
- }
-
- @Override
- public void onUpdate(ActorContext context) throws Exception {
- PluginMetaData oldPluginMd = pluginMd;
- pluginMd = systemContext.getPluginService().findPluginById(entityId);
- boolean requiresRestart = false;
- logger.info("[{}] Plugin configuration was updated from {} to {}.", entityId, oldPluginMd, pluginMd);
- if (!oldPluginMd.getClazz().equals(pluginMd.getClazz())) {
- logger.info("[{}] Plugin requires restart due to clazz change from {} to {}.",
- entityId, oldPluginMd.getClazz(), pluginMd.getClazz());
- requiresRestart = true;
- } else if (!oldPluginMd.getConfiguration().equals(pluginMd.getConfiguration())) {
- logger.info("[{}] Plugin requires restart due to configuration change from {} to {}.",
- entityId, oldPluginMd.getConfiguration(), pluginMd.getConfiguration());
- requiresRestart = true;
- }
- if (requiresRestart) {
- this.state = ComponentLifecycleState.SUSPENDED;
- if (pluginImpl != null) {
- pluginImpl.stop(trustedCtx);
- }
- start(context);
- }
- }
-
- @Override
- public void onStop(ActorContext context) {
- onStop();
-// scheduleMsgWithDelay(context, new PluginTerminationMsg(entityId), systemContext.getPluginActorTerminationDelay());
- }
-
- private void onStop() {
- logger.info("[{}] Going to process onStop plugin.", entityId);
- this.state = ComponentLifecycleState.SUSPENDED;
- if (pluginImpl != null) {
- pluginImpl.stop(trustedCtx);
- }
- }
-
- @Override
- public void onActivate(ActorContext context) throws Exception {
- logger.info("[{}] Going to process onActivate plugin.", entityId);
- this.state = ComponentLifecycleState.ACTIVE;
- if (pluginImpl != null) {
- pluginImpl.resume(trustedCtx);
- logger.info("[{}] Plugin resumed.", entityId);
- } else {
- start(context);
- }
- }
-
- @Override
- public void onSuspend(ActorContext context) {
- logger.info("[{}] Going to process onSuspend plugin.", entityId);
- this.state = ComponentLifecycleState.SUSPENDED;
- if (pluginImpl != null) {
- pluginImpl.suspend(trustedCtx);
- }
- }
-
-}
diff --git a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginCallbackMessage.java b/application/src/main/java/org/thingsboard/server/actors/plugin/PluginCallbackMessage.java
deleted file mode 100644
index 539a874d77..0000000000
--- a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginCallbackMessage.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.actors.plugin;
-
-import lombok.Data;
-import lombok.Getter;
-import lombok.ToString;
-import org.thingsboard.server.extensions.api.plugins.PluginCallback;
-
-import java.util.Optional;
-
-/**
- * @author Andrew Shvayka
- */
-@ToString
-public final class PluginCallbackMessage {
- @Getter
- private final PluginCallback callback;
- @Getter
- private final boolean success;
- @Getter
- private final V v;
- @Getter
- private final Exception e;
-
- public static PluginCallbackMessage onSuccess(PluginCallback callback, V data) {
- return new PluginCallbackMessage(true, callback, data, null);
- }
-
- public static PluginCallbackMessage onError(PluginCallback callback, Exception e) {
- return new PluginCallbackMessage(false, callback, null, e);
- }
-
- private PluginCallbackMessage(boolean success, PluginCallback callback, V v, Exception e) {
- this.success = success;
- this.callback = callback;
- this.v = v;
- this.e = e;
- }
-}
diff --git a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginProcessingContext.java b/application/src/main/java/org/thingsboard/server/actors/plugin/PluginProcessingContext.java
deleted file mode 100644
index f6b30bfd2e..0000000000
--- a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginProcessingContext.java
+++ /dev/null
@@ -1,576 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.actors.plugin;
-
-import akka.actor.ActorRef;
-import com.google.common.base.Function;
-import com.google.common.util.concurrent.FutureCallback;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import lombok.extern.slf4j.Slf4j;
-import org.thingsboard.server.common.data.Customer;
-import org.thingsboard.server.common.data.Device;
-import org.thingsboard.server.common.data.EntityType;
-import org.thingsboard.server.common.data.Tenant;
-import org.thingsboard.server.common.data.asset.Asset;
-import org.thingsboard.server.common.data.audit.ActionType;
-import org.thingsboard.server.common.data.id.*;
-import org.thingsboard.server.common.data.kv.AttributeKey;
-import org.thingsboard.server.common.data.kv.AttributeKvEntry;
-import org.thingsboard.server.common.data.kv.TsKvEntry;
-import org.thingsboard.server.common.data.kv.TsKvQuery;
-import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-import org.thingsboard.server.common.data.relation.EntityRelation;
-import org.thingsboard.server.common.data.relation.RelationTypeGroup;
-import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody;
-import org.thingsboard.server.common.data.rule.RuleChain;
-import org.thingsboard.server.common.data.rule.RuleMetaData;
-import org.thingsboard.server.common.msg.cluster.ServerAddress;
-import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
-import org.thingsboard.server.common.msg.timeout.TimeoutMsg;
-import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg;
-import org.thingsboard.server.extensions.api.plugins.PluginApiCallSecurityContext;
-import org.thingsboard.server.extensions.api.plugins.PluginCallback;
-import org.thingsboard.server.extensions.api.plugins.PluginContext;
-import org.thingsboard.server.extensions.api.plugins.msg.*;
-import org.thingsboard.server.extensions.api.plugins.rpc.PluginRpcMsg;
-import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg;
-import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef;
-import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg;
-
-import javax.annotation.Nullable;
-import java.io.IOException;
-import java.util.*;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
-import java.util.stream.Collectors;
-
-@Slf4j
-public final class PluginProcessingContext implements PluginContext {
-
- private static final Executor executor = Executors.newSingleThreadExecutor();
- public static final String CUSTOMER_USER_IS_NOT_ALLOWED_TO_PERFORM_THIS_OPERATION = "Customer user is not allowed to perform this operation!";
- public static final String SYSTEM_ADMINISTRATOR_IS_NOT_ALLOWED_TO_PERFORM_THIS_OPERATION = "System administrator is not allowed to perform this operation!";
- public static final String DEVICE_WITH_REQUESTED_ID_NOT_FOUND = "Device with requested id wasn't found!";
-
- private final SharedPluginProcessingContext pluginCtx;
- private final Optional securityCtx;
-
- public PluginProcessingContext(SharedPluginProcessingContext pluginCtx, PluginApiCallSecurityContext securityCtx) {
- super();
- this.pluginCtx = pluginCtx;
- this.securityCtx = Optional.ofNullable(securityCtx);
- }
-
- public void persistError(String method, Exception e) {
- pluginCtx.persistError(method, e);
- }
-
- @Override
- public void sendPluginRpcMsg(RpcMsg msg) {
- //ToDO is this a cluster messsage?
-// this.pluginCtx.rpcService.tell(new PluginRpcMsg(pluginCtx.tenantId, pluginCtx.pluginId, msg));
- }
-
- @Override
- public void send(PluginWebsocketMsg> wsMsg) throws IOException {
- pluginCtx.msgEndpoint.send(wsMsg);
- }
-
- @Override
- public void close(PluginWebsocketSessionRef sessionRef) throws IOException {
- pluginCtx.msgEndpoint.close(sessionRef);
- }
-
- @Override
- public void saveAttributes(final TenantId tenantId, final EntityId entityId, final String scope, final List attributes, final PluginCallback callback) {
- validate(entityId, new ValidationCallback(callback, ctx -> {
- ListenableFuture> futures = pluginCtx.attributesService.save(entityId, scope, attributes);
- Futures.addCallback(futures, getListCallback(callback, v -> {
- if (entityId.getEntityType() == EntityType.DEVICE) {
- onDeviceAttributesChanged(tenantId, new DeviceId(entityId.getId()), scope, attributes);
- }
- return null;
- }), executor);
- }));
- }
-
- @Override
- public void removeAttributes(final TenantId tenantId, final EntityId entityId, final String scope, final List keys, final PluginCallback callback) {
- validate(entityId, new ValidationCallback(callback, ctx -> {
- ListenableFuture> futures = pluginCtx.attributesService.removeAll(entityId, scope, keys);
- Futures.addCallback(futures, getCallback(callback, v -> null), executor);
- if (entityId.getEntityType() == EntityType.DEVICE) {
- onDeviceAttributesDeleted(tenantId, new DeviceId(entityId.getId()), keys.stream().map(key -> new AttributeKey(scope, key)).collect(Collectors.toSet()));
- }
- }));
- }
-
- @Override
- public void loadAttribute(EntityId entityId, String attributeType, String attributeKey, final PluginCallback> callback) {
- validate(entityId, new ValidationCallback(callback, ctx -> {
- ListenableFuture> future = pluginCtx.attributesService.find(entityId, attributeType, attributeKey);
- Futures.addCallback(future, getCallback(callback, v -> v), executor);
- }));
- }
-
- @Override
- public void loadAttributes(EntityId entityId, String attributeType, Collection attributeKeys, final PluginCallback> callback) {
- validate(entityId, new ValidationCallback(callback, ctx -> {
- ListenableFuture> future = pluginCtx.attributesService.find(entityId, attributeType, attributeKeys);
- Futures.addCallback(future, getCallback(callback, v -> v), executor);
- }));
- }
-
- @Override
- public void loadAttributes(EntityId entityId, String attributeType, PluginCallback> callback) {
- validate(entityId, new ValidationCallback(callback, ctx -> {
- ListenableFuture> future = pluginCtx.attributesService.findAll(entityId, attributeType);
- Futures.addCallback(future, getCallback(callback, v -> v), executor);
- }));
- }
-
- @Override
- public void loadAttributes(final EntityId entityId, final Collection attributeTypes, final PluginCallback> callback) {
- validate(entityId, new ValidationCallback(callback, ctx -> {
- List>> futures = new ArrayList<>();
- attributeTypes.forEach(attributeType -> futures.add(pluginCtx.attributesService.findAll(entityId, attributeType)));
- convertFuturesAndAddCallback(callback, futures);
- }));
- }
-
- @Override
- public void loadAttributes(final EntityId entityId, final Collection attributeTypes, final Collection attributeKeys, final PluginCallback> callback) {
- validate(entityId, new ValidationCallback(callback, ctx -> {
- List>> futures = new ArrayList<>();
- attributeTypes.forEach(attributeType -> futures.add(pluginCtx.attributesService.find(entityId, attributeType, attributeKeys)));
- convertFuturesAndAddCallback(callback, futures);
- }));
- }
-
- @Override
- public void saveTsData(final EntityId entityId, final TsKvEntry entry, final PluginCallback callback) {
- validate(entityId, new ValidationCallback(callback, ctx -> {
- ListenableFuture> rsListFuture = pluginCtx.tsService.save(entityId, entry);
- Futures.addCallback(rsListFuture, getListCallback(callback, v -> null), executor);
- }));
- }
-
- @Override
- public void saveTsData(final EntityId entityId, final List entries, final PluginCallback callback) {
- saveTsData(entityId, entries, 0L, callback);
- }
-
- @Override
- public void saveTsData(final EntityId entityId, final List entries, long ttl, final PluginCallback callback) {
- validate(entityId, new ValidationCallback(callback, ctx -> {
- ListenableFuture> rsListFuture = pluginCtx.tsService.save(entityId, entries, ttl);
- Futures.addCallback(rsListFuture, getListCallback(callback, v -> null), executor);
- }));
- }
-
-
- @Override
- public void loadTimeseries(final EntityId entityId, final List queries, final PluginCallback> callback) {
- validate(entityId, new ValidationCallback(callback, ctx -> {
- ListenableFuture> future = pluginCtx.tsService.findAll(entityId, queries);
- Futures.addCallback(future, getCallback(callback, v -> v), executor);
- }));
- }
-
- @Override
- public void loadLatestTimeseries(final EntityId entityId, final PluginCallback> callback) {
- validate(entityId, new ValidationCallback(callback, ctx -> {
- ListenableFuture> future = pluginCtx.tsService.findAllLatest(entityId);
- Futures.addCallback(future, getCallback(callback, v -> v), executor);
- }));
- }
-
- @Override
- public void logAttributesUpdated(PluginApiCallSecurityContext ctx, EntityId entityId, String attributeType,
- List attributes, Exception e) {
- pluginCtx.auditLogService.logEntityAction(
- ctx.getTenantId(),
- ctx.getCustomerId(),
- ctx.getUserId(),
- ctx.getUserName(),
- (UUIDBased & EntityId)entityId,
- null,
- ActionType.ATTRIBUTES_UPDATED,
- e,
- attributeType,
- attributes);
- }
-
- @Override
- public void logAttributesDeleted(PluginApiCallSecurityContext ctx, EntityId entityId, String attributeType, List keys, Exception e) {
- pluginCtx.auditLogService.logEntityAction(
- ctx.getTenantId(),
- ctx.getCustomerId(),
- ctx.getUserId(),
- ctx.getUserName(),
- (UUIDBased & EntityId)entityId,
- null,
- ActionType.ATTRIBUTES_DELETED,
- e,
- attributeType,
- keys);
- }
-
- @Override
- public void logAttributesRead(PluginApiCallSecurityContext ctx, EntityId entityId, String attributeType, List keys, Exception e) {
- pluginCtx.auditLogService.logEntityAction(
- ctx.getTenantId(),
- ctx.getCustomerId(),
- ctx.getUserId(),
- ctx.getUserName(),
- (UUIDBased & EntityId)entityId,
- null,
- ActionType.ATTRIBUTES_READ,
- e,
- attributeType,
- keys);
- }
-
- @Override
- public void loadLatestTimeseries(final EntityId entityId, final Collection keys, final PluginCallback> callback) {
- validate(entityId, new ValidationCallback(callback, ctx -> {
- ListenableFuture> rsListFuture = pluginCtx.tsService.findLatest(entityId, keys);
- Futures.addCallback(rsListFuture, getCallback(callback, v -> v), executor);
- }));
- }
-
- @Override
- public void reply(PluginToRuleMsg> msg) {
- pluginCtx.parentActor.tell(msg, ActorRef.noSender());
- }
-
- @Override
- public PluginId getPluginId() {
- return pluginCtx.pluginId;
- }
-
- @Override
- public Optional getSecurityCtx() {
- return securityCtx;
- }
-
- private void onDeviceAttributesDeleted(TenantId tenantId, DeviceId deviceId, Set keys) {
- pluginCtx.toDeviceActor(DeviceAttributesEventNotificationMsg.onDelete(tenantId, deviceId, keys));
- }
-
- private void onDeviceAttributesChanged(TenantId tenantId, DeviceId deviceId, String scope, List values) {
- pluginCtx.toDeviceActor(DeviceAttributesEventNotificationMsg.onUpdate(tenantId, deviceId, scope, values));
- }
-
- private FutureCallback> getListCallback(final PluginCallback callback, Function, R> transformer) {
- return new FutureCallback>() {
- @Override
- public void onSuccess(@Nullable List result) {
- pluginCtx.self().tell(PluginCallbackMessage.onSuccess(callback, transformer.apply(result)), ActorRef.noSender());
- }
-
- @Override
- public void onFailure(Throwable t) {
- if (t instanceof Exception) {
- pluginCtx.self().tell(PluginCallbackMessage.onError(callback, (Exception) t), ActorRef.noSender());
- } else {
- log.error("Critical error: {}", t.getMessage(), t);
- }
- }
- };
- }
-
- private FutureCallback getCallback(final PluginCallback callback, Function transformer) {
- return new FutureCallback() {
- @Override
- public void onSuccess(@Nullable R result) {
- try {
- pluginCtx.self().tell(PluginCallbackMessage.onSuccess(callback, transformer.apply(result)), ActorRef.noSender());
- } catch (Exception e) {
- pluginCtx.self().tell(PluginCallbackMessage.onError(callback, e), ActorRef.noSender());
- }
- }
-
- @Override
- public void onFailure(Throwable t) {
- if (t instanceof Exception) {
- pluginCtx.self().tell(PluginCallbackMessage.onError(callback, (Exception) t), ActorRef.noSender());
- } else {
- log.error("Critical error: {}", t.getMessage(), t);
- }
- }
- };
- }
-
- @Override
- public void checkAccess(DeviceId deviceId, PluginCallback callback) {
- validate(deviceId, new ValidationCallback(callback, ctx -> callback.onSuccess(ctx, null)));
- }
-
- private void validate(EntityId entityId, ValidationCallback callback) {
- if (securityCtx.isPresent()) {
- final PluginApiCallSecurityContext ctx = securityCtx.get();
- switch (entityId.getEntityType()) {
- case DEVICE:
- validateDevice(ctx, entityId, callback);
- return;
- case ASSET:
- validateAsset(ctx, entityId, callback);
- return;
- case RULE:
- validateRule(ctx, entityId, callback);
- return;
- case RULE_CHAIN:
- validateRuleChain(ctx, entityId, callback);
- return;
- case PLUGIN:
- validatePlugin(ctx, entityId, callback);
- return;
- case CUSTOMER:
- validateCustomer(ctx, entityId, callback);
- return;
- case TENANT:
- validateTenant(ctx, entityId, callback);
- return;
- default:
- //TODO: add support of other entities
- throw new IllegalStateException("Not Implemented!");
- }
- } else {
- callback.onSuccess(this, ValidationResult.ok(null));
- }
- }
-
- private void validateDevice(final PluginApiCallSecurityContext ctx, EntityId entityId, ValidationCallback callback) {
- if (ctx.isSystemAdmin()) {
- callback.onSuccess(this, ValidationResult.accessDenied(SYSTEM_ADMINISTRATOR_IS_NOT_ALLOWED_TO_PERFORM_THIS_OPERATION));
- } else {
- ListenableFuture deviceFuture = pluginCtx.deviceService.findDeviceByIdAsync(new DeviceId(entityId.getId()));
- Futures.addCallback(deviceFuture, getCallback(callback, device -> {
- if (device == null) {
- return ValidationResult.entityNotFound(DEVICE_WITH_REQUESTED_ID_NOT_FOUND);
- } else {
- if (!device.getTenantId().equals(ctx.getTenantId())) {
- return ValidationResult.accessDenied("Device doesn't belong to the current Tenant!");
- } else if (ctx.isCustomerUser() && !device.getCustomerId().equals(ctx.getCustomerId())) {
- return ValidationResult.accessDenied("Device doesn't belong to the current Customer!");
- } else {
- return ValidationResult.ok(null);
- }
- }
- }));
- }
- }
-
- private void validateAsset(final PluginApiCallSecurityContext ctx, EntityId entityId, ValidationCallback callback) {
- if (ctx.isSystemAdmin()) {
- callback.onSuccess(this, ValidationResult.accessDenied(SYSTEM_ADMINISTRATOR_IS_NOT_ALLOWED_TO_PERFORM_THIS_OPERATION));
- } else {
- ListenableFuture assetFuture = pluginCtx.assetService.findAssetByIdAsync(new AssetId(entityId.getId()));
- Futures.addCallback(assetFuture, getCallback(callback, asset -> {
- if (asset == null) {
- return ValidationResult.entityNotFound("Asset with requested id wasn't found!");
- } else {
- if (!asset.getTenantId().equals(ctx.getTenantId())) {
- return ValidationResult.accessDenied("Asset doesn't belong to the current Tenant!");
- } else if (ctx.isCustomerUser() && !asset.getCustomerId().equals(ctx.getCustomerId())) {
- return ValidationResult.accessDenied("Asset doesn't belong to the current Customer!");
- } else {
- return ValidationResult.ok(null);
- }
- }
- }));
- }
- }
-
- private void validateRule(final PluginApiCallSecurityContext ctx, EntityId entityId, ValidationCallback callback) {
- if (ctx.isCustomerUser()) {
- callback.onSuccess(this, ValidationResult.accessDenied(CUSTOMER_USER_IS_NOT_ALLOWED_TO_PERFORM_THIS_OPERATION));
- } else {
- ListenableFuture ruleFuture = pluginCtx.ruleService.findRuleByIdAsync(new RuleId(entityId.getId()));
- Futures.addCallback(ruleFuture, getCallback(callback, rule -> {
- if (rule == null) {
- return ValidationResult.entityNotFound("Rule with requested id wasn't found!");
- } else {
- if (ctx.isTenantAdmin() && !rule.getTenantId().equals(ctx.getTenantId())) {
- return ValidationResult.accessDenied("Rule doesn't belong to the current Tenant!");
- } else if (ctx.isSystemAdmin() && !rule.getTenantId().isNullUid()) {
- return ValidationResult.accessDenied("Rule is not in system scope!");
- } else {
- return ValidationResult.ok(null);
- }
- }
- }));
- }
- }
-
- private void validateRuleChain(final PluginApiCallSecurityContext ctx, EntityId entityId, ValidationCallback callback) {
- if (ctx.isCustomerUser()) {
- callback.onSuccess(this, ValidationResult.accessDenied(CUSTOMER_USER_IS_NOT_ALLOWED_TO_PERFORM_THIS_OPERATION));
- } else {
- ListenableFuture ruleChainFuture = pluginCtx.ruleChainService.findRuleChainByIdAsync(new RuleChainId(entityId.getId()));
- Futures.addCallback(ruleChainFuture, getCallback(callback, ruleChain -> {
- if (ruleChain == null) {
- return ValidationResult.entityNotFound("Rule chain with requested id wasn't found!");
- } else {
- if (ctx.isTenantAdmin() && !ruleChain.getTenantId().equals(ctx.getTenantId())) {
- return ValidationResult.accessDenied("Rule chain doesn't belong to the current Tenant!");
- } else if (ctx.isSystemAdmin() && !ruleChain.getTenantId().isNullUid()) {
- return ValidationResult.accessDenied("Rule chain is not in system scope!");
- } else {
- return ValidationResult.ok(null);
- }
- }
- }));
- }
- }
-
-
- private void validatePlugin(final PluginApiCallSecurityContext ctx, EntityId entityId, ValidationCallback callback) {
- if (ctx.isCustomerUser()) {
- callback.onSuccess(this, ValidationResult.accessDenied(CUSTOMER_USER_IS_NOT_ALLOWED_TO_PERFORM_THIS_OPERATION));
- } else {
- ListenableFuture pluginFuture = pluginCtx.pluginService.findPluginByIdAsync(new PluginId(entityId.getId()));
- Futures.addCallback(pluginFuture, getCallback(callback, plugin -> {
- if (plugin == null) {
- return ValidationResult.entityNotFound("Plugin with requested id wasn't found!");
- } else {
- if (ctx.isTenantAdmin() && !plugin.getTenantId().equals(ctx.getTenantId())) {
- return ValidationResult.accessDenied("Plugin doesn't belong to the current Tenant!");
- } else if (ctx.isSystemAdmin() && !plugin.getTenantId().isNullUid()) {
- return ValidationResult.accessDenied("Plugin is not in system scope!");
- } else {
- return ValidationResult.ok(null);
- }
- }
- }));
- }
- }
-
- private void validateCustomer(final PluginApiCallSecurityContext ctx, EntityId entityId, ValidationCallback callback) {
- if (ctx.isSystemAdmin()) {
- callback.onSuccess(this, ValidationResult.accessDenied(SYSTEM_ADMINISTRATOR_IS_NOT_ALLOWED_TO_PERFORM_THIS_OPERATION));
- } else {
- ListenableFuture customerFuture = pluginCtx.customerService.findCustomerByIdAsync(new CustomerId(entityId.getId()));
- Futures.addCallback(customerFuture, getCallback(callback, customer -> {
- if (customer == null) {
- return ValidationResult.entityNotFound("Customer with requested id wasn't found!");
- } else {
- if (!customer.getTenantId().equals(ctx.getTenantId())) {
- return ValidationResult.accessDenied("Customer doesn't belong to the current Tenant!");
- } else if (ctx.isCustomerUser() && !customer.getId().equals(ctx.getCustomerId())) {
- return ValidationResult.accessDenied("Customer doesn't relate to the currently authorized customer user!");
- } else {
- return ValidationResult.ok(null);
- }
- }
- }));
- }
- }
-
- private void validateTenant(final PluginApiCallSecurityContext ctx, EntityId entityId, ValidationCallback callback) {
- if (ctx.isCustomerUser()) {
- callback.onSuccess(this, ValidationResult.accessDenied(CUSTOMER_USER_IS_NOT_ALLOWED_TO_PERFORM_THIS_OPERATION));
- } else if (ctx.isSystemAdmin()) {
- callback.onSuccess(this, ValidationResult.ok(null));
- } else {
- ListenableFuture tenantFuture = pluginCtx.tenantService.findTenantByIdAsync(new TenantId(entityId.getId()));
- Futures.addCallback(tenantFuture, getCallback(callback, tenant -> {
- if (tenant == null) {
- return ValidationResult.entityNotFound("Tenant with requested id wasn't found!");
- } else if (!tenant.getId().equals(ctx.getTenantId())) {
- return ValidationResult.accessDenied("Tenant doesn't relate to the currently authorized user!");
- } else {
- return ValidationResult.ok(null);
- }
- }));
- }
- }
-
- @Override
- public ListenableFuture> findByFromAndType(EntityId from, String relationType) {
- return this.pluginCtx.relationService.findByFromAndTypeAsync(from, relationType, RelationTypeGroup.COMMON);
- }
-
- @Override
- public ListenableFuture> findByToAndType(EntityId from, String relationType) {
- return this.pluginCtx.relationService.findByToAndTypeAsync(from, relationType, RelationTypeGroup.COMMON);
- }
-
- @Override
- public Optional resolve(EntityId entityId) {
- return pluginCtx.routingService.resolveById(entityId);
- }
-
- @Override
- public void getDevice(DeviceId deviceId, PluginCallback callback) {
- ListenableFuture deviceFuture = pluginCtx.deviceService.findDeviceByIdAsync(deviceId);
- Futures.addCallback(deviceFuture, getCallback(callback, v -> v));
- }
-
- @Override
- public void getCustomerDevices(TenantId tenantId, CustomerId customerId, int limit, PluginCallback> callback) {
- //TODO: add caching here with async api.
- List devices = pluginCtx.deviceService.findDevicesByTenantIdAndCustomerId(tenantId, customerId, new TextPageLink(limit)).getData();
- pluginCtx.self().tell(PluginCallbackMessage.onSuccess(callback, devices), ActorRef.noSender());
- }
-
- @Override
- public void sendRpcRequest(ToDeviceRpcRequest msg) {
- pluginCtx.sendRpcRequest(msg);
- }
-
- @Override
- public void logRpcRequest(PluginApiCallSecurityContext ctx, DeviceId deviceId, ToDeviceRpcRequestBody body, boolean oneWay, Optional rpcError, Exception e) {
- String rpcErrorStr = "";
- if (rpcError.isPresent()) {
- rpcErrorStr = "RPC Error: " + rpcError.get().name();
- }
- String method = body.getMethod();
- String params = body.getParams();
- pluginCtx.auditLogService.logEntityAction(
- ctx.getTenantId(),
- ctx.getCustomerId(),
- ctx.getUserId(),
- ctx.getUserName(),
- deviceId,
- null,
- ActionType.RPC_CALL,
- e,
- rpcErrorStr,
- new Boolean(oneWay),
- method,
- params);
- }
-
- @Override
- public void scheduleTimeoutMsg(TimeoutMsg msg) {
- pluginCtx.scheduleTimeoutMsg(msg);
- }
-
-
- private void convertFuturesAndAddCallback(PluginCallback> callback, List>> futures) {
- ListenableFuture> future = Futures.transform(Futures.successfulAsList(futures),
- (Function super List>, ? extends List>) input -> {
- List result = new ArrayList<>();
- input.forEach(r -> result.addAll(r));
- return result;
- }, executor);
- Futures.addCallback(future, getCallback(callback, v -> v), executor);
- }
-}
diff --git a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginTerminationMsg.java b/application/src/main/java/org/thingsboard/server/actors/plugin/PluginTerminationMsg.java
deleted file mode 100644
index 99b1e64d0a..0000000000
--- a/application/src/main/java/org/thingsboard/server/actors/plugin/PluginTerminationMsg.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.actors.plugin;
-
-import org.thingsboard.server.actors.shared.ActorTerminationMsg;
-import org.thingsboard.server.common.data.id.PluginId;
-import org.thingsboard.server.common.data.id.SessionId;
-
-/**
- * @author Andrew Shvayka
- */
-public class PluginTerminationMsg extends ActorTerminationMsg {
-
- public PluginTerminationMsg(PluginId id) {
- super(id);
- }
-}
diff --git a/application/src/main/java/org/thingsboard/server/actors/plugin/RuleToPluginMsgWrapper.java b/application/src/main/java/org/thingsboard/server/actors/plugin/RuleToPluginMsgWrapper.java
deleted file mode 100644
index 4b2268cd57..0000000000
--- a/application/src/main/java/org/thingsboard/server/actors/plugin/RuleToPluginMsgWrapper.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.actors.plugin;
-
-import org.thingsboard.server.common.data.id.PluginId;
-import org.thingsboard.server.common.data.id.RuleId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.msg.aware.RuleAwareMsg;
-import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg;
-import org.thingsboard.server.extensions.api.plugins.msg.ToPluginActorMsg;
-
-public class RuleToPluginMsgWrapper implements ToPluginActorMsg, RuleAwareMsg {
-
- private final TenantId pluginTenantId;
- private final PluginId pluginId;
- private final TenantId ruleTenantId;
- private final RuleId ruleId;
- private final RuleToPluginMsg> msg;
-
- public RuleToPluginMsgWrapper(TenantId pluginTenantId, PluginId pluginId, TenantId ruleTenantId, RuleId ruleId, RuleToPluginMsg> msg) {
- super();
- this.pluginTenantId = pluginTenantId;
- this.pluginId = pluginId;
- this.ruleTenantId = ruleTenantId;
- this.ruleId = ruleId;
- this.msg = msg;
- }
-
- @Override
- public TenantId getPluginTenantId() {
- return pluginTenantId;
- }
-
- @Override
- public PluginId getPluginId() {
- return pluginId;
- }
-
- public TenantId getRuleTenantId() {
- return ruleTenantId;
- }
-
- @Override
- public RuleId getRuleId() {
- return ruleId;
- }
-
-
- public RuleToPluginMsg getMsg() {
- return msg;
- }
-
-}
diff --git a/application/src/main/java/org/thingsboard/server/actors/plugin/SharedPluginProcessingContext.java b/application/src/main/java/org/thingsboard/server/actors/plugin/SharedPluginProcessingContext.java
deleted file mode 100644
index c43d62d02b..0000000000
--- a/application/src/main/java/org/thingsboard/server/actors/plugin/SharedPluginProcessingContext.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.actors.plugin;
-
-import akka.actor.ActorRef;
-import lombok.extern.slf4j.Slf4j;
-import org.thingsboard.server.actors.ActorSystemContext;
-import org.thingsboard.server.common.data.id.DeviceId;
-import org.thingsboard.server.common.data.id.PluginId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.msg.TbActorMsg;
-import org.thingsboard.server.common.msg.cluster.ServerAddress;
-import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
-import org.thingsboard.server.common.msg.timeout.TimeoutMsg;
-import org.thingsboard.server.controller.plugin.PluginWebSocketMsgEndpoint;
-import org.thingsboard.server.dao.asset.AssetService;
-import org.thingsboard.server.dao.attributes.AttributesService;
-import org.thingsboard.server.dao.audit.AuditLogService;
-import org.thingsboard.server.dao.customer.CustomerService;
-import org.thingsboard.server.dao.device.DeviceService;
-import org.thingsboard.server.dao.plugin.PluginService;
-import org.thingsboard.server.dao.relation.RelationService;
-import org.thingsboard.server.dao.rule.RuleChainService;
-import org.thingsboard.server.dao.rule.RuleService;
-import org.thingsboard.server.dao.tenant.TenantService;
-import org.thingsboard.server.dao.timeseries.TimeseriesService;
-import org.thingsboard.server.extensions.api.device.DeviceAttributesEventNotificationMsg;
-import org.thingsboard.server.service.cluster.routing.ClusterRoutingService;
-import org.thingsboard.server.service.cluster.rpc.ClusterRpcService;
-import scala.concurrent.duration.Duration;
-
-import java.util.Optional;
-import java.util.concurrent.TimeUnit;
-import java.util.function.BiConsumer;
-
-@Slf4j
-public final class SharedPluginProcessingContext {
- final ActorRef parentActor;
- final ActorRef currentActor;
- final ActorSystemContext systemContext;
- final PluginWebSocketMsgEndpoint msgEndpoint;
- final AssetService assetService;
- final DeviceService deviceService;
- final RuleService ruleService;
- final RuleChainService ruleChainService;
- final PluginService pluginService;
- final CustomerService customerService;
- final TenantService tenantService;
- final TimeseriesService tsService;
- final AttributesService attributesService;
- final ClusterRpcService rpcService;
- final ClusterRoutingService routingService;
- final RelationService relationService;
- final AuditLogService auditLogService;
- final PluginId pluginId;
- final TenantId tenantId;
-
- public SharedPluginProcessingContext(ActorSystemContext sysContext, TenantId tenantId, PluginId pluginId,
- ActorRef parentActor, ActorRef self) {
- super();
- this.tenantId = tenantId;
- this.pluginId = pluginId;
- this.parentActor = parentActor;
- this.currentActor = self;
- this.systemContext = sysContext;
- this.msgEndpoint = sysContext.getWsMsgEndpoint();
- this.tsService = sysContext.getTsService();
- this.attributesService = sysContext.getAttributesService();
- this.assetService = sysContext.getAssetService();
- this.deviceService = sysContext.getDeviceService();
- this.rpcService = sysContext.getRpcService();
- this.routingService = sysContext.getRoutingService();
- this.ruleService = sysContext.getRuleService();
- this.ruleChainService = sysContext.getRuleChainService();
- this.pluginService = sysContext.getPluginService();
- this.customerService = sysContext.getCustomerService();
- this.tenantService = sysContext.getTenantService();
- this.relationService = sysContext.getRelationService();
- this.auditLogService = sysContext.getAuditLogService();
- }
-
- public PluginId getPluginId() {
- return pluginId;
- }
-
- public TenantId getPluginTenantId() {
- return tenantId;
- }
-
- public void toDeviceActor(DeviceAttributesEventNotificationMsg msg) {
- forward(msg.getDeviceId(), msg);
- }
-
- public void sendRpcRequest(ToDeviceRpcRequest msg) {
- log.trace("[{}] Forwarding msg {} to device actor!", pluginId, msg);
-// ToDeviceRpcRequestPluginMsg rpcMsg = new ToDeviceRpcRequestPluginMsg(pluginId, tenantId, msg);
-// forward(msg.getDeviceId(), rpcMsg, rpcService::tell);
- }
-
- private void forward(DeviceId deviceId, T msg) {
- Optional instance = routingService.resolveById(deviceId);
- if (instance.isPresent()) {
- log.trace("[{}] Forwarding msg {} to remote device actor!", pluginId, msg);
- rpcService.tell(systemContext.getEncodingService().convertToProtoDataMessage(instance.get(), msg));
- } else {
- log.trace("[{}] Forwarding msg {} to local device actor!", pluginId, msg);
- parentActor.tell(msg, ActorRef.noSender());
- }
- }
-
- public void scheduleTimeoutMsg(TimeoutMsg msg) {
- log.debug("Scheduling msg {} with delay {} ms", msg, msg.getTimeout());
- systemContext.getScheduler().scheduleOnce(
- Duration.create(msg.getTimeout(), TimeUnit.MILLISECONDS),
- currentActor,
- msg,
- systemContext.getActorSystem().dispatcher(),
- ActorRef.noSender());
-
- }
-
- public void persistError(String method, Exception e) {
- systemContext.persistError(tenantId, pluginId, method, e);
- }
-
- public ActorRef self() {
- return currentActor;
- }
-}
diff --git a/application/src/main/java/org/thingsboard/server/actors/plugin/TimeoutScheduler.java b/application/src/main/java/org/thingsboard/server/actors/plugin/TimeoutScheduler.java
deleted file mode 100644
index f504e3f8c3..0000000000
--- a/application/src/main/java/org/thingsboard/server/actors/plugin/TimeoutScheduler.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.actors.plugin;
-
-import akka.actor.ActorRef;
-
-/**
- * @author Andrew Shvayka
- */
-public interface TimeoutScheduler {
-
- void scheduleMsgWithDelay(Object msg, long delayInMs);
-
-}
diff --git a/application/src/main/java/org/thingsboard/server/actors/plugin/ValidationCallback.java b/application/src/main/java/org/thingsboard/server/actors/plugin/ValidationCallback.java
deleted file mode 100644
index 6e47e3550d..0000000000
--- a/application/src/main/java/org/thingsboard/server/actors/plugin/ValidationCallback.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.actors.plugin;
-
-import java.util.function.Consumer;
-import org.thingsboard.server.extensions.api.exception.AccessDeniedException;
-import org.thingsboard.server.extensions.api.exception.EntityNotFoundException;
-import org.thingsboard.server.extensions.api.exception.InternalErrorException;
-import org.thingsboard.server.extensions.api.exception.UnauthorizedException;
-import org.thingsboard.server.extensions.api.plugins.PluginCallback;
-import org.thingsboard.server.extensions.api.plugins.PluginContext;
-
-/**
- * Created by ashvayka on 21.02.17.
- */
-public class ValidationCallback implements PluginCallback {
-
- private final PluginCallback> callback;
- private final Consumer action;
-
- public ValidationCallback(PluginCallback> callback, Consumer action) {
- this.callback = callback;
- this.action = action;
- }
-
- @Override
- public void onSuccess(PluginContext ctx, ValidationResult result) {
- ValidationResultCode resultCode = result.getResultCode();
- if (resultCode == ValidationResultCode.OK) {
- action.accept(ctx);
- } else {
- Exception e;
- switch (resultCode) {
- case ENTITY_NOT_FOUND:
- e = new EntityNotFoundException(result.getMessage());
- break;
- case UNAUTHORIZED:
- e = new UnauthorizedException(result.getMessage());
- break;
- case ACCESS_DENIED:
- e = new AccessDeniedException(result.getMessage());
- break;
- case INTERNAL_ERROR:
- e = new InternalErrorException(result.getMessage());
- break;
- default:
- e = new UnauthorizedException("Permission denied.");
- break;
- }
- onFailure(ctx, e);
- }
- }
-
- @Override
- public void onFailure(PluginContext ctx, Exception e) {
- callback.onFailure(ctx, e);
- }
-}
diff --git a/application/src/main/java/org/thingsboard/server/actors/rpc/RpcManagerActor.java b/application/src/main/java/org/thingsboard/server/actors/rpc/RpcManagerActor.java
index c5c6553612..dcc6e5c161 100644
--- a/application/src/main/java/org/thingsboard/server/actors/rpc/RpcManagerActor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/rpc/RpcManagerActor.java
@@ -29,7 +29,11 @@ import org.thingsboard.server.common.msg.cluster.ServerAddress;
import org.thingsboard.server.gen.cluster.ClusterAPIProtos;
import org.thingsboard.server.service.cluster.discovery.ServerInstance;
-import java.util.*;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Queue;
+import java.util.UUID;
/**
* @author Andrew Shvayka
diff --git a/application/src/main/java/org/thingsboard/server/actors/rpc/RpcSessionTellMsg.java b/application/src/main/java/org/thingsboard/server/actors/rpc/RpcSessionTellMsg.java
index 858e3aa415..50db43f7fb 100644
--- a/application/src/main/java/org/thingsboard/server/actors/rpc/RpcSessionTellMsg.java
+++ b/application/src/main/java/org/thingsboard/server/actors/rpc/RpcSessionTellMsg.java
@@ -16,7 +16,6 @@
package org.thingsboard.server.actors.rpc;
import lombok.Data;
-import org.thingsboard.server.common.msg.cluster.ServerAddress;
import org.thingsboard.server.gen.cluster.ClusterAPIProtos;
/**
diff --git a/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java b/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java
index 85d1b545b3..6501fdc464 100644
--- a/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java
+++ b/application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java
@@ -17,8 +17,14 @@ package org.thingsboard.server.actors.ruleChain;
import akka.actor.ActorRef;
import com.datastax.driver.core.utils.UUIDs;
-import com.google.common.base.Function;
-import org.thingsboard.rule.engine.api.*;
+import org.thingsboard.rule.engine.api.ListeningExecutor;
+import org.thingsboard.rule.engine.api.MailService;
+import org.thingsboard.rule.engine.api.RuleEngineDeviceRpcRequest;
+import org.thingsboard.rule.engine.api.RuleEngineDeviceRpcResponse;
+import org.thingsboard.rule.engine.api.RuleEngineRpcService;
+import org.thingsboard.rule.engine.api.RuleEngineTelemetryService;
+import org.thingsboard.rule.engine.api.ScriptEngine;
+import org.thingsboard.rule.engine.api.TbContext;
import org.thingsboard.server.actors.ActorSystemContext;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.EntityId;
@@ -28,14 +34,12 @@ import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody;
import org.thingsboard.server.common.data.rule.RuleNode;
import org.thingsboard.server.common.msg.TbMsg;
import org.thingsboard.server.common.msg.TbMsgMetaData;
-import org.thingsboard.server.common.msg.cluster.ServerAddress;
import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
import org.thingsboard.server.dao.alarm.AlarmService;
import org.thingsboard.server.dao.asset.AssetService;
import org.thingsboard.server.dao.attributes.AttributesService;
import org.thingsboard.server.dao.customer.CustomerService;
import org.thingsboard.server.dao.device.DeviceService;
-import org.thingsboard.server.dao.plugin.PluginService;
import org.thingsboard.server.dao.relation.RelationService;
import org.thingsboard.server.dao.rule.RuleChainService;
import org.thingsboard.server.dao.timeseries.TimeseriesService;
@@ -44,7 +48,6 @@ import org.thingsboard.server.service.script.NashornJsEngine;
import scala.concurrent.duration.Duration;
import java.util.Collections;
-import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
@@ -167,11 +170,6 @@ class DefaultTbContext implements TbContext {
return mainCtx.getUserService();
}
- @Override
- public PluginService getPluginService() {
- return mainCtx.getPluginService();
- }
-
@Override
public AssetService getAssetService() {
return mainCtx.getAssetService();
diff --git a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleChainManagerActor.java b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleChainManagerActor.java
index a67b4f9068..47ee796141 100644
--- a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleChainManagerActor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleChainManagerActor.java
@@ -18,10 +18,8 @@ package org.thingsboard.server.actors.ruleChain;
import akka.actor.ActorRef;
import org.thingsboard.server.actors.ActorSystemContext;
import org.thingsboard.server.actors.service.ContextAwareActor;
-import org.thingsboard.server.actors.shared.plugin.PluginManager;
import org.thingsboard.server.actors.shared.rulechain.RuleChainManager;
import org.thingsboard.server.common.data.id.EntityId;
-import org.thingsboard.server.common.data.id.PluginId;
import org.thingsboard.server.common.data.id.RuleChainId;
import org.thingsboard.server.dao.rule.RuleChainService;
@@ -33,7 +31,7 @@ public abstract class RuleChainManagerActor extends ContextAwareActor {
protected final RuleChainManager ruleChainManager;
protected final RuleChainService ruleChainService;
- public RuleChainManagerActor(ActorSystemContext systemContext, RuleChainManager ruleChainManager, PluginManager pluginManager) {
+ public RuleChainManagerActor(ActorSystemContext systemContext, RuleChainManager ruleChainManager) {
super(systemContext);
this.ruleChainManager = ruleChainManager;
this.ruleChainService = systemContext.getRuleChainService();
diff --git a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleChainToRuleChainMsg.java b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleChainToRuleChainMsg.java
index 086164680b..8b13747fb6 100644
--- a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleChainToRuleChainMsg.java
+++ b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleChainToRuleChainMsg.java
@@ -16,7 +16,6 @@
package org.thingsboard.server.actors.ruleChain;
import lombok.Data;
-import org.thingsboard.rule.engine.api.TbContext;
import org.thingsboard.server.common.data.id.RuleChainId;
import org.thingsboard.server.common.msg.MsgType;
import org.thingsboard.server.common.msg.TbActorMsg;
diff --git a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java
index f23ba6b9e5..4f985dc365 100644
--- a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeActorMessageProcessor.java
@@ -21,7 +21,6 @@ import akka.event.LoggingAdapter;
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.server.actors.ActorSystemContext;
import org.thingsboard.server.actors.shared.ComponentMsgProcessor;
import org.thingsboard.server.common.data.id.RuleChainId;
@@ -32,8 +31,6 @@ import org.thingsboard.server.common.data.rule.RuleNode;
import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
import org.thingsboard.server.dao.rule.RuleChainService;
-import java.util.concurrent.ExecutionException;
-
/**
* @author Andrew Shvayka
*/
diff --git a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeToSelfMsg.java b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeToSelfMsg.java
index 5c5af42207..d1bac4d7c5 100644
--- a/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeToSelfMsg.java
+++ b/application/src/main/java/org/thingsboard/server/actors/ruleChain/RuleNodeToSelfMsg.java
@@ -16,7 +16,6 @@
package org.thingsboard.server.actors.ruleChain;
import lombok.Data;
-import org.thingsboard.server.common.data.id.RuleNodeId;
import org.thingsboard.server.common.msg.MsgType;
import org.thingsboard.server.common.msg.TbActorMsg;
import org.thingsboard.server.common.msg.TbMsg;
diff --git a/application/src/main/java/org/thingsboard/server/actors/service/ActorService.java b/application/src/main/java/org/thingsboard/server/actors/service/ActorService.java
index 5a097df4f1..f7e80e4baa 100644
--- a/application/src/main/java/org/thingsboard/server/actors/service/ActorService.java
+++ b/application/src/main/java/org/thingsboard/server/actors/service/ActorService.java
@@ -15,16 +15,17 @@
*/
package org.thingsboard.server.actors.service;
-import org.thingsboard.server.common.data.id.*;
+import org.thingsboard.server.common.data.id.DeviceId;
+import org.thingsboard.server.common.data.id.EntityId;
+import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
-import org.thingsboard.server.common.msg.TbMsg;
import org.thingsboard.server.common.msg.cluster.SendToClusterMsg;
import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg;
import org.thingsboard.server.common.transport.SessionMsgProcessor;
import org.thingsboard.server.service.cluster.discovery.DiscoveryServiceListener;
import org.thingsboard.server.service.cluster.rpc.RpcMsgListener;
-public interface ActorService extends SessionMsgProcessor, WebSocketMsgProcessor, RestMsgProcessor, RpcMsgListener, DiscoveryServiceListener {
+public interface ActorService extends SessionMsgProcessor, RpcMsgListener, DiscoveryServiceListener {
void onEntityStateChange(TenantId tenantId, EntityId entityId, ComponentLifecycleEvent state);
diff --git a/application/src/main/java/org/thingsboard/server/actors/service/ContextBasedCreator.java b/application/src/main/java/org/thingsboard/server/actors/service/ContextBasedCreator.java
index e6d7ff85d1..b5f1f6102b 100644
--- a/application/src/main/java/org/thingsboard/server/actors/service/ContextBasedCreator.java
+++ b/application/src/main/java/org/thingsboard/server/actors/service/ContextBasedCreator.java
@@ -15,9 +15,8 @@
*/
package org.thingsboard.server.actors.service;
-import org.thingsboard.server.actors.ActorSystemContext;
-
import akka.japi.Creator;
+import org.thingsboard.server.actors.ActorSystemContext;
public abstract class ContextBasedCreator implements Creator {
diff --git a/application/src/main/java/org/thingsboard/server/actors/service/DefaultActorService.java b/application/src/main/java/org/thingsboard/server/actors/service/DefaultActorService.java
index c80e913ba5..82ca95f51d 100644
--- a/application/src/main/java/org/thingsboard/server/actors/service/DefaultActorService.java
+++ b/application/src/main/java/org/thingsboard/server/actors/service/DefaultActorService.java
@@ -23,6 +23,8 @@ import com.google.protobuf.ByteString;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.thingsboard.rule.engine.api.msg.DeviceCredentialsUpdateNotificationMsg;
+import org.thingsboard.rule.engine.api.msg.DeviceNameOrTypeUpdateMsg;
import org.thingsboard.server.actors.ActorSystemContext;
import org.thingsboard.server.actors.app.AppActor;
import org.thingsboard.server.actors.rpc.RpcBroadcastMsg;
@@ -30,7 +32,9 @@ import org.thingsboard.server.actors.rpc.RpcManagerActor;
import org.thingsboard.server.actors.rpc.RpcSessionCreateRequestMsg;
import org.thingsboard.server.actors.session.SessionManagerActor;
import org.thingsboard.server.actors.stats.StatsActor;
-import org.thingsboard.server.common.data.id.*;
+import org.thingsboard.server.common.data.id.DeviceId;
+import org.thingsboard.server.common.data.id.EntityId;
+import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
import org.thingsboard.server.common.msg.TbActorMsg;
import org.thingsboard.server.common.msg.aware.SessionAwareMsg;
@@ -38,12 +42,8 @@ import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
import org.thingsboard.server.common.msg.cluster.SendToClusterMsg;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
import org.thingsboard.server.common.msg.cluster.ToAllNodesMsg;
-import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg;
-import org.thingsboard.server.extensions.api.device.DeviceNameOrTypeUpdateMsg;
import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg;
-import org.thingsboard.server.extensions.api.device.DeviceCredentialsUpdateNotificationMsg;
-import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg;
-import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg;
+import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg;
import org.thingsboard.server.gen.cluster.ClusterAPIProtos;
import org.thingsboard.server.service.cluster.discovery.DiscoveryService;
import org.thingsboard.server.service.cluster.discovery.ServerInstance;
@@ -91,7 +91,7 @@ public class DefaultActorService implements ActorService {
@PostConstruct
public void initActorSystem() {
- log.info("Initializing Actor system. {}", actorContext.getRuleService());
+ log.info("Initializing Actor system. {}", actorContext.getRuleChainService());
actorContext.setActorService(this);
system = ActorSystem.create(ACTOR_SYSTEM_NAME, actorContext.getConfig());
actorContext.setActorSystem(system);
@@ -137,19 +137,6 @@ public class DefaultActorService implements ActorService {
sessionManagerActor.tell(msg, ActorRef.noSender());
}
- @Override
- public void process(PluginWebsocketMsg> msg) {
- log.debug("Processing websocket msg: {}", msg);
- appActor.tell(msg, ActorRef.noSender());
- }
-
- @Override
- public void process(PluginRestMsg msg) {
- log.debug("Processing rest msg: {}", msg);
- appActor.tell(msg, ActorRef.noSender());
- }
-
-
@Override
public void onServerAdded(ServerInstance server) {
log.trace("Processing onServerAdded msg: {}", server);
@@ -263,4 +250,5 @@ public class DefaultActorService implements ActorService {
public void onBroadcastMsg(RpcBroadcastMsg msg) {
rpcManagerActor.tell(msg, ActorRef.noSender());
}
+
}
diff --git a/application/src/main/java/org/thingsboard/server/actors/service/RestMsgProcessor.java b/application/src/main/java/org/thingsboard/server/actors/service/RestMsgProcessor.java
deleted file mode 100644
index 35686189af..0000000000
--- a/application/src/main/java/org/thingsboard/server/actors/service/RestMsgProcessor.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.actors.service;
-
-import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg;
-
-public interface RestMsgProcessor {
-
- void process(PluginRestMsg msg);
-
-}
diff --git a/application/src/main/java/org/thingsboard/server/actors/service/WebSocketMsgProcessor.java b/application/src/main/java/org/thingsboard/server/actors/service/WebSocketMsgProcessor.java
deleted file mode 100644
index d0c9ca6202..0000000000
--- a/application/src/main/java/org/thingsboard/server/actors/service/WebSocketMsgProcessor.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.actors.service;
-
-import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg;
-
-public interface WebSocketMsgProcessor {
-
- void process(PluginWebsocketMsg> msg);
-
-}
diff --git a/application/src/main/java/org/thingsboard/server/actors/session/ASyncMsgProcessor.java b/application/src/main/java/org/thingsboard/server/actors/session/ASyncMsgProcessor.java
index 83d56e0bac..70534ae8a8 100644
--- a/application/src/main/java/org/thingsboard/server/actors/session/ASyncMsgProcessor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/session/ASyncMsgProcessor.java
@@ -15,18 +15,26 @@
*/
package org.thingsboard.server.actors.session;
+import akka.actor.ActorContext;
+import akka.event.LoggingAdapter;
import org.thingsboard.server.actors.ActorSystemContext;
import org.thingsboard.server.actors.shared.SessionTimeoutMsg;
import org.thingsboard.server.common.data.id.SessionId;
import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
-import org.thingsboard.server.common.msg.core.*;
+import org.thingsboard.server.common.msg.core.AttributesSubscribeMsg;
+import org.thingsboard.server.common.msg.core.ResponseMsg;
+import org.thingsboard.server.common.msg.core.RpcSubscribeMsg;
import org.thingsboard.server.common.msg.core.SessionCloseMsg;
+import org.thingsboard.server.common.msg.core.SessionOpenMsg;
import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
-import org.thingsboard.server.common.msg.session.*;
-
-import akka.actor.ActorContext;
-import akka.event.LoggingAdapter;
+import org.thingsboard.server.common.msg.session.BasicSessionActorToAdaptorMsg;
+import org.thingsboard.server.common.msg.session.FromDeviceMsg;
+import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg;
+import org.thingsboard.server.common.msg.session.SessionMsgType;
+import org.thingsboard.server.common.msg.session.SessionType;
+import org.thingsboard.server.common.msg.session.ToDeviceMsg;
+import org.thingsboard.server.common.msg.session.TransportToDeviceSessionActorMsg;
import org.thingsboard.server.common.msg.session.ex.SessionException;
import java.util.HashMap;
diff --git a/application/src/main/java/org/thingsboard/server/actors/session/AbstractSessionActorMsgProcessor.java b/application/src/main/java/org/thingsboard/server/actors/session/AbstractSessionActorMsgProcessor.java
index 42e127e5d4..469cda9c5f 100644
--- a/application/src/main/java/org/thingsboard/server/actors/session/AbstractSessionActorMsgProcessor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/session/AbstractSessionActorMsgProcessor.java
@@ -15,6 +15,9 @@
*/
package org.thingsboard.server.actors.session;
+import akka.actor.ActorContext;
+import akka.actor.ActorRef;
+import akka.event.LoggingAdapter;
import org.thingsboard.server.actors.ActorSystemContext;
import org.thingsboard.server.actors.shared.AbstractContextAwareMsgProcessor;
import org.thingsboard.server.actors.shared.SessionTimeoutMsg;
@@ -25,13 +28,15 @@ import org.thingsboard.server.common.msg.cluster.SendToClusterMsg;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
import org.thingsboard.server.common.msg.device.BasicDeviceToDeviceActorMsg;
import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
-import org.thingsboard.server.common.msg.session.*;
+import org.thingsboard.server.common.msg.session.AdaptorToSessionActorMsg;
+import org.thingsboard.server.common.msg.session.FromDeviceMsg;
+import org.thingsboard.server.common.msg.session.SessionContext;
+import org.thingsboard.server.common.msg.session.SessionCtrlMsg;
+import org.thingsboard.server.common.msg.session.SessionType;
+import org.thingsboard.server.common.msg.session.ToDeviceMsg;
+import org.thingsboard.server.common.msg.session.TransportToDeviceSessionActorMsg;
import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg;
-import akka.actor.ActorContext;
-import akka.actor.ActorRef;
-import akka.event.LoggingAdapter;
-
import java.util.Optional;
abstract class AbstractSessionActorMsgProcessor extends AbstractContextAwareMsgProcessor {
diff --git a/application/src/main/java/org/thingsboard/server/actors/session/SessionActor.java b/application/src/main/java/org/thingsboard/server/actors/session/SessionActor.java
index f67d46b61b..05926c1825 100644
--- a/application/src/main/java/org/thingsboard/server/actors/session/SessionActor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/session/SessionActor.java
@@ -17,6 +17,8 @@ package org.thingsboard.server.actors.session;
import akka.actor.OneForOneStrategy;
import akka.actor.SupervisorStrategy;
+import akka.event.Logging;
+import akka.event.LoggingAdapter;
import org.thingsboard.server.actors.ActorSystemContext;
import org.thingsboard.server.actors.service.ContextAwareActor;
import org.thingsboard.server.actors.service.ContextBasedCreator;
@@ -25,14 +27,11 @@ import org.thingsboard.server.common.data.id.SessionId;
import org.thingsboard.server.common.msg.TbActorMsg;
import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
import org.thingsboard.server.common.msg.core.ActorSystemToDeviceSessionActorMsg;
-import org.thingsboard.server.common.msg.session.TransportToDeviceSessionActorMsg;
import org.thingsboard.server.common.msg.session.SessionCtrlMsg;
import org.thingsboard.server.common.msg.session.SessionMsg;
import org.thingsboard.server.common.msg.session.SessionType;
+import org.thingsboard.server.common.msg.session.TransportToDeviceSessionActorMsg;
import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg;
-
-import akka.event.Logging;
-import akka.event.LoggingAdapter;
import scala.concurrent.duration.Duration;
public class SessionActor extends ContextAwareActor {
diff --git a/application/src/main/java/org/thingsboard/server/actors/session/SessionManagerActor.java b/application/src/main/java/org/thingsboard/server/actors/session/SessionManagerActor.java
index 1f8bb6defd..624a9f49c7 100644
--- a/application/src/main/java/org/thingsboard/server/actors/session/SessionManagerActor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/session/SessionManagerActor.java
@@ -15,10 +15,13 @@
*/
package org.thingsboard.server.actors.session;
-import java.util.HashMap;
-import java.util.Map;
-
-import akka.actor.*;
+import akka.actor.ActorRef;
+import akka.actor.InvalidActorNameException;
+import akka.actor.LocalActorRef;
+import akka.actor.Props;
+import akka.actor.Terminated;
+import akka.event.Logging;
+import akka.event.LoggingAdapter;
import org.thingsboard.server.actors.ActorSystemContext;
import org.thingsboard.server.actors.service.ContextAwareActor;
import org.thingsboard.server.actors.service.ContextBasedCreator;
@@ -27,14 +30,13 @@ import org.thingsboard.server.actors.shared.SessionTimeoutMsg;
import org.thingsboard.server.common.data.id.SessionId;
import org.thingsboard.server.common.msg.TbActorMsg;
import org.thingsboard.server.common.msg.aware.SessionAwareMsg;
-
-import akka.event.Logging;
-import akka.event.LoggingAdapter;
import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
-import org.thingsboard.server.common.msg.core.SessionCloseMsg;
import org.thingsboard.server.common.msg.core.ActorSystemToDeviceSessionActorMsg;
+import org.thingsboard.server.common.msg.core.SessionCloseMsg;
import org.thingsboard.server.common.msg.session.SessionCtrlMsg;
-import org.thingsboard.server.common.msg.session.TransportToDeviceSessionActorMsg;
+
+import java.util.HashMap;
+import java.util.Map;
public class SessionManagerActor extends ContextAwareActor {
diff --git a/application/src/main/java/org/thingsboard/server/actors/session/SyncMsgProcessor.java b/application/src/main/java/org/thingsboard/server/actors/session/SyncMsgProcessor.java
index a0f0a88246..cf8df1385f 100644
--- a/application/src/main/java/org/thingsboard/server/actors/session/SyncMsgProcessor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/session/SyncMsgProcessor.java
@@ -15,20 +15,22 @@
*/
package org.thingsboard.server.actors.session;
+import akka.actor.ActorContext;
+import akka.event.LoggingAdapter;
import org.thingsboard.server.actors.ActorSystemContext;
import org.thingsboard.server.actors.shared.SessionTimeoutMsg;
import org.thingsboard.server.common.data.id.SessionId;
import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
-import org.thingsboard.server.common.msg.session.*;
+import org.thingsboard.server.common.msg.session.BasicSessionActorToAdaptorMsg;
+import org.thingsboard.server.common.msg.session.SessionContext;
+import org.thingsboard.server.common.msg.session.SessionType;
+import org.thingsboard.server.common.msg.session.ToDeviceMsg;
import org.thingsboard.server.common.msg.session.TransportToDeviceSessionActorMsg;
import org.thingsboard.server.common.msg.session.ctrl.SessionCloseMsg;
import org.thingsboard.server.common.msg.session.ex.SessionException;
-import akka.actor.ActorContext;
-import akka.event.LoggingAdapter;
-
import java.util.Optional;
class SyncMsgProcessor extends AbstractSessionActorMsgProcessor {
diff --git a/application/src/main/java/org/thingsboard/server/actors/shared/AbstractContextAwareMsgProcessor.java b/application/src/main/java/org/thingsboard/server/actors/shared/AbstractContextAwareMsgProcessor.java
index e1313d20ef..8864486150 100644
--- a/application/src/main/java/org/thingsboard/server/actors/shared/AbstractContextAwareMsgProcessor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/shared/AbstractContextAwareMsgProcessor.java
@@ -19,18 +19,13 @@ import akka.actor.ActorContext;
import akka.actor.ActorRef;
import akka.actor.Scheduler;
import akka.event.LoggingAdapter;
-import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.thingsboard.server.actors.ActorSystemContext;
-import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
-import org.thingsboard.server.common.data.plugin.ComponentType;
-import org.thingsboard.server.extensions.api.component.*;
import scala.concurrent.ExecutionContextExecutor;
import scala.concurrent.duration.Duration;
-import java.io.IOException;
import java.util.concurrent.TimeUnit;
public abstract class AbstractContextAwareMsgProcessor {
@@ -76,50 +71,6 @@ public abstract class AbstractContextAwareMsgProcessor {
getScheduler().scheduleOnce(Duration.create(delayInMs, TimeUnit.MILLISECONDS), target, msg, getSystemDispatcher(), null);
}
- protected T initComponent(JsonNode componentNode) throws Exception {
- ComponentConfiguration configuration = new ComponentConfiguration(
- componentNode.get("clazz").asText(),
- componentNode.get("name").asText(),
- mapper.writeValueAsString(componentNode.get("configuration"))
- );
- logger.info("Initializing [{}][{}] component", configuration.getName(), configuration.getClazz());
- ComponentDescriptor componentDescriptor = systemContext.getComponentService().getComponent(configuration.getClazz())
- .orElseThrow(() -> new InstantiationException("Component Not found!"));
- return initComponent(componentDescriptor, configuration);
- }
-
- protected T initComponent(ComponentDescriptor componentDefinition, ComponentConfiguration configuration)
- throws Exception {
- return initComponent(componentDefinition.getClazz(), componentDefinition.getType(), configuration.getConfiguration());
- }
-
- protected T initComponent(String clazz, ComponentType type, String configuration)
- throws Exception {
- Class> componentClazz = Class.forName(clazz);
- T component = (T) (componentClazz.newInstance());
- Class> configurationClazz;
- switch (type) {
- case FILTER:
- configurationClazz = ((Filter) componentClazz.getAnnotation(Filter.class)).configuration();
- break;
- case ACTION:
- configurationClazz = ((Action) componentClazz.getAnnotation(Action.class)).configuration();
- break;
- case PLUGIN:
- configurationClazz = ((Plugin) componentClazz.getAnnotation(Plugin.class)).configuration();
- break;
- default:
- throw new IllegalStateException("Component with type: " + type + " is not supported!");
- }
- component.init(decode(configuration, configurationClazz));
- return component;
- }
-
- public C decode(String configuration, Class configurationClazz) throws IOException, RuntimeException {
- logger.info("Initializing using configuration: {}", configuration);
- return mapper.readValue(configuration, configurationClazz);
- }
-
@Data
@AllArgsConstructor
private static class ComponentConfiguration {
diff --git a/application/src/main/java/org/thingsboard/server/actors/shared/ComponentMsgProcessor.java b/application/src/main/java/org/thingsboard/server/actors/shared/ComponentMsgProcessor.java
index 771b85b113..1cf83397fc 100644
--- a/application/src/main/java/org/thingsboard/server/actors/shared/ComponentMsgProcessor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/shared/ComponentMsgProcessor.java
@@ -26,7 +26,6 @@ import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
import org.thingsboard.server.common.msg.TbMsg;
import org.thingsboard.server.common.msg.cluster.ClusterEventMsg;
-import org.thingsboard.server.dao.queue.MsgQueue;
import org.thingsboard.server.service.queue.MsgQueueService;
import javax.annotation.Nullable;
diff --git a/application/src/main/java/org/thingsboard/server/actors/shared/EntityActorsManager.java b/application/src/main/java/org/thingsboard/server/actors/shared/EntityActorsManager.java
index 295bfb94ce..1b9e6a8074 100644
--- a/application/src/main/java/org/thingsboard/server/actors/shared/EntityActorsManager.java
+++ b/application/src/main/java/org/thingsboard/server/actors/shared/EntityActorsManager.java
@@ -24,12 +24,10 @@ import lombok.extern.slf4j.Slf4j;
import org.thingsboard.server.actors.ActorSystemContext;
import org.thingsboard.server.actors.service.ContextAwareActor;
import org.thingsboard.server.common.data.SearchTextBased;
-import org.thingsboard.server.common.data.SearchTextBasedWithAdditionalInfo;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.id.UUIDBased;
import org.thingsboard.server.common.data.page.PageDataIterable;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
import java.util.HashMap;
import java.util.Map;
diff --git a/application/src/main/java/org/thingsboard/server/actors/shared/plugin/PluginManager.java b/application/src/main/java/org/thingsboard/server/actors/shared/plugin/PluginManager.java
deleted file mode 100644
index 3345e5fff5..0000000000
--- a/application/src/main/java/org/thingsboard/server/actors/shared/plugin/PluginManager.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.actors.shared.plugin;
-
-import akka.japi.Creator;
-import lombok.extern.slf4j.Slf4j;
-import org.thingsboard.server.actors.ActorSystemContext;
-import org.thingsboard.server.actors.plugin.PluginActor;
-import org.thingsboard.server.actors.shared.EntityActorsManager;
-import org.thingsboard.server.common.data.id.PluginId;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-import org.thingsboard.server.dao.plugin.PluginService;
-
-@Slf4j
-public abstract class PluginManager extends EntityActorsManager {
-
- protected final PluginService pluginService;
-
- public PluginManager(ActorSystemContext systemContext) {
- super(systemContext);
- this.pluginService = systemContext.getPluginService();
- }
-
- @Override
- public Creator creator(PluginId entityId){
- return new PluginActor.ActorCreator(systemContext, getTenantId(), entityId);
- }
-
-}
diff --git a/application/src/main/java/org/thingsboard/server/actors/shared/plugin/SystemPluginManager.java b/application/src/main/java/org/thingsboard/server/actors/shared/plugin/SystemPluginManager.java
deleted file mode 100644
index 88c52a6043..0000000000
--- a/application/src/main/java/org/thingsboard/server/actors/shared/plugin/SystemPluginManager.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.actors.shared.plugin;
-
-import org.thingsboard.server.actors.ActorSystemContext;
-import org.thingsboard.server.actors.service.DefaultActorService;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.page.PageDataIterable.FetchFunction;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-import org.thingsboard.server.dao.plugin.BasePluginService;
-
-public class SystemPluginManager extends PluginManager {
-
- public SystemPluginManager(ActorSystemContext systemContext) {
- super(systemContext);
- }
-
- @Override
- protected FetchFunction getFetchEntitiesFunction() {
- return pluginService::findSystemPlugins;
- }
-
- @Override
- protected TenantId getTenantId() {
- return BasePluginService.SYSTEM_TENANT;
- }
-
- @Override
- protected String getDispatcherName() {
- return DefaultActorService.SYSTEM_PLUGIN_DISPATCHER_NAME;
- }
-}
diff --git a/application/src/main/java/org/thingsboard/server/actors/shared/plugin/TenantPluginManager.java b/application/src/main/java/org/thingsboard/server/actors/shared/plugin/TenantPluginManager.java
deleted file mode 100644
index 09115f0f7d..0000000000
--- a/application/src/main/java/org/thingsboard/server/actors/shared/plugin/TenantPluginManager.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.actors.shared.plugin;
-
-import akka.actor.ActorContext;
-import org.thingsboard.server.actors.ActorSystemContext;
-import org.thingsboard.server.actors.service.DefaultActorService;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.page.PageDataIterable;
-import org.thingsboard.server.common.data.page.PageDataIterable.FetchFunction;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-
-public class TenantPluginManager extends PluginManager {
-
- private final TenantId tenantId;
-
- public TenantPluginManager(ActorSystemContext systemContext, TenantId tenantId) {
- super(systemContext);
- this.tenantId = tenantId;
- }
-
- @Override
- public void init(ActorContext context) {
- if (systemContext.isTenantComponentsInitEnabled()) {
- super.init(context);
- }
- }
-
- @Override
- protected FetchFunction getFetchEntitiesFunction() {
- return link -> pluginService.findTenantPlugins(tenantId, link);
- }
-
- @Override
- protected TenantId getTenantId() {
- return tenantId;
- }
-
- @Override
- protected String getDispatcherName() {
- return DefaultActorService.TENANT_PLUGIN_DISPATCHER_NAME;
- }
-
-}
diff --git a/application/src/main/java/org/thingsboard/server/actors/shared/rulechain/SystemRuleChainManager.java b/application/src/main/java/org/thingsboard/server/actors/shared/rulechain/SystemRuleChainManager.java
index 87f1b166fb..ce1747fc6c 100644
--- a/application/src/main/java/org/thingsboard/server/actors/shared/rulechain/SystemRuleChainManager.java
+++ b/application/src/main/java/org/thingsboard/server/actors/shared/rulechain/SystemRuleChainManager.java
@@ -17,14 +17,11 @@ package org.thingsboard.server.actors.shared.rulechain;
import org.thingsboard.server.actors.ActorSystemContext;
import org.thingsboard.server.actors.service.DefaultActorService;
-import org.thingsboard.server.actors.shared.plugin.PluginManager;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.PageDataIterable.FetchFunction;
import org.thingsboard.server.common.data.page.TextPageData;
-import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
import org.thingsboard.server.common.data.rule.RuleChain;
-import org.thingsboard.server.dao.plugin.BasePluginService;
+import org.thingsboard.server.dao.model.ModelConstants;
import java.util.Collections;
@@ -41,7 +38,7 @@ public class SystemRuleChainManager extends RuleChainManager {
@Override
protected TenantId getTenantId() {
- return BasePluginService.SYSTEM_TENANT;
+ return ModelConstants.SYSTEM_TENANT;
}
@Override
diff --git a/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java b/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java
index a3094ded36..7a3127dd36 100644
--- a/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java
+++ b/application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java
@@ -23,12 +23,10 @@ import akka.japi.Function;
import org.thingsboard.server.actors.ActorSystemContext;
import org.thingsboard.server.actors.device.DeviceActor;
import org.thingsboard.server.actors.device.DeviceActorToRuleEngineMsg;
-import org.thingsboard.server.actors.plugin.PluginTerminationMsg;
import org.thingsboard.server.actors.ruleChain.RuleChainManagerActor;
import org.thingsboard.server.actors.ruleChain.RuleChainToRuleChainMsg;
import org.thingsboard.server.actors.service.ContextBasedCreator;
import org.thingsboard.server.actors.service.DefaultActorService;
-import org.thingsboard.server.actors.shared.plugin.TenantPluginManager;
import org.thingsboard.server.actors.shared.rulechain.TenantRuleChainManager;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.id.DeviceId;
@@ -37,11 +35,8 @@ import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.rule.RuleChain;
import org.thingsboard.server.common.msg.TbActorMsg;
import org.thingsboard.server.common.msg.aware.DeviceAwareMsg;
-import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg;
import org.thingsboard.server.common.msg.plugin.ComponentLifecycleMsg;
import org.thingsboard.server.common.msg.system.ServiceToRuleEngineMsg;
-import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
-import org.thingsboard.server.extensions.api.plugins.msg.ToPluginActorMsg;
import scala.concurrent.duration.Duration;
import java.util.HashMap;
@@ -53,7 +48,7 @@ public class TenantActor extends RuleChainManagerActor {
private final Map deviceActors;
private TenantActor(ActorSystemContext systemContext, TenantId tenantId) {
- super(systemContext, new TenantRuleChainManager(systemContext, tenantId), new TenantPluginManager(systemContext, tenantId));
+ super(systemContext, new TenantRuleChainManager(systemContext, tenantId));
this.tenantId = tenantId;
this.deviceActors = new HashMap<>();
}
diff --git a/application/src/main/java/org/thingsboard/server/config/AuditLogLevelProperties.java b/application/src/main/java/org/thingsboard/server/config/AuditLogLevelProperties.java
index 34afd35ba2..4c36a15758 100644
--- a/application/src/main/java/org/thingsboard/server/config/AuditLogLevelProperties.java
+++ b/application/src/main/java/org/thingsboard/server/config/AuditLogLevelProperties.java
@@ -17,8 +17,6 @@ package org.thingsboard.server.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
-import org.thingsboard.server.common.data.EntityType;
-import org.thingsboard.server.common.data.audit.ActionType;
import java.util.HashMap;
import java.util.Map;
diff --git a/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java b/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java
index 87b187e98c..2254cf3da0 100644
--- a/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java
+++ b/application/src/main/java/org/thingsboard/server/config/SwaggerConfiguration.java
@@ -24,7 +24,11 @@ import org.springframework.context.annotation.Configuration;
import org.thingsboard.server.common.data.security.Authority;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.schema.AlternateTypeRule;
-import springfox.documentation.service.*;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.ApiKey;
+import springfox.documentation.service.AuthorizationScope;
+import springfox.documentation.service.Contact;
+import springfox.documentation.service.SecurityReference;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
diff --git a/application/src/main/java/org/thingsboard/server/config/ThingsboardSecurityConfiguration.java b/application/src/main/java/org/thingsboard/server/config/ThingsboardSecurityConfiguration.java
index 24c533c59d..6afa6b2460 100644
--- a/application/src/main/java/org/thingsboard/server/config/ThingsboardSecurityConfiguration.java
+++ b/application/src/main/java/org/thingsboard/server/config/ThingsboardSecurityConfiguration.java
@@ -40,10 +40,14 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.thingsboard.server.dao.audit.AuditLogLevelFilter;
import org.thingsboard.server.exception.ThingsboardErrorResponseHandler;
+import org.thingsboard.server.service.security.auth.jwt.JwtAuthenticationProvider;
+import org.thingsboard.server.service.security.auth.jwt.JwtTokenAuthenticationProcessingFilter;
+import org.thingsboard.server.service.security.auth.jwt.RefreshTokenAuthenticationProvider;
+import org.thingsboard.server.service.security.auth.jwt.RefreshTokenProcessingFilter;
+import org.thingsboard.server.service.security.auth.jwt.SkipPathRequestMatcher;
+import org.thingsboard.server.service.security.auth.jwt.extractor.TokenExtractor;
import org.thingsboard.server.service.security.auth.rest.RestAuthenticationProvider;
import org.thingsboard.server.service.security.auth.rest.RestLoginProcessingFilter;
-import org.thingsboard.server.service.security.auth.jwt.*;
-import org.thingsboard.server.service.security.auth.jwt.extractor.TokenExtractor;
import org.thingsboard.server.service.security.auth.rest.RestPublicLoginProcessingFilter;
import java.util.ArrayList;
diff --git a/application/src/main/java/org/thingsboard/server/config/WebSocketConfiguration.java b/application/src/main/java/org/thingsboard/server/config/WebSocketConfiguration.java
index 2e5050a9ad..59b7da2e76 100644
--- a/application/src/main/java/org/thingsboard/server/config/WebSocketConfiguration.java
+++ b/application/src/main/java/org/thingsboard/server/config/WebSocketConfiguration.java
@@ -15,12 +15,6 @@
*/
package org.thingsboard.server.config;
-import java.util.Map;
-
-import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
-import org.thingsboard.server.controller.plugin.TbWebSocketHandler;
-import org.thingsboard.server.service.security.model.SecurityUser;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
@@ -35,6 +29,12 @@ import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry
import org.springframework.web.socket.server.HandshakeInterceptor;
import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean;
import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;
+import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
+import org.thingsboard.server.controller.plugin.TbWebSocketHandler;
+import org.thingsboard.server.service.security.model.SecurityUser;
+
+import java.util.Map;
@Configuration
@EnableWebSocket
diff --git a/application/src/main/java/org/thingsboard/server/controller/AdminController.java b/application/src/main/java/org/thingsboard/server/controller/AdminController.java
index 5a43125bbf..0cf149114a 100644
--- a/application/src/main/java/org/thingsboard/server/controller/AdminController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/AdminController.java
@@ -17,11 +17,16 @@ package org.thingsboard.server.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+import org.thingsboard.rule.engine.api.MailService;
import org.thingsboard.server.common.data.AdminSettings;
-import org.thingsboard.server.dao.settings.AdminSettingsService;
import org.thingsboard.server.common.data.exception.ThingsboardException;
-import org.thingsboard.rule.engine.api.MailService;
+import org.thingsboard.server.dao.settings.AdminSettingsService;
import org.thingsboard.server.service.update.UpdateService;
import org.thingsboard.server.service.update.model.UpdateMessage;
diff --git a/application/src/main/java/org/thingsboard/server/controller/AlarmController.java b/application/src/main/java/org/thingsboard/server/controller/AlarmController.java
index ace024cb0f..28cc2fdf09 100644
--- a/application/src/main/java/org/thingsboard/server/controller/AlarmController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/AlarmController.java
@@ -18,13 +18,27 @@ package org.thingsboard.server.controller;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-import org.thingsboard.server.common.data.alarm.*;
-import org.thingsboard.server.common.data.id.*;
-import org.thingsboard.server.common.data.page.TimePageData;
-import org.thingsboard.server.common.data.page.TimePageLink;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+import org.thingsboard.server.common.data.alarm.Alarm;
+import org.thingsboard.server.common.data.alarm.AlarmId;
+import org.thingsboard.server.common.data.alarm.AlarmInfo;
+import org.thingsboard.server.common.data.alarm.AlarmQuery;
+import org.thingsboard.server.common.data.alarm.AlarmSearchStatus;
+import org.thingsboard.server.common.data.alarm.AlarmSeverity;
+import org.thingsboard.server.common.data.alarm.AlarmStatus;
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
import org.thingsboard.server.common.data.exception.ThingsboardException;
+import org.thingsboard.server.common.data.id.EntityId;
+import org.thingsboard.server.common.data.id.EntityIdFactory;
+import org.thingsboard.server.common.data.page.TimePageData;
+import org.thingsboard.server.common.data.page.TimePageLink;
@RestController
@RequestMapping("/api")
diff --git a/application/src/main/java/org/thingsboard/server/controller/AssetController.java b/application/src/main/java/org/thingsboard/server/controller/AssetController.java
index 0e348f997e..35865ab2df 100644
--- a/application/src/main/java/org/thingsboard/server/controller/AssetController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/AssetController.java
@@ -18,23 +18,30 @@ package org.thingsboard.server.controller;
import com.google.common.util.concurrent.ListenableFuture;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
import org.thingsboard.server.common.data.Customer;
import org.thingsboard.server.common.data.EntitySubtype;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.asset.Asset;
+import org.thingsboard.server.common.data.asset.AssetSearchQuery;
import org.thingsboard.server.common.data.audit.ActionType;
+import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.AssetId;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.TextPageData;
import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.asset.AssetSearchQuery;
import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.dao.exception.IncorrectParameterException;
import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.service.security.model.SecurityUser;
import java.util.ArrayList;
diff --git a/application/src/main/java/org/thingsboard/server/controller/AuditLogController.java b/application/src/main/java/org/thingsboard/server/controller/AuditLogController.java
index e8685c74f9..34bcf8456f 100644
--- a/application/src/main/java/org/thingsboard/server/controller/AuditLogController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/AuditLogController.java
@@ -16,15 +16,20 @@
package org.thingsboard.server.controller;
import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
import org.thingsboard.server.common.data.audit.AuditLog;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.EntityIdFactory;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.id.UserId;
import org.thingsboard.server.common.data.page.TimePageData;
import org.thingsboard.server.common.data.page.TimePageLink;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
import java.util.UUID;
diff --git a/application/src/main/java/org/thingsboard/server/controller/AuthController.java b/application/src/main/java/org/thingsboard/server/controller/AuthController.java
index 96ff5162c7..af24c9c24b 100644
--- a/application/src/main/java/org/thingsboard/server/controller/AuthController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/AuthController.java
@@ -25,12 +25,18 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+import org.thingsboard.rule.engine.api.MailService;
import org.thingsboard.server.common.data.User;
-import org.thingsboard.server.common.data.security.UserCredentials;
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
import org.thingsboard.server.common.data.exception.ThingsboardException;
-import org.thingsboard.rule.engine.api.MailService;
+import org.thingsboard.server.common.data.security.UserCredentials;
import org.thingsboard.server.service.security.auth.jwt.RefreshTokenRepository;
import org.thingsboard.server.service.security.model.SecurityUser;
import org.thingsboard.server.service.security.model.UserPrincipal;
diff --git a/application/src/main/java/org/thingsboard/server/controller/BaseController.java b/application/src/main/java/org/thingsboard/server/controller/BaseController.java
index 3fd1698229..9ed7c47f06 100644
--- a/application/src/main/java/org/thingsboard/server/controller/BaseController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/BaseController.java
@@ -22,20 +22,38 @@ import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.thingsboard.server.actors.service.ActorService;
-import org.thingsboard.server.common.data.*;
+import org.thingsboard.server.common.data.BaseData;
+import org.thingsboard.server.common.data.Customer;
+import org.thingsboard.server.common.data.Dashboard;
+import org.thingsboard.server.common.data.DashboardInfo;
+import org.thingsboard.server.common.data.Device;
+import org.thingsboard.server.common.data.EntityType;
+import org.thingsboard.server.common.data.HasName;
+import org.thingsboard.server.common.data.User;
import org.thingsboard.server.common.data.alarm.Alarm;
import org.thingsboard.server.common.data.alarm.AlarmId;
import org.thingsboard.server.common.data.alarm.AlarmInfo;
import org.thingsboard.server.common.data.asset.Asset;
import org.thingsboard.server.common.data.audit.ActionType;
-import org.thingsboard.server.common.data.id.*;
+import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
+import org.thingsboard.server.common.data.id.AssetId;
+import org.thingsboard.server.common.data.id.CustomerId;
+import org.thingsboard.server.common.data.id.DashboardId;
+import org.thingsboard.server.common.data.id.DeviceId;
+import org.thingsboard.server.common.data.id.EntityId;
+import org.thingsboard.server.common.data.id.EntityIdFactory;
+import org.thingsboard.server.common.data.id.RuleChainId;
+import org.thingsboard.server.common.data.id.TenantId;
+import org.thingsboard.server.common.data.id.UUIDBased;
+import org.thingsboard.server.common.data.id.UserId;
+import org.thingsboard.server.common.data.id.WidgetTypeId;
+import org.thingsboard.server.common.data.id.WidgetsBundleId;
import org.thingsboard.server.common.data.page.TextPageLink;
import org.thingsboard.server.common.data.page.TimePageLink;
import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
import org.thingsboard.server.common.data.plugin.ComponentType;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
import org.thingsboard.server.common.data.rule.RuleChain;
-import org.thingsboard.server.common.data.rule.RuleMetaData;
import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.data.widget.WidgetType;
import org.thingsboard.server.common.data.widget.WidgetsBundle;
@@ -49,17 +67,13 @@ import org.thingsboard.server.dao.device.DeviceService;
import org.thingsboard.server.dao.exception.DataValidationException;
import org.thingsboard.server.dao.exception.IncorrectParameterException;
import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.dao.plugin.PluginService;
import org.thingsboard.server.dao.relation.RelationService;
import org.thingsboard.server.dao.rule.RuleChainService;
-import org.thingsboard.server.dao.rule.RuleService;
import org.thingsboard.server.dao.tenant.TenantService;
import org.thingsboard.server.dao.user.UserService;
import org.thingsboard.server.dao.widget.WidgetTypeService;
import org.thingsboard.server.dao.widget.WidgetsBundleService;
-import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
import org.thingsboard.server.exception.ThingsboardErrorResponseHandler;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.service.component.ComponentDiscoveryService;
import org.thingsboard.server.service.security.model.SecurityUser;
import org.thingsboard.server.service.state.DeviceStateService;
@@ -116,12 +130,6 @@ public abstract class BaseController {
@Autowired
protected ComponentDiscoveryService componentDescriptorService;
- @Autowired
- protected RuleService ruleService;
-
- @Autowired
- protected PluginService pluginService;
-
@Autowired
protected RuleChainService ruleChainService;
@@ -299,12 +307,6 @@ public abstract class BaseController {
case TENANT:
checkTenantId(new TenantId(entityId.getId()));
return;
- case PLUGIN:
- checkPlugin(new PluginId(entityId.getId()));
- return;
- case RULE:
- checkRule(new RuleId(entityId.getId()));
- return;
case RULE_CHAIN:
checkRuleChain(new RuleChainId(entityId.getId()));
return;
@@ -494,60 +496,6 @@ public abstract class BaseController {
}
}
- List checkPluginActionsByPluginClazz(String pluginClazz) throws ThingsboardException {
- try {
- checkComponentDescriptorByClazz(pluginClazz);
- log.debug("[{}] Lookup plugin actions", pluginClazz);
- return componentDescriptorService.getPluginActions(pluginClazz);
- } catch (Exception e) {
- throw handleException(e, false);
- }
- }
-
- protected PluginMetaData checkPlugin(PluginMetaData plugin) throws ThingsboardException {
- checkNotNull(plugin);
- SecurityUser authUser = getCurrentUser();
- TenantId tenantId = plugin.getTenantId();
- validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
- if (authUser.getAuthority() != Authority.SYS_ADMIN) {
- if (authUser.getTenantId() == null ||
- !tenantId.getId().equals(ModelConstants.NULL_UUID) && !authUser.getTenantId().equals(tenantId)) {
- throw new ThingsboardException(YOU_DON_T_HAVE_PERMISSION_TO_PERFORM_THIS_OPERATION,
- ThingsboardErrorCode.PERMISSION_DENIED);
-
- } else if (tenantId.getId().equals(ModelConstants.NULL_UUID)) {
- plugin.setConfiguration(null);
- }
- }
- return plugin;
- }
-
- protected PluginMetaData checkPlugin(PluginId pluginId) throws ThingsboardException {
- checkNotNull(pluginId);
- return checkPlugin(pluginService.findPluginById(pluginId));
- }
-
- protected RuleMetaData checkRule(RuleId ruleId) throws ThingsboardException {
- checkNotNull(ruleId);
- return checkRule(ruleService.findRuleById(ruleId));
- }
-
- protected RuleMetaData checkRule(RuleMetaData rule) throws ThingsboardException {
- checkNotNull(rule);
- SecurityUser authUser = getCurrentUser();
- TenantId tenantId = rule.getTenantId();
- validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
- if (authUser.getAuthority() != Authority.SYS_ADMIN) {
- if (authUser.getTenantId() == null ||
- !tenantId.getId().equals(ModelConstants.NULL_UUID) && !authUser.getTenantId().equals(tenantId)) {
- throw new ThingsboardException(YOU_DON_T_HAVE_PERMISSION_TO_PERFORM_THIS_OPERATION,
- ThingsboardErrorCode.PERMISSION_DENIED);
-
- }
- }
- return rule;
- }
-
protected RuleChain checkRuleChain(RuleChainId ruleChainId) throws ThingsboardException {
checkNotNull(ruleChainId);
return checkRuleChain(ruleChainService.findRuleChainById(ruleChainId));
diff --git a/application/src/main/java/org/thingsboard/server/controller/ComponentDescriptorController.java b/application/src/main/java/org/thingsboard/server/controller/ComponentDescriptorController.java
index 6313d615a3..fe4829f789 100644
--- a/application/src/main/java/org/thingsboard/server/controller/ComponentDescriptorController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/ComponentDescriptorController.java
@@ -16,10 +16,15 @@
package org.thingsboard.server.controller;
import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
import org.thingsboard.server.common.data.plugin.ComponentType;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
import java.util.HashSet;
import java.util.List;
@@ -69,16 +74,4 @@ public class ComponentDescriptorController extends BaseController {
}
}
- @PreAuthorize("hasAnyAuthority('SYS_ADMIN','TENANT_ADMIN')")
- @RequestMapping(value = "/components/actions/{pluginClazz:.+}", method = RequestMethod.GET)
- @ResponseBody
- public List getPluginActionsByPluginClazz(@PathVariable("pluginClazz") String pluginClazz) throws ThingsboardException {
- checkParameter("pluginClazz", pluginClazz);
- try {
- return checkPluginActionsByPluginClazz(pluginClazz);
- } catch (Exception e) {
- throw handleException(e);
- }
- }
-
}
diff --git a/application/src/main/java/org/thingsboard/server/controller/CustomerController.java b/application/src/main/java/org/thingsboard/server/controller/CustomerController.java
index 7763f3c00a..34843ceb01 100644
--- a/application/src/main/java/org/thingsboard/server/controller/CustomerController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/CustomerController.java
@@ -20,15 +20,22 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
import org.thingsboard.server.common.data.Customer;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.audit.ActionType;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.TextPageData;
import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
@RestController
@RequestMapping("/api")
diff --git a/application/src/main/java/org/thingsboard/server/controller/DashboardController.java b/application/src/main/java/org/thingsboard/server/controller/DashboardController.java
index 4ec2bbab05..85227e76a9 100644
--- a/application/src/main/java/org/thingsboard/server/controller/DashboardController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/DashboardController.java
@@ -17,9 +17,21 @@ package org.thingsboard.server.controller;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-import org.thingsboard.server.common.data.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+import org.thingsboard.server.common.data.Customer;
+import org.thingsboard.server.common.data.Dashboard;
+import org.thingsboard.server.common.data.DashboardInfo;
+import org.thingsboard.server.common.data.EntityType;
+import org.thingsboard.server.common.data.ShortCustomerInfo;
import org.thingsboard.server.common.data.audit.ActionType;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.DashboardId;
import org.thingsboard.server.common.data.id.TenantId;
@@ -27,7 +39,6 @@ import org.thingsboard.server.common.data.page.TextPageData;
import org.thingsboard.server.common.data.page.TextPageLink;
import org.thingsboard.server.common.data.page.TimePageData;
import org.thingsboard.server.common.data.page.TimePageLink;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
import java.util.HashSet;
import java.util.Set;
diff --git a/application/src/main/java/org/thingsboard/server/controller/DeviceController.java b/application/src/main/java/org/thingsboard/server/controller/DeviceController.java
index e1023caebf..a6daeecf4a 100644
--- a/application/src/main/java/org/thingsboard/server/controller/DeviceController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/DeviceController.java
@@ -18,13 +18,22 @@ package org.thingsboard.server.controller;
import com.google.common.util.concurrent.ListenableFuture;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
import org.thingsboard.server.common.data.Customer;
import org.thingsboard.server.common.data.Device;
import org.thingsboard.server.common.data.EntitySubtype;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.audit.ActionType;
import org.thingsboard.server.common.data.device.DeviceSearchQuery;
+import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.TenantId;
@@ -34,8 +43,6 @@ import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.data.security.DeviceCredentials;
import org.thingsboard.server.dao.exception.IncorrectParameterException;
import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.service.security.model.SecurityUser;
import java.util.ArrayList;
diff --git a/application/src/main/java/org/thingsboard/server/controller/EntityRelationController.java b/application/src/main/java/org/thingsboard/server/controller/EntityRelationController.java
index 3a3b78b52f..844dbd35a9 100644
--- a/application/src/main/java/org/thingsboard/server/controller/EntityRelationController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/EntityRelationController.java
@@ -17,15 +17,21 @@ package org.thingsboard.server.controller;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.EntityIdFactory;
import org.thingsboard.server.common.data.relation.EntityRelation;
import org.thingsboard.server.common.data.relation.EntityRelationInfo;
-import org.thingsboard.server.common.data.relation.RelationTypeGroup;
import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
-import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
+import org.thingsboard.server.common.data.relation.RelationTypeGroup;
import java.util.List;
diff --git a/application/src/main/java/org/thingsboard/server/controller/EventController.java b/application/src/main/java/org/thingsboard/server/controller/EventController.java
index f67f113144..7c8b2ae45e 100644
--- a/application/src/main/java/org/thingsboard/server/controller/EventController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/EventController.java
@@ -17,15 +17,21 @@ package org.thingsboard.server.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
import org.thingsboard.server.common.data.Event;
-import org.thingsboard.server.common.data.id.*;
+import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
+import org.thingsboard.server.common.data.id.EntityIdFactory;
+import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.TimePageData;
import org.thingsboard.server.common.data.page.TimePageLink;
import org.thingsboard.server.dao.event.EventService;
import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
@RestController
@RequestMapping("/api")
diff --git a/application/src/main/java/org/thingsboard/server/controller/PluginController.java b/application/src/main/java/org/thingsboard/server/controller/PluginController.java
deleted file mode 100644
index 3bc385d7b2..0000000000
--- a/application/src/main/java/org/thingsboard/server/controller/PluginController.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.controller;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-import org.thingsboard.server.common.data.EntityType;
-import org.thingsboard.server.common.data.audit.ActionType;
-import org.thingsboard.server.common.data.id.PluginId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.page.TextPageData;
-import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-import org.thingsboard.server.common.data.security.Authority;
-import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
-
-import java.util.List;
-
-@RestController
-@RequestMapping("/api")
-public class PluginController extends BaseController {
-
- public static final String PLUGIN_ID = "pluginId";
-
- @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
- @RequestMapping(value = "/plugin/{pluginId}", method = RequestMethod.GET)
- @ResponseBody
- public PluginMetaData getPluginById(@PathVariable(PLUGIN_ID) String strPluginId) throws ThingsboardException {
- checkParameter(PLUGIN_ID, strPluginId);
- try {
- PluginId pluginId = new PluginId(toUUID(strPluginId));
- return checkPlugin(pluginService.findPluginById(pluginId));
- } catch (Exception e) {
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
- @RequestMapping(value = "/plugin/token/{pluginToken}", method = RequestMethod.GET)
- @ResponseBody
- public PluginMetaData getPluginByToken(@PathVariable("pluginToken") String pluginToken) throws ThingsboardException {
- checkParameter("pluginToken", pluginToken);
- try {
- return checkPlugin(pluginService.findPluginByApiToken(pluginToken));
- } catch (Exception e) {
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
- @RequestMapping(value = "/plugin", method = RequestMethod.POST)
- @ResponseBody
- public PluginMetaData savePlugin(@RequestBody PluginMetaData source) throws ThingsboardException {
- try {
- boolean created = source.getId() == null;
- source.setTenantId(getCurrentUser().getTenantId());
- PluginMetaData plugin = checkNotNull(pluginService.savePlugin(source));
- actorService.onEntityStateChange(plugin.getTenantId(), plugin.getId(),
- created ? ComponentLifecycleEvent.CREATED : ComponentLifecycleEvent.UPDATED);
-
- logEntityAction(plugin.getId(), plugin,
- null,
- created ? ActionType.ADDED : ActionType.UPDATED, null);
-
- return plugin;
- } catch (Exception e) {
-
- logEntityAction(emptyId(EntityType.PLUGIN), source,
- null, source.getId() == null ? ActionType.ADDED : ActionType.UPDATED, e);
-
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
- @RequestMapping(value = "/plugin/{pluginId}/activate", method = RequestMethod.POST)
- @ResponseStatus(value = HttpStatus.OK)
- public void activatePluginById(@PathVariable(PLUGIN_ID) String strPluginId) throws ThingsboardException {
- checkParameter(PLUGIN_ID, strPluginId);
- try {
- PluginId pluginId = new PluginId(toUUID(strPluginId));
- PluginMetaData plugin = checkPlugin(pluginService.findPluginById(pluginId));
- pluginService.activatePluginById(pluginId);
- actorService.onEntityStateChange(plugin.getTenantId(), plugin.getId(), ComponentLifecycleEvent.ACTIVATED);
-
- logEntityAction(plugin.getId(), plugin,
- null,
- ActionType.ACTIVATED, null, strPluginId);
-
- } catch (Exception e) {
-
- logEntityAction(emptyId(EntityType.PLUGIN),
- null,
- null,
- ActionType.ACTIVATED, e, strPluginId);
-
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
- @RequestMapping(value = "/plugin/{pluginId}/suspend", method = RequestMethod.POST)
- @ResponseStatus(value = HttpStatus.OK)
- public void suspendPluginById(@PathVariable(PLUGIN_ID) String strPluginId) throws ThingsboardException {
- checkParameter(PLUGIN_ID, strPluginId);
- try {
- PluginId pluginId = new PluginId(toUUID(strPluginId));
- PluginMetaData plugin = checkPlugin(pluginService.findPluginById(pluginId));
- pluginService.suspendPluginById(pluginId);
- actorService.onEntityStateChange(plugin.getTenantId(), plugin.getId(), ComponentLifecycleEvent.SUSPENDED);
-
- logEntityAction(plugin.getId(), plugin,
- null,
- ActionType.SUSPENDED, null, strPluginId);
-
- } catch (Exception e) {
-
- logEntityAction(emptyId(EntityType.PLUGIN),
- null,
- null,
- ActionType.SUSPENDED, e, strPluginId);
-
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAuthority('SYS_ADMIN')")
- @RequestMapping(value = "/plugin/system", params = {"limit"}, method = RequestMethod.GET)
- @ResponseBody
- public TextPageData getSystemPlugins(
- @RequestParam int limit,
- @RequestParam(required = false) String textSearch,
- @RequestParam(required = false) String idOffset,
- @RequestParam(required = false) String textOffset) throws ThingsboardException {
- try {
- TextPageLink pageLink = createPageLink(limit, textSearch, idOffset, textOffset);
- return checkNotNull(pluginService.findSystemPlugins(pageLink));
- } catch (Exception e) {
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAuthority('SYS_ADMIN')")
- @RequestMapping(value = "/plugin/tenant/{tenantId}", params = {"limit"}, method = RequestMethod.GET)
- @ResponseBody
- public TextPageData getTenantPlugins(
- @PathVariable("tenantId") String strTenantId,
- @RequestParam int limit,
- @RequestParam(required = false) String textSearch,
- @RequestParam(required = false) String idOffset,
- @RequestParam(required = false) String textOffset) throws ThingsboardException {
- checkParameter("tenantId", strTenantId);
- try {
- TenantId tenantId = new TenantId(toUUID(strTenantId));
- TextPageLink pageLink = createPageLink(limit, textSearch, idOffset, textOffset);
- return checkNotNull(pluginService.findTenantPlugins(tenantId, pageLink));
- } catch (Exception e) {
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
- @RequestMapping(value = "/plugins", method = RequestMethod.GET)
- @ResponseBody
- public List getPlugins() throws ThingsboardException {
- try {
- if (getCurrentUser().getAuthority() == Authority.SYS_ADMIN) {
- return checkNotNull(pluginService.findSystemPlugins());
- } else {
- TenantId tenantId = getCurrentUser().getTenantId();
- List plugins = checkNotNull(pluginService.findAllTenantPluginsByTenantId(tenantId));
- plugins.stream()
- .filter(plugin -> plugin.getTenantId().getId().equals(ModelConstants.NULL_UUID))
- .forEach(plugin -> plugin.setConfiguration(null));
- return plugins;
- }
- } catch (Exception e) {
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAuthority('TENANT_ADMIN')")
- @RequestMapping(value = "/plugin", params = {"limit"}, method = RequestMethod.GET)
- @ResponseBody
- public TextPageData getTenantPlugins(
- @RequestParam int limit,
- @RequestParam(required = false) String textSearch,
- @RequestParam(required = false) String idOffset,
- @RequestParam(required = false) String textOffset) throws ThingsboardException {
- try {
- TenantId tenantId = getCurrentUser().getTenantId();
- TextPageLink pageLink = createPageLink(limit, textSearch, idOffset, textOffset);
- return checkNotNull(pluginService.findTenantPlugins(tenantId, pageLink));
- } catch (Exception e) {
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
- @RequestMapping(value = "/plugin/{pluginId}", method = RequestMethod.DELETE)
- @ResponseStatus(value = HttpStatus.OK)
- public void deletePlugin(@PathVariable(PLUGIN_ID) String strPluginId) throws ThingsboardException {
- checkParameter(PLUGIN_ID, strPluginId);
- try {
- PluginId pluginId = new PluginId(toUUID(strPluginId));
- PluginMetaData plugin = checkPlugin(pluginService.findPluginById(pluginId));
- pluginService.deletePluginById(pluginId);
- actorService.onEntityStateChange(plugin.getTenantId(), plugin.getId(), ComponentLifecycleEvent.DELETED);
-
- logEntityAction(pluginId, plugin,
- null,
- ActionType.DELETED, null, strPluginId);
-
- } catch (Exception e) {
- logEntityAction(emptyId(EntityType.PLUGIN),
- null,
- null,
- ActionType.DELETED, e, strPluginId);
- throw handleException(e);
- }
- }
-
-
-}
diff --git a/application/src/main/java/org/thingsboard/server/controller/RpcController.java b/application/src/main/java/org/thingsboard/server/controller/RpcController.java
index 28261be14c..1422a34337 100644
--- a/application/src/main/java/org/thingsboard/server/controller/RpcController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/RpcController.java
@@ -31,6 +31,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.async.DeferredResult;
+import org.thingsboard.rule.engine.api.RpcError;
import org.thingsboard.server.common.data.audit.ActionType;
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
import org.thingsboard.server.common.data.exception.ThingsboardException;
@@ -41,14 +42,12 @@ import org.thingsboard.server.common.data.id.UUIDBased;
import org.thingsboard.server.common.data.rpc.RpcRequest;
import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody;
import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
-import org.thingsboard.server.extensions.api.exception.ToErrorResponseEntity;
-import org.thingsboard.server.extensions.api.plugins.PluginConstants;
-import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
-import org.thingsboard.server.extensions.api.plugins.msg.RpcError;
import org.thingsboard.server.service.rpc.DeviceRpcService;
+import org.thingsboard.server.service.rpc.FromDeviceRpcResponse;
import org.thingsboard.server.service.rpc.LocalRequestMetaData;
import org.thingsboard.server.service.security.AccessValidator;
import org.thingsboard.server.service.security.model.SecurityUser;
+import org.thingsboard.server.service.telemetry.exception.ToErrorResponseEntity;
import javax.annotation.Nullable;
import javax.annotation.PostConstruct;
@@ -58,13 +57,12 @@ import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-import java.util.function.Consumer;
/**
* Created by ashvayka on 22.03.18.
*/
@RestController
-@RequestMapping(PluginConstants.RPC_URL_PREFIX)
+@RequestMapping(TbUrlConstants.RPC_URL_PREFIX)
@Slf4j
public class RpcController extends BaseController {
@@ -130,13 +128,7 @@ public class RpcController extends BaseController {
timeout,
body
);
- deviceRpcService.process(rpcRequest, new Consumer(){
-
- @Override
- public void accept(FromDeviceRpcResponse fromDeviceRpcResponse) {
- reply(new LocalRequestMetaData(rpcRequest, currentUser, result), fromDeviceRpcResponse);
- }
- });
+ deviceRpcService.process(rpcRequest, fromDeviceRpcResponse -> reply(new LocalRequestMetaData(rpcRequest, currentUser, result), fromDeviceRpcResponse));
}
@Override
diff --git a/application/src/main/java/org/thingsboard/server/controller/RuleChainController.java b/application/src/main/java/org/thingsboard/server/controller/RuleChainController.java
index 8619f8c9f6..68482b3cfb 100644
--- a/application/src/main/java/org/thingsboard/server/controller/RuleChainController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/RuleChainController.java
@@ -25,12 +25,20 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
import org.thingsboard.rule.engine.api.ScriptEngine;
import org.thingsboard.server.common.data.DataConstants;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.Event;
import org.thingsboard.server.common.data.audit.ActionType;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.RuleChainId;
import org.thingsboard.server.common.data.id.RuleNodeId;
import org.thingsboard.server.common.data.id.TenantId;
@@ -39,12 +47,9 @@ import org.thingsboard.server.common.data.page.TextPageLink;
import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
import org.thingsboard.server.common.data.rule.RuleChain;
import org.thingsboard.server.common.data.rule.RuleChainMetaData;
-import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.msg.TbMsg;
import org.thingsboard.server.common.msg.TbMsgMetaData;
import org.thingsboard.server.dao.event.EventService;
-import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.service.script.NashornJsEngine;
import java.util.List;
diff --git a/application/src/main/java/org/thingsboard/server/controller/RuleController.java b/application/src/main/java/org/thingsboard/server/controller/RuleController.java
deleted file mode 100644
index 4528d814a5..0000000000
--- a/application/src/main/java/org/thingsboard/server/controller/RuleController.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.controller;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-import org.thingsboard.server.common.data.EntityType;
-import org.thingsboard.server.common.data.audit.ActionType;
-import org.thingsboard.server.common.data.id.RuleId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.page.TextPageData;
-import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-import org.thingsboard.server.common.data.rule.RuleMetaData;
-import org.thingsboard.server.common.data.security.Authority;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
-
-import java.util.List;
-
-@RestController
-@RequestMapping("/api")
-public class RuleController extends BaseController {
-
- public static final String RULE_ID = "ruleId";
-
- @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
- @RequestMapping(value = "/rule/{ruleId}", method = RequestMethod.GET)
- @ResponseBody
- public RuleMetaData getRuleById(@PathVariable(RULE_ID) String strRuleId) throws ThingsboardException {
- checkParameter(RULE_ID, strRuleId);
- try {
- RuleId ruleId = new RuleId(toUUID(strRuleId));
- return checkRule(ruleService.findRuleById(ruleId));
- } catch (Exception e) {
- throw handleException(e);
- }
- }
-
-
- @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
- @RequestMapping(value = "/rule/token/{pluginToken}", method = RequestMethod.GET)
- @ResponseBody
- public List getRulesByPluginToken(@PathVariable("pluginToken") String pluginToken) throws ThingsboardException {
- checkParameter("pluginToken", pluginToken);
- try {
- PluginMetaData plugin = checkPlugin(pluginService.findPluginByApiToken(pluginToken));
- return ruleService.findPluginRules(plugin.getApiToken());
- } catch (Exception e) {
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
- @RequestMapping(value = "/rule", method = RequestMethod.POST)
- @ResponseBody
- public RuleMetaData saveRule(@RequestBody RuleMetaData source) throws ThingsboardException {
- try {
- boolean created = source.getId() == null;
- source.setTenantId(getCurrentUser().getTenantId());
- RuleMetaData rule = checkNotNull(ruleService.saveRule(source));
- actorService.onEntityStateChange(rule.getTenantId(), rule.getId(),
- created ? ComponentLifecycleEvent.CREATED : ComponentLifecycleEvent.UPDATED);
-
- logEntityAction(rule.getId(), rule,
- null,
- created ? ActionType.ADDED : ActionType.UPDATED, null);
-
- return rule;
- } catch (Exception e) {
-
- logEntityAction(emptyId(EntityType.RULE), source,
- null, source.getId() == null ? ActionType.ADDED : ActionType.UPDATED, e);
-
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
- @RequestMapping(value = "/rule/{ruleId}/activate", method = RequestMethod.POST)
- @ResponseStatus(value = HttpStatus.OK)
- public void activateRuleById(@PathVariable(RULE_ID) String strRuleId) throws ThingsboardException {
- checkParameter(RULE_ID, strRuleId);
- try {
- RuleId ruleId = new RuleId(toUUID(strRuleId));
- RuleMetaData rule = checkRule(ruleService.findRuleById(ruleId));
- ruleService.activateRuleById(ruleId);
- actorService.onEntityStateChange(rule.getTenantId(), rule.getId(), ComponentLifecycleEvent.ACTIVATED);
-
- logEntityAction(rule.getId(), rule,
- null,
- ActionType.ACTIVATED, null, strRuleId);
-
- } catch (Exception e) {
-
- logEntityAction(emptyId(EntityType.RULE),
- null,
- null,
- ActionType.ACTIVATED, e, strRuleId);
-
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
- @RequestMapping(value = "/rule/{ruleId}/suspend", method = RequestMethod.POST)
- @ResponseStatus(value = HttpStatus.OK)
- public void suspendRuleById(@PathVariable(RULE_ID) String strRuleId) throws ThingsboardException {
- checkParameter(RULE_ID, strRuleId);
- try {
- RuleId ruleId = new RuleId(toUUID(strRuleId));
- RuleMetaData rule = checkRule(ruleService.findRuleById(ruleId));
- ruleService.suspendRuleById(ruleId);
- actorService.onEntityStateChange(rule.getTenantId(), rule.getId(), ComponentLifecycleEvent.SUSPENDED);
-
- logEntityAction(rule.getId(), rule,
- null,
- ActionType.SUSPENDED, null, strRuleId);
-
- } catch (Exception e) {
-
- logEntityAction(emptyId(EntityType.RULE),
- null,
- null,
- ActionType.SUSPENDED, e, strRuleId);
-
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAuthority('SYS_ADMIN')")
- @RequestMapping(value = "/rule/system", params = {"limit"}, method = RequestMethod.GET)
- @ResponseBody
- public TextPageData getSystemRules(
- @RequestParam int limit,
- @RequestParam(required = false) String textSearch,
- @RequestParam(required = false) String idOffset,
- @RequestParam(required = false) String textOffset) throws ThingsboardException {
- try {
- TextPageLink pageLink = createPageLink(limit, textSearch, idOffset, textOffset);
- return checkNotNull(ruleService.findSystemRules(pageLink));
- } catch (Exception e) {
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAuthority('SYS_ADMIN')")
- @RequestMapping(value = "/rule/tenant/{tenantId}", params = {"limit"}, method = RequestMethod.GET)
- @ResponseBody
- public TextPageData getTenantRules(
- @PathVariable("tenantId") String strTenantId,
- @RequestParam int limit,
- @RequestParam(required = false) String textSearch,
- @RequestParam(required = false) String idOffset,
- @RequestParam(required = false) String textOffset) throws ThingsboardException {
- checkParameter("tenantId", strTenantId);
- try {
- TenantId tenantId = new TenantId(toUUID(strTenantId));
- TextPageLink pageLink = createPageLink(limit, textSearch, idOffset, textOffset);
- return checkNotNull(ruleService.findTenantRules(tenantId, pageLink));
- } catch (Exception e) {
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
- @RequestMapping(value = "/rules", method = RequestMethod.GET)
- @ResponseBody
- public List getRules() throws ThingsboardException {
- try {
- if (getCurrentUser().getAuthority() == Authority.SYS_ADMIN) {
- return checkNotNull(ruleService.findSystemRules());
- } else {
- TenantId tenantId = getCurrentUser().getTenantId();
- return checkNotNull(ruleService.findAllTenantRulesByTenantId(tenantId));
- }
- } catch (Exception e) {
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAuthority('TENANT_ADMIN')")
- @RequestMapping(value = "/rule", params = {"limit"}, method = RequestMethod.GET)
- @ResponseBody
- public TextPageData getTenantRules(
- @RequestParam int limit,
- @RequestParam(required = false) String textSearch,
- @RequestParam(required = false) String idOffset,
- @RequestParam(required = false) String textOffset) throws ThingsboardException {
- try {
- TenantId tenantId = getCurrentUser().getTenantId();
- TextPageLink pageLink = createPageLink(limit, textSearch, idOffset, textOffset);
- return checkNotNull(ruleService.findTenantRules(tenantId, pageLink));
- } catch (Exception e) {
- throw handleException(e);
- }
- }
-
- @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
- @RequestMapping(value = "/rule/{ruleId}", method = RequestMethod.DELETE)
- @ResponseStatus(value = HttpStatus.OK)
- public void deleteRule(@PathVariable(RULE_ID) String strRuleId) throws ThingsboardException {
- checkParameter(RULE_ID, strRuleId);
- try {
- RuleId ruleId = new RuleId(toUUID(strRuleId));
- RuleMetaData rule = checkRule(ruleService.findRuleById(ruleId));
- ruleService.deleteRuleById(ruleId);
- actorService.onEntityStateChange(rule.getTenantId(), rule.getId(), ComponentLifecycleEvent.DELETED);
-
- logEntityAction(ruleId, rule,
- null,
- ActionType.DELETED, null, strRuleId);
-
- } catch (Exception e) {
-
- logEntityAction(emptyId(EntityType.RULE),
- null,
- null,
- ActionType.DELETED, e, strRuleId);
-
- throw handleException(e);
- }
- }
-
-}
diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginConstants.java b/application/src/main/java/org/thingsboard/server/controller/TbUrlConstants.java
similarity index 81%
rename from extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginConstants.java
rename to application/src/main/java/org/thingsboard/server/controller/TbUrlConstants.java
index d7438f4fbc..15ee5ec255 100644
--- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginConstants.java
+++ b/application/src/main/java/org/thingsboard/server/controller/TbUrlConstants.java
@@ -13,13 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.api.plugins;
+package org.thingsboard.server.controller;
/**
- * @author Andrew Shvayka
+ * Created by ashvayka on 17.05.18.
*/
-public class PluginConstants {
+public class TbUrlConstants {
public static final String TELEMETRY_URL_PREFIX = "/api/plugins/telemetry";
public static final String RPC_URL_PREFIX = "/api/plugins/rpc";
- public static final String PLUGIN_URL_PREFIX = "/api/plugins";
}
diff --git a/application/src/main/java/org/thingsboard/server/controller/TelemetryController.java b/application/src/main/java/org/thingsboard/server/controller/TelemetryController.java
index 80ddc2ba32..b3bacd022e 100644
--- a/application/src/main/java/org/thingsboard/server/controller/TelemetryController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/TelemetryController.java
@@ -39,6 +39,7 @@ import org.springframework.web.context.request.async.DeferredResult;
import org.thingsboard.server.common.data.DataConstants;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.audit.ActionType;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.EntityIdFactory;
import org.thingsboard.server.common.data.id.UUIDBased;
@@ -58,15 +59,13 @@ import org.thingsboard.server.common.msg.core.TelemetryUploadRequest;
import org.thingsboard.server.common.transport.adaptor.JsonConverter;
import org.thingsboard.server.dao.attributes.AttributesService;
import org.thingsboard.server.dao.timeseries.TimeseriesService;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
-import org.thingsboard.server.extensions.api.exception.InvalidParametersException;
-import org.thingsboard.server.extensions.api.exception.UncheckedApiException;
-import org.thingsboard.server.extensions.api.plugins.PluginConstants;
-import org.thingsboard.server.extensions.core.plugin.telemetry.AttributeData;
-import org.thingsboard.server.extensions.core.plugin.telemetry.TsData;
import org.thingsboard.server.service.security.AccessValidator;
import org.thingsboard.server.service.security.model.SecurityUser;
+import org.thingsboard.server.service.telemetry.AttributeData;
import org.thingsboard.server.service.telemetry.TelemetrySubscriptionService;
+import org.thingsboard.server.service.telemetry.TsData;
+import org.thingsboard.server.service.telemetry.exception.InvalidParametersException;
+import org.thingsboard.server.service.telemetry.exception.UncheckedApiException;
import javax.annotation.Nullable;
import javax.annotation.PostConstruct;
@@ -84,7 +83,7 @@ import java.util.stream.Collectors;
* Created by ashvayka on 22.03.18.
*/
@RestController
-@RequestMapping(PluginConstants.TELEMETRY_URL_PREFIX)
+@RequestMapping(TbUrlConstants.TELEMETRY_URL_PREFIX)
@Slf4j
public class TelemetryController extends BaseController {
diff --git a/application/src/main/java/org/thingsboard/server/controller/UserController.java b/application/src/main/java/org/thingsboard/server/controller/UserController.java
index 52b207db74..5f6c1cef21 100644
--- a/application/src/main/java/org/thingsboard/server/controller/UserController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/UserController.java
@@ -18,10 +18,20 @@ package org.thingsboard.server.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+import org.thingsboard.rule.engine.api.MailService;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.User;
import org.thingsboard.server.common.data.audit.ActionType;
+import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.id.UserId;
@@ -29,9 +39,6 @@ import org.thingsboard.server.common.data.page.TextPageData;
import org.thingsboard.server.common.data.page.TextPageLink;
import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.data.security.UserCredentials;
-import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
-import org.thingsboard.rule.engine.api.MailService;
import org.thingsboard.server.service.security.model.SecurityUser;
import javax.servlet.http.HttpServletRequest;
diff --git a/application/src/main/java/org/thingsboard/server/controller/WidgetTypeController.java b/application/src/main/java/org/thingsboard/server/controller/WidgetTypeController.java
index 43ece89420..60f40a8f23 100644
--- a/application/src/main/java/org/thingsboard/server/controller/WidgetTypeController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/WidgetTypeController.java
@@ -17,13 +17,20 @@ package org.thingsboard.server.controller;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.id.WidgetTypeId;
import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.data.widget.WidgetType;
import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
import java.util.List;
diff --git a/application/src/main/java/org/thingsboard/server/controller/WidgetsBundleController.java b/application/src/main/java/org/thingsboard/server/controller/WidgetsBundleController.java
index bf89f13a1c..eb229fe7ed 100644
--- a/application/src/main/java/org/thingsboard/server/controller/WidgetsBundleController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/WidgetsBundleController.java
@@ -17,7 +17,15 @@ package org.thingsboard.server.controller;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.id.WidgetsBundleId;
import org.thingsboard.server.common.data.page.TextPageData;
@@ -25,7 +33,6 @@ import org.thingsboard.server.common.data.page.TextPageLink;
import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.data.widget.WidgetsBundle;
import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
import java.util.List;
diff --git a/application/src/main/java/org/thingsboard/server/controller/plugin/PluginApiController.java b/application/src/main/java/org/thingsboard/server/controller/plugin/PluginApiController.java
deleted file mode 100644
index 8d25db3702..0000000000
--- a/application/src/main/java/org/thingsboard/server/controller/plugin/PluginApiController.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.controller.plugin;
-
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import org.thingsboard.server.controller.BaseController;
-import org.thingsboard.server.extensions.api.plugins.PluginConstants;
-
-@RestController
-@RequestMapping(PluginConstants.PLUGIN_URL_PREFIX)
-@Slf4j
-public class PluginApiController extends BaseController {
-
-// @SuppressWarnings("rawtypes")
-// @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
-// @RequestMapping(value = "/{pluginToken}/**")
-// @ResponseStatus(value = HttpStatus.OK)
-// public DeferredResult processRequest(
-// @PathVariable("pluginToken") String pluginToken,
-// RequestEntity requestEntity,
-// HttpServletRequest request)
-// throws ThingsboardException {
-// log.debug("[{}] Going to process requst uri: {}", pluginToken, requestEntity.getUrl());
-// DeferredResult result = new DeferredResult();
-// PluginMetaData pluginMd = pluginService.findPluginByApiToken(pluginToken);
-// if (pluginMd == null) {
-// result.setErrorResult(new PluginNotFoundException("Plugin with token: " + pluginToken + " not found!"));
-// } else {
-// TenantId tenantId = getCurrentUser().getTenantId();
-// CustomerId customerId = getCurrentUser().getCustomerId();
-// if (validatePluginAccess(pluginMd, tenantId, customerId)) {
-// if(tenantId != null && ModelConstants.NULL_UUID.equals(tenantId.getId())){
-// tenantId = null;
-// }
-// UserId userId = getCurrentUser().getId();
-// String userName = getCurrentUser().getName();
-// PluginApiCallSecurityContext securityCtx = new PluginApiCallSecurityContext(pluginMd.getTenantId(), pluginMd.getId(),
-// tenantId, customerId, userId, userName);
-// actorService.process(new BasicPluginRestMsg(securityCtx, new RestRequest(requestEntity, request), result));
-// } else {
-// result.setResult(new ResponseEntity<>(HttpStatus.FORBIDDEN));
-// }
-//
-// }
-// return result;
-// }
-//
-// public static boolean validatePluginAccess(PluginMetaData pluginMd, TenantId tenantId, CustomerId customerId) {
-// boolean systemAdministrator = tenantId == null || ModelConstants.NULL_UUID.equals(tenantId.getId());
-// boolean tenantAdministrator = !systemAdministrator && (customerId == null || ModelConstants.NULL_UUID.equals(customerId.getId()));
-// boolean systemPlugin = ModelConstants.NULL_UUID.equals(pluginMd.getTenantId().getId());
-//
-// boolean validUser = false;
-// if (systemPlugin) {
-// if (pluginMd.isPublicAccess() || systemAdministrator) {
-// // All users can access public system plugins. Only system
-// // users can access private system plugins
-// validUser = true;
-// }
-// } else {
-// if ((pluginMd.isPublicAccess() || tenantAdministrator) && tenantId != null && tenantId.equals(pluginMd.getTenantId())) {
-// // All tenant users can access public tenant plugins. Only tenant
-// // administrator can access private tenant plugins
-// validUser = true;
-// }
-// }
-// return validUser;
-// }
-}
diff --git a/application/src/main/java/org/thingsboard/server/controller/plugin/PluginNotFoundException.java b/application/src/main/java/org/thingsboard/server/controller/plugin/PluginNotFoundException.java
deleted file mode 100644
index 7fc12cb96e..0000000000
--- a/application/src/main/java/org/thingsboard/server/controller/plugin/PluginNotFoundException.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.controller.plugin;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(HttpStatus.NOT_FOUND)
-public class PluginNotFoundException extends RuntimeException {
-
- private static final long serialVersionUID = 1L;
-
- public PluginNotFoundException(String message){
- super(message);
- }
-
-}
diff --git a/application/src/main/java/org/thingsboard/server/controller/plugin/PluginWebSocketMsgEndpoint.java b/application/src/main/java/org/thingsboard/server/controller/plugin/PluginWebSocketMsgEndpoint.java
deleted file mode 100644
index 5e04ac266d..0000000000
--- a/application/src/main/java/org/thingsboard/server/controller/plugin/PluginWebSocketMsgEndpoint.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.controller.plugin;
-
-import java.io.IOException;
-
-import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef;
-import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg;
-
-public interface PluginWebSocketMsgEndpoint {
-
- void send(PluginWebsocketMsg> wsMsg) throws IOException;
-
- void close(PluginWebsocketSessionRef sessionRef) throws IOException;
-}
diff --git a/application/src/main/java/org/thingsboard/server/controller/plugin/TbWebSocketHandler.java b/application/src/main/java/org/thingsboard/server/controller/plugin/TbWebSocketHandler.java
index 42d6a20d56..b771ee2c25 100644
--- a/application/src/main/java/org/thingsboard/server/controller/plugin/TbWebSocketHandler.java
+++ b/application/src/main/java/org/thingsboard/server/controller/plugin/TbWebSocketHandler.java
@@ -25,11 +25,8 @@ import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import org.thingsboard.server.config.WebSocketConfiguration;
-import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef;
-import org.thingsboard.server.extensions.api.plugins.ws.SessionEvent;
-import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg;
-import org.thingsboard.server.extensions.api.plugins.ws.msg.TextPluginWebSocketMsg;
import org.thingsboard.server.service.security.model.SecurityUser;
+import org.thingsboard.server.service.telemetry.SessionEvent;
import org.thingsboard.server.service.telemetry.TelemetryWebSocketMsgEndpoint;
import org.thingsboard.server.service.telemetry.TelemetryWebSocketService;
import org.thingsboard.server.service.telemetry.TelemetryWebSocketSessionRef;
@@ -43,7 +40,7 @@ import java.util.concurrent.ConcurrentMap;
@Service
@Slf4j
-public class TbWebSocketHandler extends TextWebSocketHandler implements PluginWebSocketMsgEndpoint, TelemetryWebSocketMsgEndpoint {
+public class TbWebSocketHandler extends TextWebSocketHandler implements TelemetryWebSocketMsgEndpoint {
private static final ConcurrentMap internalSessionMap = new ConcurrentHashMap<>();
private static final ConcurrentMap externalSessionMap = new ConcurrentHashMap<>();
@@ -183,43 +180,4 @@ public class TbWebSocketHandler extends TextWebSocketHandler implements PluginWe
}
}
- //TODO: remove
- @Override
- public void send(PluginWebsocketMsg> wsMsg) throws IOException {
- PluginWebsocketSessionRef sessionRef = wsMsg.getSessionRef();
- String externalId = sessionRef.getSessionId();
- log.debug("[{}] Processing {}", externalId, wsMsg);
- String internalId = externalSessionMap.get(externalId);
- if (internalId != null) {
- SessionMetaData sessionMd = internalSessionMap.get(internalId);
- if (sessionMd != null) {
- if (wsMsg instanceof TextPluginWebSocketMsg) {
- String payload = ((TextPluginWebSocketMsg) wsMsg).getPayload();
- sessionMd.session.sendMessage(new TextMessage(payload));
- }
- } else {
- log.warn("[{}][{}] Failed to find session by internal id", externalId, internalId);
- }
- } else {
- log.warn("[{}] Failed to find session by external id", externalId);
- }
- }
-
- //TODO: remove
- @Override
- public void close(PluginWebsocketSessionRef sessionRef) throws IOException {
- String externalId = sessionRef.getSessionId();
- log.debug("[{}] Processing close request", externalId);
- String internalId = externalSessionMap.get(externalId);
- if (internalId != null) {
- SessionMetaData sessionMd = internalSessionMap.get(internalId);
- if (sessionMd != null) {
- sessionMd.session.close(CloseStatus.NORMAL);
- } else {
- log.warn("[{}][{}] Failed to find session by internal id", externalId, internalId);
- }
- } else {
- log.warn("[{}] Failed to find session by external id", externalId);
- }
- }
}
diff --git a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
index 0b23a89718..d2ae77cc3d 100644
--- a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
+++ b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
@@ -23,9 +23,10 @@ import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
import org.thingsboard.server.service.component.ComponentDiscoveryService;
-import org.thingsboard.server.service.install.*;
-
-import java.nio.file.Paths;
+import org.thingsboard.server.service.install.DataUpdateService;
+import org.thingsboard.server.service.install.DatabaseSchemaService;
+import org.thingsboard.server.service.install.DatabaseUpgradeService;
+import org.thingsboard.server.service.install.SystemDataLoaderService;
@Service
@Profile("install")
diff --git a/application/src/main/java/org/thingsboard/server/service/cluster/discovery/DummyDiscoveryService.java b/application/src/main/java/org/thingsboard/server/service/cluster/discovery/DummyDiscoveryService.java
index 865325fe27..c21f1aa84c 100644
--- a/application/src/main/java/org/thingsboard/server/service/cluster/discovery/DummyDiscoveryService.java
+++ b/application/src/main/java/org/thingsboard/server/service/cluster/discovery/DummyDiscoveryService.java
@@ -20,7 +20,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Service;
-import org.thingsboard.server.service.environment.EnvironmentLogService;
import javax.annotation.PostConstruct;
import java.util.Collections;
diff --git a/application/src/main/java/org/thingsboard/server/service/cluster/discovery/ServerInstance.java b/application/src/main/java/org/thingsboard/server/service/cluster/discovery/ServerInstance.java
index bc386ebef7..6eee5f3061 100644
--- a/application/src/main/java/org/thingsboard/server/service/cluster/discovery/ServerInstance.java
+++ b/application/src/main/java/org/thingsboard/server/service/cluster/discovery/ServerInstance.java
@@ -15,7 +15,6 @@
*/
package org.thingsboard.server.service.cluster.discovery;
-import lombok.AccessLevel;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;
diff --git a/application/src/main/java/org/thingsboard/server/service/cluster/routing/ClusterRoutingService.java b/application/src/main/java/org/thingsboard/server/service/cluster/routing/ClusterRoutingService.java
index b29668c36a..272073dd23 100644
--- a/application/src/main/java/org/thingsboard/server/service/cluster/routing/ClusterRoutingService.java
+++ b/application/src/main/java/org/thingsboard/server/service/cluster/routing/ClusterRoutingService.java
@@ -16,9 +16,7 @@
package org.thingsboard.server.service.cluster.routing;
import org.thingsboard.server.common.data.id.EntityId;
-import org.thingsboard.server.common.data.id.UUIDBased;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
-import org.thingsboard.server.service.cluster.discovery.ServerInstance;
import java.util.Optional;
import java.util.UUID;
diff --git a/application/src/main/java/org/thingsboard/server/service/cluster/routing/ConsistentClusterRoutingService.java b/application/src/main/java/org/thingsboard/server/service/cluster/routing/ConsistentClusterRoutingService.java
index 8ab6f99bfc..5087b5ce46 100644
--- a/application/src/main/java/org/thingsboard/server/service/cluster/routing/ConsistentClusterRoutingService.java
+++ b/application/src/main/java/org/thingsboard/server/service/cluster/routing/ConsistentClusterRoutingService.java
@@ -23,7 +23,6 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.thingsboard.server.common.data.id.EntityId;
-import org.thingsboard.server.common.data.id.UUIDBased;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
import org.thingsboard.server.service.cluster.discovery.DiscoveryService;
import org.thingsboard.server.service.cluster.discovery.DiscoveryServiceListener;
diff --git a/application/src/main/java/org/thingsboard/server/service/cluster/rpc/ClusterGrpcService.java b/application/src/main/java/org/thingsboard/server/service/cluster/rpc/ClusterGrpcService.java
index 923621917a..19715b826f 100644
--- a/application/src/main/java/org/thingsboard/server/service/cluster/rpc/ClusterGrpcService.java
+++ b/application/src/main/java/org/thingsboard/server/service/cluster/rpc/ClusterGrpcService.java
@@ -26,9 +26,7 @@ import org.thingsboard.server.actors.rpc.RpcBroadcastMsg;
import org.thingsboard.server.actors.rpc.RpcSessionCreateRequestMsg;
import org.thingsboard.server.common.msg.TbActorMsg;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
-
import org.thingsboard.server.gen.cluster.ClusterAPIProtos;
-
import org.thingsboard.server.gen.cluster.ClusterRpcServiceGrpc;
import org.thingsboard.server.service.cluster.discovery.ServerInstance;
import org.thingsboard.server.service.cluster.discovery.ServerInstanceService;
diff --git a/application/src/main/java/org/thingsboard/server/service/component/AnnotationComponentDiscoveryService.java b/application/src/main/java/org/thingsboard/server/service/component/AnnotationComponentDiscoveryService.java
index ee4ec2424d..d49a63d683 100644
--- a/application/src/main/java/org/thingsboard/server/service/component/AnnotationComponentDiscoveryService.java
+++ b/application/src/main/java/org/thingsboard/server/service/component/AnnotationComponentDiscoveryService.java
@@ -15,11 +15,9 @@
*/
package org.thingsboard.server.service.component;
+import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.google.common.base.Charsets;
-import com.google.common.io.Resources;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -28,17 +26,24 @@ import org.springframework.context.annotation.ClassPathScanningCandidateComponen
import org.springframework.core.env.Environment;
import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.stereotype.Service;
-import org.thingsboard.rule.engine.api.*;
+import org.thingsboard.rule.engine.api.NodeConfiguration;
+import org.thingsboard.rule.engine.api.NodeDefinition;
+import org.thingsboard.rule.engine.api.RuleNode;
import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
import org.thingsboard.server.common.data.plugin.ComponentType;
import org.thingsboard.server.dao.component.ComponentDescriptorService;
-import org.thingsboard.server.extensions.api.component.*;
import javax.annotation.PostConstruct;
-import java.io.IOException;
import java.lang.annotation.Annotation;
-import java.util.*;
-import java.util.stream.Collectors;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
@Service
@Slf4j
@@ -112,7 +117,6 @@ public class AnnotationComponentDiscoveryService implements ComponentDiscoverySe
try {
scannedComponent.setType(type);
Class> clazz = Class.forName(clazzName);
- String descriptorResourceName;
switch (type) {
case ENRICHMENT:
case FILTER:
@@ -128,34 +132,6 @@ public class AnnotationComponentDiscoveryService implements ComponentDiscoverySe
configurationDescriptor.set("nodeDefinition", node);
scannedComponent.setConfigurationDescriptor(configurationDescriptor);
break;
- case OLD_ACTION:
- Action oldActionAnnotation = clazz.getAnnotation(Action.class);
- scannedComponent.setName(oldActionAnnotation.name());
- scannedComponent.setScope(oldActionAnnotation.scope());
- descriptorResourceName = oldActionAnnotation.descriptor();
- scannedComponent.setConfigurationDescriptor(mapper.readTree(
- Resources.toString(Resources.getResource(descriptorResourceName), Charsets.UTF_8)));
- break;
- case PLUGIN:
- Plugin pluginAnnotation = clazz.getAnnotation(Plugin.class);
- scannedComponent.setName(pluginAnnotation.name());
- scannedComponent.setScope(pluginAnnotation.scope());
- descriptorResourceName = pluginAnnotation.descriptor();
- for (Class> actionClazz : pluginAnnotation.actions()) {
- ComponentDescriptor actionComponent = getComponent(actionClazz.getName())
- .orElseThrow(() -> {
- log.error("Can't initialize plugin {}, due to missing action {}!", def.getBeanClassName(), actionClazz.getName());
- return new ClassNotFoundException("Action: " + actionClazz.getName() + "is missing!");
- });
- if (actionComponent.getType() != ComponentType.OLD_ACTION) {
- log.error("Plugin {} action {} has wrong component type!", def.getBeanClassName(), actionClazz.getName(), actionComponent.getType());
- throw new RuntimeException("Plugin " + def.getBeanClassName() + "action " + actionClazz.getName() + " has wrong component type!");
- }
- }
- scannedComponent.setActions(Arrays.stream(pluginAnnotation.actions()).map(Class::getName).collect(Collectors.joining(",")));
- scannedComponent.setConfigurationDescriptor(mapper.readTree(
- Resources.toString(Resources.getResource(descriptorResourceName), Charsets.UTF_8)));
- break;
default:
throw new RuntimeException(type + " is not supported yet!");
}
@@ -212,13 +188,7 @@ public class AnnotationComponentDiscoveryService implements ComponentDiscoverySe
@Override
public void discoverComponents() {
-
registerRuleNodeComponents();
-
- registerComponents(ComponentType.OLD_ACTION, Action.class);
-
- registerComponents(ComponentType.PLUGIN, Plugin.class);
-
log.info("Found following definitions: {}", components.values());
}
@@ -244,22 +214,4 @@ public class AnnotationComponentDiscoveryService implements ComponentDiscoverySe
public Optional getComponent(String clazz) {
return Optional.ofNullable(components.get(clazz));
}
-
- @Override
- public List getPluginActions(String pluginClazz) {
- Optional pluginOpt = getComponent(pluginClazz);
- if (pluginOpt.isPresent()) {
- ComponentDescriptor plugin = pluginOpt.get();
- if (ComponentType.PLUGIN != plugin.getType()) {
- throw new IllegalArgumentException(pluginClazz + " is not a plugin!");
- }
- List result = new ArrayList<>();
- for (String action : plugin.getActions().split(",")) {
- getComponent(action).ifPresent(result::add);
- }
- return result;
- } else {
- throw new IllegalArgumentException(pluginClazz + " is not a component!");
- }
- }
}
diff --git a/application/src/main/java/org/thingsboard/server/service/component/ComponentDiscoveryService.java b/application/src/main/java/org/thingsboard/server/service/component/ComponentDiscoveryService.java
index 7a15a1b253..3ee3251242 100644
--- a/application/src/main/java/org/thingsboard/server/service/component/ComponentDiscoveryService.java
+++ b/application/src/main/java/org/thingsboard/server/service/component/ComponentDiscoveryService.java
@@ -35,6 +35,4 @@ public interface ComponentDiscoveryService {
Optional getComponent(String clazz);
- List getPluginActions(String pluginClazz);
-
}
diff --git a/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java b/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java
index 8478021f32..dd76b21844 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java
@@ -17,7 +17,6 @@ package org.thingsboard.server.service.install;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
import org.thingsboard.server.dao.cassandra.CassandraInstallCluster;
diff --git a/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseUpgradeService.java b/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseUpgradeService.java
index e8891269db..d38cddd4a1 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseUpgradeService.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseUpgradeService.java
@@ -18,7 +18,6 @@ package org.thingsboard.server.service.install;
import com.datastax.driver.core.KeyspaceMetadata;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
import org.thingsboard.server.dao.cassandra.CassandraCluster;
@@ -33,7 +32,17 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
-import static org.thingsboard.server.service.install.DatabaseHelper.*;
+import static org.thingsboard.server.service.install.DatabaseHelper.ADDITIONAL_INFO;
+import static org.thingsboard.server.service.install.DatabaseHelper.ASSET;
+import static org.thingsboard.server.service.install.DatabaseHelper.ASSIGNED_CUSTOMERS;
+import static org.thingsboard.server.service.install.DatabaseHelper.CONFIGURATION;
+import static org.thingsboard.server.service.install.DatabaseHelper.CUSTOMER_ID;
+import static org.thingsboard.server.service.install.DatabaseHelper.DASHBOARD;
+import static org.thingsboard.server.service.install.DatabaseHelper.DEVICE;
+import static org.thingsboard.server.service.install.DatabaseHelper.ID;
+import static org.thingsboard.server.service.install.DatabaseHelper.SEARCH_TEXT;
+import static org.thingsboard.server.service.install.DatabaseHelper.TENANT_ID;
+import static org.thingsboard.server.service.install.DatabaseHelper.TITLE;
@Service
@NoSqlDao
diff --git a/application/src/main/java/org/thingsboard/server/service/install/DatabaseHelper.java b/application/src/main/java/org/thingsboard/server/service/install/DatabaseHelper.java
index 4a21412e3b..2f9b4a5ed3 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/DatabaseHelper.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/DatabaseHelper.java
@@ -30,7 +30,11 @@ import org.thingsboard.server.dao.dashboard.DashboardService;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
/**
* Created by igor on 2/27/18.
diff --git a/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java b/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java
index e33c2e3940..aa8c60b467 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/DefaultSystemDataLoaderService.java
@@ -15,46 +15,34 @@
*/
package org.thingsboard.server.service.install;
-import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
-import org.thingsboard.server.common.data.*;
+import org.thingsboard.server.common.data.AdminSettings;
+import org.thingsboard.server.common.data.Customer;
+import org.thingsboard.server.common.data.Device;
+import org.thingsboard.server.common.data.Tenant;
+import org.thingsboard.server.common.data.User;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-import org.thingsboard.server.common.data.rule.RuleMetaData;
import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.data.security.DeviceCredentials;
import org.thingsboard.server.common.data.security.UserCredentials;
-import org.thingsboard.server.common.data.widget.WidgetType;
import org.thingsboard.server.common.data.widget.WidgetsBundle;
import org.thingsboard.server.dao.customer.CustomerService;
-import org.thingsboard.server.dao.dashboard.DashboardService;
import org.thingsboard.server.dao.device.DeviceCredentialsService;
import org.thingsboard.server.dao.device.DeviceService;
import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.dao.plugin.PluginService;
-import org.thingsboard.server.dao.rule.RuleService;
import org.thingsboard.server.dao.settings.AdminSettingsService;
import org.thingsboard.server.dao.tenant.TenantService;
import org.thingsboard.server.dao.user.UserService;
-import org.thingsboard.server.dao.widget.WidgetTypeService;
import org.thingsboard.server.dao.widget.WidgetsBundleService;
-import java.io.IOException;
-import java.nio.file.DirectoryStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-
@Service
@Profile("install")
@Slf4j
diff --git a/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java b/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java
index de43966448..0ad0edef13 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java
@@ -16,7 +16,6 @@
package org.thingsboard.server.service.install;
import com.fasterxml.jackson.databind.JsonNode;
-import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
diff --git a/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java
index 535e0f96da..1daf66086a 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java
@@ -28,7 +28,6 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.sql.Connection;
import java.sql.DriverManager;
-import java.sql.PreparedStatement;
@Service
@Profile("install")
diff --git a/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java
index 39db831cff..ecb607084c 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java
@@ -22,7 +22,6 @@ import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
import org.thingsboard.server.dao.dashboard.DashboardService;
import org.thingsboard.server.dao.util.SqlDao;
-import org.thingsboard.server.service.install.cql.CassandraDbHelper;
import org.thingsboard.server.service.install.sql.SqlDbHelper;
import java.nio.charset.Charset;
@@ -30,11 +29,16 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.sql.Connection;
-import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
-import static org.thingsboard.server.service.install.DatabaseHelper.*;
+import static org.thingsboard.server.service.install.DatabaseHelper.ASSIGNED_CUSTOMERS;
import static org.thingsboard.server.service.install.DatabaseHelper.CONFIGURATION;
+import static org.thingsboard.server.service.install.DatabaseHelper.CUSTOMER_ID;
+import static org.thingsboard.server.service.install.DatabaseHelper.DASHBOARD;
+import static org.thingsboard.server.service.install.DatabaseHelper.ID;
+import static org.thingsboard.server.service.install.DatabaseHelper.SEARCH_TEXT;
+import static org.thingsboard.server.service.install.DatabaseHelper.TENANT_ID;
+import static org.thingsboard.server.service.install.DatabaseHelper.TITLE;
@Service
@Profile("install")
diff --git a/application/src/main/java/org/thingsboard/server/service/install/cql/CassandraDbHelper.java b/application/src/main/java/org/thingsboard/server/service/install/cql/CassandraDbHelper.java
index c13d70ecb7..bdf980fea2 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/cql/CassandraDbHelper.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/cql/CassandraDbHelper.java
@@ -15,7 +15,16 @@
*/
package org.thingsboard.server.service.install.cql;
-import com.datastax.driver.core.*;
+import com.datastax.driver.core.BoundStatement;
+import com.datastax.driver.core.DataType;
+import com.datastax.driver.core.KeyspaceMetadata;
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.Row;
+import com.datastax.driver.core.Session;
+import com.datastax.driver.core.SimpleStatement;
+import com.datastax.driver.core.Statement;
+import com.datastax.driver.core.TableMetadata;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVPrinter;
@@ -25,7 +34,11 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.UUID;
import static org.thingsboard.server.service.install.DatabaseHelper.CSV_DUMP_FORMAT;
diff --git a/application/src/main/java/org/thingsboard/server/service/install/sql/SqlDbHelper.java b/application/src/main/java/org/thingsboard/server/service/install/sql/SqlDbHelper.java
index f6c4749ea5..6e3d354ab4 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/sql/SqlDbHelper.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/sql/SqlDbHelper.java
@@ -23,7 +23,12 @@ import org.apache.commons.csv.CSVRecord;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.sql.*;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
diff --git a/application/src/main/java/org/thingsboard/server/service/rpc/DefaultDeviceRpcService.java b/application/src/main/java/org/thingsboard/server/service/rpc/DefaultDeviceRpcService.java
index 6a1a69ae68..bd0071a156 100644
--- a/application/src/main/java/org/thingsboard/server/service/rpc/DefaultDeviceRpcService.java
+++ b/application/src/main/java/org/thingsboard/server/service/rpc/DefaultDeviceRpcService.java
@@ -15,47 +15,30 @@
*/
package org.thingsboard.server.service.rpc;
-import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
-import org.springframework.web.context.request.async.DeferredResult;
+import org.thingsboard.rule.engine.api.RpcError;
+import org.thingsboard.rule.engine.api.msg.ToDeviceActorNotificationMsg;
import org.thingsboard.server.actors.service.ActorService;
-import org.thingsboard.server.common.data.audit.ActionType;
import org.thingsboard.server.common.data.id.DeviceId;
-import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.id.UUIDBased;
-import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody;
-import org.thingsboard.server.common.msg.TbActorMsg;
import org.thingsboard.server.common.msg.cluster.SendToClusterMsg;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
import org.thingsboard.server.common.msg.core.ToServerRpcResponseMsg;
import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
-import org.thingsboard.server.controller.BaseController;
import org.thingsboard.server.dao.audit.AuditLogService;
-import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
-import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
-import org.thingsboard.server.extensions.api.plugins.msg.RpcError;
-import org.thingsboard.server.gen.cluster.ClusterAPIProtos;
import org.thingsboard.server.service.cluster.routing.ClusterRoutingService;
import org.thingsboard.server.service.cluster.rpc.ClusterRpcService;
-import org.thingsboard.server.service.security.model.SecurityUser;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
-import java.io.IOException;
-import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
-import java.util.function.BiConsumer;
import java.util.function.Consumer;
/**
diff --git a/application/src/main/java/org/thingsboard/server/service/rpc/DeviceRpcService.java b/application/src/main/java/org/thingsboard/server/service/rpc/DeviceRpcService.java
index 429912000c..f6e3543b34 100644
--- a/application/src/main/java/org/thingsboard/server/service/rpc/DeviceRpcService.java
+++ b/application/src/main/java/org/thingsboard/server/service/rpc/DeviceRpcService.java
@@ -19,7 +19,6 @@ import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
-import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse;
import java.util.function.Consumer;
diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/FromDeviceRpcResponse.java b/application/src/main/java/org/thingsboard/server/service/rpc/FromDeviceRpcResponse.java
similarity index 92%
rename from extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/FromDeviceRpcResponse.java
rename to application/src/main/java/org/thingsboard/server/service/rpc/FromDeviceRpcResponse.java
index 6ca00d29b2..855aed49bb 100644
--- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/FromDeviceRpcResponse.java
+++ b/application/src/main/java/org/thingsboard/server/service/rpc/FromDeviceRpcResponse.java
@@ -13,11 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.api.plugins.msg;
+package org.thingsboard.server.service.rpc;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
+import org.thingsboard.rule.engine.api.RpcError;
import java.util.Optional;
import java.util.UUID;
diff --git a/application/src/main/java/org/thingsboard/server/service/rpc/ToDeviceRpcRequestActorMsg.java b/application/src/main/java/org/thingsboard/server/service/rpc/ToDeviceRpcRequestActorMsg.java
index ae7cab5b2b..acdd9fccc4 100644
--- a/application/src/main/java/org/thingsboard/server/service/rpc/ToDeviceRpcRequestActorMsg.java
+++ b/application/src/main/java/org/thingsboard/server/service/rpc/ToDeviceRpcRequestActorMsg.java
@@ -18,12 +18,12 @@ package org.thingsboard.server.service.rpc;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
+import org.thingsboard.rule.engine.api.msg.ToDeviceActorNotificationMsg;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.msg.MsgType;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
-import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
import java.util.Optional;
diff --git a/application/src/main/java/org/thingsboard/server/service/rpc/ToServerRpcResponseActorMsg.java b/application/src/main/java/org/thingsboard/server/service/rpc/ToServerRpcResponseActorMsg.java
index f3183ec846..9875312bb7 100644
--- a/application/src/main/java/org/thingsboard/server/service/rpc/ToServerRpcResponseActorMsg.java
+++ b/application/src/main/java/org/thingsboard/server/service/rpc/ToServerRpcResponseActorMsg.java
@@ -18,12 +18,12 @@ package org.thingsboard.server.service.rpc;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
+import org.thingsboard.rule.engine.api.msg.ToDeviceActorNotificationMsg;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.msg.MsgType;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
import org.thingsboard.server.common.msg.core.ToServerRpcResponseMsg;
-import org.thingsboard.server.extensions.api.device.ToDeviceActorNotificationMsg;
import java.util.Optional;
diff --git a/application/src/main/java/org/thingsboard/server/service/security/AccessValidator.java b/application/src/main/java/org/thingsboard/server/service/security/AccessValidator.java
index 8487279ca6..600820ec73 100644
--- a/application/src/main/java/org/thingsboard/server/service/security/AccessValidator.java
+++ b/application/src/main/java/org/thingsboard/server/service/security/AccessValidator.java
@@ -24,12 +24,11 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.async.DeferredResult;
-import org.thingsboard.server.actors.plugin.ValidationResult;
-import org.thingsboard.server.common.data.BaseData;
import org.thingsboard.server.common.data.Customer;
import org.thingsboard.server.common.data.Device;
import org.thingsboard.server.common.data.Tenant;
import org.thingsboard.server.common.data.asset.Asset;
+import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.AssetId;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.DeviceId;
@@ -48,9 +47,8 @@ import org.thingsboard.server.dao.device.DeviceService;
import org.thingsboard.server.dao.rule.RuleChainService;
import org.thingsboard.server.dao.tenant.TenantService;
import org.thingsboard.server.dao.user.UserService;
-import org.thingsboard.server.common.data.exception.ThingsboardException;
-import org.thingsboard.server.extensions.api.exception.ToErrorResponseEntity;
import org.thingsboard.server.service.security.model.SecurityUser;
+import org.thingsboard.server.service.telemetry.exception.ToErrorResponseEntity;
import javax.annotation.Nullable;
import javax.annotation.PostConstruct;
diff --git a/application/src/main/java/org/thingsboard/server/service/security/ValidationCallback.java b/application/src/main/java/org/thingsboard/server/service/security/ValidationCallback.java
index 2b91c60a3e..81ab9b4eb6 100644
--- a/application/src/main/java/org/thingsboard/server/service/security/ValidationCallback.java
+++ b/application/src/main/java/org/thingsboard/server/service/security/ValidationCallback.java
@@ -16,12 +16,10 @@
package org.thingsboard.server.service.security;
import com.google.common.util.concurrent.FutureCallback;
-import org.thingsboard.server.actors.plugin.ValidationResult;
-import org.thingsboard.server.actors.plugin.ValidationResultCode;
-import org.thingsboard.server.extensions.api.exception.AccessDeniedException;
-import org.thingsboard.server.extensions.api.exception.EntityNotFoundException;
-import org.thingsboard.server.extensions.api.exception.InternalErrorException;
-import org.thingsboard.server.extensions.api.exception.UnauthorizedException;
+import org.thingsboard.server.service.telemetry.exception.AccessDeniedException;
+import org.thingsboard.server.service.telemetry.exception.EntityNotFoundException;
+import org.thingsboard.server.service.telemetry.exception.InternalErrorException;
+import org.thingsboard.server.service.telemetry.exception.UnauthorizedException;
/**
* Created by ashvayka on 31.03.18.
diff --git a/application/src/main/java/org/thingsboard/server/actors/plugin/ValidationResult.java b/application/src/main/java/org/thingsboard/server/service/security/ValidationResult.java
similarity index 97%
rename from application/src/main/java/org/thingsboard/server/actors/plugin/ValidationResult.java
rename to application/src/main/java/org/thingsboard/server/service/security/ValidationResult.java
index 0319a3e4f9..5f828a77d4 100644
--- a/application/src/main/java/org/thingsboard/server/actors/plugin/ValidationResult.java
+++ b/application/src/main/java/org/thingsboard/server/service/security/ValidationResult.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.actors.plugin;
+package org.thingsboard.server.service.security;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/application/src/main/java/org/thingsboard/server/actors/plugin/ValidationResultCode.java b/application/src/main/java/org/thingsboard/server/service/security/ValidationResultCode.java
similarity index 88%
rename from application/src/main/java/org/thingsboard/server/actors/plugin/ValidationResultCode.java
rename to application/src/main/java/org/thingsboard/server/service/security/ValidationResultCode.java
index 2fd93ecd18..e7d016caf0 100644
--- a/application/src/main/java/org/thingsboard/server/actors/plugin/ValidationResultCode.java
+++ b/application/src/main/java/org/thingsboard/server/service/security/ValidationResultCode.java
@@ -13,8 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.actors.plugin;
+package org.thingsboard.server.service.security;
+/**
+ * Created by ashvayka on 17.05.18.
+ */
public enum ValidationResultCode {
OK,
UNAUTHORIZED,
diff --git a/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/JwtAuthenticationProvider.java b/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/JwtAuthenticationProvider.java
index a46fb48840..527e2bed83 100644
--- a/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/JwtAuthenticationProvider.java
+++ b/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/JwtAuthenticationProvider.java
@@ -15,24 +15,16 @@
*/
package org.thingsboard.server.service.security.auth.jwt;
-import io.jsonwebtoken.Claims;
-import io.jsonwebtoken.Jws;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.stereotype.Component;
-import org.thingsboard.server.config.JwtSettings;
import org.thingsboard.server.service.security.auth.JwtAuthenticationToken;
import org.thingsboard.server.service.security.model.SecurityUser;
import org.thingsboard.server.service.security.model.token.JwtTokenFactory;
import org.thingsboard.server.service.security.model.token.RawAccessJwtToken;
-import java.util.List;
-import java.util.stream.Collectors;
-
@Component
@SuppressWarnings("unchecked")
public class JwtAuthenticationProvider implements AuthenticationProvider {
diff --git a/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/JwtTokenAuthenticationProcessingFilter.java b/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/JwtTokenAuthenticationProcessingFilter.java
index f4da3a539c..7008662ecd 100644
--- a/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/JwtTokenAuthenticationProcessingFilter.java
+++ b/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/JwtTokenAuthenticationProcessingFilter.java
@@ -23,7 +23,6 @@ import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import org.springframework.security.web.util.matcher.RequestMatcher;
-import org.thingsboard.server.config.ThingsboardSecurityConfiguration;
import org.thingsboard.server.service.security.auth.JwtAuthenticationToken;
import org.thingsboard.server.service.security.auth.jwt.extractor.TokenExtractor;
import org.thingsboard.server.service.security.model.token.RawAccessJwtToken;
diff --git a/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/RefreshTokenAuthenticationProvider.java b/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/RefreshTokenAuthenticationProvider.java
index 08de9ef39d..2e68b35cfa 100644
--- a/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/RefreshTokenAuthenticationProvider.java
+++ b/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/RefreshTokenAuthenticationProvider.java
@@ -16,7 +16,10 @@
package org.thingsboard.server.service.security.auth.jwt;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.authentication.*;
+import org.springframework.security.authentication.AuthenticationProvider;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.DisabledException;
+import org.springframework.security.authentication.InsufficientAuthenticationException;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
@@ -26,7 +29,6 @@ import org.thingsboard.server.common.data.Customer;
import org.thingsboard.server.common.data.User;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.EntityId;
-import org.thingsboard.server.common.data.id.UUIDBased;
import org.thingsboard.server.common.data.id.UserId;
import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.data.security.UserCredentials;
diff --git a/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/RefreshTokenProcessingFilter.java b/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/RefreshTokenProcessingFilter.java
index a016f3ad03..fff15f295d 100644
--- a/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/RefreshTokenProcessingFilter.java
+++ b/application/src/main/java/org/thingsboard/server/service/security/auth/jwt/RefreshTokenProcessingFilter.java
@@ -18,8 +18,6 @@ package org.thingsboard.server.service.security.auth.jwt;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationServiceException;
import org.springframework.security.core.Authentication;
diff --git a/application/src/main/java/org/thingsboard/server/service/security/auth/rest/RestAuthenticationProvider.java b/application/src/main/java/org/thingsboard/server/service/security/auth/rest/RestAuthenticationProvider.java
index 36f2199ba3..195208a931 100644
--- a/application/src/main/java/org/thingsboard/server/service/security/auth/rest/RestAuthenticationProvider.java
+++ b/application/src/main/java/org/thingsboard/server/service/security/auth/rest/RestAuthenticationProvider.java
@@ -16,7 +16,11 @@
package org.thingsboard.server.service.security.auth.rest;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.authentication.*;
+import org.springframework.security.authentication.AuthenticationProvider;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.DisabledException;
+import org.springframework.security.authentication.InsufficientAuthenticationException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
@@ -27,7 +31,6 @@ import org.thingsboard.server.common.data.Customer;
import org.thingsboard.server.common.data.User;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.EntityId;
-import org.thingsboard.server.common.data.id.UUIDBased;
import org.thingsboard.server.common.data.id.UserId;
import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.data.security.UserCredentials;
diff --git a/application/src/main/java/org/thingsboard/server/service/security/auth/rest/RestLoginProcessingFilter.java b/application/src/main/java/org/thingsboard/server/service/security/auth/rest/RestLoginProcessingFilter.java
index 4f6a87ce07..03c1b34fa3 100644
--- a/application/src/main/java/org/thingsboard/server/service/security/auth/rest/RestLoginProcessingFilter.java
+++ b/application/src/main/java/org/thingsboard/server/service/security/auth/rest/RestLoginProcessingFilter.java
@@ -18,8 +18,6 @@ package org.thingsboard.server.service.security.auth.rest;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationServiceException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
diff --git a/application/src/main/java/org/thingsboard/server/service/security/auth/rest/RestPublicLoginProcessingFilter.java b/application/src/main/java/org/thingsboard/server/service/security/auth/rest/RestPublicLoginProcessingFilter.java
index 5f8488e39c..2bbeddf053 100644
--- a/application/src/main/java/org/thingsboard/server/service/security/auth/rest/RestPublicLoginProcessingFilter.java
+++ b/application/src/main/java/org/thingsboard/server/service/security/auth/rest/RestPublicLoginProcessingFilter.java
@@ -18,8 +18,6 @@ package org.thingsboard.server.service.security.auth.rest;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationServiceException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
diff --git a/application/src/main/java/org/thingsboard/server/service/security/model/SecurityUser.java b/application/src/main/java/org/thingsboard/server/service/security/model/SecurityUser.java
index 91ee7bf6d3..f4a28a03a6 100644
--- a/application/src/main/java/org/thingsboard/server/service/security/model/SecurityUser.java
+++ b/application/src/main/java/org/thingsboard/server/service/security/model/SecurityUser.java
@@ -18,7 +18,6 @@ package org.thingsboard.server.service.security.model;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.thingsboard.server.common.data.User;
-import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.UserId;
import java.util.Collection;
diff --git a/application/src/main/java/org/thingsboard/server/service/security/model/token/RawAccessJwtToken.java b/application/src/main/java/org/thingsboard/server/service/security/model/token/RawAccessJwtToken.java
index db6a33669f..544b6fdea4 100644
--- a/application/src/main/java/org/thingsboard/server/service/security/model/token/RawAccessJwtToken.java
+++ b/application/src/main/java/org/thingsboard/server/service/security/model/token/RawAccessJwtToken.java
@@ -15,7 +15,13 @@
*/
package org.thingsboard.server.service.security.model.token;
-import io.jsonwebtoken.*;
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.ExpiredJwtException;
+import io.jsonwebtoken.Jws;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.MalformedJwtException;
+import io.jsonwebtoken.SignatureException;
+import io.jsonwebtoken.UnsupportedJwtException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.authentication.BadCredentialsException;
diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/AttributeData.java b/application/src/main/java/org/thingsboard/server/service/telemetry/AttributeData.java
similarity index 95%
rename from extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/AttributeData.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/AttributeData.java
index e4b73bc572..d5018167dd 100644
--- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/AttributeData.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/AttributeData.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.core.plugin.telemetry;
+package org.thingsboard.server.service.telemetry;
public class AttributeData implements Comparable{
diff --git a/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetrySubscriptionService.java b/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetrySubscriptionService.java
index f3cd32cbfc..50ba4deb5c 100644
--- a/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetrySubscriptionService.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetrySubscriptionService.java
@@ -45,17 +45,15 @@ import org.thingsboard.server.common.data.kv.TsKvQuery;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
import org.thingsboard.server.dao.attributes.AttributesService;
import org.thingsboard.server.dao.timeseries.TimeseriesService;
-import org.thingsboard.server.extensions.api.plugins.PluginContext;
-import org.thingsboard.server.extensions.core.plugin.telemetry.handlers.TelemetryFeature;
-import org.thingsboard.server.extensions.core.plugin.telemetry.sub.Subscription;
-import org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionErrorCode;
-import org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionState;
-import org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionUpdate;
import org.thingsboard.server.gen.cluster.ClusterAPIProtos;
import org.thingsboard.server.service.cluster.routing.ClusterRoutingService;
import org.thingsboard.server.service.cluster.rpc.ClusterRpcService;
import org.thingsboard.server.service.state.DefaultDeviceStateService;
import org.thingsboard.server.service.state.DeviceStateService;
+import org.thingsboard.server.service.telemetry.sub.Subscription;
+import org.thingsboard.server.service.telemetry.sub.SubscriptionErrorCode;
+import org.thingsboard.server.service.telemetry.sub.SubscriptionState;
+import org.thingsboard.server.service.telemetry.sub.SubscriptionUpdate;
import javax.annotation.Nullable;
import javax.annotation.PostConstruct;
diff --git a/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetryWebSocketService.java b/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetryWebSocketService.java
index 3ea0ceefab..3b2d69030e 100644
--- a/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetryWebSocketService.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetryWebSocketService.java
@@ -21,12 +21,10 @@ import com.google.common.base.Function;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
-import java.util.function.Consumer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
-import org.thingsboard.server.actors.plugin.ValidationResult;
import org.thingsboard.server.common.data.DataConstants;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.EntityIdFactory;
@@ -38,20 +36,18 @@ import org.thingsboard.server.common.data.kv.TsKvEntry;
import org.thingsboard.server.common.data.kv.TsKvQuery;
import org.thingsboard.server.dao.attributes.AttributesService;
import org.thingsboard.server.dao.timeseries.TimeseriesService;
-import org.thingsboard.server.extensions.api.exception.UnauthorizedException;
-import org.thingsboard.server.extensions.api.plugins.PluginContext;
-import org.thingsboard.server.extensions.api.plugins.ws.SessionEvent;
-import org.thingsboard.server.extensions.core.plugin.telemetry.cmd.AttributesSubscriptionCmd;
-import org.thingsboard.server.extensions.core.plugin.telemetry.cmd.GetHistoryCmd;
-import org.thingsboard.server.extensions.core.plugin.telemetry.cmd.SubscriptionCmd;
-import org.thingsboard.server.extensions.core.plugin.telemetry.cmd.TelemetryPluginCmd;
-import org.thingsboard.server.extensions.core.plugin.telemetry.cmd.TelemetryPluginCmdsWrapper;
-import org.thingsboard.server.extensions.core.plugin.telemetry.cmd.TimeseriesSubscriptionCmd;
-import org.thingsboard.server.extensions.core.plugin.telemetry.handlers.TelemetryFeature;
-import org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionErrorCode;
-import org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionState;
-import org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionUpdate;
import org.thingsboard.server.service.security.AccessValidator;
+import org.thingsboard.server.service.security.ValidationResult;
+import org.thingsboard.server.service.telemetry.cmd.AttributesSubscriptionCmd;
+import org.thingsboard.server.service.telemetry.cmd.GetHistoryCmd;
+import org.thingsboard.server.service.telemetry.cmd.SubscriptionCmd;
+import org.thingsboard.server.service.telemetry.cmd.TelemetryPluginCmd;
+import org.thingsboard.server.service.telemetry.cmd.TelemetryPluginCmdsWrapper;
+import org.thingsboard.server.service.telemetry.cmd.TimeseriesSubscriptionCmd;
+import org.thingsboard.server.service.telemetry.exception.UnauthorizedException;
+import org.thingsboard.server.service.telemetry.sub.SubscriptionErrorCode;
+import org.thingsboard.server.service.telemetry.sub.SubscriptionState;
+import org.thingsboard.server.service.telemetry.sub.SubscriptionUpdate;
import javax.annotation.Nullable;
import javax.annotation.PostConstruct;
@@ -69,6 +65,7 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.function.Consumer;
import java.util.stream.Collectors;
/**
diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/SessionEvent.java b/application/src/main/java/org/thingsboard/server/service/telemetry/SessionEvent.java
similarity index 96%
rename from extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/SessionEvent.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/SessionEvent.java
index 928dd91a7c..75d84c94fc 100644
--- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/SessionEvent.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/SessionEvent.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.api.plugins.ws;
+package org.thingsboard.server.service.telemetry;
import lombok.Getter;
import lombok.ToString;
diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/handlers/TelemetryFeature.java b/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetryFeature.java
similarity index 91%
rename from extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/handlers/TelemetryFeature.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/TelemetryFeature.java
index b776e054a9..a8f87d323c 100644
--- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/handlers/TelemetryFeature.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetryFeature.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.core.plugin.telemetry.handlers;
+package org.thingsboard.server.service.telemetry;
/**
* Created by ashvayka on 08.05.17.
diff --git a/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetrySubscriptionService.java b/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetrySubscriptionService.java
index 964c494504..f1802acde5 100644
--- a/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetrySubscriptionService.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetrySubscriptionService.java
@@ -18,9 +18,7 @@ package org.thingsboard.server.service.telemetry;
import org.thingsboard.rule.engine.api.RuleEngineTelemetryService;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
-import org.thingsboard.server.extensions.api.plugins.PluginContext;
-import org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionState;
-import org.thingsboard.server.gen.cluster.ClusterAPIProtos;
+import org.thingsboard.server.service.telemetry.sub.SubscriptionState;
/**
* Created by ashvayka on 27.03.18.
diff --git a/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetryWebSocketService.java b/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetryWebSocketService.java
index be6fc56b3a..c2fba93b83 100644
--- a/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetryWebSocketService.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetryWebSocketService.java
@@ -15,8 +15,7 @@
*/
package org.thingsboard.server.service.telemetry;
-import org.thingsboard.server.extensions.api.plugins.ws.SessionEvent;
-import org.thingsboard.server.extensions.core.plugin.telemetry.sub.SubscriptionUpdate;
+import org.thingsboard.server.service.telemetry.sub.SubscriptionUpdate;
/**
* Created by ashvayka on 27.03.18.
diff --git a/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetryWebSocketTextMsg.java b/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetryWebSocketTextMsg.java
index 5d4630cb21..e2568cffe2 100644
--- a/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetryWebSocketTextMsg.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/TelemetryWebSocketTextMsg.java
@@ -16,11 +16,6 @@
package org.thingsboard.server.service.telemetry;
import lombok.Data;
-import lombok.Getter;
-import org.thingsboard.server.service.security.model.SecurityUser;
-
-import java.net.InetSocketAddress;
-import java.util.Objects;
/**
* Created by ashvayka on 27.03.18.
diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/TsData.java b/application/src/main/java/org/thingsboard/server/service/telemetry/TsData.java
similarity index 94%
rename from extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/TsData.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/TsData.java
index 2b48567fca..b8333ce46a 100644
--- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/TsData.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/TsData.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.core.plugin.telemetry;
+package org.thingsboard.server.service.telemetry;
public class TsData implements Comparable{
diff --git a/application/src/main/java/org/thingsboard/server/service/telemetry/WsSessionMetaData.java b/application/src/main/java/org/thingsboard/server/service/telemetry/WsSessionMetaData.java
index dd15ed33bd..d63c3d40b5 100644
--- a/application/src/main/java/org/thingsboard/server/service/telemetry/WsSessionMetaData.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/WsSessionMetaData.java
@@ -15,7 +15,6 @@
*/
package org.thingsboard.server.service.telemetry;
-import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef;
/**
* Created by ashvayka on 27.03.18.
diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/AttributesSubscriptionCmd.java b/application/src/main/java/org/thingsboard/server/service/telemetry/cmd/AttributesSubscriptionCmd.java
similarity index 84%
rename from extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/AttributesSubscriptionCmd.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/cmd/AttributesSubscriptionCmd.java
index f30f1a5978..2c61260849 100644
--- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/AttributesSubscriptionCmd.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/cmd/AttributesSubscriptionCmd.java
@@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.core.plugin.telemetry.cmd;
+package org.thingsboard.server.service.telemetry.cmd;
import lombok.NoArgsConstructor;
-import org.thingsboard.server.extensions.core.plugin.telemetry.handlers.TelemetryFeature;
+import org.thingsboard.server.service.telemetry.TelemetryFeature;
/**
* @author Andrew Shvayka
diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/GetHistoryCmd.java b/application/src/main/java/org/thingsboard/server/service/telemetry/cmd/GetHistoryCmd.java
similarity index 93%
rename from extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/GetHistoryCmd.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/cmd/GetHistoryCmd.java
index 426e434e1a..9fc28f6a3a 100644
--- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/GetHistoryCmd.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/cmd/GetHistoryCmd.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.core.plugin.telemetry.cmd;
+package org.thingsboard.server.service.telemetry.cmd;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/SubscriptionCmd.java b/application/src/main/java/org/thingsboard/server/service/telemetry/cmd/SubscriptionCmd.java
similarity index 88%
rename from extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/SubscriptionCmd.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/cmd/SubscriptionCmd.java
index 7f78abd77d..15701ca2a3 100644
--- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/SubscriptionCmd.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/cmd/SubscriptionCmd.java
@@ -13,12 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.core.plugin.telemetry.cmd;
+package org.thingsboard.server.service.telemetry.cmd;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
-import org.thingsboard.server.extensions.core.plugin.telemetry.handlers.TelemetryFeature;
+import org.thingsboard.server.service.telemetry.TelemetryFeature;
@NoArgsConstructor
@AllArgsConstructor
diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/TelemetryPluginCmd.java b/application/src/main/java/org/thingsboard/server/service/telemetry/cmd/TelemetryPluginCmd.java
similarity index 91%
rename from extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/TelemetryPluginCmd.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/cmd/TelemetryPluginCmd.java
index 84ce7953d3..06c6e5a296 100644
--- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/TelemetryPluginCmd.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/cmd/TelemetryPluginCmd.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.core.plugin.telemetry.cmd;
+package org.thingsboard.server.service.telemetry.cmd;
/**
* @author Andrew Shvayka
diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/TelemetryPluginCmdsWrapper.java b/application/src/main/java/org/thingsboard/server/service/telemetry/cmd/TelemetryPluginCmdsWrapper.java
similarity index 95%
rename from extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/TelemetryPluginCmdsWrapper.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/cmd/TelemetryPluginCmdsWrapper.java
index c065bd987a..2f5c037bc6 100644
--- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/TelemetryPluginCmdsWrapper.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/cmd/TelemetryPluginCmdsWrapper.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.core.plugin.telemetry.cmd;
+package org.thingsboard.server.service.telemetry.cmd;
import java.util.List;
diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/TimeseriesSubscriptionCmd.java b/application/src/main/java/org/thingsboard/server/service/telemetry/cmd/TimeseriesSubscriptionCmd.java
similarity index 87%
rename from extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/TimeseriesSubscriptionCmd.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/cmd/TimeseriesSubscriptionCmd.java
index 88ecb2d9bb..40450e17eb 100644
--- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/cmd/TimeseriesSubscriptionCmd.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/cmd/TimeseriesSubscriptionCmd.java
@@ -13,12 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.core.plugin.telemetry.cmd;
+package org.thingsboard.server.service.telemetry.cmd;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
-import org.thingsboard.server.extensions.core.plugin.telemetry.handlers.TelemetryFeature;
+import org.thingsboard.server.service.telemetry.TelemetryFeature;
/**
* @author Andrew Shvayka
diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/AccessDeniedException.java b/application/src/main/java/org/thingsboard/server/service/telemetry/exception/AccessDeniedException.java
similarity index 94%
rename from extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/AccessDeniedException.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/exception/AccessDeniedException.java
index 923ca82fd7..dc30b1ed42 100644
--- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/AccessDeniedException.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/exception/AccessDeniedException.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.api.exception;
+package org.thingsboard.server.service.telemetry.exception;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/EntityNotFoundException.java b/application/src/main/java/org/thingsboard/server/service/telemetry/exception/EntityNotFoundException.java
similarity index 94%
rename from extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/EntityNotFoundException.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/exception/EntityNotFoundException.java
index 3fc9f515c3..10ef2b7c3c 100644
--- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/EntityNotFoundException.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/exception/EntityNotFoundException.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.api.exception;
+package org.thingsboard.server.service.telemetry.exception;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/InternalErrorException.java b/application/src/main/java/org/thingsboard/server/service/telemetry/exception/InternalErrorException.java
similarity index 94%
rename from extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/InternalErrorException.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/exception/InternalErrorException.java
index 25fa28e351..4a3dec61df 100644
--- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/InternalErrorException.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/exception/InternalErrorException.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.api.exception;
+package org.thingsboard.server.service.telemetry.exception;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/InvalidParametersException.java b/application/src/main/java/org/thingsboard/server/service/telemetry/exception/InvalidParametersException.java
similarity index 94%
rename from extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/InvalidParametersException.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/exception/InvalidParametersException.java
index 3c7d227a9c..62b961af58 100644
--- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/InvalidParametersException.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/exception/InvalidParametersException.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.api.exception;
+package org.thingsboard.server.service.telemetry.exception;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/ToErrorResponseEntity.java b/application/src/main/java/org/thingsboard/server/service/telemetry/exception/ToErrorResponseEntity.java
similarity index 93%
rename from extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/ToErrorResponseEntity.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/exception/ToErrorResponseEntity.java
index 0d3345b424..43c747eeb9 100644
--- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/ToErrorResponseEntity.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/exception/ToErrorResponseEntity.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.api.exception;
+package org.thingsboard.server.service.telemetry.exception;
import org.springframework.http.ResponseEntity;
diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/UnauthorizedException.java b/application/src/main/java/org/thingsboard/server/service/telemetry/exception/UnauthorizedException.java
similarity index 94%
rename from extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/UnauthorizedException.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/exception/UnauthorizedException.java
index c23b36da7f..d1b6bc0e51 100644
--- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/UnauthorizedException.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/exception/UnauthorizedException.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.api.exception;
+package org.thingsboard.server.service.telemetry.exception;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/UncheckedApiException.java b/application/src/main/java/org/thingsboard/server/service/telemetry/exception/UncheckedApiException.java
similarity index 95%
rename from extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/UncheckedApiException.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/exception/UncheckedApiException.java
index c594eb97a3..a3df8e5d58 100644
--- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/exception/UncheckedApiException.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/exception/UncheckedApiException.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.api.exception;
+package org.thingsboard.server.service.telemetry.exception;
import org.springframework.http.ResponseEntity;
diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/Subscription.java b/application/src/main/java/org/thingsboard/server/service/telemetry/sub/Subscription.java
similarity index 90%
rename from extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/Subscription.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/sub/Subscription.java
index 98c7632893..811c055372 100644
--- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/Subscription.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/sub/Subscription.java
@@ -13,14 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.core.plugin.telemetry.sub;
+package org.thingsboard.server.service.telemetry.sub;
import lombok.AllArgsConstructor;
import lombok.Data;
-import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.msg.cluster.ServerAddress;
-import org.thingsboard.server.extensions.core.plugin.telemetry.handlers.TelemetryFeature;
+import org.thingsboard.server.service.telemetry.TelemetryFeature;
import java.util.Map;
diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/SubscriptionErrorCode.java b/application/src/main/java/org/thingsboard/server/service/telemetry/sub/SubscriptionErrorCode.java
similarity index 95%
rename from extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/SubscriptionErrorCode.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/sub/SubscriptionErrorCode.java
index b43e807da8..9da74d940b 100644
--- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/SubscriptionErrorCode.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/sub/SubscriptionErrorCode.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.core.plugin.telemetry.sub;
+package org.thingsboard.server.service.telemetry.sub;
public enum SubscriptionErrorCode {
diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/SubscriptionState.java b/application/src/main/java/org/thingsboard/server/service/telemetry/sub/SubscriptionState.java
similarity index 93%
rename from extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/SubscriptionState.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/sub/SubscriptionState.java
index e4a0d260b1..a088fa9a3b 100644
--- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/SubscriptionState.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/sub/SubscriptionState.java
@@ -13,12 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.core.plugin.telemetry.sub;
+package org.thingsboard.server.service.telemetry.sub;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.thingsboard.server.common.data.id.EntityId;
-import org.thingsboard.server.extensions.core.plugin.telemetry.handlers.TelemetryFeature;
+import org.thingsboard.server.service.telemetry.TelemetryFeature;
import java.util.Map;
diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/SubscriptionUpdate.java b/application/src/main/java/org/thingsboard/server/service/telemetry/sub/SubscriptionUpdate.java
similarity index 94%
rename from extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/SubscriptionUpdate.java
rename to application/src/main/java/org/thingsboard/server/service/telemetry/sub/SubscriptionUpdate.java
index 7a19e43db9..bbabe7aacb 100644
--- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/sub/SubscriptionUpdate.java
+++ b/application/src/main/java/org/thingsboard/server/service/telemetry/sub/SubscriptionUpdate.java
@@ -13,11 +13,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.thingsboard.server.extensions.core.plugin.telemetry.sub;
+package org.thingsboard.server.service.telemetry.sub;
import org.thingsboard.server.common.data.kv.TsKvEntry;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
import java.util.stream.Collectors;
public class SubscriptionUpdate {
diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml
index 2be73d4196..e479562df5 100644
--- a/application/src/main/resources/thingsboard.yml
+++ b/application/src/main/resources/thingsboard.yml
@@ -348,8 +348,6 @@ audit_log:
"dashboard": "${AUDIT_LOG_MASK_DASHBOARD:W}"
"customer": "${AUDIT_LOG_MASK_CUSTOMER:W}"
"user": "${AUDIT_LOG_MASK_USER:W}"
- "rule": "${AUDIT_LOG_MASK_RULE:W}"
- "plugin": "${AUDIT_LOG_MASK_PLUGIN:W}"
"rule_chain": "${AUDIT_LOG_MASK_RULE_CHAIN:W}"
sink:
# Type of external sink. possible options: none, elasticsearch
diff --git a/application/src/test/java/org/thingsboard/server/controller/BaseComponentDescriptorControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/BaseComponentDescriptorControllerTest.java
index 3a07d2989d..62f7562c3a 100644
--- a/application/src/test/java/org/thingsboard/server/controller/BaseComponentDescriptorControllerTest.java
+++ b/application/src/test/java/org/thingsboard/server/controller/BaseComponentDescriptorControllerTest.java
@@ -27,8 +27,6 @@ import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
import org.thingsboard.server.common.data.plugin.ComponentScope;
import org.thingsboard.server.common.data.plugin.ComponentType;
import org.thingsboard.server.common.data.security.Authority;
-import org.thingsboard.server.extensions.core.action.telemetry.TelemetryPluginAction;
-import org.thingsboard.server.extensions.core.plugin.telemetry.TelemetryStoragePlugin;
import java.util.List;
diff --git a/application/src/test/java/org/thingsboard/server/mqtt/rpc/AbstractMqttServerSideRpcIntegrationTest.java b/application/src/test/java/org/thingsboard/server/mqtt/rpc/AbstractMqttServerSideRpcIntegrationTest.java
index b732e66f48..f3e29dc1ad 100644
--- a/application/src/test/java/org/thingsboard/server/mqtt/rpc/AbstractMqttServerSideRpcIntegrationTest.java
+++ b/application/src/test/java/org/thingsboard/server/mqtt/rpc/AbstractMqttServerSideRpcIntegrationTest.java
@@ -15,23 +15,27 @@
*/
package org.thingsboard.server.mqtt.rpc;
-import java.util.Arrays;
-
import com.datastax.driver.core.utils.UUIDs;
-import com.fasterxml.jackson.core.type.TypeReference;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
-import org.eclipse.paho.client.mqttv3.*;
-import org.junit.*;
-import org.thingsboard.server.actors.plugin.PluginProcessingContext;
+import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
+import org.eclipse.paho.client.mqttv3.MqttAsyncClient;
+import org.eclipse.paho.client.mqttv3.MqttCallback;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
import org.thingsboard.server.common.data.Device;
import org.thingsboard.server.common.data.Tenant;
import org.thingsboard.server.common.data.User;
-import org.thingsboard.server.common.data.page.TextPageData;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.data.security.DeviceCredentials;
import org.thingsboard.server.controller.AbstractControllerTest;
+import org.thingsboard.server.service.security.AccessValidator;
+
+import java.util.Arrays;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -55,7 +59,7 @@ public abstract class AbstractMqttServerSideRpcIntegrationTest extends AbstractC
public void beforeTest() throws Exception {
loginSysAdmin();
- asyncContextTimeoutToUseRpcPlugin = getAsyncContextTimeoutToUseRpcPlugin();
+ asyncContextTimeoutToUseRpcPlugin = 10000L;
Tenant tenant = new Tenant();
tenant.setTitle("My tenant");
@@ -131,7 +135,7 @@ public abstract class AbstractMqttServerSideRpcIntegrationTest extends AbstractC
String result = doPostAsync("/api/plugins/rpc/oneway/" + nonExistentDeviceId, setGpioRequest, String.class,
status().isNotFound());
- Assert.assertEquals(PluginProcessingContext.DEVICE_WITH_REQUESTED_ID_NOT_FOUND, result);
+ Assert.assertEquals(AccessValidator.DEVICE_WITH_REQUESTED_ID_NOT_FOUND, result);
}
@Test
@@ -186,7 +190,7 @@ public abstract class AbstractMqttServerSideRpcIntegrationTest extends AbstractC
String result = doPostAsync("/api/plugins/rpc/twoway/" + nonExistentDeviceId, setGpioRequest, String.class,
status().isNotFound());
- Assert.assertEquals(PluginProcessingContext.DEVICE_WITH_REQUESTED_ID_NOT_FOUND, result);
+ Assert.assertEquals(AccessValidator.DEVICE_WITH_REQUESTED_ID_NOT_FOUND, result);
}
private Device getSavedDevice(Device device) throws Exception {
@@ -197,13 +201,6 @@ public abstract class AbstractMqttServerSideRpcIntegrationTest extends AbstractC
return doGet("/api/device/" + savedDevice.getId().getId().toString() + "/credentials", DeviceCredentials.class);
}
- private Long getAsyncContextTimeoutToUseRpcPlugin() throws Exception {
- TextPageData plugins = doGetTyped("/api/plugin/system?limit=1&textSearch=system rpc plugin",
- new TypeReference>(){});
- Long systemRpcPluginTimeout = plugins.getData().iterator().next().getConfiguration().get("defaultTimeout").asLong();
- return systemRpcPluginTimeout + TIME_TO_HANDLE_REQUEST;
- }
-
private static class TestMqttCallback implements MqttCallback {
private final MqttAsyncClient client;
diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/EntityType.java b/common/data/src/main/java/org/thingsboard/server/common/data/EntityType.java
index d28a53ffa4..fe9c018718 100644
--- a/common/data/src/main/java/org/thingsboard/server/common/data/EntityType.java
+++ b/common/data/src/main/java/org/thingsboard/server/common/data/EntityType.java
@@ -19,5 +19,5 @@ package org.thingsboard.server.common.data;
* @author Andrew Shvayka
*/
public enum EntityType {
- TENANT, CUSTOMER, USER, RULE, PLUGIN, DASHBOARD, ASSET, DEVICE, ALARM, RULE_CHAIN, RULE_NODE;
+ TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, RULE_CHAIN, RULE_NODE;
}
diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/id/EntityIdFactory.java b/common/data/src/main/java/org/thingsboard/server/common/data/id/EntityIdFactory.java
index 31c1cdae90..0ecc7c639f 100644
--- a/common/data/src/main/java/org/thingsboard/server/common/data/id/EntityIdFactory.java
+++ b/common/data/src/main/java/org/thingsboard/server/common/data/id/EntityIdFactory.java
@@ -45,10 +45,6 @@ public class EntityIdFactory {
return new CustomerId(uuid);
case USER:
return new UserId(uuid);
- case RULE:
- return new RuleId(uuid);
- case PLUGIN:
- return new PluginId(uuid);
case DASHBOARD:
return new DashboardId(uuid);
case DEVICE:
diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/id/PluginId.java b/common/data/src/main/java/org/thingsboard/server/common/data/id/PluginId.java
deleted file mode 100644
index d3ce4668ac..0000000000
--- a/common/data/src/main/java/org/thingsboard/server/common/data/id/PluginId.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.common.data.id;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import org.thingsboard.server.common.data.EntityType;
-
-import java.util.UUID;
-
-public final class PluginId extends UUIDBased implements EntityId {
-
- private static final long serialVersionUID = 1L;
-
- @JsonCreator
- public PluginId(@JsonProperty("id") UUID id) {
- super(id);
- }
-
- @JsonIgnore
- @Override
- public EntityType getEntityType() {
- return EntityType.PLUGIN;
- }
-}
diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/id/RuleId.java b/common/data/src/main/java/org/thingsboard/server/common/data/id/RuleId.java
deleted file mode 100644
index 6f14042378..0000000000
--- a/common/data/src/main/java/org/thingsboard/server/common/data/id/RuleId.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.common.data.id;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import org.thingsboard.server.common.data.EntityType;
-
-import java.util.UUID;
-
-public class RuleId extends UUIDBased implements EntityId {
-
- @JsonCreator
- public RuleId(@JsonProperty("id") UUID id) {
- super(id);
- }
-
- @JsonIgnore
- @Override
- public EntityType getEntityType() {
- return EntityType.RULE;
- }
-}
diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/plugin/ComponentType.java b/common/data/src/main/java/org/thingsboard/server/common/data/plugin/ComponentType.java
index e6958e64f8..13351476e7 100644
--- a/common/data/src/main/java/org/thingsboard/server/common/data/plugin/ComponentType.java
+++ b/common/data/src/main/java/org/thingsboard/server/common/data/plugin/ComponentType.java
@@ -20,6 +20,6 @@ package org.thingsboard.server.common.data.plugin;
*/
public enum ComponentType {
- ENRICHMENT, FILTER, TRANSFORMATION, ACTION, EXTERNAL, OLD_ACTION, PLUGIN
+ ENRICHMENT, FILTER, TRANSFORMATION, ACTION, EXTERNAL
}
diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/plugin/PluginMetaData.java b/common/data/src/main/java/org/thingsboard/server/common/data/plugin/PluginMetaData.java
deleted file mode 100644
index 4c33ffe65c..0000000000
--- a/common/data/src/main/java/org/thingsboard/server/common/data/plugin/PluginMetaData.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.common.data.plugin;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import lombok.EqualsAndHashCode;
-import lombok.extern.slf4j.Slf4j;
-import org.thingsboard.server.common.data.HasName;
-import org.thingsboard.server.common.data.HasTenantId;
-import org.thingsboard.server.common.data.SearchTextBasedWithAdditionalInfo;
-import org.thingsboard.server.common.data.id.PluginId;
-import org.thingsboard.server.common.data.id.TenantId;
-
-import com.fasterxml.jackson.databind.JsonNode;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-
-@EqualsAndHashCode(callSuper = true)
-@Slf4j
-public class PluginMetaData extends SearchTextBasedWithAdditionalInfo implements HasName, HasTenantId {
-
- private static final long serialVersionUID = 1L;
-
- private String apiToken;
- private TenantId tenantId;
- private String name;
- private String clazz;
- private boolean publicAccess;
- private ComponentLifecycleState state;
- private transient JsonNode configuration;
- @JsonIgnore
- private byte[] configurationBytes;
-
-
- public PluginMetaData() {
- super();
- }
-
- public PluginMetaData(PluginId id) {
- super(id);
- }
-
- public PluginMetaData(PluginMetaData plugin) {
- super(plugin);
- this.apiToken = plugin.getApiToken();
- this.tenantId = plugin.getTenantId();
- this.name = plugin.getName();
- this.clazz = plugin.getClazz();
- this.publicAccess = plugin.isPublicAccess();
- this.state = plugin.getState();
- this.configuration = plugin.getConfiguration();
- }
-
- @Override
- public String getSearchText() {
- return getName();
- }
-
- public String getApiToken() {
- return apiToken;
- }
-
- public void setApiToken(String apiToken) {
- this.apiToken = apiToken;
- }
-
- public TenantId getTenantId() {
- return tenantId;
- }
-
- public void setTenantId(TenantId tenantId) {
- this.tenantId = tenantId;
- }
-
- @Override
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getClazz() {
- return clazz;
- }
-
- public void setClazz(String clazz) {
- this.clazz = clazz;
- }
-
- public JsonNode getConfiguration() {
- return getJson(() -> configuration, () -> configurationBytes);
- }
-
- public void setConfiguration(JsonNode data) {
- setJson(data, json -> this.configuration = json, bytes -> this.configurationBytes = bytes);
- }
-
- public boolean isPublicAccess() {
- return publicAccess;
- }
-
- public void setPublicAccess(boolean publicAccess) {
- this.publicAccess = publicAccess;
- }
-
- public void setState(ComponentLifecycleState state) {
- this.state = state;
- }
-
- public ComponentLifecycleState getState() {
- return state;
- }
-
- @Override
- public String toString() {
- return "PluginMetaData [apiToken=" + apiToken + ", tenantId=" + tenantId + ", name=" + name + ", clazz=" + clazz + ", publicAccess=" + publicAccess
- + ", configuration=" + configuration + "]";
- }
-
-}
diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/rule/RuleMetaData.java b/common/data/src/main/java/org/thingsboard/server/common/data/rule/RuleMetaData.java
deleted file mode 100644
index 953e5eb6bc..0000000000
--- a/common/data/src/main/java/org/thingsboard/server/common/data/rule/RuleMetaData.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.common.data.rule;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.extern.slf4j.Slf4j;
-import org.thingsboard.server.common.data.HasName;
-import org.thingsboard.server.common.data.HasTenantId;
-import org.thingsboard.server.common.data.SearchTextBasedWithAdditionalInfo;
-import org.thingsboard.server.common.data.id.RuleId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
-
-@Data
-@EqualsAndHashCode(callSuper = true)
-@Slf4j
-public class RuleMetaData extends SearchTextBasedWithAdditionalInfo implements HasName, HasTenantId {
-
- private static final long serialVersionUID = -5656679015122935465L;
-
- private TenantId tenantId;
- private String name;
- private ComponentLifecycleState state;
- private int weight;
- private String pluginToken;
- private transient JsonNode filters;
- private transient JsonNode processor;
- private transient JsonNode action;
- @JsonIgnore
- private byte[] filtersBytes;
- @JsonIgnore
- private byte[] processorBytes;
- @JsonIgnore
- private byte[] actionBytes;
-
-
- public RuleMetaData() {
- super();
- }
-
- public RuleMetaData(RuleId id) {
- super(id);
- }
-
- public RuleMetaData(RuleMetaData rule) {
- super(rule);
- this.tenantId = rule.getTenantId();
- this.name = rule.getName();
- this.state = rule.getState();
- this.weight = rule.getWeight();
- this.pluginToken = rule.getPluginToken();
- this.setFilters(rule.getFilters());
- this.setProcessor(rule.getProcessor());
- this.setAction(rule.getAction());
- }
-
- @Override
- public String getSearchText() {
- return getName();
- }
-
- @Override
- public String getName() {
- return name;
- }
-
- public JsonNode getFilters() {
- return SearchTextBasedWithAdditionalInfo.getJson(() -> filters, () -> filtersBytes);
- }
-
- public JsonNode getProcessor() {
- return SearchTextBasedWithAdditionalInfo.getJson(() -> processor, () -> processorBytes);
- }
-
- public JsonNode getAction() {
- return SearchTextBasedWithAdditionalInfo.getJson(() -> action, () -> actionBytes);
- }
-
- public void setFilters(JsonNode data) {
- setJson(data, json -> this.filters = json, bytes -> this.filtersBytes = bytes);
- }
-
- public void setProcessor(JsonNode data) {
- setJson(data, json -> this.processor = json, bytes -> this.processorBytes = bytes);
- }
-
- public void setAction(JsonNode data) {
- setJson(data, json -> this.action = json, bytes -> this.actionBytes = bytes);
- }
-
-
-}
diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/aware/PluginAwareMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/aware/PluginAwareMsg.java
deleted file mode 100644
index 78859b4c01..0000000000
--- a/common/message/src/main/java/org/thingsboard/server/common/msg/aware/PluginAwareMsg.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.common.msg.aware;
-
-import org.thingsboard.server.common.data.id.PluginId;
-
-public interface PluginAwareMsg {
-
- PluginId getPluginId();
-
-}
diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/aware/RuleAwareMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/aware/RuleAwareMsg.java
deleted file mode 100644
index b14e882cca..0000000000
--- a/common/message/src/main/java/org/thingsboard/server/common/msg/aware/RuleAwareMsg.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.common.msg.aware;
-
-import org.thingsboard.server.common.data.id.RuleId;
-
-public interface RuleAwareMsg {
-
- RuleId getRuleId();
-
-}
diff --git a/common/message/src/main/java/org/thingsboard/server/common/msg/plugin/ComponentLifecycleMsg.java b/common/message/src/main/java/org/thingsboard/server/common/msg/plugin/ComponentLifecycleMsg.java
index 2ee8432067..eec2de0154 100644
--- a/common/message/src/main/java/org/thingsboard/server/common/msg/plugin/ComponentLifecycleMsg.java
+++ b/common/message/src/main/java/org/thingsboard/server/common/msg/plugin/ComponentLifecycleMsg.java
@@ -18,7 +18,9 @@ package org.thingsboard.server.common.msg.plugin;
import lombok.Getter;
import lombok.ToString;
import org.thingsboard.server.common.data.EntityType;
-import org.thingsboard.server.common.data.id.*;
+import org.thingsboard.server.common.data.id.EntityId;
+import org.thingsboard.server.common.data.id.RuleChainId;
+import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
import org.thingsboard.server.common.msg.MsgType;
import org.thingsboard.server.common.msg.TbActorMsg;
@@ -45,14 +47,6 @@ public class ComponentLifecycleMsg implements TbActorMsg, TenantAwareMsg, ToAllN
this.event = event;
}
- public Optional getPluginId() {
- return entityId.getEntityType() == EntityType.PLUGIN ? Optional.of((PluginId) entityId) : Optional.empty();
- }
-
- public Optional getRuleId() {
- return entityId.getEntityType() == EntityType.RULE ? Optional.of((RuleId) entityId) : Optional.empty();
- }
-
public Optional getRuleChainId() {
return entityId.getEntityType() == EntityType.RULE_CHAIN ? Optional.of((RuleChainId) entityId) : Optional.empty();
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java b/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java
index fc434bf894..c7bcfbcd33 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/DaoUtil.java
@@ -18,7 +18,11 @@ package org.thingsboard.server.dao;
import org.thingsboard.server.common.data.id.UUIDBased;
import org.thingsboard.server.dao.model.ToData;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.UUID;
public abstract class DaoUtil {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java b/dao/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java
index 8d73fce497..6638818207 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java
@@ -17,7 +17,13 @@ package org.thingsboard.server.dao.alarm;
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.util.concurrent.ListenableFuture;
-import org.thingsboard.server.common.data.alarm.*;
+import org.thingsboard.server.common.data.alarm.Alarm;
+import org.thingsboard.server.common.data.alarm.AlarmId;
+import org.thingsboard.server.common.data.alarm.AlarmInfo;
+import org.thingsboard.server.common.data.alarm.AlarmQuery;
+import org.thingsboard.server.common.data.alarm.AlarmSearchStatus;
+import org.thingsboard.server.common.data.alarm.AlarmSeverity;
+import org.thingsboard.server.common.data.alarm.AlarmStatus;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.TimePageData;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java
index f84cc1d030..23fe85a802 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java
@@ -18,7 +18,6 @@ package org.thingsboard.server.dao.alarm;
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.base.Function;
-import com.google.common.util.concurrent.AsyncFunction;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import lombok.extern.slf4j.Slf4j;
@@ -26,19 +25,25 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.thingsboard.server.common.data.Tenant;
-import org.thingsboard.server.common.data.alarm.*;
+import org.thingsboard.server.common.data.alarm.Alarm;
+import org.thingsboard.server.common.data.alarm.AlarmId;
+import org.thingsboard.server.common.data.alarm.AlarmInfo;
+import org.thingsboard.server.common.data.alarm.AlarmQuery;
+import org.thingsboard.server.common.data.alarm.AlarmSearchStatus;
+import org.thingsboard.server.common.data.alarm.AlarmSeverity;
+import org.thingsboard.server.common.data.alarm.AlarmStatus;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.TimePageData;
import org.thingsboard.server.common.data.page.TimePageLink;
import org.thingsboard.server.common.data.relation.EntityRelation;
+import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
+import org.thingsboard.server.common.data.relation.EntitySearchDirection;
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
+import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
import org.thingsboard.server.dao.entity.AbstractEntityService;
import org.thingsboard.server.dao.entity.EntityService;
import org.thingsboard.server.dao.exception.DataValidationException;
-import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
-import org.thingsboard.server.common.data.relation.EntitySearchDirection;
-import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
import org.thingsboard.server.dao.service.DataValidator;
import org.thingsboard.server.dao.tenant.TenantDao;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/alarm/CassandraAlarmDao.java b/dao/src/main/java/org/thingsboard/server/dao/alarm/CassandraAlarmDao.java
index 6785f2e3b7..646c0556ae 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/alarm/CassandraAlarmDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/alarm/CassandraAlarmDao.java
@@ -17,8 +17,6 @@ package org.thingsboard.server.dao.alarm;
import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.datastax.driver.core.querybuilder.Select;
-import com.google.common.base.Function;
-import com.google.common.util.concurrent.AsyncFunction;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import lombok.extern.slf4j.Slf4j;
@@ -45,7 +43,12 @@ import java.util.UUID;
import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_BY_ID_VIEW_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_TYPE_PROPERTY;
@Component
@Slf4j
diff --git a/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java b/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java
index 7bb67f04bb..1eafb07442 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/asset/BaseAssetService.java
@@ -17,7 +17,6 @@ package org.thingsboard.server.dao.asset;
import com.google.common.base.Function;
-import com.google.common.util.concurrent.AsyncFunction;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import lombok.extern.slf4j.Slf4j;
@@ -45,12 +44,19 @@ import org.thingsboard.server.dao.service.DataValidator;
import org.thingsboard.server.dao.service.PaginatedRemover;
import org.thingsboard.server.dao.tenant.TenantDao;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Optional;
import java.util.stream.Collectors;
import static org.thingsboard.server.dao.DaoUtil.toUUIDs;
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
-import static org.thingsboard.server.dao.service.Validator.*;
+import static org.thingsboard.server.dao.service.Validator.validateId;
+import static org.thingsboard.server.dao.service.Validator.validateIds;
+import static org.thingsboard.server.dao.service.Validator.validatePageLink;
+import static org.thingsboard.server.dao.service.Validator.validateString;
@Service
@Slf4j
diff --git a/dao/src/main/java/org/thingsboard/server/dao/asset/CassandraAssetDao.java b/dao/src/main/java/org/thingsboard/server/dao/asset/CassandraAssetDao.java
index 64ec718fdd..80a6f43f75 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/asset/CassandraAssetDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/asset/CassandraAssetDao.java
@@ -36,10 +36,30 @@ import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
import org.thingsboard.server.dao.util.NoSqlDao;
import javax.annotation.Nullable;
-import java.util.*;
-
-import static com.datastax.driver.core.querybuilder.QueryBuilder.*;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
+
+import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.in;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_BY_CUSTOMER_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_BY_TENANT_AND_NAME_VIEW_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_BY_TENANT_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_CUSTOMER_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_NAME_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_ENTITY_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
@Component
@Slf4j
diff --git a/dao/src/main/java/org/thingsboard/server/dao/attributes/CassandraBaseAttributesDao.java b/dao/src/main/java/org/thingsboard/server/dao/attributes/CassandraBaseAttributesDao.java
index 8ae9dc8ad4..a736a69c5e 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/attributes/CassandraBaseAttributesDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/attributes/CassandraBaseAttributesDao.java
@@ -15,7 +15,11 @@
*/
package org.thingsboard.server.dao.attributes;
-import com.datastax.driver.core.*;
+import com.datastax.driver.core.BoundStatement;
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.Row;
+import com.datastax.driver.core.Statement;
import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.datastax.driver.core.querybuilder.Select;
import com.google.common.base.Function;
@@ -41,7 +45,12 @@ import java.util.stream.Collectors;
import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ATTRIBUTES_KV_CF;
+import static org.thingsboard.server.dao.model.ModelConstants.ATTRIBUTE_KEY_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.ATTRIBUTE_TYPE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_ID_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_TYPE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.LAST_UPDATE_TS_COLUMN;
/**
* @author Andrew Shvayka
diff --git a/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogService.java b/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogService.java
index 19651a09ab..d2e6f056e0 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogService.java
@@ -15,15 +15,16 @@
*/
package org.thingsboard.server.dao.audit;
-import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.util.concurrent.ListenableFuture;
import org.thingsboard.server.common.data.BaseData;
import org.thingsboard.server.common.data.HasName;
-import org.thingsboard.server.common.data.User;
-import org.thingsboard.server.common.data.audit.ActionStatus;
import org.thingsboard.server.common.data.audit.ActionType;
import org.thingsboard.server.common.data.audit.AuditLog;
-import org.thingsboard.server.common.data.id.*;
+import org.thingsboard.server.common.data.id.CustomerId;
+import org.thingsboard.server.common.data.id.EntityId;
+import org.thingsboard.server.common.data.id.TenantId;
+import org.thingsboard.server.common.data.id.UUIDBased;
+import org.thingsboard.server.common.data.id.UserId;
import org.thingsboard.server.common.data.page.TimePageData;
import org.thingsboard.server.common.data.page.TimePageLink;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogServiceImpl.java
index 2a491300b0..a30c1b453b 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/audit/AuditLogServiceImpl.java
@@ -34,7 +34,12 @@ import org.thingsboard.server.common.data.HasName;
import org.thingsboard.server.common.data.audit.ActionStatus;
import org.thingsboard.server.common.data.audit.ActionType;
import org.thingsboard.server.common.data.audit.AuditLog;
-import org.thingsboard.server.common.data.id.*;
+import org.thingsboard.server.common.data.id.AuditLogId;
+import org.thingsboard.server.common.data.id.CustomerId;
+import org.thingsboard.server.common.data.id.EntityId;
+import org.thingsboard.server.common.data.id.TenantId;
+import org.thingsboard.server.common.data.id.UUIDBased;
+import org.thingsboard.server.common.data.id.UserId;
import org.thingsboard.server.common.data.kv.AttributeKvEntry;
import org.thingsboard.server.common.data.page.TimePageData;
import org.thingsboard.server.common.data.page.TimePageLink;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/audit/CassandraAuditLogDao.java b/dao/src/main/java/org/thingsboard/server/dao/audit/CassandraAuditLogDao.java
index fd02b5f880..764f4687d3 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/audit/CassandraAuditLogDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/audit/CassandraAuditLogDao.java
@@ -48,13 +48,22 @@ import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+import java.util.StringJoiner;
+import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_BY_CUSTOMER_ID_CF;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_BY_ENTITY_ID_CF;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_BY_TENANT_ID_CF;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_BY_USER_ID_CF;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_COLUMN_FAMILY_NAME;
@Component
@Slf4j
diff --git a/dao/src/main/java/org/thingsboard/server/dao/audit/DummyAuditLogServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/audit/DummyAuditLogServiceImpl.java
index 3706e50e41..b14d6b196d 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/audit/DummyAuditLogServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/audit/DummyAuditLogServiceImpl.java
@@ -22,7 +22,11 @@ import org.thingsboard.server.common.data.BaseData;
import org.thingsboard.server.common.data.HasName;
import org.thingsboard.server.common.data.audit.ActionType;
import org.thingsboard.server.common.data.audit.AuditLog;
-import org.thingsboard.server.common.data.id.*;
+import org.thingsboard.server.common.data.id.CustomerId;
+import org.thingsboard.server.common.data.id.EntityId;
+import org.thingsboard.server.common.data.id.TenantId;
+import org.thingsboard.server.common.data.id.UUIDBased;
+import org.thingsboard.server.common.data.id.UserId;
import org.thingsboard.server.common.data.page.TimePageData;
import org.thingsboard.server.common.data.page.TimePageLink;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/cache/TBRedisCacheConfiguration.java b/dao/src/main/java/org/thingsboard/server/dao/cache/TBRedisCacheConfiguration.java
index cfb69f30ff..3be33f3c17 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/cache/TBRedisCacheConfiguration.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/cache/TBRedisCacheConfiguration.java
@@ -18,7 +18,6 @@ package org.thingsboard.server.dao.cache;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/customer/CassandraCustomerDao.java b/dao/src/main/java/org/thingsboard/server/dao/customer/CassandraCustomerDao.java
index 9fea6186f5..598f98ac47 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/customer/CassandraCustomerDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/customer/CassandraCustomerDao.java
@@ -33,7 +33,9 @@ import java.util.UUID;
import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_BY_TENANT_AND_TITLE_VIEW_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_TITLE_PROPERTY;
@Component
@Slf4j
@NoSqlDao
diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardInfoDao.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardInfoDao.java
index 70afed53be..13a27c2ef5 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardInfoDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/CassandraDashboardInfoDao.java
@@ -15,7 +15,6 @@
*/
package org.thingsboard.server.dao.dashboard;
-import com.google.common.util.concurrent.AsyncFunction;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import lombok.extern.slf4j.Slf4j;
@@ -40,7 +39,9 @@ import java.util.List;
import java.util.UUID;
import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_TENANT_ID_PROPERTY;
@Component
@Slf4j
diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java
index 44d18acea9..c69364b8ce 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardService.java
@@ -26,8 +26,6 @@ import org.thingsboard.server.common.data.page.TextPageLink;
import org.thingsboard.server.common.data.page.TimePageData;
import org.thingsboard.server.common.data.page.TimePageLink;
-import java.util.Set;
-
public interface DashboardService {
Dashboard findDashboardById(DashboardId dashboardId);
diff --git a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java
index 6ce52861bb..e1f4e3c282 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/dashboard/DashboardServiceImpl.java
@@ -22,8 +22,10 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import org.thingsboard.server.common.data.*;
-import org.thingsboard.server.common.data.alarm.AlarmInfo;
+import org.thingsboard.server.common.data.Customer;
+import org.thingsboard.server.common.data.Dashboard;
+import org.thingsboard.server.common.data.DashboardInfo;
+import org.thingsboard.server.common.data.Tenant;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.DashboardId;
import org.thingsboard.server.common.data.id.TenantId;
@@ -36,8 +38,6 @@ import org.thingsboard.server.common.data.relation.RelationTypeGroup;
import org.thingsboard.server.dao.customer.CustomerDao;
import org.thingsboard.server.dao.entity.AbstractEntityService;
import org.thingsboard.server.dao.exception.DataValidationException;
-import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.dao.relation.RelationDao;
import org.thingsboard.server.dao.service.DataValidator;
import org.thingsboard.server.dao.service.PaginatedRemover;
import org.thingsboard.server.dao.service.TimePaginatedRemover;
@@ -45,11 +45,7 @@ import org.thingsboard.server.dao.service.Validator;
import org.thingsboard.server.dao.tenant.TenantDao;
import javax.annotation.Nullable;
-import java.sql.Time;
-import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
import java.util.concurrent.ExecutionException;
import static org.thingsboard.server.dao.service.Validator.validateId;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceDao.java b/dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceDao.java
index 641c464cec..110f2071c7 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/device/CassandraDeviceDao.java
@@ -36,10 +36,30 @@ import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
import org.thingsboard.server.dao.util.NoSqlDao;
import javax.annotation.Nullable;
-import java.util.*;
-
-import static com.datastax.driver.core.querybuilder.QueryBuilder.*;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
+
+import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.in;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_BY_CUSTOMER_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_BY_CUSTOMER_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_BY_TENANT_AND_NAME_VIEW_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_BY_TENANT_BY_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_CUSTOMER_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_NAME_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_ENTITY_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
@Component
@Slf4j
diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceService.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceService.java
index 3a7c5e39fc..c5edd9e03c 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceService.java
@@ -26,7 +26,6 @@ import org.thingsboard.server.common.data.page.TextPageData;
import org.thingsboard.server.common.data.page.TextPageLink;
import java.util.List;
-import java.util.Optional;
public interface DeviceService {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java
index 0d19ac1e0b..3930e3a94f 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceServiceImpl.java
@@ -16,7 +16,6 @@
package org.thingsboard.server.dao.device;
import com.google.common.base.Function;
-import com.google.common.util.concurrent.AsyncFunction;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import lombok.extern.slf4j.Slf4j;
@@ -28,7 +27,11 @@ import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
-import org.thingsboard.server.common.data.*;
+import org.thingsboard.server.common.data.Customer;
+import org.thingsboard.server.common.data.Device;
+import org.thingsboard.server.common.data.EntitySubtype;
+import org.thingsboard.server.common.data.EntityType;
+import org.thingsboard.server.common.data.Tenant;
import org.thingsboard.server.common.data.device.DeviceSearchQuery;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.DeviceId;
@@ -48,13 +51,20 @@ import org.thingsboard.server.dao.service.PaginatedRemover;
import org.thingsboard.server.dao.tenant.TenantDao;
import javax.annotation.Nullable;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Optional;
import java.util.stream.Collectors;
import static org.thingsboard.server.common.data.CacheConstants.DEVICE_CACHE;
import static org.thingsboard.server.dao.DaoUtil.toUUIDs;
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
-import static org.thingsboard.server.dao.service.Validator.*;
+import static org.thingsboard.server.dao.service.Validator.validateId;
+import static org.thingsboard.server.dao.service.Validator.validateIds;
+import static org.thingsboard.server.dao.service.Validator.validatePageLink;
+import static org.thingsboard.server.dao.service.Validator.validateString;
@Service
@Slf4j
diff --git a/dao/src/main/java/org/thingsboard/server/dao/entity/AbstractEntityService.java b/dao/src/main/java/org/thingsboard/server/dao/entity/AbstractEntityService.java
index 50723f3468..bc530ab536 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/entity/AbstractEntityService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/entity/AbstractEntityService.java
@@ -20,8 +20,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.dao.relation.RelationService;
-import java.util.concurrent.ExecutionException;
-
@Slf4j
public abstract class AbstractEntityService {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java b/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java
index acc88eb833..2b12211ace 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java
@@ -23,14 +23,18 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.thingsboard.server.common.data.HasName;
import org.thingsboard.server.common.data.alarm.AlarmId;
-import org.thingsboard.server.common.data.id.*;
+import org.thingsboard.server.common.data.id.AssetId;
+import org.thingsboard.server.common.data.id.CustomerId;
+import org.thingsboard.server.common.data.id.DashboardId;
+import org.thingsboard.server.common.data.id.DeviceId;
+import org.thingsboard.server.common.data.id.EntityId;
+import org.thingsboard.server.common.data.id.TenantId;
+import org.thingsboard.server.common.data.id.UserId;
import org.thingsboard.server.dao.alarm.AlarmService;
import org.thingsboard.server.dao.asset.AssetService;
import org.thingsboard.server.dao.customer.CustomerService;
import org.thingsboard.server.dao.dashboard.DashboardService;
import org.thingsboard.server.dao.device.DeviceService;
-import org.thingsboard.server.dao.plugin.PluginService;
-import org.thingsboard.server.dao.rule.RuleService;
import org.thingsboard.server.dao.tenant.TenantService;
import org.thingsboard.server.dao.user.UserService;
@@ -47,12 +51,6 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe
@Autowired
private DeviceService deviceService;
- @Autowired
- private RuleService ruleService;
-
- @Autowired
- private PluginService pluginService;
-
@Autowired
private TenantService tenantService;
@@ -85,12 +83,6 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe
case DEVICE:
hasName = deviceService.findDeviceByIdAsync(new DeviceId(entityId.getId()));
break;
- case RULE:
- hasName = ruleService.findRuleByIdAsync(new RuleId(entityId.getId()));
- break;
- case PLUGIN:
- hasName = pluginService.findPluginByIdAsync(new PluginId(entityId.getId()));
- break;
case TENANT:
hasName = tenantService.findTenantByIdAsync(new TenantId(entityId.getId()));
break;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java b/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java
index e143ab189b..23655bb358 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/event/CassandraBaseEventDao.java
@@ -41,7 +41,10 @@ import java.util.UUID;
import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_BY_ID_VIEW_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_BY_TYPE_AND_ID_VIEW_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
@Component
@Slf4j
diff --git a/dao/src/main/java/org/thingsboard/server/dao/event/EventService.java b/dao/src/main/java/org/thingsboard/server/dao/event/EventService.java
index b6ef4a3e04..64f823d017 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/event/EventService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/event/EventService.java
@@ -23,7 +23,6 @@ import org.thingsboard.server.common.data.page.TimePageLink;
import java.util.List;
import java.util.Optional;
-import java.util.UUID;
public interface EventService {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/BaseEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/BaseEntity.java
index 0aaf9c27dc..01ea41bf83 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/BaseEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/BaseEntity.java
@@ -15,7 +15,6 @@
*/
package org.thingsboard.server.dao.model;
-import java.io.Serializable;
import java.util.UUID;
public interface BaseEntity extends ToData {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/EntitySubtypeEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/EntitySubtypeEntity.java
index e4e4d61910..16622de604 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/EntitySubtypeEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/EntitySubtypeEntity.java
@@ -25,7 +25,10 @@ import org.thingsboard.server.dao.model.type.EntityTypeCodec;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_ENTITY_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_SUBTYPE_TYPE_PROPERTY;
@Table(name = ENTITY_SUBTYPE_COLUMN_FAMILY_NAME)
public class EntitySubtypeEntity {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java b/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java
index aff6381b05..3a934eb5d2 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/ModelConstants.java
@@ -18,6 +18,7 @@ package org.thingsboard.server.dao.model;
import com.datastax.driver.core.utils.UUIDs;
import org.apache.commons.lang3.ArrayUtils;
import org.thingsboard.server.common.data.UUIDConverter;
+import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.kv.Aggregation;
import java.util.UUID;
@@ -29,6 +30,7 @@ public class ModelConstants {
public static final UUID NULL_UUID = UUIDs.startOf(0);
public static final String NULL_UUID_STR = UUIDConverter.fromTimeUUID(NULL_UUID);
+ public static final TenantId SYSTEM_TENANT = new TenantId(ModelConstants.NULL_UUID);
/**
* Generic constants.
@@ -272,21 +274,6 @@ public class ModelConstants {
public static final String DASHBOARD_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME = "dashboard_by_tenant_and_search_text";
- /**
- * Cassandra plugin metadata constants.
- */
- public static final String PLUGIN_COLUMN_FAMILY_NAME = "plugin";
- public static final String PLUGIN_TENANT_ID_PROPERTY = TENANT_ID_PROPERTY;
- public static final String PLUGIN_NAME_PROPERTY = "name";
- public static final String PLUGIN_API_TOKEN_PROPERTY = "api_token";
- public static final String PLUGIN_CLASS_PROPERTY = "plugin_class";
- public static final String PLUGIN_ACCESS_PROPERTY = "public_access";
- public static final String PLUGIN_STATE_PROPERTY = STATE_PROPERTY;
- public static final String PLUGIN_CONFIGURATION_PROPERTY = "configuration";
-
- public static final String PLUGIN_BY_API_TOKEN_COLUMN_FAMILY_NAME = "plugin_by_api_token";
- public static final String PLUGIN_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME = "plugin_by_tenant_and_search_text";
-
/**
* Cassandra plugin component metadata constants.
*/
@@ -302,22 +289,6 @@ public class ModelConstants {
public static final String COMPONENT_DESCRIPTOR_BY_SCOPE_TYPE_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME = "component_desc_by_scope_type_search_text";
public static final String COMPONENT_DESCRIPTOR_BY_ID = "component_desc_by_id";
- /**
- * Cassandra rule metadata constants.
- */
- public static final String RULE_COLUMN_FAMILY_NAME = "rule";
- public static final String RULE_TENANT_ID_PROPERTY = TENANT_ID_PROPERTY;
- public static final String RULE_NAME_PROPERTY = "name";
- public static final String RULE_STATE_PROPERTY = STATE_PROPERTY;
- public static final String RULE_WEIGHT_PROPERTY = "weight";
- public static final String RULE_PLUGIN_TOKEN_PROPERTY = "plugin_token";
- public static final String RULE_FILTERS = "filters";
- public static final String RULE_PROCESSOR = "processor";
- public static final String RULE_ACTION = "action";
-
- public static final String RULE_BY_PLUGIN_TOKEN = "rule_by_plugin_token";
- public static final String RULE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME = "rule_by_tenant_and_search_text";
-
/**
* Cassandra event constants.
*/
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AdminSettingsEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AdminSettingsEntity.java
index 29c98594d3..7b8e8477eb 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AdminSettingsEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AdminSettingsEntity.java
@@ -29,7 +29,10 @@ import org.thingsboard.server.dao.model.type.JsonCodec;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_JSON_VALUE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_KEY_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
@Table(name = ADMIN_SETTINGS_COLUMN_FAMILY_NAME)
@EqualsAndHashCode
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AlarmEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AlarmEntity.java
index 72bf4df7e1..99df84fb67 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AlarmEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AlarmEntity.java
@@ -16,7 +16,10 @@
package org.thingsboard.server.dao.model.nosql;
import com.datastax.driver.core.utils.UUIDs;
-import com.datastax.driver.mapping.annotations.*;
+import com.datastax.driver.mapping.annotations.ClusteringColumn;
+import com.datastax.driver.mapping.annotations.Column;
+import com.datastax.driver.mapping.annotations.PartitionKey;
+import com.datastax.driver.mapping.annotations.Table;
import com.fasterxml.jackson.databind.JsonNode;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -35,7 +38,20 @@ import org.thingsboard.server.dao.model.type.JsonCodec;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ACK_TS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_CLEAR_TS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_DETAILS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_END_TS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_PROPAGATE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_SEVERITY_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_START_TS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_STATUS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
@Table(name = ALARM_COLUMN_FAMILY_NAME)
@EqualsAndHashCode
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AssetEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AssetEntity.java
index 11eb90559c..da9bdb40eb 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AssetEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AssetEntity.java
@@ -31,7 +31,14 @@ import org.thingsboard.server.dao.model.type.JsonCodec;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_CUSTOMER_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_NAME_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY;
@Table(name = ASSET_COLUMN_FAMILY_NAME)
@EqualsAndHashCode
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AuditLogEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AuditLogEntity.java
index ab2e3bce2d..aa145edb76 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AuditLogEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/AuditLogEntity.java
@@ -25,7 +25,11 @@ import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.audit.ActionStatus;
import org.thingsboard.server.common.data.audit.ActionType;
import org.thingsboard.server.common.data.audit.AuditLog;
-import org.thingsboard.server.common.data.id.*;
+import org.thingsboard.server.common.data.id.AuditLogId;
+import org.thingsboard.server.common.data.id.CustomerId;
+import org.thingsboard.server.common.data.id.EntityIdFactory;
+import org.thingsboard.server.common.data.id.TenantId;
+import org.thingsboard.server.common.data.id.UserId;
import org.thingsboard.server.dao.model.BaseEntity;
import org.thingsboard.server.dao.model.type.ActionStatusCodec;
import org.thingsboard.server.dao.model.type.ActionTypeCodec;
@@ -34,7 +38,19 @@ import org.thingsboard.server.dao.model.type.JsonCodec;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ACTION_DATA_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ACTION_FAILURE_DETAILS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ACTION_STATUS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ACTION_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_BY_ENTITY_ID_CF;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_CUSTOMER_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ENTITY_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ENTITY_NAME_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ENTITY_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_USER_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_USER_NAME_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
@Table(name = AUDIT_LOG_BY_ENTITY_ID_CF)
@Data
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/ComponentDescriptorEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/ComponentDescriptorEntity.java
index 4998ae5efb..6593304df0 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/ComponentDescriptorEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/ComponentDescriptorEntity.java
@@ -28,7 +28,15 @@ import org.thingsboard.server.dao.model.type.JsonCodec;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.COMPONENT_DESCRIPTOR_ACTIONS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.COMPONENT_DESCRIPTOR_CLASS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.COMPONENT_DESCRIPTOR_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.COMPONENT_DESCRIPTOR_CONFIGURATION_DESCRIPTOR_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.COMPONENT_DESCRIPTOR_NAME_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.COMPONENT_DESCRIPTOR_SCOPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.COMPONENT_DESCRIPTOR_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY;
/**
* @author Andrew Shvayka
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/CustomerEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/CustomerEntity.java
index 09520371bb..d13a54e6f7 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/CustomerEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/CustomerEntity.java
@@ -30,7 +30,20 @@ import org.thingsboard.server.dao.model.type.JsonCodec;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ADDRESS2_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ADDRESS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.CITY_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.COUNTRY_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_ADDITIONAL_INFO_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.CUSTOMER_TITLE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.EMAIL_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.PHONE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.STATE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ZIP_PROPERTY;
@Table(name = CUSTOMER_COLUMN_FAMILY_NAME)
@EqualsAndHashCode
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardEntity.java
index 622d6df090..74963f8714 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardEntity.java
@@ -38,7 +38,13 @@ import java.io.IOException;
import java.util.HashSet;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_ASSIGNED_CUSTOMERS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_CONFIGURATION_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_TITLE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY;
@Table(name = DASHBOARD_COLUMN_FAMILY_NAME)
@EqualsAndHashCode
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardInfoEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardInfoEntity.java
index ab0ec1c631..ce5f723d50 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardInfoEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DashboardInfoEntity.java
@@ -36,7 +36,12 @@ import java.io.IOException;
import java.util.HashSet;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_ASSIGNED_CUSTOMERS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DASHBOARD_TITLE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY;
@Table(name = DASHBOARD_COLUMN_FAMILY_NAME)
@EqualsAndHashCode
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceCredentialsEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceCredentialsEntity.java
index 8483865311..5e4bb0f5e8 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceCredentialsEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceCredentialsEntity.java
@@ -30,7 +30,12 @@ import org.thingsboard.server.dao.model.type.DeviceCredentialsTypeCodec;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_CREDENTIALS_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_CREDENTIALS_CREDENTIALS_VALUE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_CREDENTIALS_DEVICE_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
@Table(name = DEVICE_CREDENTIALS_COLUMN_FAMILY_NAME)
@EqualsAndHashCode
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceEntity.java
index ef0c5fe159..3543840652 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/DeviceEntity.java
@@ -31,7 +31,14 @@ import org.thingsboard.server.dao.model.type.JsonCodec;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_ADDITIONAL_INFO_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_CUSTOMER_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_NAME_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DEVICE_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY;
@Table(name = DEVICE_COLUMN_FAMILY_NAME)
@EqualsAndHashCode
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EventEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EventEntity.java
index 3b55d384e7..7f123596aa 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EventEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EventEntity.java
@@ -16,7 +16,10 @@
package org.thingsboard.server.dao.model.nosql;
import com.datastax.driver.core.utils.UUIDs;
-import com.datastax.driver.mapping.annotations.*;
+import com.datastax.driver.mapping.annotations.ClusteringColumn;
+import com.datastax.driver.mapping.annotations.Column;
+import com.datastax.driver.mapping.annotations.PartitionKey;
+import com.datastax.driver.mapping.annotations.Table;
import com.fasterxml.jackson.databind.JsonNode;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -31,7 +34,14 @@ import org.thingsboard.server.dao.model.type.JsonCodec;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_BODY_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_ENTITY_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_ENTITY_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_UID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
/**
* @author Andrew Shvayka
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/PluginMetaDataEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/PluginMetaDataEntity.java
deleted file mode 100644
index eaf833fefa..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/PluginMetaDataEntity.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.model.nosql;
-
-import com.datastax.driver.core.utils.UUIDs;
-import com.datastax.driver.mapping.annotations.*;
-import com.fasterxml.jackson.databind.JsonNode;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import org.thingsboard.server.common.data.id.PluginId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-import org.thingsboard.server.dao.model.SearchTextEntity;
-import org.thingsboard.server.dao.model.type.ComponentLifecycleStateCodec;
-import org.thingsboard.server.dao.model.type.JsonCodec;
-
-import java.util.Objects;
-import java.util.UUID;
-
-import static org.thingsboard.server.dao.model.ModelConstants.*;
-
-@Table(name = PLUGIN_COLUMN_FAMILY_NAME)
-@EqualsAndHashCode
-@ToString
-public class PluginMetaDataEntity implements SearchTextEntity {
-
- @PartitionKey
- @Column(name = ID_PROPERTY)
- private UUID id;
-
- @Column(name = PLUGIN_API_TOKEN_PROPERTY)
- private String apiToken;
-
- @ClusteringColumn
- @Column(name = PLUGIN_TENANT_ID_PROPERTY)
- private UUID tenantId;
-
- @Column(name = PLUGIN_NAME_PROPERTY)
- private String name;
-
- @Column(name = PLUGIN_CLASS_PROPERTY)
- private String clazz;
-
- @Column(name = PLUGIN_ACCESS_PROPERTY)
- private boolean publicAccess;
-
- @Column(name = PLUGIN_STATE_PROPERTY, codec = ComponentLifecycleStateCodec.class)
- private ComponentLifecycleState state;
-
- @Column(name = PLUGIN_CONFIGURATION_PROPERTY, codec = JsonCodec.class)
- private JsonNode configuration;
-
- @Column(name = SEARCH_TEXT_PROPERTY)
- private String searchText;
-
- @Column(name = ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class)
- private JsonNode additionalInfo;
-
- public PluginMetaDataEntity() {
- }
-
- public PluginMetaDataEntity(PluginMetaData pluginMetaData) {
- if (pluginMetaData.getId() != null) {
- this.id = pluginMetaData.getId().getId();
- }
- this.tenantId = pluginMetaData.getTenantId().getId();
- this.apiToken = pluginMetaData.getApiToken();
- this.clazz = pluginMetaData.getClazz();
- this.name = pluginMetaData.getName();
- this.publicAccess = pluginMetaData.isPublicAccess();
- this.state = pluginMetaData.getState();
- this.configuration = pluginMetaData.getConfiguration();
- this.searchText = pluginMetaData.getName();
- this.additionalInfo = pluginMetaData.getAdditionalInfo();
- }
-
- @Override
- public String getSearchTextSource() {
- return getSearchText();
- }
-
- @Override
- public void setSearchText(String searchText) {
- this.searchText = searchText;
- }
-
- @Override
- public UUID getId() {
- return id;
- }
-
- @Override
- public void setId(UUID id) {
- this.id = id;
- }
-
- public String getApiToken() {
- return apiToken;
- }
-
- public void setApiToken(String apiToken) {
- this.apiToken = apiToken;
- }
-
- public UUID getTenantId() {
- return tenantId;
- }
-
- public void setTenantId(UUID tenantId) {
- this.tenantId = tenantId;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getClazz() {
- return clazz;
- }
-
- public void setClazz(String clazz) {
- this.clazz = clazz;
- }
-
- public JsonNode getConfiguration() {
- return configuration;
- }
-
- public void setConfiguration(JsonNode configuration) {
- this.configuration = configuration;
- }
-
- public boolean isPublicAccess() {
- return publicAccess;
- }
-
- public void setPublicAccess(boolean publicAccess) {
- this.publicAccess = publicAccess;
- }
-
- public ComponentLifecycleState getState() {
- return state;
- }
-
- public void setState(ComponentLifecycleState state) {
- this.state = state;
- }
-
- public String getSearchText() {
- return searchText;
- }
-
- public JsonNode getAdditionalInfo() {
- return additionalInfo;
- }
-
- public void setAdditionalInfo(JsonNode additionalInfo) {
- this.additionalInfo = additionalInfo;
- }
-
- @Override
- public PluginMetaData toData() {
- PluginMetaData data = new PluginMetaData(new PluginId(id));
- data.setTenantId(new TenantId(tenantId));
- data.setCreatedTime(UUIDs.unixTimestamp(id));
- data.setName(name);
- data.setConfiguration(configuration);
- data.setClazz(clazz);
- data.setPublicAccess(publicAccess);
- data.setState(state);
- data.setApiToken(apiToken);
- data.setAdditionalInfo(additionalInfo);
- return data;
- }
-
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleChainEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleChainEntity.java
index 251a68901a..f6299e8cd1 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleChainEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleChainEntity.java
@@ -35,7 +35,16 @@ import org.thingsboard.server.dao.model.type.JsonCodec;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ADDITIONAL_INFO_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DEBUG_MODE;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.RULE_CHAIN_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.RULE_CHAIN_CONFIGURATION_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.RULE_CHAIN_FIRST_RULE_NODE_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.RULE_CHAIN_NAME_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.RULE_CHAIN_ROOT_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.RULE_CHAIN_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY;
@Table(name = RULE_CHAIN_COLUMN_FAMILY_NAME)
@EqualsAndHashCode
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleMetaDataEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleMetaDataEntity.java
deleted file mode 100644
index 5e09581b55..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleMetaDataEntity.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.model.nosql;
-
-import com.datastax.driver.core.utils.UUIDs;
-import com.datastax.driver.mapping.annotations.ClusteringColumn;
-import com.datastax.driver.mapping.annotations.Column;
-import com.datastax.driver.mapping.annotations.PartitionKey;
-import com.datastax.driver.mapping.annotations.Table;
-import com.fasterxml.jackson.databind.JsonNode;
-import lombok.EqualsAndHashCode;
-import lombok.ToString;
-import org.thingsboard.server.common.data.id.RuleId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
-import org.thingsboard.server.common.data.rule.RuleMetaData;
-import org.thingsboard.server.dao.DaoUtil;
-import org.thingsboard.server.dao.model.SearchTextEntity;
-import org.thingsboard.server.dao.model.type.ComponentLifecycleStateCodec;
-import org.thingsboard.server.dao.model.type.JsonCodec;
-
-import java.util.UUID;
-
-import static org.thingsboard.server.dao.model.ModelConstants.*;
-
-@Table(name = RULE_COLUMN_FAMILY_NAME)
-@EqualsAndHashCode
-@ToString
-public class RuleMetaDataEntity implements SearchTextEntity {
-
- @PartitionKey
- @Column(name = ID_PROPERTY)
- private UUID id;
- @ClusteringColumn
- @Column(name = RULE_TENANT_ID_PROPERTY)
- private UUID tenantId;
- @Column(name = RULE_NAME_PROPERTY)
- private String name;
- @Column(name = RULE_STATE_PROPERTY, codec = ComponentLifecycleStateCodec.class)
- private ComponentLifecycleState state;
- @Column(name = RULE_WEIGHT_PROPERTY)
- private int weight;
- @Column(name = SEARCH_TEXT_PROPERTY)
- private String searchText;
- @Column(name = RULE_PLUGIN_TOKEN_PROPERTY)
- private String pluginToken;
- @Column(name = RULE_FILTERS, codec = JsonCodec.class)
- private JsonNode filters;
- @Column(name = RULE_PROCESSOR, codec = JsonCodec.class)
- private JsonNode processor;
- @Column(name = RULE_ACTION, codec = JsonCodec.class)
- private JsonNode action;
- @Column(name = ADDITIONAL_INFO_PROPERTY, codec = JsonCodec.class)
- private JsonNode additionalInfo;
-
- public RuleMetaDataEntity() {
- }
-
- public RuleMetaDataEntity(RuleMetaData rule) {
- if (rule.getId() != null) {
- this.id = rule.getUuidId();
- }
- this.tenantId = DaoUtil.getId(rule.getTenantId());
- this.name = rule.getName();
- this.pluginToken = rule.getPluginToken();
- this.state = rule.getState();
- this.weight = rule.getWeight();
- this.searchText = rule.getName();
- this.filters = rule.getFilters();
- this.processor = rule.getProcessor();
- this.action = rule.getAction();
- this.additionalInfo = rule.getAdditionalInfo();
- }
-
- @Override
- public String getSearchTextSource() {
- return getSearchText();
- }
-
- @Override
- public void setSearchText(String searchText) {
- this.searchText = searchText;
- }
-
- @Override
- public UUID getId() {
- return id;
- }
-
- @Override
- public void setId(UUID id) {
- this.id = id;
- }
-
- public UUID getTenantId() {
- return tenantId;
- }
-
- public void setTenantId(UUID tenantId) {
- this.tenantId = tenantId;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public ComponentLifecycleState getState() {
- return state;
- }
-
- public void setState(ComponentLifecycleState state) {
- this.state = state;
- }
-
- public int getWeight() {
- return weight;
- }
-
- public void setWeight(int weight) {
- this.weight = weight;
- }
-
- public String getPluginToken() {
- return pluginToken;
- }
-
- public void setPluginToken(String pluginToken) {
- this.pluginToken = pluginToken;
- }
-
- public String getSearchText() {
- return searchText;
- }
-
- public JsonNode getFilters() {
- return filters;
- }
-
- public void setFilters(JsonNode filters) {
- this.filters = filters;
- }
-
- public JsonNode getProcessor() {
- return processor;
- }
-
- public void setProcessor(JsonNode processor) {
- this.processor = processor;
- }
-
- public JsonNode getAction() {
- return action;
- }
-
- public void setAction(JsonNode action) {
- this.action = action;
- }
-
- public JsonNode getAdditionalInfo() {
- return additionalInfo;
- }
-
- public void setAdditionalInfo(JsonNode additionalInfo) {
- this.additionalInfo = additionalInfo;
- }
-
- @Override
- public RuleMetaData toData() {
- RuleMetaData rule = new RuleMetaData(new RuleId(id));
- rule.setTenantId(new TenantId(tenantId));
- rule.setName(name);
- rule.setState(state);
- rule.setWeight(weight);
- rule.setCreatedTime(UUIDs.unixTimestamp(id));
- rule.setPluginToken(pluginToken);
- rule.setFilters(filters);
- rule.setProcessor(processor);
- rule.setAction(action);
- rule.setAdditionalInfo(additionalInfo);
- return rule;
- }
-
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleNodeEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleNodeEntity.java
index ec13022600..39f721943c 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleNodeEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleNodeEntity.java
@@ -32,7 +32,15 @@ import org.thingsboard.server.dao.model.type.JsonCodec;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ADDITIONAL_INFO_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.DEBUG_MODE;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.RULE_NODE_CHAIN_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.RULE_NODE_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.RULE_NODE_CONFIGURATION_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.RULE_NODE_NAME_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.RULE_NODE_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY;
@Table(name = RULE_NODE_COLUMN_FAMILY_NAME)
@EqualsAndHashCode
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/TenantEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/TenantEntity.java
index 9140f9e22b..b16a73347b 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/TenantEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/TenantEntity.java
@@ -29,7 +29,20 @@ import org.thingsboard.server.dao.model.type.JsonCodec;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ADDRESS2_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ADDRESS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.CITY_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.COUNTRY_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.EMAIL_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.PHONE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.STATE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.TENANT_ADDITIONAL_INFO_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.TENANT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.TENANT_REGION_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.TENANT_TITLE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ZIP_PROPERTY;
@Table(name = TENANT_COLUMN_FAMILY_NAME)
@EqualsAndHashCode
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserCredentialsEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserCredentialsEntity.java
index ef441de282..1e7fbe2f89 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserCredentialsEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserCredentialsEntity.java
@@ -27,7 +27,13 @@ import org.thingsboard.server.dao.model.BaseEntity;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_ACTIVATE_TOKEN_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_ENABLED_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_PASSWORD_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_RESET_TOKEN_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.USER_CREDENTIALS_USER_ID_PROPERTY;
@Table(name = USER_CREDENTIALS_COLUMN_FAMILY_NAME)
@EqualsAndHashCode
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserEntity.java
index 69b5a630d6..f3f845dc53 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/UserEntity.java
@@ -33,7 +33,16 @@ import org.thingsboard.server.dao.model.type.JsonCodec;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.USER_ADDITIONAL_INFO_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.USER_AUTHORITY_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.USER_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.USER_CUSTOMER_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.USER_EMAIL_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.USER_FIRST_NAME_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.USER_LAST_NAME_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.USER_TENANT_ID_PROPERTY;
@Table(name = USER_COLUMN_FAMILY_NAME)
@EqualsAndHashCode
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetTypeEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetTypeEntity.java
index 1d37aafa2b..fe2d76ebf5 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetTypeEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetTypeEntity.java
@@ -30,7 +30,13 @@ import org.thingsboard.server.dao.model.type.JsonCodec;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGET_TYPE_ALIAS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGET_TYPE_BUNDLE_ALIAS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGET_TYPE_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGET_TYPE_DESCRIPTOR_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGET_TYPE_NAME_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGET_TYPE_TENANT_ID_PROPERTY;
@Table(name = WIDGET_TYPE_COLUMN_FAMILY_NAME)
@EqualsAndHashCode
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetsBundleEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetsBundleEntity.java
index 26cd88dc01..6704f1a0f0 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetsBundleEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/WidgetsBundleEntity.java
@@ -30,7 +30,13 @@ import org.thingsboard.server.dao.model.SearchTextEntity;
import java.nio.ByteBuffer;
import java.util.UUID;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGETS_BUNDLE_ALIAS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGETS_BUNDLE_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGETS_BUNDLE_IMAGE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGETS_BUNDLE_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGETS_BUNDLE_TITLE_PROPERTY;
@Table(name = WIDGETS_BUNDLE_COLUMN_FAMILY_NAME)
@EqualsAndHashCode
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java
index 7891bfc7e3..b5851f00bd 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AdminSettingsEntity.java
@@ -32,7 +32,9 @@ import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_JSON_VALUE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_KEY_PROPERTY;
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AlarmEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AlarmEntity.java
index 65ca3869f4..32f95e15e9 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AlarmEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AlarmEntity.java
@@ -34,9 +34,24 @@ import org.thingsboard.server.dao.model.BaseSqlEntity;
import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.util.mapping.JsonStringType;
-import javax.persistence.*;
-
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Table;
+
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ACK_TS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_CLEAR_TS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_END_TS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_ORIGINATOR_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_PROPAGATE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_SEVERITY_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_START_TS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_STATUS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ALARM_TYPE_PROPERTY;
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AssetEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AssetEntity.java
index a32f2d69f7..2da7396384 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AssetEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AssetEntity.java
@@ -35,7 +35,12 @@ import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_CUSTOMER_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_NAME_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.ASSET_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY;
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AttributeKvEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AttributeKvEntity.java
index 81722a1b2d..587a31485e 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AttributeKvEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AttributeKvEntity.java
@@ -17,13 +17,33 @@ package org.thingsboard.server.dao.model.sql;
import lombok.Data;
import org.thingsboard.server.common.data.EntityType;
-import org.thingsboard.server.common.data.kv.*;
+import org.thingsboard.server.common.data.kv.AttributeKvEntry;
+import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry;
+import org.thingsboard.server.common.data.kv.BooleanDataEntry;
+import org.thingsboard.server.common.data.kv.DoubleDataEntry;
+import org.thingsboard.server.common.data.kv.KvEntry;
+import org.thingsboard.server.common.data.kv.LongDataEntry;
+import org.thingsboard.server.common.data.kv.StringDataEntry;
import org.thingsboard.server.dao.model.ToData;
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.Table;
import java.io.Serializable;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ATTRIBUTE_KEY_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.ATTRIBUTE_TYPE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.BOOLEAN_VALUE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.DOUBLE_VALUE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_ID_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_TYPE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.LAST_UPDATE_TS_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.LONG_VALUE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.STRING_VALUE_COLUMN;
@Data
@Entity
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AuditLogEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AuditLogEntity.java
index 6d135614d0..d4e8e278bf 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/AuditLogEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/AuditLogEntity.java
@@ -25,15 +25,33 @@ import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.audit.ActionStatus;
import org.thingsboard.server.common.data.audit.ActionType;
import org.thingsboard.server.common.data.audit.AuditLog;
-import org.thingsboard.server.common.data.id.*;
+import org.thingsboard.server.common.data.id.AuditLogId;
+import org.thingsboard.server.common.data.id.CustomerId;
+import org.thingsboard.server.common.data.id.EntityIdFactory;
+import org.thingsboard.server.common.data.id.TenantId;
+import org.thingsboard.server.common.data.id.UserId;
import org.thingsboard.server.dao.model.BaseEntity;
import org.thingsboard.server.dao.model.BaseSqlEntity;
import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.util.mapping.JsonStringType;
-import javax.persistence.*;
-
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Table;
+
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ACTION_DATA_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ACTION_FAILURE_DETAILS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ACTION_STATUS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ACTION_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_CUSTOMER_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ENTITY_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ENTITY_NAME_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_ENTITY_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_USER_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.AUDIT_LOG_USER_NAME_PROPERTY;
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java
index 9739889171..66fbcc3382 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/ComponentDescriptorEntity.java
@@ -29,7 +29,11 @@ import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.model.SearchTextEntity;
import org.thingsboard.server.dao.util.mapping.JsonStringType;
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Table;
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceCredentialsEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceCredentialsEntity.java
index 676ae2d4bc..faa036eb63 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceCredentialsEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceCredentialsEntity.java
@@ -26,7 +26,11 @@ import org.thingsboard.server.dao.model.BaseEntity;
import org.thingsboard.server.dao.model.BaseSqlEntity;
import org.thingsboard.server.dao.model.ModelConstants;
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Table;
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java
index 6f6b942bb5..aaf2c366f3 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/EventEntity.java
@@ -31,9 +31,19 @@ import org.thingsboard.server.dao.model.BaseEntity;
import org.thingsboard.server.dao.model.BaseSqlEntity;
import org.thingsboard.server.dao.util.mapping.JsonStringType;
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Table;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_BODY_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_ENTITY_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_ENTITY_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_TENANT_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.EVENT_UID_PROPERTY;
@Data
@EqualsAndHashCode(callSuper = true)
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java
deleted file mode 100644
index eec1dfc60a..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.model.sql;
-
-import com.datastax.driver.core.utils.UUIDs;
-import com.fasterxml.jackson.databind.JsonNode;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.hibernate.annotations.Type;
-import org.hibernate.annotations.TypeDef;
-import org.thingsboard.server.common.data.id.PluginId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-import org.thingsboard.server.dao.model.BaseSqlEntity;
-import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.dao.model.SearchTextEntity;
-import org.thingsboard.server.dao.util.mapping.JsonStringType;
-
-import javax.persistence.*;
-
-import static org.thingsboard.server.common.data.UUIDConverter.fromString;
-import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUID;
-
-@Data
-@EqualsAndHashCode(callSuper = true)
-@Entity
-@TypeDef(name = "json", typeClass = JsonStringType.class)
-@Table(name = ModelConstants.PLUGIN_COLUMN_FAMILY_NAME)
-public class PluginMetaDataEntity extends BaseSqlEntity implements SearchTextEntity {
-
- @Column(name = ModelConstants.PLUGIN_API_TOKEN_PROPERTY)
- private String apiToken;
-
- @Column(name = ModelConstants.PLUGIN_TENANT_ID_PROPERTY)
- private String tenantId;
-
- @Column(name = ModelConstants.PLUGIN_NAME_PROPERTY)
- private String name;
-
- @Column(name = ModelConstants.PLUGIN_CLASS_PROPERTY)
- private String clazz;
-
- @Column(name = ModelConstants.PLUGIN_ACCESS_PROPERTY)
- private boolean publicAccess;
-
- @Enumerated(EnumType.STRING)
- @Column(name = ModelConstants.PLUGIN_STATE_PROPERTY)
- private ComponentLifecycleState state;
-
- @Type(type = "json")
- @Column(name = ModelConstants.PLUGIN_CONFIGURATION_PROPERTY)
- private JsonNode configuration;
-
- @Type(type = "json")
- @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY)
- private JsonNode additionalInfo;
-
- @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
- private String searchText;
-
- public PluginMetaDataEntity() {
- }
-
- public PluginMetaDataEntity(PluginMetaData pluginMetaData) {
- if (pluginMetaData.getId() != null) {
- this.setId(pluginMetaData.getId().getId());
- }
- this.tenantId = fromTimeUUID(pluginMetaData.getTenantId().getId());
- this.apiToken = pluginMetaData.getApiToken();
- this.clazz = pluginMetaData.getClazz();
- this.name = pluginMetaData.getName();
- this.publicAccess = pluginMetaData.isPublicAccess();
- this.state = pluginMetaData.getState();
- this.searchText = pluginMetaData.getName();
- this.configuration = pluginMetaData.getConfiguration();
- this.additionalInfo = pluginMetaData.getAdditionalInfo();
- }
-
- @Override
- public String getSearchTextSource() {
- return searchText;
- }
-
- @Override
- public void setSearchText(String searchText) {
- this.searchText = searchText;
- }
-
- @Override
- public PluginMetaData toData() {
- PluginMetaData data = new PluginMetaData(new PluginId(getId()));
- data.setTenantId(new TenantId(fromString(tenantId)));
- data.setCreatedTime(UUIDs.unixTimestamp(getId()));
- data.setName(name);
- data.setClazz(clazz);
- data.setPublicAccess(publicAccess);
- data.setState(state);
- data.setApiToken(apiToken);
- data.setConfiguration(configuration);
- data.setAdditionalInfo(additionalInfo);
- return data;
- }
-
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationEntity.java
index 2f94669506..6d0f6d0dfa 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationEntity.java
@@ -26,9 +26,20 @@ import org.thingsboard.server.common.data.relation.RelationTypeGroup;
import org.thingsboard.server.dao.model.ToData;
import org.thingsboard.server.dao.util.mapping.JsonStringType;
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.Table;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ADDITIONAL_INFO_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.RELATION_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.RELATION_FROM_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.RELATION_FROM_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.RELATION_TO_ID_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.RELATION_TO_TYPE_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.RELATION_TYPE_GROUP_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.RELATION_TYPE_PROPERTY;
@Data
@Entity
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java
deleted file mode 100644
index 26d790e656..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.model.sql;
-
-import com.datastax.driver.core.utils.UUIDs;
-import com.fasterxml.jackson.databind.JsonNode;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.hibernate.annotations.Type;
-import org.hibernate.annotations.TypeDef;
-import org.thingsboard.server.common.data.id.RuleId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
-import org.thingsboard.server.common.data.rule.RuleMetaData;
-import org.thingsboard.server.dao.DaoUtil;
-import org.thingsboard.server.dao.model.BaseSqlEntity;
-import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.dao.model.SearchTextEntity;
-import org.thingsboard.server.dao.util.mapping.JsonStringType;
-
-import javax.persistence.*;
-
-@Data
-@EqualsAndHashCode(callSuper = true)
-@Entity
-@TypeDef(name = "json", typeClass = JsonStringType.class)
-@Table(name = ModelConstants.RULE_COLUMN_FAMILY_NAME)
-public class RuleMetaDataEntity extends BaseSqlEntity implements SearchTextEntity {
-
- @Column(name = ModelConstants.RULE_TENANT_ID_PROPERTY)
- private String tenantId;
-
- @Column(name = ModelConstants.RULE_NAME_PROPERTY)
- private String name;
-
- @Enumerated(EnumType.STRING)
- @Column(name = ModelConstants.RULE_STATE_PROPERTY)
- private ComponentLifecycleState state;
-
- @Column(name = ModelConstants.RULE_WEIGHT_PROPERTY)
- private int weight;
-
- @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY)
- private String searchText;
-
- @Column(name = ModelConstants.RULE_PLUGIN_TOKEN_PROPERTY)
- private String pluginToken;
-
- @Type(type = "json")
- @Column(name = ModelConstants.RULE_FILTERS)
- private JsonNode filters;
-
- @Type(type = "json")
- @Column(name = ModelConstants.RULE_PROCESSOR)
- private JsonNode processor;
-
- @Type(type = "json")
- @Column(name = ModelConstants.RULE_ACTION)
- private JsonNode action;
-
- @Type(type = "json")
- @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY)
- private JsonNode additionalInfo;
-
- public RuleMetaDataEntity() {
- }
-
- public RuleMetaDataEntity(RuleMetaData rule) {
- if (rule.getId() != null) {
- this.setId(rule.getUuidId());
- }
- this.tenantId = toString(DaoUtil.getId(rule.getTenantId()));
- this.name = rule.getName();
- this.pluginToken = rule.getPluginToken();
- this.state = rule.getState();
- this.weight = rule.getWeight();
- this.searchText = rule.getName();
- this.filters = rule.getFilters();
- this.processor = rule.getProcessor();
- this.action = rule.getAction();
- this.additionalInfo = rule.getAdditionalInfo();
- }
-
- @Override
- public String getSearchTextSource() {
- return searchText;
- }
-
- @Override
- public void setSearchText(String searchText) {
- this.searchText = searchText;
- }
-
- @Override
- public RuleMetaData toData() {
- RuleMetaData rule = new RuleMetaData(new RuleId(getId()));
- rule.setTenantId(new TenantId(toUUID(tenantId)));
- rule.setName(name);
- rule.setState(state);
- rule.setWeight(weight);
- rule.setCreatedTime(UUIDs.unixTimestamp(getId()));
- rule.setPluginToken(pluginToken);
- rule.setFilters(filters);
- rule.setProcessor(processor);
- rule.setAction(action);
- rule.setAdditionalInfo(additionalInfo);
- return rule;
- }
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvEntity.java
index 3afe007879..a6d3ea6681 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvEntity.java
@@ -17,12 +17,31 @@ package org.thingsboard.server.dao.model.sql;
import lombok.Data;
import org.thingsboard.server.common.data.EntityType;
-import org.thingsboard.server.common.data.kv.*;
+import org.thingsboard.server.common.data.kv.BasicTsKvEntry;
+import org.thingsboard.server.common.data.kv.BooleanDataEntry;
+import org.thingsboard.server.common.data.kv.DoubleDataEntry;
+import org.thingsboard.server.common.data.kv.KvEntry;
+import org.thingsboard.server.common.data.kv.LongDataEntry;
+import org.thingsboard.server.common.data.kv.StringDataEntry;
+import org.thingsboard.server.common.data.kv.TsKvEntry;
import org.thingsboard.server.dao.model.ToData;
-import javax.persistence.*;
-
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.Table;
+
+import static org.thingsboard.server.dao.model.ModelConstants.BOOLEAN_VALUE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.DOUBLE_VALUE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_ID_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_TYPE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.KEY_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.LONG_VALUE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.STRING_VALUE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.TS_COLUMN;
@Data
@Entity
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvLatestEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvLatestEntity.java
index 67267c94d4..cb7851c40d 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvLatestEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvLatestEntity.java
@@ -17,12 +17,31 @@ package org.thingsboard.server.dao.model.sql;
import lombok.Data;
import org.thingsboard.server.common.data.EntityType;
-import org.thingsboard.server.common.data.kv.*;
+import org.thingsboard.server.common.data.kv.BasicTsKvEntry;
+import org.thingsboard.server.common.data.kv.BooleanDataEntry;
+import org.thingsboard.server.common.data.kv.DoubleDataEntry;
+import org.thingsboard.server.common.data.kv.KvEntry;
+import org.thingsboard.server.common.data.kv.LongDataEntry;
+import org.thingsboard.server.common.data.kv.StringDataEntry;
+import org.thingsboard.server.common.data.kv.TsKvEntry;
import org.thingsboard.server.dao.model.ToData;
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.Table;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.BOOLEAN_VALUE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.DOUBLE_VALUE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_ID_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_TYPE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.KEY_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.LONG_VALUE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.STRING_VALUE_COLUMN;
+import static org.thingsboard.server.dao.model.ModelConstants.TS_COLUMN;
@Data
@Entity
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java
index 3df2aa28da..7f18cbe746 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/UserEntity.java
@@ -31,7 +31,11 @@ import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.model.SearchTextEntity;
import org.thingsboard.server.dao.util.mapping.JsonStringType;
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Table;
import static org.thingsboard.server.common.data.UUIDConverter.fromString;
import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUID;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/nosql/CassandraAbstractDao.java b/dao/src/main/java/org/thingsboard/server/dao/nosql/CassandraAbstractDao.java
index 3b98356121..d1af1677db 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/nosql/CassandraAbstractDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/nosql/CassandraAbstractDao.java
@@ -15,12 +15,26 @@
*/
package org.thingsboard.server.dao.nosql;
-import com.datastax.driver.core.*;
+import com.datastax.driver.core.BoundStatement;
+import com.datastax.driver.core.CodecRegistry;
+import com.datastax.driver.core.ConsistencyLevel;
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.ResultSetFuture;
+import com.datastax.driver.core.Session;
+import com.datastax.driver.core.Statement;
+import com.datastax.driver.core.TypeCodec;
import com.datastax.driver.core.exceptions.CodecNotFoundException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.thingsboard.server.dao.cassandra.CassandraCluster;
-import org.thingsboard.server.dao.model.type.*;
+import org.thingsboard.server.dao.model.type.AuthorityCodec;
+import org.thingsboard.server.dao.model.type.ComponentLifecycleStateCodec;
+import org.thingsboard.server.dao.model.type.ComponentScopeCodec;
+import org.thingsboard.server.dao.model.type.ComponentTypeCodec;
+import org.thingsboard.server.dao.model.type.DeviceCredentialsTypeCodec;
+import org.thingsboard.server.dao.model.type.EntityTypeCodec;
+import org.thingsboard.server.dao.model.type.JsonCodec;
import org.thingsboard.server.dao.util.BufferedRateLimiter;
import java.util.concurrent.ConcurrentHashMap;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/nosql/CassandraAbstractModelDao.java b/dao/src/main/java/org/thingsboard/server/dao/nosql/CassandraAbstractModelDao.java
index 47d43ba57f..000316b4ff 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/nosql/CassandraAbstractModelDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/nosql/CassandraAbstractModelDao.java
@@ -15,7 +15,6 @@
*/
package org.thingsboard.server.dao.nosql;
-import com.datastax.driver.core.PreparedStatement;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.ResultSetFuture;
import com.datastax.driver.core.Statement;
@@ -38,8 +37,6 @@ import javax.annotation.Nullable;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/nosql/RateLimitedResultSetFuture.java b/dao/src/main/java/org/thingsboard/server/dao/nosql/RateLimitedResultSetFuture.java
index d4aef86522..2b10bbcdbc 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/nosql/RateLimitedResultSetFuture.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/nosql/RateLimitedResultSetFuture.java
@@ -19,7 +19,6 @@ import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.ResultSetFuture;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.Statement;
-import com.google.common.base.Function;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
@@ -28,7 +27,11 @@ import org.thingsboard.server.dao.exception.BufferLimitException;
import org.thingsboard.server.dao.util.AsyncRateLimiter;
import javax.annotation.Nullable;
-import java.util.concurrent.*;
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
public class RateLimitedResultSetFuture implements ResultSetFuture {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginService.java b/dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginService.java
deleted file mode 100644
index 67b8c603b2..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginService.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.plugin;
-
-import com.google.common.util.concurrent.ListenableFuture;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.thingsboard.server.common.data.id.PluginId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.page.TextPageData;
-import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
-import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
-import org.thingsboard.server.common.data.plugin.ComponentType;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-import org.thingsboard.server.common.data.rule.RuleMetaData;
-import org.thingsboard.server.dao.component.ComponentDescriptorService;
-import org.thingsboard.server.dao.entity.AbstractEntityService;
-import org.thingsboard.server.dao.exception.DataValidationException;
-import org.thingsboard.server.dao.exception.DatabaseException;
-import org.thingsboard.server.dao.exception.IncorrectParameterException;
-import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.dao.rule.RuleDao;
-import org.thingsboard.server.dao.service.DataValidator;
-import org.thingsboard.server.dao.service.PaginatedRemover;
-import org.thingsboard.server.dao.service.Validator;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-import java.util.stream.Collectors;
-
-import static org.thingsboard.server.dao.service.Validator.validateId;
-@Service
-@Slf4j
-public class BasePluginService extends AbstractEntityService implements PluginService {
-
- //TODO: move to a better place.
- public static final TenantId SYSTEM_TENANT = new TenantId(ModelConstants.NULL_UUID);
-
- @Autowired
- private PluginDao pluginDao;
-
- @Autowired
- private RuleDao ruleDao;
-
- @Autowired
- private ComponentDescriptorService componentDescriptorService;
-
- @Override
- public PluginMetaData savePlugin(PluginMetaData plugin) {
- pluginValidator.validate(plugin);
- if (plugin.getTenantId() == null) {
- log.trace("Save system plugin metadata with predefined id {}", SYSTEM_TENANT);
- plugin.setTenantId(SYSTEM_TENANT);
- }
- if (plugin.getId() != null) {
- PluginMetaData oldVersion = pluginDao.findById(plugin.getId());
- if (plugin.getState() == null) {
- plugin.setState(oldVersion.getState());
- } else if (plugin.getState() != oldVersion.getState()) {
- throw new IncorrectParameterException("Use Activate/Suspend method to control state of the plugin!");
- }
- } else {
- if (plugin.getState() == null) {
- plugin.setState(ComponentLifecycleState.SUSPENDED);
- } else if (plugin.getState() != ComponentLifecycleState.SUSPENDED) {
- throw new IncorrectParameterException("Use Activate/Suspend method to control state of the plugin!");
- }
- }
- ComponentDescriptor descriptor = componentDescriptorService.findByClazz(plugin.getClazz());
- if (descriptor == null) {
- throw new IncorrectParameterException("Plugin descriptor not found!");
- } else if (!ComponentType.PLUGIN.equals(descriptor.getType())) {
- throw new IncorrectParameterException("Plugin class is actually " + descriptor.getType() + "!");
- }
- PluginMetaData savedPlugin = pluginDao.findByApiToken(plugin.getApiToken());
- if (savedPlugin != null && (plugin.getId() == null || !savedPlugin.getId().getId().equals(plugin.getId().getId()))) {
- throw new IncorrectParameterException("API token is already reserved!");
- }
- if (!componentDescriptorService.validate(descriptor, plugin.getConfiguration())) {
- throw new IncorrectParameterException("Filters configuration is not valid!");
- }
- return pluginDao.save(plugin);
- }
-
- @Override
- public PluginMetaData findPluginById(PluginId pluginId) {
- Validator.validateId(pluginId, "Incorrect plugin id for search request.");
- return pluginDao.findById(pluginId);
- }
-
- @Override
- public ListenableFuture findPluginByIdAsync(PluginId pluginId) {
- validateId(pluginId, "Incorrect plugin id for search plugin request.");
- return pluginDao.findByIdAsync(pluginId.getId());
- }
-
- @Override
- public PluginMetaData findPluginByApiToken(String apiToken) {
- Validator.validateString(apiToken, "Incorrect plugin apiToken for search request.");
- return pluginDao.findByApiToken(apiToken);
- }
-
- @Override
- public TextPageData findSystemPlugins(TextPageLink pageLink) {
- Validator.validatePageLink(pageLink, "Incorrect PageLink object for search system plugin request.");
- List plugins = pluginDao.findByTenantIdAndPageLink(SYSTEM_TENANT, pageLink);
- return new TextPageData<>(plugins, pageLink);
- }
-
- @Override
- public TextPageData findTenantPlugins(TenantId tenantId, TextPageLink pageLink) {
- Validator.validateId(tenantId, "Incorrect tenant id for search plugins request.");
- Validator.validatePageLink(pageLink, "Incorrect PageLink object for search plugin request.");
- List plugins = pluginDao.findByTenantIdAndPageLink(tenantId, pageLink);
- return new TextPageData<>(plugins, pageLink);
- }
-
- @Override
- public List findSystemPlugins() {
- log.trace("Executing findSystemPlugins");
- List plugins = new ArrayList<>();
- TextPageLink pageLink = new TextPageLink(300);
- TextPageData pageData = null;
- do {
- pageData = findSystemPlugins(pageLink);
- plugins.addAll(pageData.getData());
- if (pageData.hasNext()) {
- pageLink = pageData.getNextPageLink();
- }
- } while (pageData.hasNext());
- return plugins;
- }
-
- @Override
- public TextPageData findAllTenantPluginsByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) {
- log.trace("Executing findAllTenantPluginsByTenantIdAndPageLink, tenantId [{}], pageLink [{}]", tenantId, pageLink);
- Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
- Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
- List plugins = pluginDao.findAllTenantPluginsByTenantId(tenantId.getId(), pageLink);
- return new TextPageData<>(plugins, pageLink);
- }
-
- @Override
- public List findAllTenantPluginsByTenantId(TenantId tenantId) {
- log.trace("Executing findAllTenantPluginsByTenantId, tenantId [{}]", tenantId);
- Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
- List plugins = new ArrayList<>();
- TextPageLink pageLink = new TextPageLink(300);
- TextPageData pageData = null;
- do {
- pageData = findAllTenantPluginsByTenantIdAndPageLink(tenantId, pageLink);
- plugins.addAll(pageData.getData());
- if (pageData.hasNext()) {
- pageLink = pageData.getNextPageLink();
- }
- } while (pageData.hasNext());
- return plugins;
- }
-
- @Override
- public void activatePluginById(PluginId pluginId) {
- updateLifeCycleState(pluginId, ComponentLifecycleState.ACTIVE);
- }
-
- @Override
- public void suspendPluginById(PluginId pluginId) {
- PluginMetaData plugin = pluginDao.findById(pluginId);
- List affectedRules = ruleDao.findRulesByPlugin(plugin.getApiToken())
- .stream().filter(rule -> rule.getState() == ComponentLifecycleState.ACTIVE).collect(Collectors.toList());
- if (affectedRules.isEmpty()) {
- updateLifeCycleState(pluginId, ComponentLifecycleState.SUSPENDED);
- } else {
- throw new DataValidationException("Can't suspend plugin that has active rules!");
- }
- }
-
- private void updateLifeCycleState(PluginId pluginId, ComponentLifecycleState state) {
- Validator.validateId(pluginId, "Incorrect plugin id for state change request.");
- PluginMetaData plugin = pluginDao.findById(pluginId);
- if (plugin != null) {
- plugin.setState(state);
- pluginDao.save(plugin);
- } else {
- throw new DatabaseException("Plugin not found!");
- }
- }
-
- @Override
- public void deletePluginById(PluginId pluginId) {
- Validator.validateId(pluginId, "Incorrect plugin id for delete request.");
- deleteEntityRelations(pluginId);
- checkRulesAndDelete(pluginId.getId());
- }
-
- private void checkRulesAndDelete(UUID pluginId) {
- PluginMetaData plugin = pluginDao.findById(pluginId);
- List affectedRules = ruleDao.findRulesByPlugin(plugin.getApiToken());
- if (affectedRules.isEmpty()) {
- pluginDao.deleteById(pluginId);
- } else {
- throw new DataValidationException("Plugin deletion will affect existing rules!");
- }
- }
-
- @Override
- public void deletePluginsByTenantId(TenantId tenantId) {
- Validator.validateId(tenantId, "Incorrect tenant id for delete plugins request.");
- tenantPluginRemover.removeEntities(tenantId);
- }
-
-
- private DataValidator pluginValidator =
- new DataValidator() {
- @Override
- protected void validateDataImpl(PluginMetaData plugin) {
- if (StringUtils.isEmpty(plugin.getName())) {
- throw new DataValidationException("Plugin name should be specified!.");
- }
- if (StringUtils.isEmpty(plugin.getClazz())) {
- throw new DataValidationException("Plugin clazz should be specified!.");
- }
- if (StringUtils.isEmpty(plugin.getApiToken())) {
- throw new DataValidationException("Plugin api token is not set!");
- }
- if (plugin.getConfiguration() == null) {
- throw new DataValidationException("Plugin configuration is not set!");
- }
- }
- };
-
- private PaginatedRemover tenantPluginRemover =
- new PaginatedRemover() {
-
- @Override
- protected List findEntities(TenantId id, TextPageLink pageLink) {
- return pluginDao.findByTenantIdAndPageLink(id, pageLink);
- }
-
- @Override
- protected void removeEntity(PluginMetaData entity) {
- checkRulesAndDelete(entity.getUuidId());
- }
- };
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/plugin/CassandraBasePluginDao.java b/dao/src/main/java/org/thingsboard/server/dao/plugin/CassandraBasePluginDao.java
deleted file mode 100644
index 7b948a2d54..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/plugin/CassandraBasePluginDao.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.plugin;
-
-import com.datastax.driver.core.querybuilder.Select;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-import org.thingsboard.server.common.data.id.PluginId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-import org.thingsboard.server.dao.DaoUtil;
-import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.dao.model.nosql.PluginMetaDataEntity;
-import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
-import org.thingsboard.server.dao.util.NoSqlDao;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.UUID;
-
-import static com.datastax.driver.core.querybuilder.QueryBuilder.*;
-import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
-
-@Component
-@Slf4j
-@NoSqlDao
-public class CassandraBasePluginDao extends CassandraAbstractSearchTextDao implements PluginDao {
-
- public static final String SEARCH_RESULT = "Search result: [{}]";
-
- @Override
- protected Class getColumnFamilyClass() {
- return PluginMetaDataEntity.class;
- }
-
- @Override
- protected String getColumnFamilyName() {
- return ModelConstants.PLUGIN_COLUMN_FAMILY_NAME;
- }
-
- @Override
- public PluginMetaData findById(PluginId pluginId) {
- log.debug("Search plugin meta-data entity by id [{}]", pluginId);
- PluginMetaData pluginMetaData = super.findById(pluginId.getId());
- if (log.isTraceEnabled()) {
- log.trace("Search result: [{}] for plugin entity [{}]", pluginMetaData != null, pluginMetaData);
- } else {
- log.debug(SEARCH_RESULT, pluginMetaData != null);
- }
- return pluginMetaData;
- }
-
- @Override
- public PluginMetaData findByApiToken(String apiToken) {
- log.debug("Search plugin meta-data entity by api token [{}]", apiToken);
- Select.Where query = select().from(ModelConstants.PLUGIN_BY_API_TOKEN_COLUMN_FAMILY_NAME).where(eq(ModelConstants.PLUGIN_API_TOKEN_PROPERTY, apiToken));
- log.trace("Execute query [{}]", query);
- PluginMetaDataEntity entity = findOneByStatement(query);
- if (log.isTraceEnabled()) {
- log.trace("Search result: [{}] for plugin entity [{}]", entity != null, entity);
- } else {
- log.debug(SEARCH_RESULT, entity != null);
- }
- return DaoUtil.getData(entity);
- }
-
- @Override
- public void deleteById(UUID id) {
- log.debug("Delete plugin meta-data entity by id [{}]", id);
- boolean result = removeById(id);
- log.debug("Delete result: [{}]", result);
- }
-
- @Override
- public void deleteById(PluginId pluginId) {
- deleteById(pluginId.getId());
- }
-
- @Override
- public List findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) {
- log.debug("Try to find plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
- List entities = findPageWithTextSearch(ModelConstants.PLUGIN_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
- Arrays.asList(eq(ModelConstants.PLUGIN_TENANT_ID_PROPERTY, tenantId.getId())), pageLink);
- if (log.isTraceEnabled()) {
- log.trace(SEARCH_RESULT, Arrays.toString(entities.toArray()));
- } else {
- log.debug(SEARCH_RESULT, entities.size());
- }
- return DaoUtil.convertDataList(entities);
- }
-
- @Override
- public List findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink) {
- log.debug("Try to find all tenant plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
- List pluginEntities = findPageWithTextSearch(ModelConstants.PLUGIN_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
- Arrays.asList(in(ModelConstants.PLUGIN_TENANT_ID_PROPERTY, Arrays.asList(NULL_UUID, tenantId))),
- pageLink);
- if (log.isTraceEnabled()) {
- log.trace(SEARCH_RESULT, Arrays.toString(pluginEntities.toArray()));
- } else {
- log.debug(SEARCH_RESULT, pluginEntities.size());
- }
- return DaoUtil.convertDataList(pluginEntities);
- }
-
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/plugin/PluginDao.java b/dao/src/main/java/org/thingsboard/server/dao/plugin/PluginDao.java
deleted file mode 100644
index b86b983368..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/plugin/PluginDao.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.plugin;
-
-import org.thingsboard.server.common.data.id.PluginId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-import org.thingsboard.server.dao.Dao;
-
-import java.util.List;
-import java.util.UUID;
-
-public interface PluginDao extends Dao {
-
- PluginMetaData save(PluginMetaData plugin);
-
- PluginMetaData findById(PluginId pluginId);
-
- PluginMetaData findByApiToken(String apiToken);
-
- void deleteById(UUID id);
-
- void deleteById(PluginId pluginId);
-
- List findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
-
- /**
- * Find all tenant plugins (including system) by tenantId and page link.
- *
- * @param tenantId the tenantId
- * @param pageLink the page link
- * @return the list of plugins objects
- */
- List findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink);
-
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/plugin/PluginService.java b/dao/src/main/java/org/thingsboard/server/dao/plugin/PluginService.java
deleted file mode 100644
index 106ad8e2a0..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/plugin/PluginService.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.plugin;
-
-import com.google.common.util.concurrent.ListenableFuture;
-import org.thingsboard.server.common.data.id.PluginId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.page.TextPageData;
-import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-
-import java.util.List;
-
-public interface PluginService {
-
- PluginMetaData savePlugin(PluginMetaData plugin);
-
- PluginMetaData findPluginById(PluginId pluginId);
-
- ListenableFuture findPluginByIdAsync(PluginId pluginId);
-
- PluginMetaData findPluginByApiToken(String apiToken);
-
- TextPageData findSystemPlugins(TextPageLink pageLink);
-
- TextPageData findTenantPlugins(TenantId tenantId, TextPageLink pageLink);
-
- List findSystemPlugins();
-
- TextPageData findAllTenantPluginsByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
-
- List findAllTenantPluginsByTenantId(TenantId tenantId);
-
- void activatePluginById(PluginId pluginId);
-
- void suspendPluginById(PluginId pluginId);
-
- void deletePluginById(PluginId pluginId);
-
- void deletePluginsByTenantId(TenantId tenantId);
-
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraAckRepository.java b/dao/src/main/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraAckRepository.java
index 1ffbec3d81..31ab074365 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraAckRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraAckRepository.java
@@ -15,7 +15,11 @@
*/
package org.thingsboard.server.dao.queue.db.nosql.repository;
-import com.datastax.driver.core.*;
+import com.datastax.driver.core.BoundStatement;
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.ResultSetFuture;
+import com.datastax.driver.core.Row;
import com.google.common.base.Function;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraMsgRepository.java b/dao/src/main/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraMsgRepository.java
index 2699a4d073..a90b71d99c 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraMsgRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraMsgRepository.java
@@ -15,7 +15,11 @@
*/
package org.thingsboard.server.dao.queue.db.nosql.repository;
-import com.datastax.driver.core.*;
+import com.datastax.driver.core.BoundStatement;
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.ResultSetFuture;
+import com.datastax.driver.core.Row;
import com.google.common.base.Function;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraProcessedPartitionRepository.java b/dao/src/main/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraProcessedPartitionRepository.java
index 60d5b0f5ea..831c6fdf4b 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraProcessedPartitionRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraProcessedPartitionRepository.java
@@ -15,7 +15,11 @@
*/
package org.thingsboard.server.dao.queue.db.nosql.repository;
-import com.datastax.driver.core.*;
+import com.datastax.driver.core.BoundStatement;
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.ResultSetFuture;
+import com.datastax.driver.core.Row;
import com.google.common.base.Function;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/queue/memory/InMemoryMsgQueue.java b/dao/src/main/java/org/thingsboard/server/dao/queue/memory/InMemoryMsgQueue.java
index eecb782a1e..4532e023ce 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/queue/memory/InMemoryMsgQueue.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/queue/memory/InMemoryMsgQueue.java
@@ -27,7 +27,12 @@ import org.thingsboard.server.dao.queue.MsgQueue;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationDao.java b/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationDao.java
index 55838d6462..ba6d09d754 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationDao.java
@@ -15,7 +15,11 @@
*/
package org.thingsboard.server.dao.relation;
-import com.datastax.driver.core.*;
+import com.datastax.driver.core.BoundStatement;
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.ResultSetFuture;
+import com.datastax.driver.core.Row;
import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.datastax.driver.core.querybuilder.Select;
import com.fasterxml.jackson.databind.JsonNode;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java
index 4a64890360..14de1a45e3 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java
@@ -37,7 +37,6 @@ import org.thingsboard.server.common.data.rule.RuleChainMetaData;
import org.thingsboard.server.common.data.rule.RuleNode;
import org.thingsboard.server.dao.entity.AbstractEntityService;
import org.thingsboard.server.dao.exception.DataValidationException;
-import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.service.DataValidator;
import org.thingsboard.server.dao.service.PaginatedRemover;
import org.thingsboard.server.dao.service.Validator;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleService.java
deleted file mode 100644
index fff3f6d907..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleService.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.rule;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.google.common.util.concurrent.ListenableFuture;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.thingsboard.server.common.data.id.RuleId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.page.TextPageData;
-import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
-import org.thingsboard.server.common.data.plugin.ComponentLifecycleState;
-import org.thingsboard.server.common.data.plugin.ComponentType;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-import org.thingsboard.server.common.data.rule.RuleMetaData;
-import org.thingsboard.server.dao.component.ComponentDescriptorService;
-import org.thingsboard.server.dao.entity.AbstractEntityService;
-import org.thingsboard.server.dao.exception.DataValidationException;
-import org.thingsboard.server.dao.exception.DatabaseException;
-import org.thingsboard.server.dao.exception.IncorrectParameterException;
-import org.thingsboard.server.dao.plugin.PluginService;
-import org.thingsboard.server.dao.service.DataValidator;
-import org.thingsboard.server.dao.service.PaginatedRemover;
-import org.thingsboard.server.dao.service.Validator;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.function.Function;
-
-import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
-import static org.thingsboard.server.dao.service.Validator.validateId;
-import static org.thingsboard.server.dao.service.Validator.validatePageLink;
-
-@Service
-@Slf4j
-public class BaseRuleService extends AbstractEntityService implements RuleService {
-
- private final TenantId systemTenantId = new TenantId(NULL_UUID);
-
- @Autowired
- public RuleDao ruleDao;
-
- @Autowired
- public PluginService pluginService;
-
- @Autowired
- private ComponentDescriptorService componentDescriptorService;
-
- @Override
- public RuleMetaData saveRule(RuleMetaData rule) {
- throw new RuntimeException("Not supported since v1.5!");
- }
-
- private void validateRuleAndPluginState(RuleMetaData rule) {
- if (org.springframework.util.StringUtils.isEmpty(rule.getPluginToken())) {
- return;
- }
- PluginMetaData pluginMd = pluginService.findPluginByApiToken(rule.getPluginToken());
- if (pluginMd == null) {
- throw new IncorrectParameterException("Rule points to non-existent plugin!");
- }
- if (!pluginMd.getTenantId().equals(systemTenantId) && !pluginMd.getTenantId().equals(rule.getTenantId())) {
- throw new IncorrectParameterException("Rule access plugin that belongs to different tenant!");
- }
- if (rule.getState() == ComponentLifecycleState.ACTIVE && pluginMd.getState() != ComponentLifecycleState.ACTIVE) {
- throw new IncorrectParameterException("Can't save active rule that points to inactive plugin!");
- }
- ComponentDescriptor pluginDescriptor = componentDescriptorService.findByClazz(pluginMd.getClazz());
- String actionClazz = getIfValid(ComponentType.ACTION.name(), rule.getAction(), "clazz", JsonNode::isTextual, JsonNode::asText);
- if (!Arrays.asList(pluginDescriptor.getActions().split(",")).contains(actionClazz)) {
- throw new IncorrectParameterException("Rule's action is not supported by plugin with token " + rule.getPluginToken() + "!");
- }
- }
-
- private static T getIfValid(String parentName, JsonNode node, String name, Function validator, Function extractor) {
- if (!node.has(name)) {
- throw new IncorrectParameterException(parentName + "'s " + name + " is not set!");
- } else {
- JsonNode value = node.get(name);
- if (validator.apply(value)) {
- return extractor.apply(value);
- } else {
- throw new IncorrectParameterException(parentName + "'s " + name + " is not valid!");
- }
- }
- }
-
- @Override
- public RuleMetaData findRuleById(RuleId ruleId) {
- validateId(ruleId, "Incorrect rule id for search rule request.");
- return ruleDao.findById(ruleId.getId());
- }
-
- @Override
- public ListenableFuture findRuleByIdAsync(RuleId ruleId) {
- validateId(ruleId, "Incorrect rule id for search rule request.");
- return ruleDao.findByIdAsync(ruleId.getId());
- }
-
- @Override
- public List findPluginRules(String pluginToken) {
- return ruleDao.findRulesByPlugin(pluginToken);
- }
-
- @Override
- public TextPageData findSystemRules(TextPageLink pageLink) {
- validatePageLink(pageLink, "Incorrect PageLink object for search rule request.");
- List rules = ruleDao.findByTenantIdAndPageLink(systemTenantId, pageLink);
- return new TextPageData<>(rules, pageLink);
- }
-
- @Override
- public TextPageData findTenantRules(TenantId tenantId, TextPageLink pageLink) {
- validateId(tenantId, "Incorrect tenant id for search rule request.");
- validatePageLink(pageLink, "Incorrect PageLink object for search rule request.");
- List rules = ruleDao.findByTenantIdAndPageLink(tenantId, pageLink);
- return new TextPageData<>(rules, pageLink);
- }
-
- @Override
- public List findSystemRules() {
- log.trace("Executing findSystemRules");
- List rules = new ArrayList<>();
- TextPageLink pageLink = new TextPageLink(300);
- TextPageData pageData = null;
- do {
- pageData = findSystemRules(pageLink);
- rules.addAll(pageData.getData());
- if (pageData.hasNext()) {
- pageLink = pageData.getNextPageLink();
- }
- } while (pageData.hasNext());
- return rules;
- }
-
- @Override
- public TextPageData findAllTenantRulesByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) {
- log.trace("Executing findAllTenantRulesByTenantIdAndPageLink, tenantId [{}], pageLink [{}]", tenantId, pageLink);
- Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
- Validator.validatePageLink(pageLink, "Incorrect page link " + pageLink);
- List rules = ruleDao.findAllTenantRulesByTenantId(tenantId.getId(), pageLink);
- return new TextPageData<>(rules, pageLink);
- }
-
- @Override
- public List findAllTenantRulesByTenantId(TenantId tenantId) {
- log.trace("Executing findAllTenantRulesByTenantId, tenantId [{}]", tenantId);
- Validator.validateId(tenantId, "Incorrect tenantId " + tenantId);
- List rules = new ArrayList<>();
- TextPageLink pageLink = new TextPageLink(300);
- TextPageData pageData = null;
- do {
- pageData = findAllTenantRulesByTenantIdAndPageLink(tenantId, pageLink);
- rules.addAll(pageData.getData());
- if (pageData.hasNext()) {
- pageLink = pageData.getNextPageLink();
- }
- } while (pageData.hasNext());
- return rules;
- }
-
- @Override
- public void deleteRuleById(RuleId ruleId) {
- validateId(ruleId, "Incorrect rule id for delete rule request.");
- deleteEntityRelations(ruleId);
- ruleDao.deleteById(ruleId);
- }
-
- @Override
- public void activateRuleById(RuleId ruleId) {
- updateLifeCycleState(ruleId, ComponentLifecycleState.ACTIVE);
- }
-
- @Override
- public void suspendRuleById(RuleId ruleId) {
- updateLifeCycleState(ruleId, ComponentLifecycleState.SUSPENDED);
- }
-
- private void updateLifeCycleState(RuleId ruleId, ComponentLifecycleState state) {
- Validator.validateId(ruleId, "Incorrect rule id for state change request.");
- RuleMetaData rule = ruleDao.findById(ruleId);
- if (rule != null) {
- rule.setState(state);
- validateRuleAndPluginState(rule);
- ruleDao.save(rule);
- } else {
- throw new DatabaseException("Plugin not found!");
- }
- }
-
- @Override
- public void deleteRulesByTenantId(TenantId tenantId) {
- validateId(tenantId, "Incorrect tenant id for delete rules request.");
- tenantRulesRemover.removeEntities(tenantId);
- }
-
- private DataValidator ruleValidator =
- new DataValidator() {
- @Override
- protected void validateDataImpl(RuleMetaData rule) {
- if (StringUtils.isEmpty(rule.getName())) {
- throw new DataValidationException("Rule name should be specified!.");
- }
- }
- };
-
- private PaginatedRemover tenantRulesRemover =
- new PaginatedRemover() {
-
- @Override
- protected List findEntities(TenantId id, TextPageLink pageLink) {
- return ruleDao.findByTenantIdAndPageLink(id, pageLink);
- }
-
- @Override
- protected void removeEntity(RuleMetaData entity) {
- ruleDao.deleteById(entity.getUuidId());
- }
- };
-
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/CassandraBaseRuleDao.java b/dao/src/main/java/org/thingsboard/server/dao/rule/CassandraBaseRuleDao.java
deleted file mode 100644
index 2c5b1f75ad..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/rule/CassandraBaseRuleDao.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.rule;
-
-import com.datastax.driver.core.querybuilder.Select;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-import org.thingsboard.server.common.data.id.RuleId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.rule.RuleMetaData;
-import org.thingsboard.server.dao.DaoUtil;
-import org.thingsboard.server.dao.model.ModelConstants;
-import org.thingsboard.server.dao.model.nosql.RuleMetaDataEntity;
-import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
-import org.thingsboard.server.dao.util.NoSqlDao;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.UUID;
-
-import static com.datastax.driver.core.querybuilder.QueryBuilder.*;
-import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
-
-@Component
-@Slf4j
-@NoSqlDao
-public class CassandraBaseRuleDao extends CassandraAbstractSearchTextDao implements RuleDao {
-
- public static final String SEARCH_RESULT = "Search result: [{}]";
-
- @Override
- protected Class getColumnFamilyClass() {
- return RuleMetaDataEntity.class;
- }
-
- @Override
- protected String getColumnFamilyName() {
- return ModelConstants.RULE_COLUMN_FAMILY_NAME;
- }
-
- @Override
- public RuleMetaData findById(RuleId ruleId) {
- return findById(ruleId.getId());
- }
-
- @Override
- public List findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) {
- log.debug("Try to find rules by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
- List entities = findPageWithTextSearch(ModelConstants.RULE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
- Arrays.asList(eq(ModelConstants.RULE_TENANT_ID_PROPERTY, tenantId.getId())), pageLink);
- if (log.isTraceEnabled()) {
- log.trace(SEARCH_RESULT, Arrays.toString(entities.toArray()));
- } else {
- log.debug(SEARCH_RESULT, entities.size());
- }
- return DaoUtil.convertDataList(entities);
- }
-
- @Override
- public List findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink) {
- log.debug("Try to find all tenant rules by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
- List entities = findPageWithTextSearch(ModelConstants.RULE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME,
- Arrays.asList(in(ModelConstants.RULE_TENANT_ID_PROPERTY, Arrays.asList(NULL_UUID, tenantId))),
- pageLink);
- if (log.isTraceEnabled()) {
- log.trace(SEARCH_RESULT, Arrays.toString(entities.toArray()));
- } else {
- log.debug(SEARCH_RESULT, entities.size());
- }
- return DaoUtil.convertDataList(entities);
- }
-
- @Override
- public List findRulesByPlugin(String pluginToken) {
- log.debug("Search rules by api token [{}]", pluginToken);
- Select select = select().from(ModelConstants.RULE_BY_PLUGIN_TOKEN);
- Select.Where query = select.where();
- query.and(eq(ModelConstants.RULE_PLUGIN_TOKEN_PROPERTY, pluginToken));
- return DaoUtil.convertDataList(findListByStatement(query));
- }
-
- @Override
- public void deleteById(UUID id) {
- log.debug("Delete rule meta-data entity by id [{}]", id);
- boolean result = removeById(id);
- log.debug("Delete result: [{}]", result);
- }
-
- @Override
- public void deleteById(RuleId ruleId) {
- deleteById(ruleId.getId());
- }
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/CassandraRuleChainDao.java b/dao/src/main/java/org/thingsboard/server/dao/rule/CassandraRuleChainDao.java
index 56a20db4e0..ff672a78db 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/rule/CassandraRuleChainDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/rule/CassandraRuleChainDao.java
@@ -20,19 +20,18 @@ import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.page.TextPageLink;
import org.thingsboard.server.common.data.rule.RuleChain;
import org.thingsboard.server.dao.DaoUtil;
-import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.model.nosql.RuleChainEntity;
import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
import org.thingsboard.server.dao.util.NoSqlDao;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.in;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.RULE_CHAIN_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.RULE_CHAIN_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.RULE_CHAIN_TENANT_ID_PROPERTY;
@Component
@Slf4j
diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/RuleDao.java b/dao/src/main/java/org/thingsboard/server/dao/rule/RuleDao.java
deleted file mode 100644
index 8d5a7c0be3..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/rule/RuleDao.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.rule;
-
-import org.thingsboard.server.common.data.id.RuleId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.rule.RuleMetaData;
-import org.thingsboard.server.dao.Dao;
-
-import java.util.List;
-import java.util.UUID;
-
-public interface RuleDao extends Dao {
-
- RuleMetaData save(RuleMetaData rule);
-
- RuleMetaData findById(RuleId ruleId);
-
- List findRulesByPlugin(String pluginToken);
-
- List findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
-
- /**
- * Find all tenant rules (including system) by tenantId and page link.
- *
- * @param tenantId the tenantId
- * @param pageLink the page link
- * @return the list of rules objects
- */
- List findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink);
-
- void deleteById(UUID id);
-
- void deleteById(RuleId ruleId);
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/RuleService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/RuleService.java
deleted file mode 100644
index ce2f2dc07d..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/rule/RuleService.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.rule;
-
-import com.google.common.util.concurrent.ListenableFuture;
-import org.thingsboard.server.common.data.id.RuleId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.page.TextPageData;
-import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.rule.RuleMetaData;
-
-import java.util.List;
-
-public interface RuleService {
-
- RuleMetaData saveRule(RuleMetaData device);
-
- RuleMetaData findRuleById(RuleId ruleId);
-
- ListenableFuture findRuleByIdAsync(RuleId ruleId);
-
- List findPluginRules(String pluginToken);
-
- TextPageData findSystemRules(TextPageLink pageLink);
-
- TextPageData findTenantRules(TenantId tenantId, TextPageLink pageLink);
-
- List findSystemRules();
-
- TextPageData findAllTenantRulesByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink);
-
- List findAllTenantRulesByTenantId(TenantId tenantId);
-
- void activateRuleById(RuleId ruleId);
-
- void suspendRuleById(RuleId ruleId);
-
- void deleteRuleById(RuleId ruleId);
-
- void deleteRulesByTenantId(TenantId tenantId);
-
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/service/TimePaginatedRemover.java b/dao/src/main/java/org/thingsboard/server/dao/service/TimePaginatedRemover.java
index c8bb38dc5c..52fcf85c17 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/service/TimePaginatedRemover.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/service/TimePaginatedRemover.java
@@ -18,7 +18,6 @@ package org.thingsboard.server.dao.service;
import org.thingsboard.server.common.data.id.IdBased;
import org.thingsboard.server.common.data.page.TimePageLink;
-import java.sql.Time;
import java.util.List;
import java.util.UUID;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/service/Validator.java b/dao/src/main/java/org/thingsboard/server/dao/service/Validator.java
index c8af7cb981..1947f4adf0 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/service/Validator.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/service/Validator.java
@@ -18,7 +18,6 @@ package org.thingsboard.server.dao.service;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.UUIDBased;
import org.thingsboard.server.common.data.page.BasePageLink;
-import org.thingsboard.server.common.data.page.TextPageLink;
import org.thingsboard.server.dao.exception.IncorrectParameterException;
import java.util.List;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/settings/CassandraAdminSettingsDao.java b/dao/src/main/java/org/thingsboard/server/dao/settings/CassandraAdminSettingsDao.java
index 6cd3719688..ebc66d7d9a 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/settings/CassandraAdminSettingsDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/settings/CassandraAdminSettingsDao.java
@@ -26,7 +26,9 @@ import org.thingsboard.server.dao.util.NoSqlDao;
import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_BY_KEY_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.ADMIN_SETTINGS_KEY_PROPERTY;
@Component
@Slf4j
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java
index e092a47617..ff6e2130f8 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java
@@ -15,8 +15,6 @@
*/
package org.thingsboard.server.dao.sql.alarm;
-import com.google.common.base.Function;
-import com.google.common.util.concurrent.AsyncFunction;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import lombok.extern.slf4j.Slf4j;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/asset/AssetRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/asset/AssetRepository.java
index bf1e289e18..7887ea8615 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/asset/AssetRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/asset/AssetRepository.java
@@ -19,8 +19,6 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
-import org.thingsboard.server.common.data.EntitySubtype;
-import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.dao.model.sql.AssetEntity;
import org.thingsboard.server.dao.util.SqlDao;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/asset/JpaAssetDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/asset/JpaAssetDao.java
index 9f8f6737cb..fd5817c590 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/asset/JpaAssetDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/asset/JpaAssetDao.java
@@ -31,7 +31,12 @@ import org.thingsboard.server.dao.model.sql.AssetEntity;
import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
import org.thingsboard.server.dao.util.SqlDao;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.UUID;
import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUID;
import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUIDs;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java
index 6a7d11917e..4c0ff69e27 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/component/ComponentDescriptorRepository.java
@@ -25,7 +25,6 @@ import org.thingsboard.server.dao.model.sql.ComponentDescriptorEntity;
import org.thingsboard.server.dao.util.SqlDao;
import java.util.List;
-import java.util.UUID;
/**
* Created by Valerii Sosliuk on 5/6/2017.
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java
index f4813877b8..ee55038e46 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/DashboardInfoRepository.java
@@ -23,7 +23,6 @@ import org.thingsboard.server.dao.model.sql.DashboardInfoEntity;
import org.thingsboard.server.dao.util.SqlDao;
import java.util.List;
-import java.util.UUID;
/**
* Created by Valerii Sosliuk on 5/6/2017.
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java
index cc64e80af6..7f40741d47 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDao.java
@@ -15,7 +15,6 @@
*/
package org.thingsboard.server.dao.sql.dashboard;
-import com.google.common.util.concurrent.AsyncFunction;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import lombok.extern.slf4j.Slf4j;
@@ -38,7 +37,6 @@ import org.thingsboard.server.dao.relation.RelationDao;
import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
import org.thingsboard.server.dao.util.SqlDao;
-import java.sql.Time;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java
index 4f3cd7d6fb..e464c65e8e 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/device/JpaDeviceDao.java
@@ -32,7 +32,12 @@ import org.thingsboard.server.dao.model.sql.DeviceEntity;
import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
import org.thingsboard.server.dao.util.SqlDao;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.UUID;
import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUID;
import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUIDs;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/event/EventRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/event/EventRepository.java
index d14b7bf530..07fb5a0e89 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/event/EventRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/event/EventRepository.java
@@ -21,7 +21,6 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.thingsboard.server.common.data.EntityType;
-import org.thingsboard.server.dao.model.sql.AlarmEntity;
import org.thingsboard.server.dao.model.sql.EventEntity;
import org.thingsboard.server.dao.util.SqlDao;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java
index d1d64f0636..01183a2d3f 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java
@@ -36,10 +36,7 @@ import org.thingsboard.server.dao.model.sql.EventEntity;
import org.thingsboard.server.dao.sql.JpaAbstractSearchTimeDao;
import org.thingsboard.server.dao.util.SqlDao;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDao.java
deleted file mode 100644
index 7b7631460d..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDao.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.sql.plugin;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.repository.CrudRepository;
-import org.springframework.stereotype.Component;
-import org.thingsboard.server.common.data.UUIDConverter;
-import org.thingsboard.server.common.data.id.PluginId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-import org.thingsboard.server.dao.DaoUtil;
-import org.thingsboard.server.dao.model.sql.PluginMetaDataEntity;
-import org.thingsboard.server.dao.plugin.PluginDao;
-import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
-import org.thingsboard.server.dao.util.SqlDao;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
-import java.util.UUID;
-
-import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID_STR;
-
-/**
- * Created by Valerii Sosliuk on 5/1/2017.
- */
-@Slf4j
-@Component
-@SqlDao
-public class JpaBasePluginDao extends JpaAbstractSearchTextDao implements PluginDao {
-
- public static final String SEARCH_RESULT = "Search result: [{}]";
- @Autowired
- private PluginMetaDataRepository pluginMetaDataRepository;
-
- @Override
- protected Class getEntityClass() {
- return PluginMetaDataEntity.class;
- }
-
- @Override
- protected CrudRepository getCrudRepository() {
- return pluginMetaDataRepository;
- }
-
- @Override
- public PluginMetaData findById(PluginId pluginId) {
- log.debug("Search plugin meta-data entity by id [{}]", pluginId);
- PluginMetaData pluginMetaData = super.findById(pluginId.getId());
- if (log.isTraceEnabled()) {
- log.trace("Search result: [{}] for plugin entity [{}]", pluginMetaData != null, pluginMetaData);
- } else {
- log.debug(SEARCH_RESULT, pluginMetaData != null);
- }
- return pluginMetaData;
- }
-
- @Override
- public PluginMetaData findByApiToken(String apiToken) {
- log.debug("Search plugin meta-data entity by api token [{}]", apiToken);
- PluginMetaDataEntity entity = pluginMetaDataRepository.findByApiToken(apiToken);
- if (log.isTraceEnabled()) {
- log.trace("Search result: [{}] for plugin entity [{}]", entity != null, entity);
- } else {
- log.debug(SEARCH_RESULT, entity != null);
- }
- return DaoUtil.getData(entity);
- }
-
- @Override
- public void deleteById(UUID id) {
- log.debug("Delete plugin meta-data entity by id [{}]", id);
- pluginMetaDataRepository.delete(UUIDConverter. fromTimeUUID(id));
- }
-
- @Override
- public void deleteById(PluginId pluginId) {
- deleteById(pluginId.getId());
- }
-
- @Override
- public List findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) {
- log.debug("Try to find plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
- List entities = pluginMetaDataRepository
- .findByTenantIdAndPageLink(
- UUIDConverter.fromTimeUUID(tenantId.getId()),
- Objects.toString(pageLink.getTextSearch(), ""),
- pageLink.getIdOffset() == null ? NULL_UUID_STR : UUIDConverter.fromTimeUUID(pageLink.getIdOffset()),
- new PageRequest(0, pageLink.getLimit()));
- if (log.isTraceEnabled()) {
- log.trace(SEARCH_RESULT, Arrays.toString(entities.toArray()));
- } else {
- log.debug(SEARCH_RESULT, entities.size());
- }
- return DaoUtil.convertDataList(entities);
- }
-
- @Override
- public List findAllTenantPluginsByTenantId(UUID tenantId, TextPageLink pageLink) {
- log.debug("Try to find all tenant plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
- List entities = pluginMetaDataRepository
- .findAllTenantPluginsByTenantId(
- UUIDConverter.fromTimeUUID(tenantId),
- NULL_UUID_STR,
- Objects.toString(pageLink.getTextSearch(), ""),
- pageLink.getIdOffset() == null ? NULL_UUID_STR : UUIDConverter.fromTimeUUID(pageLink.getIdOffset()),
- new PageRequest(0, pageLink.getLimit()));
- if (log.isTraceEnabled()) {
- log.trace(SEARCH_RESULT, Arrays.toString(entities.toArray()));
- } else {
- log.debug(SEARCH_RESULT, entities.size());
- }
- return DaoUtil.convertDataList(entities);
- }
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/PluginMetaDataRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/PluginMetaDataRepository.java
deleted file mode 100644
index 614dfda363..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/plugin/PluginMetaDataRepository.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.sql.plugin;
-
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.CrudRepository;
-import org.springframework.data.repository.query.Param;
-import org.thingsboard.server.dao.model.sql.PluginMetaDataEntity;
-import org.thingsboard.server.dao.util.SqlDao;
-
-import java.util.List;
-
-/**
- * Created by Valerii Sosliuk on 5/1/2017.
- */
-@SqlDao
-public interface PluginMetaDataRepository extends CrudRepository {
-
- PluginMetaDataEntity findByApiToken(String apiToken);
-
- @Query("SELECT pmd FROM PluginMetaDataEntity pmd WHERE pmd.tenantId = :tenantId " +
- "AND LOWER(pmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND pmd.id > :idOffset ORDER BY pmd.id")
- List findByTenantIdAndPageLink(@Param("tenantId") String tenantId,
- @Param("textSearch") String textSearch,
- @Param("idOffset") String idOffset,
- Pageable pageable);
-
- @Query("SELECT pmd FROM PluginMetaDataEntity pmd WHERE pmd.tenantId IN (:tenantId, :nullTenantId) " +
- "AND LOWER(pmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND pmd.id > :idOffset ORDER BY pmd.id")
- List findAllTenantPluginsByTenantId(@Param("tenantId") String tenantId,
- @Param("nullTenantId") String nullTenantId,
- @Param("textSearch") String textSearch,
- @Param("idOffset") String idOffset,
- Pageable pageable);
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/relation/JpaRelationDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/relation/JpaRelationDao.java
index 6776f562bc..d57aa4598d 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/relation/JpaRelationDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/relation/JpaRelationDao.java
@@ -21,7 +21,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
-import org.springframework.data.domain.Sort.Order;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.EntityType;
@@ -38,14 +37,10 @@ import org.thingsboard.server.dao.sql.JpaAbstractDaoListeningExecutorService;
import org.thingsboard.server.dao.sql.JpaAbstractSearchTimeDao;
import org.thingsboard.server.dao.util.SqlDao;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;
-import static org.springframework.data.domain.Sort.Direction.ASC;
import static org.springframework.data.jpa.domain.Specifications.where;
import static org.thingsboard.server.common.data.UUIDConverter.fromTimeUUID;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDao.java
deleted file mode 100644
index 5ff8298b48..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDao.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.sql.rule;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.repository.CrudRepository;
-import org.springframework.stereotype.Component;
-import org.thingsboard.server.common.data.UUIDConverter;
-import org.thingsboard.server.common.data.id.RuleId;
-import org.thingsboard.server.common.data.id.TenantId;
-import org.thingsboard.server.common.data.page.TextPageLink;
-import org.thingsboard.server.common.data.rule.RuleMetaData;
-import org.thingsboard.server.dao.DaoUtil;
-import org.thingsboard.server.dao.model.sql.RuleMetaDataEntity;
-import org.thingsboard.server.dao.rule.RuleDao;
-import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
-import org.thingsboard.server.dao.util.SqlDao;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
-import java.util.UUID;
-
-import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID_STR;
-
-/**
- * Created by Valerii Sosliuk on 4/30/2017.
- */
-@Slf4j
-@Component
-@SqlDao
-public class JpaBaseRuleDao extends JpaAbstractSearchTextDao implements RuleDao {
-
- public static final String SEARCH_RESULT = "Search result: [{}]";
- @Autowired
- private RuleMetaDataRepository ruleMetaDataRepository;
-
- @Override
- protected Class getEntityClass() {
- return RuleMetaDataEntity.class;
- }
-
- @Override
- protected CrudRepository getCrudRepository() {
- return ruleMetaDataRepository;
- }
-
- @Override
- public RuleMetaData findById(RuleId ruleId) {
- return findById(ruleId.getId());
- }
-
- @Override
- public List findRulesByPlugin(String pluginToken) {
- log.debug("Search rules by api token [{}]", pluginToken);
- return DaoUtil.convertDataList(ruleMetaDataRepository.findByPluginToken(pluginToken));
- }
-
- @Override
- public List findByTenantIdAndPageLink(TenantId tenantId, TextPageLink pageLink) {
- log.debug("Try to find rules by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
- List entities =
- ruleMetaDataRepository
- .findByTenantIdAndPageLink(
- UUIDConverter.fromTimeUUID(tenantId.getId()),
- Objects.toString(pageLink.getTextSearch(), ""),
- pageLink.getIdOffset() == null ? NULL_UUID_STR : UUIDConverter.fromTimeUUID(pageLink.getIdOffset()),
- new PageRequest(0, pageLink.getLimit()));
- if (log.isTraceEnabled()) {
- log.trace(SEARCH_RESULT, Arrays.toString(entities.toArray()));
- } else {
- log.debug(SEARCH_RESULT, entities.size());
- }
- return DaoUtil.convertDataList(entities);
- }
-
- @Override
- public List findAllTenantRulesByTenantId(UUID tenantId, TextPageLink pageLink) {
- log.debug("Try to find all tenant rules by tenantId [{}] and pageLink [{}]", tenantId, pageLink);
- List entities =
- ruleMetaDataRepository
- .findAllTenantRulesByTenantId(
- UUIDConverter.fromTimeUUID(tenantId),
- NULL_UUID_STR,
- Objects.toString(pageLink.getTextSearch(), ""),
- pageLink.getIdOffset() == null ? NULL_UUID_STR : UUIDConverter.fromTimeUUID(pageLink.getIdOffset()),
- new PageRequest(0, pageLink.getLimit()));
-
- if (log.isTraceEnabled()) {
- log.trace(SEARCH_RESULT, Arrays.toString(entities.toArray()));
- } else {
- log.debug(SEARCH_RESULT, entities.size());
- }
- return DaoUtil.convertDataList(entities);
- }
-
- @Override
- public void deleteById(UUID id) {
- log.debug("Delete rule meta-data entity by id [{}]", id);
- ruleMetaDataRepository.delete(UUIDConverter.fromTimeUUID(id));
- }
-
- @Override
- public void deleteById(RuleId ruleId) {
- deleteById(ruleId.getId());
- }
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/rule/RuleMetaDataRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/rule/RuleMetaDataRepository.java
deleted file mode 100644
index c2c0e016a0..0000000000
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/rule/RuleMetaDataRepository.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Copyright © 2016-2018 The Thingsboard Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.thingsboard.server.dao.sql.rule;
-
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.CrudRepository;
-import org.springframework.data.repository.query.Param;
-import org.thingsboard.server.dao.model.sql.RuleMetaDataEntity;
-import org.thingsboard.server.dao.util.SqlDao;
-
-import java.util.List;
-
-/**
- * Created by Valerii Sosliuk on 4/30/2017.
- */
-@SqlDao
-public interface RuleMetaDataRepository extends CrudRepository {
-
- List findByPluginToken(String pluginToken);
-
- @Query("SELECT rmd FROM RuleMetaDataEntity rmd WHERE rmd.tenantId = :tenantId " +
- "AND LOWER(rmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND rmd.id > :idOffset ORDER BY rmd.id")
- List findByTenantIdAndPageLink(@Param("tenantId") String tenantId,
- @Param("textSearch") String textSearch,
- @Param("idOffset") String idOffset,
- Pageable pageable);
-
- @Query("SELECT rmd FROM RuleMetaDataEntity rmd WHERE rmd.tenantId IN (:tenantId, :nullTenantId) " +
- "AND LOWER(rmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " +
- "AND rmd.id > :idOffset ORDER BY rmd.id")
- List findAllTenantRulesByTenantId(@Param("tenantId") String tenantId,
- @Param("nullTenantId") String nullTenantId,
- @Param("textSearch") String textSearch,
- @Param("idOffset") String idOffset,
- Pageable pageable);
-}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java
index 6350352961..e5f145f0fd 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java
@@ -17,7 +17,11 @@ package org.thingsboard.server.dao.sql.timeseries;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
-import com.google.common.util.concurrent.*;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
+import com.google.common.util.concurrent.SettableFuture;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -25,7 +29,11 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.UUIDConverter;
import org.thingsboard.server.common.data.id.EntityId;
-import org.thingsboard.server.common.data.kv.*;
+import org.thingsboard.server.common.data.kv.Aggregation;
+import org.thingsboard.server.common.data.kv.BasicTsKvEntry;
+import org.thingsboard.server.common.data.kv.StringDataEntry;
+import org.thingsboard.server.common.data.kv.TsKvEntry;
+import org.thingsboard.server.common.data.kv.TsKvQuery;
import org.thingsboard.server.dao.DaoUtil;
import org.thingsboard.server.dao.model.sql.TsKvEntity;
import org.thingsboard.server.dao.model.sql.TsKvLatestCompositeKey;
@@ -42,7 +50,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/TsKvLatestRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/TsKvLatestRepository.java
index c5e886125c..7171cef990 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/TsKvLatestRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/TsKvLatestRepository.java
@@ -22,7 +22,6 @@ import org.thingsboard.server.dao.model.sql.TsKvLatestEntity;
import org.thingsboard.server.dao.util.SqlDao;
import java.util.List;
-import java.util.UUID;
@SqlDao
public interface TsKvLatestRepository extends CrudRepository {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/CassandraTenantDao.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/CassandraTenantDao.java
index fc4440396b..1c3a7797b8 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/tenant/CassandraTenantDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/CassandraTenantDao.java
@@ -28,7 +28,9 @@ import java.util.Arrays;
import java.util.List;
import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.TENANT_BY_REGION_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.TENANT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.TENANT_REGION_PROPERTY;
@Component
@Slf4j
diff --git a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java
index 3a607b623e..d92c9410e5 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/tenant/TenantServiceImpl.java
@@ -30,9 +30,7 @@ import org.thingsboard.server.dao.dashboard.DashboardService;
import org.thingsboard.server.dao.device.DeviceService;
import org.thingsboard.server.dao.entity.AbstractEntityService;
import org.thingsboard.server.dao.exception.DataValidationException;
-import org.thingsboard.server.dao.plugin.PluginService;
import org.thingsboard.server.dao.rule.RuleChainService;
-import org.thingsboard.server.dao.rule.RuleService;
import org.thingsboard.server.dao.service.DataValidator;
import org.thingsboard.server.dao.service.PaginatedRemover;
import org.thingsboard.server.dao.service.Validator;
@@ -71,12 +69,6 @@ public class TenantServiceImpl extends AbstractEntityService implements TenantSe
@Autowired
private DashboardService dashboardService;
- @Autowired
- private RuleService ruleService;
-
- @Autowired
- private PluginService pluginService;
-
@Autowired
private RuleChainService ruleChainService;
@@ -113,8 +105,6 @@ public class TenantServiceImpl extends AbstractEntityService implements TenantSe
deviceService.deleteDevicesByTenantId(tenantId);
userService.deleteTenantAdmins(tenantId);
ruleChainService.deleteRuleChainsByTenantId(tenantId);
- ruleService.deleteRulesByTenantId(tenantId);
- pluginService.deletePluginsByTenantId(tenantId);
tenantDao.removeById(tenantId.getId());
deleteEntityRelations(tenantId);
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/timeseries/AggregatePartitionsFunction.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/AggregatePartitionsFunction.java
index 99a2bf1e16..ac5ee640c1 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/timeseries/AggregatePartitionsFunction.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/timeseries/AggregatePartitionsFunction.java
@@ -18,7 +18,14 @@ package org.thingsboard.server.dao.timeseries;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import lombok.extern.slf4j.Slf4j;
-import org.thingsboard.server.common.data.kv.*;
+import org.thingsboard.server.common.data.kv.Aggregation;
+import org.thingsboard.server.common.data.kv.BasicTsKvEntry;
+import org.thingsboard.server.common.data.kv.BooleanDataEntry;
+import org.thingsboard.server.common.data.kv.DataType;
+import org.thingsboard.server.common.data.kv.DoubleDataEntry;
+import org.thingsboard.server.common.data.kv.LongDataEntry;
+import org.thingsboard.server.common.data.kv.StringDataEntry;
+import org.thingsboard.server.common.data.kv.TsKvEntry;
import javax.annotation.Nullable;
import java.util.List;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDao.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDao.java
index eb1ef52f5b..0fa9653ad2 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/timeseries/CassandraBaseTimeseriesDao.java
@@ -15,7 +15,11 @@
*/
package org.thingsboard.server.dao.timeseries;
-import com.datastax.driver.core.*;
+import com.datastax.driver.core.BoundStatement;
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.ResultSetFuture;
+import com.datastax.driver.core.Row;
import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.datastax.driver.core.querybuilder.Select;
import com.google.common.base.Function;
@@ -29,8 +33,17 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.id.EntityId;
-import org.thingsboard.server.common.data.kv.*;
+import org.thingsboard.server.common.data.kv.Aggregation;
+import org.thingsboard.server.common.data.kv.BaseTsKvQuery;
+import org.thingsboard.server.common.data.kv.BasicTsKvEntry;
+import org.thingsboard.server.common.data.kv.BooleanDataEntry;
import org.thingsboard.server.common.data.kv.DataType;
+import org.thingsboard.server.common.data.kv.DoubleDataEntry;
+import org.thingsboard.server.common.data.kv.KvEntry;
+import org.thingsboard.server.common.data.kv.LongDataEntry;
+import org.thingsboard.server.common.data.kv.StringDataEntry;
+import org.thingsboard.server.common.data.kv.TsKvEntry;
+import org.thingsboard.server.common.data.kv.TsKvQuery;
import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.nosql.CassandraAbstractAsyncDao;
import org.thingsboard.server.dao.util.NoSqlDao;
diff --git a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java
index 350bf4f7cc..e1bd4e0c65 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/user/UserServiceImpl.java
@@ -42,7 +42,9 @@ import org.thingsboard.server.dao.tenant.TenantDao;
import java.util.List;
-import static org.thingsboard.server.dao.service.Validator.*;
+import static org.thingsboard.server.dao.service.Validator.validateId;
+import static org.thingsboard.server.dao.service.Validator.validatePageLink;
+import static org.thingsboard.server.dao.service.Validator.validateString;
@Service
@Slf4j
diff --git a/dao/src/main/java/org/thingsboard/server/dao/util/BufferedRateLimiter.java b/dao/src/main/java/org/thingsboard/server/dao/util/BufferedRateLimiter.java
index 04196686c3..817845b54a 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/util/BufferedRateLimiter.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/util/BufferedRateLimiter.java
@@ -25,7 +25,11 @@ import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.thingsboard.server.dao.exception.BufferLimitException;
-import java.util.concurrent.*;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
@Component
diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetTypeDao.java b/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetTypeDao.java
index 43049f90b0..e31809f64a 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetTypeDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetTypeDao.java
@@ -29,7 +29,11 @@ import java.util.UUID;
import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGET_TYPE_ALIAS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGET_TYPE_BUNDLE_ALIAS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGET_TYPE_BY_TENANT_AND_ALIASES_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGET_TYPE_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGET_TYPE_TENANT_ID_PROPERTY;
@Component
@Slf4j
diff --git a/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetsBundleDao.java b/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetsBundleDao.java
index b5d0e5fe6d..f938a98a54 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetsBundleDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/widget/CassandraWidgetsBundleDao.java
@@ -29,8 +29,15 @@ import java.util.Arrays;
import java.util.List;
import java.util.UUID;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.*;
-import static org.thingsboard.server.dao.model.ModelConstants.*;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.in;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
+import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGETS_BUNDLE_ALIAS_PROPERTY;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGETS_BUNDLE_BY_TENANT_AND_ALIAS_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGETS_BUNDLE_BY_TENANT_AND_SEARCH_TEXT_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGETS_BUNDLE_COLUMN_FAMILY_NAME;
+import static org.thingsboard.server.dao.model.ModelConstants.WIDGETS_BUNDLE_TENANT_ID_PROPERTY;
@Component
@Slf4j
diff --git a/dao/src/main/resources/cassandra/schema.cql b/dao/src/main/resources/cassandra/schema.cql
index 59dda63ab1..f03122ab6b 100644
--- a/dao/src/main/resources/cassandra/schema.cql
+++ b/dao/src/main/resources/cassandra/schema.cql
@@ -428,7 +428,7 @@ CREATE TABLE IF NOT EXISTS thingsboard.attributes_kv_cf (
CREATE TABLE IF NOT EXISTS thingsboard.component_descriptor (
id timeuuid,
- type text, //("FILTER", "PROCESSOR", "ACTION", "PLUGIN")
+ type text,
scope text,
name text,
search_text text,
@@ -459,67 +459,12 @@ CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.component_desc_by_id AS
PRIMARY KEY ( id, clazz, scope, type )
WITH CLUSTERING ORDER BY ( clazz ASC, scope ASC, type DESC);
-CREATE TABLE IF NOT EXISTS thingsboard.rule (
- id timeuuid,
- tenant_id timeuuid,
- name text,
- state text,
- search_text text,
- weight int,
- plugin_token text,
- filters text, // Format: {"clazz":"A", "name": "Filter A", "configuration": {"types":["TELEMETRY"]}}
- processor text, // Format: {"clazz":"A", "name": "Processor A", "configuration": null}
- action text, // Format: {"clazz":"A", "name": "Action A", "configuration": null}
- additional_info text,
- PRIMARY KEY (id, tenant_id)
-);
-
-CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.rule_by_plugin_token AS
- SELECT *
-
- FROM thingsboard.rule
- WHERE tenant_id IS NOT NULL AND id IS NOT NULL AND plugin_token IS NOT NULL
- PRIMARY KEY (plugin_token, tenant_id, id) WITH CLUSTERING ORDER BY (tenant_id DESC, id DESC);
-
-CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.rule_by_tenant_and_search_text AS
- SELECT *
- FROM thingsboard.rule
- WHERE tenant_id IS NOT NULL AND id IS NOT NULL AND search_text IS NOT NULL
- PRIMARY KEY (tenant_id, search_text, id) WITH CLUSTERING ORDER BY (search_text ASC);
-
-CREATE TABLE IF NOT EXISTS thingsboard.plugin (
- id uuid,
- tenant_id uuid,
- name text,
- state text,
- search_text text,
- api_token text,
- plugin_class text,
- public_access boolean,
- configuration text,
- additional_info text,
- PRIMARY KEY (id, tenant_id)
-);
-
-CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.plugin_by_api_token AS
- SELECT *
- FROM thingsboard.plugin
- WHERE api_token IS NOT NULL AND id IS NOT NULL AND tenant_id IS NOT NULL
- PRIMARY KEY (api_token, id, tenant_id) WITH CLUSTERING ORDER BY (id DESC);
-
-CREATE MATERIALIZED VIEW IF NOT EXISTS thingsboard.plugin_by_tenant_and_search_text AS
- SELECT *
- from thingsboard.plugin
- WHERE tenant_id IS NOT NULL AND search_text IS NOT NULL AND id IS NOT NULL
- PRIMARY KEY ( tenant_id, search_text, id )
- WITH CLUSTERING ORDER BY ( search_text ASC, id DESC );
-
CREATE TABLE IF NOT EXISTS thingsboard.event (
tenant_id timeuuid, // tenant or system
id timeuuid,
event_type text,
event_uid text,
- entity_type text, // (device, customer, rule, plugin)
+ entity_type text,
entity_id timeuuid,
body text,
PRIMARY KEY ((tenant_id, entity_type, entity_id), event_type, event_uid)
diff --git a/dao/src/main/resources/cassandra/system-data.cql b/dao/src/main/resources/cassandra/system-data.cql
index 2455ac6f5d..16a53cad5c 100644
--- a/dao/src/main/resources/cassandra/system-data.cql
+++ b/dao/src/main/resources/cassandra/system-data.cql
@@ -279,28 +279,4 @@ VALUES ( now ( ), minTimeuuid ( 0 ), 'charts', 'basic_timeseries',
'{"type":"timeseries","sizeX":8,"sizeY":5,"resources":[],"templateHtml":"","templateCss":".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n","controllerScript":"self.onInit = function() {\n self.ctx.flot = new TbFlot(self.ctx); \n}\n\nself.onDataUpdated = function() {\n self.ctx.flot.update();\n}\n\nself.onResize = function() {\n self.ctx.flot.resize();\n}\n\nself.onEditModeChanged = function() {\n self.ctx.flot.checkMouseEvents();\n}\n\nself.onMobileModeChanged = function() {\n self.ctx.flot.checkMouseEvents();\n}\n\nself.getSettingsSchema = function() {\n return TbFlot.settingsSchema;\n}\n\nself.getDataKeySettingsSchema = function() {\n return TbFlot.datakeySettingsSchema(true);\n}\n\nself.onDestroy = function() {\n self.ctx.flot.destroy();\n}\n","settingsSchema":"{}","dataKeySettingsSchema":"{}","defaultConfig":"{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"First\",\"color\":\"#2196f3\",\"settings\":{\"showLines\":true,\"fillLines\":true,\"showPoints\":false},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Second\",\"color\":\"#ffc107\",\"settings\":{\"showLines\":true,\"fillLines\":false,\"showPoints\":false},\"_hash\":0.12775350966079668,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"shadowSize\":4,\"fontColor\":\"#545454\",\"fontSize\":10,\"xaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"yaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"grid\":{\"color\":\"#545454\",\"tickColor\":\"#DDDDDD\",\"verticalLines\":true,\"horizontalLines\":true,\"outlineWidth\":1},\"legend\":{\"show\":true,\"position\":\"nw\",\"backgroundColor\":\"#f0f0f0\",\"backgroundOpacity\":0.85,\"labelBoxBorderColor\":\"rgba(1, 1, 1, 0.45)\"},\"decimals\":1,\"stack\":false,\"tooltipIndividual\":false},\"title\":\"Timeseries - Flot\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"mobileHeight\":null}"}',
'Timeseries - Flot' );
-
-/** System plugins and rules **/
-INSERT INTO thingsboard.plugin ( id, tenant_id, name, state, search_text, api_token, plugin_class, public_access,
-configuration )
-VALUES ( minTimeuuid ( '2016-11-01 01:01:01+0000' ), minTimeuuid ( 0 ), 'System Telemetry Plugin', 'ACTIVE',
-'system telemetry plugin', 'telemetry',
-'org.thingsboard.server.extensions.core.plugin.telemetry.TelemetryStoragePlugin', true, '{}' );
-
-INSERT INTO thingsboard.rule ( id, tenant_id, name, plugin_token, state, search_text, weight, filters, processor,
-action )
-VALUES ( minTimeuuid ( '2016-11-01 01:01:02+0000' ), minTimeuuid ( 0 ), 'System Telemetry Rule', 'telemetry', 'ACTIVE',
-'system telemetry rule', 0,
-'[{"clazz":"org.thingsboard.server.extensions.core.filter.MsgTypeFilter", "name":"TelemetryFilter", "configuration": {"messageTypes":["POST_TELEMETRY","POST_ATTRIBUTES","GET_ATTRIBUTES"]}}]',
-null,
-'{"clazz":"org.thingsboard.server.extensions.core.action.telemetry.TelemetryPluginAction", "name":"TelemetryMsgConverterAction", "configuration":{}}'
-);
-
-INSERT INTO thingsboard.plugin ( id, tenant_id, name, state, search_text, api_token, plugin_class, public_access,
-configuration )
-VALUES ( minTimeuuid ( '2016-11-01 01:01:03+0000' ), minTimeuuid ( 0 ), 'System RPC Plugin', 'ACTIVE',
-'system rpc plugin', 'rpc', 'org.thingsboard.server.extensions.core.plugin.rpc.RpcPlugin', true, '{
- "defaultTimeout": 20000
- }' );
-
/** SYSTEM **/
diff --git a/dao/src/main/resources/sql/schema.sql b/dao/src/main/resources/sql/schema.sql
index 5876fbb562..91e77da503 100644
--- a/dao/src/main/resources/sql/schema.sql
+++ b/dao/src/main/resources/sql/schema.sql
@@ -140,19 +140,6 @@ CREATE TABLE IF NOT EXISTS event (
CONSTRAINT event_unq_key UNIQUE (tenant_id, entity_type, entity_id, event_type, event_uid)
);
-CREATE TABLE IF NOT EXISTS plugin (
- id varchar(31) NOT NULL CONSTRAINT plugin_pkey PRIMARY KEY,
- additional_info varchar,
- api_token varchar(255),
- plugin_class varchar(255),
- configuration varchar,
- name varchar(255),
- public_access boolean,
- search_text varchar(255),
- state varchar(255),
- tenant_id varchar(31)
-);
-
CREATE TABLE IF NOT EXISTS relation (
from_id varchar(31),
from_type varchar(255),
@@ -164,20 +151,6 @@ CREATE TABLE IF NOT EXISTS relation (
CONSTRAINT relation_unq_key UNIQUE (from_id, from_type, relation_type_group, relation_type, to_id, to_type)
);
-CREATE TABLE IF NOT EXISTS rule (
- id varchar(31) NOT NULL CONSTRAINT rule_pkey PRIMARY KEY,
- action varchar,
- additional_info varchar,
- filters varchar,
- name varchar(255),
- plugin_token varchar(255),
- processor varchar,
- search_text varchar(255),
- state varchar(255),
- tenant_id varchar(31),
- weight integer
-);
-
CREATE TABLE IF NOT EXISTS tb_user (
id varchar(31) NOT NULL CONSTRAINT tb_user_pkey PRIMARY KEY,
additional_info varchar,
diff --git a/dao/src/main/resources/sql/system-data.sql b/dao/src/main/resources/sql/system-data.sql
index 39fd6bd2f2..d41521a0b7 100644
--- a/dao/src/main/resources/sql/system-data.sql
+++ b/dao/src/main/resources/sql/system-data.sql
@@ -42,23 +42,3 @@ VALUES ( '1e746126eaaefa6a91992ebcb67fe33', 'mail', '{
"username": "",
"password": ""
}' );
-
-/** System plugins and rules **/
-INSERT INTO plugin ( id, tenant_id, name, state, search_text, api_token, plugin_class, public_access, configuration )
-VALUES ( '1e7461160cb2da2a91992ebcb67fe33', '1b21dd2138140008080808080808080', 'System Telemetry Plugin', 'ACTIVE',
- 'system telemetry plugin', 'telemetry',
- 'org.thingsboard.server.extensions.core.plugin.telemetry.TelemetryStoragePlugin', true, '{}' );
-
-INSERT INTO rule ( id, tenant_id, name, plugin_token, state, search_text, weight, filters, processor, action )
-VALUES ( '1e7461165abad4ca91992ebcb67fe33', '1b21dd2138140008080808080808080', 'System Telemetry Rule', 'telemetry', 'ACTIVE',
- 'system telemetry rule', 0,
- '[{"clazz":"org.thingsboard.server.extensions.core.filter.MsgTypeFilter", "name":"TelemetryFilter", "configuration": {"messageTypes":["POST_TELEMETRY","POST_ATTRIBUTES","GET_ATTRIBUTES"]}}]',
- null,
- '{"clazz":"org.thingsboard.server.extensions.core.action.telemetry.TelemetryPluginAction", "name":"TelemetryMsgConverterAction", "configuration":{}}'
-);
-
-INSERT INTO plugin ( id, tenant_id, name, state, search_text, api_token, plugin_class, public_access, configuration )
-VALUES ( '1e746116b3b8994a91992ebcb67fe33', '1b21dd2138140008080808080808080', 'System RPC Plugin', 'ACTIVE',
- 'system rpc plugin', 'rpc', 'org.thingsboard.server.extensions.core.plugin.rpc.RpcPlugin', true, '{
- "defaultTimeout": 20000
- }' );
diff --git a/dao/src/test/java/org/thingsboard/server/dao/CustomCassandraCQLUnit.java b/dao/src/test/java/org/thingsboard/server/dao/CustomCassandraCQLUnit.java
index fbed694dd5..1dc3faa426 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/CustomCassandraCQLUnit.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/CustomCassandraCQLUnit.java
@@ -15,14 +15,13 @@
*/
package org.thingsboard.server.dao;
+import com.datastax.driver.core.Cluster;
+import com.datastax.driver.core.Session;
import org.cassandraunit.BaseCassandraUnit;
import org.cassandraunit.CQLDataLoader;
import org.cassandraunit.dataset.CQLDataSet;
import org.cassandraunit.utils.EmbeddedCassandraServerHelper;
-import com.datastax.driver.core.Cluster;
-import com.datastax.driver.core.Session;
-
import java.util.List;
public class CustomCassandraCQLUnit extends BaseCassandraUnit {
diff --git a/dao/src/test/java/org/thingsboard/server/dao/JpaDbunitTestConfig.java b/dao/src/test/java/org/thingsboard/server/dao/JpaDbunitTestConfig.java
index d83293c701..0bf9f19b11 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/JpaDbunitTestConfig.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/JpaDbunitTestConfig.java
@@ -19,7 +19,6 @@ import com.github.springtestdbunit.bean.DatabaseConfigBean;
import com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean;
import org.dbunit.DatabaseUnitException;
import org.dbunit.ext.hsqldb.HsqldbDataTypeFactory;
-import org.dbunit.ext.postgresql.PostgresqlDataTypeFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/dao/src/test/java/org/thingsboard/server/dao/NoSqlDaoServiceTestSuite.java b/dao/src/test/java/org/thingsboard/server/dao/NoSqlDaoServiceTestSuite.java
index 5e01249fb5..f10462d77f 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/NoSqlDaoServiceTestSuite.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/NoSqlDaoServiceTestSuite.java
@@ -17,7 +17,6 @@ package org.thingsboard.server.dao;
import org.cassandraunit.dataset.cql.ClassPathCQLDataSet;
import org.junit.ClassRule;
-import org.junit.Ignore;
import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.extensions.cpsuite.ClasspathSuite.ClassnameFilters;
import org.junit.runner.RunWith;
diff --git a/dao/src/test/java/org/thingsboard/server/dao/nosql/RateLimitedResultSetFutureTest.java b/dao/src/test/java/org/thingsboard/server/dao/nosql/RateLimitedResultSetFutureTest.java
index f49668d3fd..491409aac8 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/nosql/RateLimitedResultSetFutureTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/nosql/RateLimitedResultSetFutureTest.java
@@ -15,7 +15,12 @@
*/
package org.thingsboard.server.dao.nosql;
-import com.datastax.driver.core.*;
+import com.datastax.driver.core.ProtocolVersion;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.ResultSetFuture;
+import com.datastax.driver.core.Row;
+import com.datastax.driver.core.Session;
+import com.datastax.driver.core.Statement;
import com.datastax.driver.core.exceptions.UnsupportedFeatureException;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
@@ -29,10 +34,18 @@ import org.mockito.stubbing.Answer;
import org.thingsboard.server.dao.exception.BufferLimitException;
import org.thingsboard.server.dao.util.AsyncRateLimiter;
-import java.util.concurrent.*;
-
-import static org.junit.Assert.*;
-import static org.mockito.Mockito.*;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeoutException;
+
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class RateLimitedResultSetFutureTest {
diff --git a/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/QueuePartitionerTest.java b/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/QueuePartitionerTest.java
index 3de9542319..e76ca2f946 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/QueuePartitionerTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/QueuePartitionerTest.java
@@ -21,7 +21,6 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
-import org.thingsboard.server.dao.queue.db.nosql.QueuePartitioner;
import org.thingsboard.server.dao.queue.db.repository.ProcessedPartitionRepository;
import java.time.Clock;
diff --git a/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/UnprocessedMsgFilterTest.java b/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/UnprocessedMsgFilterTest.java
index 39a432d244..43c6e727ce 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/UnprocessedMsgFilterTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/UnprocessedMsgFilterTest.java
@@ -18,8 +18,6 @@ package org.thingsboard.server.dao.queue.db.nosql;
import com.google.common.collect.Lists;
import org.junit.Test;
import org.thingsboard.server.common.msg.TbMsg;
-import org.thingsboard.server.dao.queue.db.nosql.MsgAck;
-import org.thingsboard.server.dao.queue.db.nosql.UnprocessedMsgFilter;
import java.util.Collection;
import java.util.List;
diff --git a/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraAckRepositoryTest.java b/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraAckRepositoryTest.java
index f2b8c88f01..9b743c90ae 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraAckRepositoryTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraAckRepositoryTest.java
@@ -21,9 +21,9 @@ import com.google.common.util.concurrent.ListenableFuture;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.util.ReflectionTestUtils;
+import org.thingsboard.server.dao.queue.db.nosql.MsgAck;
import org.thingsboard.server.dao.service.AbstractServiceTest;
import org.thingsboard.server.dao.service.DaoNoSqlTest;
-import org.thingsboard.server.dao.queue.db.nosql.MsgAck;
import java.util.List;
import java.util.UUID;
diff --git a/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraProcessedPartitionRepositoryTest.java b/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraProcessedPartitionRepositoryTest.java
index 1ad053c49e..a76fd965ca 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraProcessedPartitionRepositoryTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/queue/db/nosql/repository/CassandraProcessedPartitionRepositoryTest.java
@@ -30,7 +30,9 @@ import java.util.UUID;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
@DaoNoSqlTest
public class CassandraProcessedPartitionRepositoryTest extends AbstractServiceTest {
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java
index 44a1a0927b..1e1f15daff 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java
@@ -18,8 +18,6 @@ package org.thingsboard.server.dao.service;
import com.datastax.driver.core.utils.UUIDs;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.fasterxml.jackson.databind.node.TextNode;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
@@ -38,9 +36,6 @@ import org.thingsboard.server.common.data.id.UUIDBased;
import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
import org.thingsboard.server.common.data.plugin.ComponentScope;
import org.thingsboard.server.common.data.plugin.ComponentType;
-import org.thingsboard.server.common.data.plugin.PluginMetaData;
-import org.thingsboard.server.common.data.rule.RuleChain;
-import org.thingsboard.server.common.data.rule.RuleMetaData;
import org.thingsboard.server.dao.alarm.AlarmService;
import org.thingsboard.server.dao.asset.AssetService;
import org.thingsboard.server.dao.audit.AuditLogLevelFilter;
@@ -51,10 +46,8 @@ import org.thingsboard.server.dao.dashboard.DashboardService;
import org.thingsboard.server.dao.device.DeviceCredentialsService;
import org.thingsboard.server.dao.device.DeviceService;
import org.thingsboard.server.dao.event.EventService;
-import org.thingsboard.server.dao.plugin.PluginService;
import org.thingsboard.server.dao.relation.RelationService;
import org.thingsboard.server.dao.rule.RuleChainService;
-import org.thingsboard.server.dao.rule.RuleService;
import org.thingsboard.server.dao.settings.AdminSettingsService;
import org.thingsboard.server.dao.tenant.TenantService;
import org.thingsboard.server.dao.timeseries.TimeseriesService;
@@ -66,8 +59,6 @@ import java.io.IOException;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.ThreadLocalRandom;
@RunWith(SpringRunner.class)
@@ -112,12 +103,6 @@ public abstract class AbstractServiceTest {
@Autowired
protected TimeseriesService tsService;
- @Autowired
- protected PluginService pluginService;
-
- @Autowired
- protected RuleService ruleService;
-
@Autowired
protected EventService eventService;
@@ -154,32 +139,6 @@ public abstract class AbstractServiceTest {
return event;
}
- protected PluginMetaData generatePlugin(TenantId tenantId, String token) throws IOException {
- return generatePlugin(tenantId, token, "org.thingsboard.component.PluginTest", "org.thingsboard.component.ActionTest", "TestJsonDescriptor.json", "TestJsonData.json");
- }
-
- protected PluginMetaData generatePlugin(TenantId tenantId, String token, String clazz, String actions, String configurationDescriptorResource, String dataResource) throws IOException {
- if (tenantId == null) {
- tenantId = new TenantId(UUIDs.timeBased());
- }
- if (token == null) {
- token = UUID.randomUUID().toString();
- }
- getOrCreateDescriptor(ComponentScope.TENANT, ComponentType.PLUGIN, clazz, configurationDescriptorResource, actions);
- PluginMetaData pluginMetaData = new PluginMetaData();
- pluginMetaData.setName("Testing");
- pluginMetaData.setClazz(clazz);
- pluginMetaData.setTenantId(tenantId);
- pluginMetaData.setApiToken(token);
- pluginMetaData.setAdditionalInfo(mapper.readTree("{\"test\":\"test\"}"));
- try {
- pluginMetaData.setConfiguration(readFromResource(dataResource));
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- return pluginMetaData;
- }
-
private ComponentDescriptor getOrCreateDescriptor(ComponentScope scope, ComponentType type, String clazz, String configurationDescriptorResource) throws IOException {
return getOrCreateDescriptor(scope, type, clazz, configurationDescriptorResource, null);
}
@@ -203,42 +162,6 @@ public abstract class AbstractServiceTest {
return mapper.readTree(this.getClass().getClassLoader().getResourceAsStream(resourceName));
}
- protected RuleMetaData generateRule(TenantId tenantId, Integer weight, String pluginToken) throws IOException {
- if (tenantId == null) {
- tenantId = new TenantId(UUIDs.timeBased());
- }
- if (weight == null) {
- weight = ThreadLocalRandom.current().nextInt();
- }
-
- RuleMetaData ruleMetaData = new RuleMetaData();
- ruleMetaData.setName("Testing");
- ruleMetaData.setTenantId(tenantId);
- ruleMetaData.setWeight(weight);
- ruleMetaData.setPluginToken(pluginToken);
-
- ruleMetaData.setAction(createNode(ComponentScope.TENANT, ComponentType.OLD_ACTION,
- "org.thingsboard.component.ActionTest", "TestJsonDescriptor.json", "TestJsonData.json"));
-// ruleMetaData.setProcessor(createNode(ComponentScope.TENANT, ComponentType.PROCESSOR,
-// "org.thingsboard.component.ProcessorTest", "TestJsonDescriptor.json", "TestJsonData.json"));
- ruleMetaData.setFilters(mapper.createArrayNode().add(
- createNode(ComponentScope.TENANT, ComponentType.FILTER,
- "org.thingsboard.component.FilterTest", "TestJsonDescriptor.json", "TestJsonData.json")
- ));
-
- ruleMetaData.setAdditionalInfo(mapper.readTree("{}"));
- return ruleMetaData;
- }
-
- protected JsonNode createNode(ComponentScope scope, ComponentType type, String clazz, String configurationDescriptor, String configuration) throws IOException {
- getOrCreateDescriptor(scope, type, clazz, configurationDescriptor);
- ObjectNode oNode = mapper.createObjectNode();
- oNode.set("name", new TextNode("test action"));
- oNode.set("clazz", new TextNode(clazz));
- oNode.set("configuration", readFromResource(configuration));
- return oNode;
- }
-
@Bean
public AuditLogLevelFilter auditLogLevelFilter() {
Map mask = new HashMap<>();
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAdminSettingsServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAdminSettingsServiceTest.java
index 4ea39f0c85..41ba94f049 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAdminSettingsServiceTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAdminSettingsServiceTest.java
@@ -16,7 +16,6 @@
package org.thingsboard.server.dao.service;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.junit.Assert;
import org.junit.Test;
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmServiceTest.java
index 9ef8457438..03099e9b75 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmServiceTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmServiceTest.java
@@ -21,7 +21,11 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.thingsboard.server.common.data.Tenant;
-import org.thingsboard.server.common.data.alarm.*;
+import org.thingsboard.server.common.data.alarm.Alarm;
+import org.thingsboard.server.common.data.alarm.AlarmInfo;
+import org.thingsboard.server.common.data.alarm.AlarmQuery;
+import org.thingsboard.server.common.data.alarm.AlarmSeverity;
+import org.thingsboard.server.common.data.alarm.AlarmStatus;
import org.thingsboard.server.common.data.id.AssetId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.TimePageData;
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseDashboardServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseDashboardServiceTest.java
index 993e5254cb..02b5186f8d 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseDashboardServiceTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseDashboardServiceTest.java
@@ -32,10 +32,8 @@ import org.thingsboard.server.common.data.page.TextPageLink;
import org.thingsboard.server.common.data.page.TimePageData;
import org.thingsboard.server.common.data.page.TimePageLink;
import org.thingsboard.server.dao.exception.DataValidationException;
-import org.thingsboard.server.dao.model.ModelConstants;
import java.io.IOException;
-import java.sql.Time;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceCredentialsCacheTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceCredentialsCacheTest.java
index 61fbf05ebe..9269fc34d9 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceCredentialsCacheTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceCredentialsCacheTest.java
@@ -36,7 +36,10 @@ import org.thingsboard.server.dao.device.DeviceService;
import java.util.UUID;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
public abstract class BaseDeviceCredentialsCacheTest extends AbstractServiceTest {
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceCredentialsServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceCredentialsServiceTest.java
index 032534e889..1d771b2840 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceCredentialsServiceTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseDeviceCredentialsServiceTest.java
@@ -16,7 +16,6 @@
package org.thingsboard.server.dao.service;
import com.datastax.driver.core.utils.UUIDs;
-import org.apache.commons.lang3.RandomStringUtils;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseRelationCacheTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseRelationCacheTest.java
index 3a0b6aef8f..bc78fd7ec3 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseRelationCacheTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseRelationCacheTest.java
@@ -34,7 +34,10 @@ import org.thingsboard.server.dao.relation.RelationService;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import static org.thingsboard.server.common.data.CacheConstants.RELATIONS_CACHE;
public abstract class BaseRelationCacheTest extends AbstractServiceTest {
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseRelationServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseRelationServiceTest.java
index 754454aebf..a774bfd118 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseRelationServiceTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseRelationServiceTest.java
@@ -24,12 +24,12 @@ import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.id.AssetId;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.relation.EntityRelation;
-import org.thingsboard.server.common.data.relation.RelationTypeGroup;
-import org.thingsboard.server.dao.exception.DataValidationException;
import org.thingsboard.server.common.data.relation.EntityRelationsQuery;
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
import org.thingsboard.server.common.data.relation.EntityTypeFilter;
+import org.thingsboard.server.common.data.relation.RelationTypeGroup;
import org.thingsboard.server.common.data.relation.RelationsSearchParameters;
+import org.thingsboard.server.dao.exception.DataValidationException;
import java.util.Collections;
import java.util.List;
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/DaoNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/DaoNoSqlTest.java
index 9263bc4797..82a1a57f1f 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/service/DaoNoSqlTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/DaoNoSqlTest.java
@@ -17,7 +17,12 @@ package org.thingsboard.server.dao.service;
import org.springframework.test.context.TestPropertySource;
-import java.lang.annotation.*;
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/DaoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/DaoSqlTest.java
index 285c653d63..ea95650416 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/service/DaoSqlTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/DaoSqlTest.java
@@ -17,7 +17,12 @@ package org.thingsboard.server.dao.service;
import org.springframework.test.context.TestPropertySource;
-import java.lang.annotation.*;
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/event/BaseEventServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/event/BaseEventServiceTest.java
index 62af5a548a..eb25c86c0c 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/service/event/BaseEventServiceTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/event/BaseEventServiceTest.java
@@ -20,10 +20,10 @@ import org.junit.Assert;
import org.junit.Test;
import org.thingsboard.server.common.data.DataConstants;
import org.thingsboard.server.common.data.Event;
+import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.EventId;
-import org.thingsboard.server.common.data.id.RuleId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.TimePageData;
import org.thingsboard.server.common.data.page.TimePageLink;
@@ -66,15 +66,15 @@ public abstract class BaseEventServiceTest extends AbstractServiceTest {
long endTime = LocalDateTime.of(2016, Month.NOVEMBER, 1, 13, 0).toEpochSecond(ZoneOffset.UTC);
long timeAfterEndTime = LocalDateTime.of(2016, Month.NOVEMBER, 1, 13, 30).toEpochSecond(ZoneOffset.UTC);
- RuleId ruleId = new RuleId(UUIDs.timeBased());
+ CustomerId customerId = new CustomerId(UUIDs.timeBased());
TenantId tenantId = new TenantId(UUIDs.timeBased());
- saveEventWithProvidedTime(timeBeforeStartTime, ruleId, tenantId);
- Event savedEvent = saveEventWithProvidedTime(eventTime, ruleId, tenantId);
- Event savedEvent2 = saveEventWithProvidedTime(eventTime+1, ruleId, tenantId);
- Event savedEvent3 = saveEventWithProvidedTime(eventTime+2, ruleId, tenantId);
- saveEventWithProvidedTime(timeAfterEndTime, ruleId, tenantId);
+ saveEventWithProvidedTime(timeBeforeStartTime, customerId, tenantId);
+ Event savedEvent = saveEventWithProvidedTime(eventTime, customerId, tenantId);
+ Event savedEvent2 = saveEventWithProvidedTime(eventTime+1, customerId, tenantId);
+ Event savedEvent3 = saveEventWithProvidedTime(eventTime+2, customerId, tenantId);
+ saveEventWithProvidedTime(timeAfterEndTime, customerId, tenantId);
- TimePageData events = eventService.findEvents(tenantId, ruleId, DataConstants.STATS,
+ TimePageData events = eventService.findEvents(tenantId, customerId, DataConstants.STATS,
new TimePageLink(2, startTime, endTime, true));
Assert.assertNotNull(events.getData());
@@ -84,7 +84,7 @@ public abstract class BaseEventServiceTest extends AbstractServiceTest {
Assert.assertTrue(events.hasNext());
Assert.assertNotNull(events.getNextPageLink());
- events = eventService.findEvents(tenantId, ruleId, DataConstants.STATS, events.getNextPageLink());
+ events = eventService.findEvents(tenantId, customerId, DataConstants.STATS, events.getNextPageLink());
Assert.assertNotNull(events.getData());
Assert.assertTrue(events.getData().size() == 1);
@@ -101,15 +101,15 @@ public abstract class BaseEventServiceTest extends AbstractServiceTest {
long endTime = LocalDateTime.of(2016, Month.NOVEMBER, 1, 13, 0).toEpochSecond(ZoneOffset.UTC);
long timeAfterEndTime = LocalDateTime.of(2016, Month.NOVEMBER, 1, 13, 30).toEpochSecond(ZoneOffset.UTC);
- RuleId ruleId = new RuleId(UUIDs.timeBased());
+ CustomerId customerId = new CustomerId(UUIDs.timeBased());
TenantId tenantId = new TenantId(UUIDs.timeBased());
- saveEventWithProvidedTime(timeBeforeStartTime, ruleId, tenantId);
- Event savedEvent = saveEventWithProvidedTime(eventTime, ruleId, tenantId);
- Event savedEvent2 = saveEventWithProvidedTime(eventTime+1, ruleId, tenantId);
- Event savedEvent3 = saveEventWithProvidedTime(eventTime+2, ruleId, tenantId);
- saveEventWithProvidedTime(timeAfterEndTime, ruleId, tenantId);
+ saveEventWithProvidedTime(timeBeforeStartTime, customerId, tenantId);
+ Event savedEvent = saveEventWithProvidedTime(eventTime, customerId, tenantId);
+ Event savedEvent2 = saveEventWithProvidedTime(eventTime+1, customerId, tenantId);
+ Event savedEvent3 = saveEventWithProvidedTime(eventTime+2, customerId, tenantId);
+ saveEventWithProvidedTime(timeAfterEndTime, customerId, tenantId);
- TimePageData