From db4e1289c93dc0bfa7c9d0ad1d0d69e9a7796ee3 Mon Sep 17 00:00:00 2001 From: Andrew Shvayka Date: Thu, 17 May 2018 14:03:05 +0300 Subject: [PATCH] No more rules and plugins --- application/pom.xml | 51 -- .../main/data/upgrade/1.5.0/schema_update.cql | 7 + .../main/data/upgrade/1.5.0/schema_update.sql | 5 +- .../server/actors/ActorSystemContext.java | 18 - .../server/actors/app/AppActor.java | 14 +- .../server/actors/device/DeviceActor.java | 4 +- .../device/DeviceActorMessageProcessor.java | 12 +- .../device/DeviceActorToRuleEngineMsg.java | 1 - .../server/actors/device/SessionInfo.java | 1 - .../server/actors/plugin/PluginActor.java | 159 ----- .../plugin/PluginActorMessageProcessor.java | 252 -------- .../actors/plugin/PluginCallbackMessage.java | 53 -- .../plugin/PluginProcessingContext.java | 576 ------------------ .../actors/plugin/PluginTerminationMsg.java | 30 - .../actors/plugin/RuleToPluginMsgWrapper.java | 66 -- .../plugin/SharedPluginProcessingContext.java | 142 ----- .../actors/plugin/TimeoutScheduler.java | 27 - .../actors/plugin/ValidationCallback.java | 71 --- .../server/actors/rpc/RpcManagerActor.java | 6 +- .../server/actors/rpc/RpcSessionTellMsg.java | 1 - .../actors/ruleChain/DefaultTbContext.java | 18 +- .../ruleChain/RuleChainManagerActor.java | 4 +- .../ruleChain/RuleChainToRuleChainMsg.java | 1 - .../RuleNodeActorMessageProcessor.java | 3 - .../actors/ruleChain/RuleNodeToSelfMsg.java | 1 - .../server/actors/service/ActorService.java | 7 +- .../actors/service/ContextBasedCreator.java | 3 +- .../actors/service/DefaultActorService.java | 28 +- .../actors/service/RestMsgProcessor.java | 24 - .../actors/service/WebSocketMsgProcessor.java | 24 - .../actors/session/ASyncMsgProcessor.java | 18 +- .../AbstractSessionActorMsgProcessor.java | 15 +- .../server/actors/session/SessionActor.java | 7 +- .../actors/session/SessionManagerActor.java | 20 +- .../actors/session/SyncMsgProcessor.java | 10 +- .../AbstractContextAwareMsgProcessor.java | 49 -- .../actors/shared/ComponentMsgProcessor.java | 1 - .../actors/shared/EntityActorsManager.java | 2 - .../actors/shared/plugin/PluginManager.java | 42 -- .../shared/plugin/SystemPluginManager.java | 45 -- .../shared/plugin/TenantPluginManager.java | 57 -- .../rulechain/SystemRuleChainManager.java | 7 +- .../server/actors/tenant/TenantActor.java | 7 +- .../config/AuditLogLevelProperties.java | 2 - .../server/config/SwaggerConfiguration.java | 6 +- .../ThingsboardSecurityConfiguration.java | 8 +- .../server/config/WebSocketConfiguration.java | 12 +- .../server/controller/AdminController.java | 11 +- .../server/controller/AlarmController.java | 24 +- .../server/controller/AssetController.java | 15 +- .../server/controller/AuditLogController.java | 9 +- .../server/controller/AuthController.java | 12 +- .../server/controller/BaseController.java | 96 +-- .../ComponentDescriptorController.java | 21 +- .../server/controller/CustomerController.java | 11 +- .../controller/DashboardController.java | 17 +- .../server/controller/DeviceController.java | 13 +- .../controller/EntityRelationController.java | 14 +- .../server/controller/EventController.java | 14 +- .../server/controller/PluginController.java | 240 -------- .../server/controller/RpcController.java | 18 +- .../controller/RuleChainController.java | 13 +- .../server/controller/RuleController.java | 239 -------- .../server/controller/TbUrlConstants.java | 7 +- .../controller/TelemetryController.java | 13 +- .../server/controller/UserController.java | 15 +- .../controller/WidgetTypeController.java | 11 +- .../controller/WidgetsBundleController.java | 11 +- .../plugin/PluginApiController.java | 85 --- .../plugin/PluginNotFoundException.java | 30 - .../plugin/PluginWebSocketMsgEndpoint.java | 28 - .../controller/plugin/TbWebSocketHandler.java | 46 +- .../install/ThingsboardInstallService.java | 7 +- .../discovery/DummyDiscoveryService.java | 1 - .../cluster/discovery/ServerInstance.java | 1 - .../routing/ClusterRoutingService.java | 2 - .../ConsistentClusterRoutingService.java | 1 - .../cluster/rpc/ClusterGrpcService.java | 2 - .../AnnotationComponentDiscoveryService.java | 74 +-- .../component/ComponentDiscoveryService.java | 2 - .../CassandraDatabaseSchemaService.java | 1 - .../CassandraDatabaseUpgradeService.java | 13 +- .../service/install/DatabaseHelper.java | 6 +- .../DefaultSystemDataLoaderService.java | 22 +- .../service/install/InstallScripts.java | 1 - .../install/SqlDatabaseSchemaService.java | 1 - .../install/SqlDatabaseUpgradeService.java | 10 +- .../install/cql/CassandraDbHelper.java | 17 +- .../service/install/sql/SqlDbHelper.java | 7 +- .../service/rpc/DefaultDeviceRpcService.java | 21 +- .../server/service/rpc/DeviceRpcService.java | 1 - .../service/rpc}/FromDeviceRpcResponse.java | 3 +- .../rpc/ToDeviceRpcRequestActorMsg.java | 2 +- .../rpc/ToServerRpcResponseActorMsg.java | 2 +- .../service/security/AccessValidator.java | 6 +- .../service/security/ValidationCallback.java | 10 +- .../security}/ValidationResult.java | 2 +- .../security}/ValidationResultCode.java | 5 +- .../auth/jwt/JwtAuthenticationProvider.java | 8 - ...wtTokenAuthenticationProcessingFilter.java | 1 - .../RefreshTokenAuthenticationProvider.java | 6 +- .../jwt/RefreshTokenProcessingFilter.java | 2 - .../auth/rest/RestAuthenticationProvider.java | 7 +- .../auth/rest/RestLoginProcessingFilter.java | 2 - .../rest/RestPublicLoginProcessingFilter.java | 2 - .../service/security/model/SecurityUser.java | 1 - .../model/token/RawAccessJwtToken.java | 8 +- .../service}/telemetry/AttributeData.java | 2 +- .../DefaultTelemetrySubscriptionService.java | 10 +- .../DefaultTelemetryWebSocketService.java | 27 +- .../service/telemetry}/SessionEvent.java | 2 +- .../service/telemetry}/TelemetryFeature.java | 2 +- .../TelemetrySubscriptionService.java | 4 +- .../telemetry/TelemetryWebSocketService.java | 3 +- .../telemetry/TelemetryWebSocketTextMsg.java | 5 - .../server/service}/telemetry/TsData.java | 2 +- .../service/telemetry/WsSessionMetaData.java | 1 - .../cmd/AttributesSubscriptionCmd.java | 4 +- .../service}/telemetry/cmd/GetHistoryCmd.java | 2 +- .../telemetry/cmd/SubscriptionCmd.java | 4 +- .../telemetry/cmd/TelemetryPluginCmd.java | 2 +- .../cmd/TelemetryPluginCmdsWrapper.java | 2 +- .../cmd/TimeseriesSubscriptionCmd.java | 4 +- .../exception/AccessDeniedException.java | 2 +- .../exception/EntityNotFoundException.java | 2 +- .../exception/InternalErrorException.java | 2 +- .../exception/InvalidParametersException.java | 2 +- .../exception/ToErrorResponseEntity.java | 2 +- .../exception/UnauthorizedException.java | 2 +- .../exception/UncheckedApiException.java | 2 +- .../service}/telemetry/sub/Subscription.java | 5 +- .../telemetry/sub/SubscriptionErrorCode.java | 2 +- .../telemetry/sub/SubscriptionState.java | 4 +- .../telemetry/sub/SubscriptionUpdate.java | 8 +- .../src/main/resources/thingsboard.yml | 2 - ...BaseComponentDescriptorControllerTest.java | 2 - ...tractMqttServerSideRpcIntegrationTest.java | 33 +- .../server/common/data/EntityType.java | 2 +- .../common/data/id/EntityIdFactory.java | 4 - .../server/common/data/id/PluginId.java | 39 -- .../server/common/data/id/RuleId.java | 37 -- .../common/data/plugin/ComponentType.java | 2 +- .../common/data/plugin/PluginMetaData.java | 138 ----- .../server/common/data/rule/RuleMetaData.java | 110 ---- .../common/msg/aware/PluginAwareMsg.java | 24 - .../server/common/msg/aware/RuleAwareMsg.java | 24 - .../msg/plugin/ComponentLifecycleMsg.java | 12 +- .../org/thingsboard/server/dao/DaoUtil.java | 6 +- .../server/dao/alarm/AlarmService.java | 8 +- .../server/dao/alarm/BaseAlarmService.java | 15 +- .../server/dao/alarm/CassandraAlarmDao.java | 9 +- .../server/dao/asset/BaseAssetService.java | 12 +- .../server/dao/asset/CassandraAssetDao.java | 28 +- .../CassandraBaseAttributesDao.java | 13 +- .../server/dao/audit/AuditLogService.java | 9 +- .../server/dao/audit/AuditLogServiceImpl.java | 7 +- .../dao/audit/CassandraAuditLogDao.java | 13 +- .../dao/audit/DummyAuditLogServiceImpl.java | 6 +- .../dao/cache/TBRedisCacheConfiguration.java | 1 - .../dao/customer/CassandraCustomerDao.java | 4 +- .../dashboard/CassandraDashboardInfoDao.java | 5 +- .../dao/dashboard/DashboardService.java | 2 - .../dao/dashboard/DashboardServiceImpl.java | 12 +- .../server/dao/device/CassandraDeviceDao.java | 28 +- .../server/dao/device/DeviceService.java | 1 - .../server/dao/device/DeviceServiceImpl.java | 18 +- .../dao/entity/AbstractEntityService.java | 2 - .../server/dao/entity/BaseEntityService.java | 22 +- .../dao/event/CassandraBaseEventDao.java | 5 +- .../server/dao/event/EventService.java | 1 - .../server/dao/model/BaseEntity.java | 1 - .../server/dao/model/EntitySubtypeEntity.java | 5 +- .../server/dao/model/ModelConstants.java | 33 +- .../dao/model/nosql/AdminSettingsEntity.java | 5 +- .../server/dao/model/nosql/AlarmEntity.java | 20 +- .../server/dao/model/nosql/AssetEntity.java | 9 +- .../dao/model/nosql/AuditLogEntity.java | 20 +- .../nosql/ComponentDescriptorEntity.java | 10 +- .../dao/model/nosql/CustomerEntity.java | 15 +- .../dao/model/nosql/DashboardEntity.java | 8 +- .../dao/model/nosql/DashboardInfoEntity.java | 7 +- .../model/nosql/DeviceCredentialsEntity.java | 7 +- .../server/dao/model/nosql/DeviceEntity.java | 9 +- .../server/dao/model/nosql/EventEntity.java | 14 +- .../dao/model/nosql/PluginMetaDataEntity.java | 194 ------ .../dao/model/nosql/RuleChainEntity.java | 11 +- .../dao/model/nosql/RuleMetaDataEntity.java | 200 ------ .../dao/model/nosql/RuleNodeEntity.java | 10 +- .../server/dao/model/nosql/TenantEntity.java | 15 +- .../model/nosql/UserCredentialsEntity.java | 8 +- .../server/dao/model/nosql/UserEntity.java | 11 +- .../dao/model/nosql/WidgetTypeEntity.java | 8 +- .../dao/model/nosql/WidgetsBundleEntity.java | 8 +- .../dao/model/sql/AdminSettingsEntity.java | 4 +- .../server/dao/model/sql/AlarmEntity.java | 21 +- .../server/dao/model/sql/AssetEntity.java | 7 +- .../dao/model/sql/AttributeKvEntity.java | 26 +- .../server/dao/model/sql/AuditLogEntity.java | 26 +- .../model/sql/ComponentDescriptorEntity.java | 6 +- .../model/sql/DeviceCredentialsEntity.java | 6 +- .../server/dao/model/sql/EventEntity.java | 14 +- .../dao/model/sql/PluginMetaDataEntity.java | 118 ---- .../server/dao/model/sql/RelationEntity.java | 15 +- .../dao/model/sql/RuleMetaDataEntity.java | 122 ---- .../server/dao/model/sql/TsKvEntity.java | 27 +- .../dao/model/sql/TsKvLatestEntity.java | 25 +- .../server/dao/model/sql/UserEntity.java | 6 +- .../dao/nosql/CassandraAbstractDao.java | 18 +- .../dao/nosql/CassandraAbstractModelDao.java | 3 - .../dao/nosql/RateLimitedResultSetFuture.java | 7 +- .../server/dao/plugin/BasePluginService.java | 261 -------- .../dao/plugin/CassandraBasePluginDao.java | 120 ---- .../server/dao/plugin/PluginDao.java | 50 -- .../server/dao/plugin/PluginService.java | 55 -- .../repository/CassandraAckRepository.java | 6 +- .../repository/CassandraMsgRepository.java | 6 +- ...CassandraProcessedPartitionRepository.java | 6 +- .../dao/queue/memory/InMemoryMsgQueue.java | 7 +- .../server/dao/relation/BaseRelationDao.java | 6 +- .../server/dao/rule/BaseRuleChainService.java | 1 - .../server/dao/rule/BaseRuleService.java | 239 -------- .../server/dao/rule/CassandraBaseRuleDao.java | 107 ---- .../dao/rule/CassandraRuleChainDao.java | 7 +- .../thingsboard/server/dao/rule/RuleDao.java | 49 -- .../server/dao/rule/RuleService.java | 55 -- .../dao/service/TimePaginatedRemover.java | 1 - .../server/dao/service/Validator.java | 1 - .../settings/CassandraAdminSettingsDao.java | 4 +- .../server/dao/sql/alarm/JpaAlarmDao.java | 2 - .../server/dao/sql/asset/AssetRepository.java | 2 - .../server/dao/sql/asset/JpaAssetDao.java | 7 +- .../ComponentDescriptorRepository.java | 1 - .../dashboard/DashboardInfoRepository.java | 1 - .../sql/dashboard/JpaDashboardInfoDao.java | 2 - .../server/dao/sql/device/JpaDeviceDao.java | 7 +- .../server/dao/sql/event/EventRepository.java | 1 - .../server/dao/sql/event/JpaBaseEventDao.java | 3 - .../dao/sql/plugin/JpaBasePluginDao.java | 132 ---- .../sql/plugin/PluginMetaDataRepository.java | 51 -- .../dao/sql/relation/JpaRelationDao.java | 5 - .../server/dao/sql/rule/JpaBaseRuleDao.java | 122 ---- .../dao/sql/rule/RuleMetaDataRepository.java | 51 -- .../dao/sql/timeseries/JpaTimeseriesDao.java | 13 +- .../sql/timeseries/TsKvLatestRepository.java | 1 - .../server/dao/tenant/CassandraTenantDao.java | 4 +- .../server/dao/tenant/TenantServiceImpl.java | 10 - .../AggregatePartitionsFunction.java | 9 +- .../CassandraBaseTimeseriesDao.java | 17 +- .../server/dao/user/UserServiceImpl.java | 4 +- .../server/dao/util/BufferedRateLimiter.java | 6 +- .../dao/widget/CassandraWidgetTypeDao.java | 6 +- .../dao/widget/CassandraWidgetsBundleDao.java | 11 +- dao/src/main/resources/cassandra/schema.cql | 59 +- .../main/resources/cassandra/system-data.cql | 24 - dao/src/main/resources/sql/schema.sql | 27 - dao/src/main/resources/sql/system-data.sql | 20 - .../server/dao/CustomCassandraCQLUnit.java | 5 +- .../server/dao/JpaDbunitTestConfig.java | 1 - .../server/dao/NoSqlDaoServiceTestSuite.java | 1 - .../nosql/RateLimitedResultSetFutureTest.java | 23 +- .../queue/db/nosql/QueuePartitionerTest.java | 1 - .../db/nosql/UnprocessedMsgFilterTest.java | 2 - .../CassandraAckRepositoryTest.java | 2 +- ...andraProcessedPartitionRepositoryTest.java | 4 +- .../dao/service/AbstractServiceTest.java | 77 --- .../service/BaseAdminSettingsServiceTest.java | 1 - .../dao/service/BaseAlarmServiceTest.java | 6 +- .../dao/service/BaseDashboardServiceTest.java | 2 - .../BaseDeviceCredentialsCacheTest.java | 5 +- .../BaseDeviceCredentialsServiceTest.java | 1 - .../dao/service/BaseRelationCacheTest.java | 5 +- .../dao/service/BaseRelationServiceTest.java | 4 +- .../server/dao/service/DaoNoSqlTest.java | 7 +- .../server/dao/service/DaoSqlTest.java | 7 +- .../service/event/BaseEventServiceTest.java | 34 +- .../nosql/AdminSettingsServiceNoSqlTest.java | 2 +- .../service/nosql/AlarmServiceNoSqlTest.java | 2 +- .../service/nosql/AssetServiceNoSqlTest.java | 2 +- .../nosql/CustomerServiceNoSqlTest.java | 2 +- .../nosql/DashboardServiceNoSqlTest.java | 2 +- .../nosql/DeviceCredentialCacheNoSqlTest.java | 2 +- .../DeviceCredentialServiceNoSqlTest.java | 2 +- .../service/nosql/DeviceServiceNoSqlTest.java | 2 +- .../nosql/RelationServiceNoSqlTest.java | 2 +- .../service/nosql/TenantServiceNoSqlTest.java | 2 +- .../service/nosql/UserServiceNoSqlTest.java | 2 +- .../nosql/WidgetTypeServiceNoSqlTest.java | 2 +- .../nosql/WidgetsBundleServiceNoSqlTest.java | 2 +- .../service/plugin/BasePluginServiceTest.java | 114 ---- .../plugin/nosql/PluginServiceNoSqlTest.java | 23 - .../plugin/sql/PluginServiceSqlTest.java | 23 - .../sql/AdminSettingsServiceSqlTest.java | 2 +- .../dao/service/sql/AlarmServiceSqlTest.java | 2 +- .../dao/service/sql/AssetServiceSqlTest.java | 2 +- .../service/sql/CustomerServiceSqlTest.java | 2 +- .../service/sql/DashboardServiceSqlTest.java | 2 +- .../sql/DeviceCredentialsCacheSqlTest.java | 2 +- .../sql/DeviceCredentialsServiceSqlTest.java | 2 +- .../dao/service/sql/DeviceServiceSqlTest.java | 2 +- .../service/sql/RelationServiceSqlTest.java | 2 +- .../dao/service/sql/TenantServiceSqlTest.java | 2 +- .../dao/service/sql/UserServiceSqlTest.java | 2 +- .../service/sql/WidgetTypeServiceSqlTest.java | 2 +- .../sql/WidgetsBundleServiceSqlTest.java | 2 +- .../timeseries/BaseTimeseriesServiceTest.java | 10 +- .../server/dao/sql/asset/JpaAssetDaoTest.java | 4 +- .../JpaBaseComponentDescriptorDaoTest.java | 8 +- .../dashboard/JpaDashboardInfoDaoTest.java | 1 - .../dao/sql/event/JpaBaseEventDaoTest.java | 5 +- .../dao/sql/plugin/JpaBasePluginDaoTest.java | 102 ---- .../dao/sql/rule/JpaBaseRuleDaoTest.java | 156 ----- .../dao/sql/tenant/JpaTenantDaoTest.java | 2 +- .../server/dao/sql/user/JpaUserDaoTest.java | 3 +- .../sql/widget/JpaWidgetsBundleDaoTest.java | 2 +- .../dao/util/BufferedRateLimiterTest.java | 11 +- .../test/resources/cassandra/system-test.cql | 4 +- .../test/resources/sql/drop-all-tables.sql | 2 - dao/src/test/resources/sql/system-test.sql | 4 +- extensions-api/pom.xml | 95 --- .../extensions/api/component/Action.java | 40 -- .../api/component/ConfigurableComponent.java | 25 - .../EmptyComponentConfiguration.java | 22 - .../extensions/api/component/Filter.java | 40 -- .../extensions/api/component/Plugin.java | 42 -- .../extensions/api/component/Processor.java | 40 -- .../api/configuration/Configurable.java | 26 - .../api/configuration/Configuration.java | 24 - .../ConfigurationValidationException.java | 26 - .../api/plugins/AbstractPlugin.java | 88 --- .../server/extensions/api/plugins/Plugin.java | 54 -- .../extensions/api/plugins/PluginAction.java | 37 -- .../plugins/PluginApiCallSecurityContext.java | 80 --- .../api/plugins/PluginCallback.java | 26 - .../extensions/api/plugins/PluginContext.java | 130 ---- .../api/plugins/PluginException.java | 26 - .../PluginInitializationException.java | 29 - .../handlers/DefaultRestMsgHandler.java | 72 --- .../handlers/DefaultRpcMsgHandler.java | 30 - .../handlers/DefaultRuleMsgHandler.java | 64 -- .../handlers/DefaultWebsocketMsgHandler.java | 104 ---- .../api/plugins/handlers/RestMsgHandler.java | 28 - .../api/plugins/handlers/RpcMsgHandler.java | 28 - .../api/plugins/handlers/RuleMsgHandler.java | 31 - .../plugins/handlers/WebsocketMsgHandler.java | 28 - .../plugins/msg/AbstractPluginToRuleMsg.java | 63 -- .../plugins/msg/AbstractRuleToPluginMsg.java | 72 --- .../GetAttributesRequestRuleToPluginMsg.java | 33 - .../msg/GetRequestRuleToPluginMsg.java | 31 - .../api/plugins/msg/PluginToRuleMsg.java | 64 -- .../plugins/msg/ResponsePluginToRuleMsg.java | 32 - .../msg/RpcRequestRuleToPluginMsg.java | 31 - .../msg/RpcResponsePluginToRuleMsg.java | 32 - .../api/plugins/msg/RuleToPluginMsg.java | 61 -- ...TelemetryUploadRequestRuleToPluginMsg.java | 36 -- .../api/plugins/msg/ToPluginActorMsg.java | 25 - .../msg/ToPluginRpcResponseDeviceMsg.java | 31 - ...pdateAttributesRequestRuleToPluginMsg.java | 31 - .../api/plugins/rest/BasicPluginRestMsg.java | 63 -- .../api/plugins/rest/PluginRestMsg.java | 38 -- .../api/plugins/rest/RestRequest.java | 87 --- .../api/plugins/rpc/PluginRpcMsg.java | 46 -- .../extensions/api/plugins/rpc/RpcMsg.java | 35 -- .../ws/BasicPluginWebsocketSessionRef.java | 111 ---- .../plugins/ws/PluginWebsocketSessionRef.java | 45 -- .../api/plugins/ws/WsSessionMetaData.java | 50 -- .../ws/msg/AbstractPluginWebSocketMsg.java | 66 -- .../ws/msg/BinaryPluginWebSocketMsg.java | 29 - .../ws/msg/EmptyPluginWebsocketMsg.java | 30 - .../ws/msg/PingPluginWebsocketMsg.java | 27 - .../plugins/ws/msg/PluginWebsocketMsg.java | 31 - .../ws/msg/PongPluginWebsocketMsg.java | 27 - .../msg/SessionEventPluginWebSocketMsg.java | 29 - .../ws/msg/TextPluginWebSocketMsg.java | 28 - .../extensions/api/rules/RuleContext.java | 45 -- .../extensions/api/rules/RuleException.java | 30 - .../extensions/api/rules/RuleFilter.java | 28 - .../rules/RuleInitializationException.java | 29 - .../api/rules/RuleLifecycleComponent.java | 29 - .../api/rules/RuleProcessingMetaData.java | 43 -- .../extensions/api/rules/RuleProcessor.java | 27 - .../rules/SimpleRuleLifecycleComponent.java | 41 -- .../extensions/api/rules/ToRuleActorMsg.java | 25 - .../main/resources/EmptyJsonDescriptor.json | 12 - extensions-core/pom.xml | 136 ----- .../core/action/mail/SendMailAction.java | 109 ---- .../mail/SendMailActionConfiguration.java | 34 -- .../core/action/mail/SendMailActionMsg.java | 36 -- .../mail/SendMailRuleToPluginActionMsg.java | 35 -- .../core/action/rpc/RpcPluginAction.java | 69 --- .../action/rpc/ServerSideRpcCallAction.java | 107 ---- .../ServerSideRpcCallActionConfiguration.java | 34 -- .../rpc/ServerSideRpcCallActionMsg.java | 38 -- ...erverSideRpcCallRuleToPluginActionMsg.java | 32 - .../telemetry/TelemetryPluginAction.java | 84 --- .../TelemetryPluginActionConfiguration.java | 31 - .../AbstractTemplatePluginAction.java | 87 --- .../template/TemplateActionConfiguration.java | 25 - .../extensions/core/filter/BasicJsFilter.java | 77 --- .../core/filter/DeviceAttributesFilter.java | 57 -- .../DeviceAttributesFilterConfiguration.java | 27 - .../core/filter/DeviceTelemetryFilter.java | 50 -- .../core/filter/DeviceTypeFilter.java | 49 -- .../filter/DeviceTypeFilterConfiguration.java | 33 - .../core/filter/JsFilterConfiguration.java | 27 - .../core/filter/MethodNameFilter.java | 56 -- .../filter/MethodNameFilterConfiguration.java | 33 - .../extensions/core/filter/MsgTypeFilter.java | 68 --- .../filter/MsgTypeFilterConfiguration.java | 28 - .../core/filter/NashornJsEvaluator.java | 131 ---- .../core/plugin/KeyValuePluginProperties.java | 27 - .../core/plugin/mail/MailPlugin.java | 129 ---- .../plugin/mail/MailPluginConfiguration.java | 33 - .../messaging/DeviceMessagingPlugin.java | 69 --- .../DeviceMessagingPluginConfiguration.java | 30 - .../DeviceMessagingRuleMsgHandler.java | 237 ------- .../messaging/PendingRpcRequestMetadata.java | 37 -- .../plugin/telemetry/SubscriptionManager.java | 373 ------------ .../telemetry/TelemetryStoragePlugin.java | 106 ---- .../telemetry/handlers/BiPluginCallBack.java | 74 --- .../handlers/TelemetryRestMsgHandler.java | 441 -------------- .../handlers/TelemetryRpcMsgHandler.java | 292 --------- .../handlers/TelemetryRuleMsgHandler.java | 160 ----- .../TelemetryWebsocketMsgHandler.java | 412 ------------- .../core/plugin/time/TimePlugin.java | 92 --- .../plugin/time/TimePluginConfiguration.java | 26 - .../AlarmDeduplicationProcessor.java | 84 --- ...rmDeduplicationProcessorConfiguration.java | 29 - .../core/processor/AlarmProcessor.java | 250 -------- .../AlarmProcessorConfiguration.java | 39 -- .../extensions/core/utils/VelocityUtils.java | 105 ---- .../src/main/proto/telemetry.proto | 82 --- ...AlarmDeduplicationProcessorDescriptor.json | 30 - .../resources/AlarmProcessorDescriptor.json | 121 ---- .../DeviceMessagingPluginDescriptor.json | 37 -- .../resources/DeviceTypeFilterDescriptor.json | 28 - .../main/resources/JsFilterDescriptor.json | 21 - .../src/main/resources/MailPluginData.json | 16 - .../main/resources/MailPluginDescriptor.json | 61 -- .../resources/MethodNameFilterDescriptor.json | 28 - .../resources/MsgTypeFilterDescriptor.json | 40 -- .../src/main/resources/RpcPluginData.json | 3 - .../main/resources/RpcPluginDescriptor.json | 18 - .../main/resources/SendMailActionData.json | 7 - .../resources/SendMailActionDescriptor.json | 55 -- .../ServerSideRpcCallActionDescriptor.json | 57 -- .../TelemetryPluginActionDescriptor.json | 50 -- .../main/resources/TimePluginDescriptor.json | 16 - .../filter/DeviceAttributesFilterTest.java | 129 ---- extensions/extension-kafka/pom.xml | 97 --- .../src/assembly/extension.xml | 39 -- .../kafka/action/KafkaActionMsg.java | 28 - .../kafka/action/KafkaActionPayload.java | 35 -- .../kafka/action/KafkaPluginAction.java | 45 -- .../KafkaPluginActionConfiguration.java | 26 - .../kafka/plugin/KafkaMsgHandler.java | 63 -- .../extensions/kafka/plugin/KafkaPlugin.java | 94 --- .../plugin/KafkaPluginConfiguration.java | 34 -- .../main/resources/KafkaActionDescriptor.json | 34 -- .../main/resources/KafkaPluginDescriptor.json | 80 --- .../extensions/kafka/KafkaDemoClient.java | 131 ---- .../src/test/resources/logback.xml | 10 - extensions/extension-mqtt/pom.xml | 98 --- .../extension-mqtt/src/assembly/extension.xml | 34 -- .../extensions/mqtt/action/MqttActionMsg.java | 28 - .../mqtt/action/MqttActionPayload.java | 34 -- .../mqtt/action/MqttPluginAction.java | 43 -- .../action/MqttPluginActionConfiguration.java | 26 - .../mqtt/plugin/MqttMsgHandler.java | 70 --- .../extensions/mqtt/plugin/MqttPlugin.java | 130 ---- .../mqtt/plugin/MqttPluginConfiguration.java | 28 - .../main/resources/MqttActionDescriptor.json | 32 - .../main/resources/MqttPluginDescriptor.json | 48 -- extensions/extension-rabbitmq/pom.xml | 139 ----- .../src/assembly/extension.xml | 34 -- .../rabbitmq/action/RabbitMqActionMsg.java | 31 - .../action/RabbitMqActionPayload.java | 39 -- .../rabbitmq/action/RabbitMqPluginAction.java | 49 -- .../RabbitMqPluginActionConfiguration.java | 32 - .../rabbitmq/plugin/RabbitMqMsgHandler.java | 86 --- .../rabbitmq/plugin/RabbitMqPlugin.java | 109 ---- .../plugin/RabbitMqPluginConfiguration.java | 47 -- .../resources/RabbitMqActionDescriptor.json | 77 --- .../resources/RabbitMqPluginDescriptor.json | 79 --- .../rabbitmq/RabbitMqDemoClient.java | 56 -- extensions/extension-rest-api-call/pom.xml | 98 --- .../src/assembly/extension.xml | 34 -- .../rest/action/RestApiCallActionMsg.java | 28 - .../rest/action/RestApiCallActionPayload.java | 38 -- .../rest/action/RestApiCallPluginAction.java | 51 -- .../RestApiCallPluginActionConfiguration.java | 28 - .../rest/plugin/RestApiCallMsgHandler.java | 67 -- .../rest/plugin/RestApiCallPlugin.java | 98 --- .../RestApiCallPluginConfiguration.java | 37 -- .../RestApiCallActionDescriptor.json | 61 -- .../RestApiCallPluginDescriptor.json | 106 ---- .../rest/RestApiCallDemoClient.java | 70 --- extensions/extension-sns/pom.xml | 81 --- .../extension-sns/src/assembly/extension.xml | 37 -- .../sns/action/SnsTopicActionMsg.java | 31 - .../sns/action/SnsTopicActionPayload.java | 37 -- .../sns/action/SnsTopicPluginAction.java | 45 -- .../SnsTopicPluginActionConfiguration.java | 30 - .../sns/plugin/SnsMessageHandler.java | 63 -- .../extensions/sns/plugin/SnsPlugin.java | 79 --- .../sns/plugin/SnsPluginConfiguration.java | 30 - .../main/resources/SnsPluginDescriptor.json | 30 - .../resources/SnsTopicActionDescriptor.json | 34 -- extensions/extension-sqs/pom.xml | 81 --- .../extension-sqs/src/assembly/extension.xml | 37 -- .../action/fifo/SqsFifoQueueActionMsg.java | 31 - .../fifo/SqsFifoQueueActionPayload.java | 39 -- .../action/fifo/SqsFifoQueuePluginAction.java | 46 -- ...SqsFifoQueuePluginActionConfiguration.java | 30 - .../standard/SqsStandardQueueActionMsg.java | 31 - .../SqsStandardQueueActionPayload.java | 40 -- .../SqsStandardQueuePluginAction.java | 46 -- ...tandardQueuePluginActionConfiguration.java | 32 - .../sqs/plugin/SqsMessageHandler.java | 84 --- .../extensions/sqs/plugin/SqsPlugin.java | 78 --- .../sqs/plugin/SqsPluginConfiguration.java | 30 - .../SqsFifoQueueActionDescriptor.json | 34 -- .../main/resources/SqsPluginDescriptor.json | 30 - .../SqsStandardQueueActionDescriptor.json | 41 -- .../server/extensions/sqs/SqsDemoClient.java | 69 --- .../src/test/resources/logback.xml | 10 - extensions/pom.xml | 46 -- pom.xml | 3 - rule-engine/rule-engine-api/pom.xml | 5 - .../rule/engine/api}/RpcError.java | 2 +- .../api/RuleEngineDeviceRpcResponse.java | 1 - .../rule/engine/api/TbContext.java | 4 - .../engine/api/msg}/DeviceAttributes.java | 2 +- .../DeviceAttributesEventNotificationMsg.java | 2 +- ...eviceCredentialsUpdateNotificationMsg.java | 2 +- .../rule/engine/api/msg}/DeviceMetaData.java | 2 +- .../api/msg}/DeviceNameOrTypeUpdateMsg.java | 2 +- .../msg}/ToDeviceActorNotificationMsg.java | 2 +- rule-engine/rule-engine-components/pom.xml | 14 - .../util/EntitiesTenantIdAsyncLoader.java | 2 - 539 files changed, 1232 insertions(+), 18413 deletions(-) delete mode 100644 application/src/main/java/org/thingsboard/server/actors/plugin/PluginActor.java delete mode 100644 application/src/main/java/org/thingsboard/server/actors/plugin/PluginActorMessageProcessor.java delete mode 100644 application/src/main/java/org/thingsboard/server/actors/plugin/PluginCallbackMessage.java delete mode 100644 application/src/main/java/org/thingsboard/server/actors/plugin/PluginProcessingContext.java delete mode 100644 application/src/main/java/org/thingsboard/server/actors/plugin/PluginTerminationMsg.java delete mode 100644 application/src/main/java/org/thingsboard/server/actors/plugin/RuleToPluginMsgWrapper.java delete mode 100644 application/src/main/java/org/thingsboard/server/actors/plugin/SharedPluginProcessingContext.java delete mode 100644 application/src/main/java/org/thingsboard/server/actors/plugin/TimeoutScheduler.java delete mode 100644 application/src/main/java/org/thingsboard/server/actors/plugin/ValidationCallback.java delete mode 100644 application/src/main/java/org/thingsboard/server/actors/service/RestMsgProcessor.java delete mode 100644 application/src/main/java/org/thingsboard/server/actors/service/WebSocketMsgProcessor.java delete mode 100644 application/src/main/java/org/thingsboard/server/actors/shared/plugin/PluginManager.java delete mode 100644 application/src/main/java/org/thingsboard/server/actors/shared/plugin/SystemPluginManager.java delete mode 100644 application/src/main/java/org/thingsboard/server/actors/shared/plugin/TenantPluginManager.java delete mode 100644 application/src/main/java/org/thingsboard/server/controller/PluginController.java delete mode 100644 application/src/main/java/org/thingsboard/server/controller/RuleController.java rename extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginConstants.java => application/src/main/java/org/thingsboard/server/controller/TbUrlConstants.java (81%) delete mode 100644 application/src/main/java/org/thingsboard/server/controller/plugin/PluginApiController.java delete mode 100644 application/src/main/java/org/thingsboard/server/controller/plugin/PluginNotFoundException.java delete mode 100644 application/src/main/java/org/thingsboard/server/controller/plugin/PluginWebSocketMsgEndpoint.java rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg => application/src/main/java/org/thingsboard/server/service/rpc}/FromDeviceRpcResponse.java (92%) rename application/src/main/java/org/thingsboard/server/{actors/plugin => service/security}/ValidationResult.java (97%) rename application/src/main/java/org/thingsboard/server/{actors/plugin => service/security}/ValidationResultCode.java (88%) rename {extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin => application/src/main/java/org/thingsboard/server/service}/telemetry/AttributeData.java (95%) rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws => application/src/main/java/org/thingsboard/server/service/telemetry}/SessionEvent.java (96%) rename {extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/handlers => application/src/main/java/org/thingsboard/server/service/telemetry}/TelemetryFeature.java (91%) rename {extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin => application/src/main/java/org/thingsboard/server/service}/telemetry/TsData.java (94%) rename {extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin => application/src/main/java/org/thingsboard/server/service}/telemetry/cmd/AttributesSubscriptionCmd.java (84%) rename {extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin => application/src/main/java/org/thingsboard/server/service}/telemetry/cmd/GetHistoryCmd.java (93%) rename {extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin => application/src/main/java/org/thingsboard/server/service}/telemetry/cmd/SubscriptionCmd.java (88%) rename {extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin => application/src/main/java/org/thingsboard/server/service}/telemetry/cmd/TelemetryPluginCmd.java (91%) rename {extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin => application/src/main/java/org/thingsboard/server/service}/telemetry/cmd/TelemetryPluginCmdsWrapper.java (95%) rename {extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin => application/src/main/java/org/thingsboard/server/service}/telemetry/cmd/TimeseriesSubscriptionCmd.java (87%) rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api => application/src/main/java/org/thingsboard/server/service/telemetry}/exception/AccessDeniedException.java (94%) rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api => application/src/main/java/org/thingsboard/server/service/telemetry}/exception/EntityNotFoundException.java (94%) rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api => application/src/main/java/org/thingsboard/server/service/telemetry}/exception/InternalErrorException.java (94%) rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api => application/src/main/java/org/thingsboard/server/service/telemetry}/exception/InvalidParametersException.java (94%) rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api => application/src/main/java/org/thingsboard/server/service/telemetry}/exception/ToErrorResponseEntity.java (93%) rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api => application/src/main/java/org/thingsboard/server/service/telemetry}/exception/UnauthorizedException.java (94%) rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api => application/src/main/java/org/thingsboard/server/service/telemetry}/exception/UncheckedApiException.java (95%) rename {extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin => application/src/main/java/org/thingsboard/server/service}/telemetry/sub/Subscription.java (90%) rename {extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin => application/src/main/java/org/thingsboard/server/service}/telemetry/sub/SubscriptionErrorCode.java (95%) rename {extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin => application/src/main/java/org/thingsboard/server/service}/telemetry/sub/SubscriptionState.java (93%) rename {extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin => application/src/main/java/org/thingsboard/server/service}/telemetry/sub/SubscriptionUpdate.java (94%) delete mode 100644 common/data/src/main/java/org/thingsboard/server/common/data/id/PluginId.java delete mode 100644 common/data/src/main/java/org/thingsboard/server/common/data/id/RuleId.java delete mode 100644 common/data/src/main/java/org/thingsboard/server/common/data/plugin/PluginMetaData.java delete mode 100644 common/data/src/main/java/org/thingsboard/server/common/data/rule/RuleMetaData.java delete mode 100644 common/message/src/main/java/org/thingsboard/server/common/msg/aware/PluginAwareMsg.java delete mode 100644 common/message/src/main/java/org/thingsboard/server/common/msg/aware/RuleAwareMsg.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/nosql/PluginMetaDataEntity.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/nosql/RuleMetaDataEntity.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/PluginMetaDataEntity.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/model/sql/RuleMetaDataEntity.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/plugin/BasePluginService.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/plugin/CassandraBasePluginDao.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/plugin/PluginDao.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/plugin/PluginService.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleService.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/rule/CassandraBaseRuleDao.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/rule/RuleDao.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/rule/RuleService.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDao.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/sql/plugin/PluginMetaDataRepository.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDao.java delete mode 100644 dao/src/main/java/org/thingsboard/server/dao/sql/rule/RuleMetaDataRepository.java delete mode 100644 dao/src/test/java/org/thingsboard/server/dao/service/plugin/BasePluginServiceTest.java delete mode 100644 dao/src/test/java/org/thingsboard/server/dao/service/plugin/nosql/PluginServiceNoSqlTest.java delete mode 100644 dao/src/test/java/org/thingsboard/server/dao/service/plugin/sql/PluginServiceSqlTest.java delete mode 100644 dao/src/test/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDaoTest.java delete mode 100644 dao/src/test/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDaoTest.java delete mode 100644 extensions-api/pom.xml delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Action.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/ConfigurableComponent.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/EmptyComponentConfiguration.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Filter.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Plugin.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Processor.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/configuration/Configurable.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/configuration/Configuration.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/configuration/ConfigurationValidationException.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/AbstractPlugin.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/Plugin.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginAction.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginApiCallSecurityContext.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginCallback.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginContext.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginException.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginInitializationException.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRestMsgHandler.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRpcMsgHandler.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRuleMsgHandler.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultWebsocketMsgHandler.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/RestMsgHandler.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/RpcMsgHandler.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/RuleMsgHandler.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/WebsocketMsgHandler.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/AbstractPluginToRuleMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/AbstractRuleToPluginMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/GetAttributesRequestRuleToPluginMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/GetRequestRuleToPluginMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/PluginToRuleMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ResponsePluginToRuleMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/RpcRequestRuleToPluginMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/RpcResponsePluginToRuleMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/RuleToPluginMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TelemetryUploadRequestRuleToPluginMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ToPluginActorMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ToPluginRpcResponseDeviceMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/UpdateAttributesRequestRuleToPluginMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rest/BasicPluginRestMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rest/PluginRestMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rest/RestRequest.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rpc/PluginRpcMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rpc/RpcMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/BasicPluginWebsocketSessionRef.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/PluginWebsocketSessionRef.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/WsSessionMetaData.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/AbstractPluginWebSocketMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/BinaryPluginWebSocketMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/EmptyPluginWebsocketMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/PingPluginWebsocketMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/PluginWebsocketMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/PongPluginWebsocketMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/SessionEventPluginWebSocketMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/TextPluginWebSocketMsg.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleContext.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleException.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleFilter.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleInitializationException.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleLifecycleComponent.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleProcessingMetaData.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleProcessor.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/SimpleRuleLifecycleComponent.java delete mode 100644 extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/ToRuleActorMsg.java delete mode 100644 extensions-api/src/main/resources/EmptyJsonDescriptor.json delete mode 100644 extensions-core/pom.xml delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/mail/SendMailAction.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/mail/SendMailActionConfiguration.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/mail/SendMailActionMsg.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/mail/SendMailRuleToPluginActionMsg.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/rpc/RpcPluginAction.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/rpc/ServerSideRpcCallAction.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/rpc/ServerSideRpcCallActionConfiguration.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/rpc/ServerSideRpcCallActionMsg.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/rpc/ServerSideRpcCallRuleToPluginActionMsg.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/telemetry/TelemetryPluginAction.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/telemetry/TelemetryPluginActionConfiguration.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/template/AbstractTemplatePluginAction.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/template/TemplateActionConfiguration.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/BasicJsFilter.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceAttributesFilter.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceAttributesFilterConfiguration.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceTelemetryFilter.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceTypeFilter.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/DeviceTypeFilterConfiguration.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/JsFilterConfiguration.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/MethodNameFilter.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/MethodNameFilterConfiguration.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/MsgTypeFilter.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/MsgTypeFilterConfiguration.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/filter/NashornJsEvaluator.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/KeyValuePluginProperties.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/mail/MailPlugin.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/mail/MailPluginConfiguration.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/messaging/DeviceMessagingPlugin.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/messaging/DeviceMessagingPluginConfiguration.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/messaging/DeviceMessagingRuleMsgHandler.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/messaging/PendingRpcRequestMetadata.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/SubscriptionManager.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/TelemetryStoragePlugin.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/handlers/BiPluginCallBack.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/handlers/TelemetryRestMsgHandler.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/handlers/TelemetryRpcMsgHandler.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/handlers/TelemetryRuleMsgHandler.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/telemetry/handlers/TelemetryWebsocketMsgHandler.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/time/TimePlugin.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/plugin/time/TimePluginConfiguration.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmDeduplicationProcessor.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmDeduplicationProcessorConfiguration.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmProcessor.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/processor/AlarmProcessorConfiguration.java delete mode 100644 extensions-core/src/main/java/org/thingsboard/server/extensions/core/utils/VelocityUtils.java delete mode 100644 extensions-core/src/main/proto/telemetry.proto delete mode 100644 extensions-core/src/main/resources/AlarmDeduplicationProcessorDescriptor.json delete mode 100644 extensions-core/src/main/resources/AlarmProcessorDescriptor.json delete mode 100644 extensions-core/src/main/resources/DeviceMessagingPluginDescriptor.json delete mode 100644 extensions-core/src/main/resources/DeviceTypeFilterDescriptor.json delete mode 100644 extensions-core/src/main/resources/JsFilterDescriptor.json delete mode 100644 extensions-core/src/main/resources/MailPluginData.json delete mode 100644 extensions-core/src/main/resources/MailPluginDescriptor.json delete mode 100644 extensions-core/src/main/resources/MethodNameFilterDescriptor.json delete mode 100644 extensions-core/src/main/resources/MsgTypeFilterDescriptor.json delete mode 100644 extensions-core/src/main/resources/RpcPluginData.json delete mode 100644 extensions-core/src/main/resources/RpcPluginDescriptor.json delete mode 100644 extensions-core/src/main/resources/SendMailActionData.json delete mode 100644 extensions-core/src/main/resources/SendMailActionDescriptor.json delete mode 100644 extensions-core/src/main/resources/ServerSideRpcCallActionDescriptor.json delete mode 100644 extensions-core/src/main/resources/TelemetryPluginActionDescriptor.json delete mode 100644 extensions-core/src/main/resources/TimePluginDescriptor.json delete mode 100644 extensions-core/src/test/java/org/thingsboard/server/extensions/core/filter/DeviceAttributesFilterTest.java delete mode 100644 extensions/extension-kafka/pom.xml delete mode 100644 extensions/extension-kafka/src/assembly/extension.xml delete mode 100644 extensions/extension-kafka/src/main/java/org/thingsboard/server/extensions/kafka/action/KafkaActionMsg.java delete mode 100644 extensions/extension-kafka/src/main/java/org/thingsboard/server/extensions/kafka/action/KafkaActionPayload.java delete mode 100644 extensions/extension-kafka/src/main/java/org/thingsboard/server/extensions/kafka/action/KafkaPluginAction.java delete mode 100644 extensions/extension-kafka/src/main/java/org/thingsboard/server/extensions/kafka/action/KafkaPluginActionConfiguration.java delete mode 100644 extensions/extension-kafka/src/main/java/org/thingsboard/server/extensions/kafka/plugin/KafkaMsgHandler.java delete mode 100644 extensions/extension-kafka/src/main/java/org/thingsboard/server/extensions/kafka/plugin/KafkaPlugin.java delete mode 100644 extensions/extension-kafka/src/main/java/org/thingsboard/server/extensions/kafka/plugin/KafkaPluginConfiguration.java delete mode 100644 extensions/extension-kafka/src/main/resources/KafkaActionDescriptor.json delete mode 100644 extensions/extension-kafka/src/main/resources/KafkaPluginDescriptor.json delete mode 100644 extensions/extension-kafka/src/test/java/org/thingsboard/server/extensions/kafka/KafkaDemoClient.java delete mode 100644 extensions/extension-kafka/src/test/resources/logback.xml delete mode 100644 extensions/extension-mqtt/pom.xml delete mode 100644 extensions/extension-mqtt/src/assembly/extension.xml delete mode 100644 extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttActionMsg.java delete mode 100644 extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttActionPayload.java delete mode 100644 extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttPluginAction.java delete mode 100644 extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttPluginActionConfiguration.java delete mode 100644 extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/plugin/MqttMsgHandler.java delete mode 100644 extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/plugin/MqttPlugin.java delete mode 100644 extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/plugin/MqttPluginConfiguration.java delete mode 100644 extensions/extension-mqtt/src/main/resources/MqttActionDescriptor.json delete mode 100644 extensions/extension-mqtt/src/main/resources/MqttPluginDescriptor.json delete mode 100644 extensions/extension-rabbitmq/pom.xml delete mode 100644 extensions/extension-rabbitmq/src/assembly/extension.xml delete mode 100644 extensions/extension-rabbitmq/src/main/java/org/thingsboard/server/extensions/rabbitmq/action/RabbitMqActionMsg.java delete mode 100644 extensions/extension-rabbitmq/src/main/java/org/thingsboard/server/extensions/rabbitmq/action/RabbitMqActionPayload.java delete mode 100644 extensions/extension-rabbitmq/src/main/java/org/thingsboard/server/extensions/rabbitmq/action/RabbitMqPluginAction.java delete mode 100644 extensions/extension-rabbitmq/src/main/java/org/thingsboard/server/extensions/rabbitmq/action/RabbitMqPluginActionConfiguration.java delete mode 100644 extensions/extension-rabbitmq/src/main/java/org/thingsboard/server/extensions/rabbitmq/plugin/RabbitMqMsgHandler.java delete mode 100644 extensions/extension-rabbitmq/src/main/java/org/thingsboard/server/extensions/rabbitmq/plugin/RabbitMqPlugin.java delete mode 100644 extensions/extension-rabbitmq/src/main/java/org/thingsboard/server/extensions/rabbitmq/plugin/RabbitMqPluginConfiguration.java delete mode 100644 extensions/extension-rabbitmq/src/main/resources/RabbitMqActionDescriptor.json delete mode 100644 extensions/extension-rabbitmq/src/main/resources/RabbitMqPluginDescriptor.json delete mode 100644 extensions/extension-rabbitmq/src/test/java/org/thingsboard/server/extensions/rabbitmq/RabbitMqDemoClient.java delete mode 100644 extensions/extension-rest-api-call/pom.xml delete mode 100644 extensions/extension-rest-api-call/src/assembly/extension.xml delete mode 100644 extensions/extension-rest-api-call/src/main/java/org/thingsboard/server/extensions/rest/action/RestApiCallActionMsg.java delete mode 100644 extensions/extension-rest-api-call/src/main/java/org/thingsboard/server/extensions/rest/action/RestApiCallActionPayload.java delete mode 100644 extensions/extension-rest-api-call/src/main/java/org/thingsboard/server/extensions/rest/action/RestApiCallPluginAction.java delete mode 100644 extensions/extension-rest-api-call/src/main/java/org/thingsboard/server/extensions/rest/action/RestApiCallPluginActionConfiguration.java delete mode 100644 extensions/extension-rest-api-call/src/main/java/org/thingsboard/server/extensions/rest/plugin/RestApiCallMsgHandler.java delete mode 100644 extensions/extension-rest-api-call/src/main/java/org/thingsboard/server/extensions/rest/plugin/RestApiCallPlugin.java delete mode 100644 extensions/extension-rest-api-call/src/main/java/org/thingsboard/server/extensions/rest/plugin/RestApiCallPluginConfiguration.java delete mode 100644 extensions/extension-rest-api-call/src/main/resources/RestApiCallActionDescriptor.json delete mode 100644 extensions/extension-rest-api-call/src/main/resources/RestApiCallPluginDescriptor.json delete mode 100644 extensions/extension-rest-api-call/src/test/java/org/thingsboard/server/extensions/rest/RestApiCallDemoClient.java delete mode 100644 extensions/extension-sns/pom.xml delete mode 100644 extensions/extension-sns/src/assembly/extension.xml delete mode 100644 extensions/extension-sns/src/main/java/org/thingsboard/server/extensions/sns/action/SnsTopicActionMsg.java delete mode 100644 extensions/extension-sns/src/main/java/org/thingsboard/server/extensions/sns/action/SnsTopicActionPayload.java delete mode 100644 extensions/extension-sns/src/main/java/org/thingsboard/server/extensions/sns/action/SnsTopicPluginAction.java delete mode 100644 extensions/extension-sns/src/main/java/org/thingsboard/server/extensions/sns/action/SnsTopicPluginActionConfiguration.java delete mode 100644 extensions/extension-sns/src/main/java/org/thingsboard/server/extensions/sns/plugin/SnsMessageHandler.java delete mode 100644 extensions/extension-sns/src/main/java/org/thingsboard/server/extensions/sns/plugin/SnsPlugin.java delete mode 100644 extensions/extension-sns/src/main/java/org/thingsboard/server/extensions/sns/plugin/SnsPluginConfiguration.java delete mode 100644 extensions/extension-sns/src/main/resources/SnsPluginDescriptor.json delete mode 100644 extensions/extension-sns/src/main/resources/SnsTopicActionDescriptor.json delete mode 100644 extensions/extension-sqs/pom.xml delete mode 100644 extensions/extension-sqs/src/assembly/extension.xml delete mode 100644 extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/fifo/SqsFifoQueueActionMsg.java delete mode 100644 extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/fifo/SqsFifoQueueActionPayload.java delete mode 100644 extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/fifo/SqsFifoQueuePluginAction.java delete mode 100644 extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/fifo/SqsFifoQueuePluginActionConfiguration.java delete mode 100644 extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/standard/SqsStandardQueueActionMsg.java delete mode 100644 extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/standard/SqsStandardQueueActionPayload.java delete mode 100644 extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/standard/SqsStandardQueuePluginAction.java delete mode 100644 extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/action/standard/SqsStandardQueuePluginActionConfiguration.java delete mode 100644 extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/plugin/SqsMessageHandler.java delete mode 100644 extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/plugin/SqsPlugin.java delete mode 100644 extensions/extension-sqs/src/main/java/org/thingsboard/server/extensions/sqs/plugin/SqsPluginConfiguration.java delete mode 100644 extensions/extension-sqs/src/main/resources/SqsFifoQueueActionDescriptor.json delete mode 100644 extensions/extension-sqs/src/main/resources/SqsPluginDescriptor.json delete mode 100644 extensions/extension-sqs/src/main/resources/SqsStandardQueueActionDescriptor.json delete mode 100644 extensions/extension-sqs/src/test/java/org/thingsboard/server/extensions/sqs/SqsDemoClient.java delete mode 100644 extensions/extension-sqs/src/test/resources/logback.xml delete mode 100644 extensions/pom.xml rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg => rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api}/RpcError.java (92%) rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api/device => rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/msg}/DeviceAttributes.java (98%) rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api/device => rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/msg}/DeviceAttributesEventNotificationMsg.java (97%) rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api/device => rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/msg}/DeviceCredentialsUpdateNotificationMsg.java (95%) rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api/device => rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/msg}/DeviceMetaData.java (94%) rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api/device => rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/msg}/DeviceNameOrTypeUpdateMsg.java (95%) rename {extensions-api/src/main/java/org/thingsboard/server/extensions/api/device => rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/msg}/ToDeviceActorNotificationMsg.java (94%) 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>, ? 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 events = eventService.findEvents(tenantId, ruleId, DataConstants.STATS, + TimePageData events = eventService.findEvents(tenantId, customerId, DataConstants.STATS, new TimePageLink(2, startTime, endTime, false)); Assert.assertNotNull(events.getData()); @@ -119,7 +119,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); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/AdminSettingsServiceNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/AdminSettingsServiceNoSqlTest.java index c30f864bad..97e9e81ab8 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/AdminSettingsServiceNoSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/AdminSettingsServiceNoSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.nosql; -import org.thingsboard.server.dao.service.DaoNoSqlTest; import org.thingsboard.server.dao.service.BaseAdminSettingsServiceTest; +import org.thingsboard.server.dao.service.DaoNoSqlTest; @DaoNoSqlTest public class AdminSettingsServiceNoSqlTest extends BaseAdminSettingsServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/AlarmServiceNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/AlarmServiceNoSqlTest.java index f822adbcfa..499d3c6427 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/AlarmServiceNoSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/AlarmServiceNoSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.nosql; -import org.thingsboard.server.dao.service.DaoNoSqlTest; import org.thingsboard.server.dao.service.BaseAlarmServiceTest; +import org.thingsboard.server.dao.service.DaoNoSqlTest; @DaoNoSqlTest public class AlarmServiceNoSqlTest extends BaseAlarmServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/AssetServiceNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/AssetServiceNoSqlTest.java index 3887788b0b..9543560140 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/AssetServiceNoSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/AssetServiceNoSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.nosql; -import org.thingsboard.server.dao.service.DaoNoSqlTest; import org.thingsboard.server.dao.service.BaseAssetServiceTest; +import org.thingsboard.server.dao.service.DaoNoSqlTest; @DaoNoSqlTest public class AssetServiceNoSqlTest extends BaseAssetServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/CustomerServiceNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/CustomerServiceNoSqlTest.java index 99c77de1f7..905b723d8c 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/CustomerServiceNoSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/CustomerServiceNoSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.nosql; -import org.thingsboard.server.dao.service.DaoNoSqlTest; import org.thingsboard.server.dao.service.BaseCustomerServiceTest; +import org.thingsboard.server.dao.service.DaoNoSqlTest; @DaoNoSqlTest public class CustomerServiceNoSqlTest extends BaseCustomerServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DashboardServiceNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DashboardServiceNoSqlTest.java index 3234805a8d..9712ee896e 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DashboardServiceNoSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DashboardServiceNoSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.nosql; -import org.thingsboard.server.dao.service.DaoNoSqlTest; import org.thingsboard.server.dao.service.BaseDashboardServiceTest; +import org.thingsboard.server.dao.service.DaoNoSqlTest; @DaoNoSqlTest public class DashboardServiceNoSqlTest extends BaseDashboardServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DeviceCredentialCacheNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DeviceCredentialCacheNoSqlTest.java index 218993f42b..7c1356d28a 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DeviceCredentialCacheNoSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DeviceCredentialCacheNoSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.nosql; -import org.thingsboard.server.dao.service.DaoNoSqlTest; import org.thingsboard.server.dao.service.BaseDeviceCredentialsCacheTest; +import org.thingsboard.server.dao.service.DaoNoSqlTest; @DaoNoSqlTest public class DeviceCredentialCacheNoSqlTest extends BaseDeviceCredentialsCacheTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DeviceCredentialServiceNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DeviceCredentialServiceNoSqlTest.java index a12658e185..6b8cf64f03 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DeviceCredentialServiceNoSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DeviceCredentialServiceNoSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.nosql; -import org.thingsboard.server.dao.service.DaoNoSqlTest; import org.thingsboard.server.dao.service.BaseDeviceCredentialsServiceTest; +import org.thingsboard.server.dao.service.DaoNoSqlTest; @DaoNoSqlTest public class DeviceCredentialServiceNoSqlTest extends BaseDeviceCredentialsServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DeviceServiceNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DeviceServiceNoSqlTest.java index 5d012782b3..99e327ca0e 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DeviceServiceNoSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/DeviceServiceNoSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.nosql; -import org.thingsboard.server.dao.service.DaoNoSqlTest; import org.thingsboard.server.dao.service.BaseDeviceServiceTest; +import org.thingsboard.server.dao.service.DaoNoSqlTest; @DaoNoSqlTest public class DeviceServiceNoSqlTest extends BaseDeviceServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/RelationServiceNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/RelationServiceNoSqlTest.java index 48d20262a9..74728fbb6d 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/RelationServiceNoSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/RelationServiceNoSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.nosql; -import org.thingsboard.server.dao.service.DaoNoSqlTest; import org.thingsboard.server.dao.service.BaseRelationServiceTest; +import org.thingsboard.server.dao.service.DaoNoSqlTest; @DaoNoSqlTest public class RelationServiceNoSqlTest extends BaseRelationServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/TenantServiceNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/TenantServiceNoSqlTest.java index e19cd51e84..de474fd341 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/TenantServiceNoSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/TenantServiceNoSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.nosql; -import org.thingsboard.server.dao.service.DaoNoSqlTest; import org.thingsboard.server.dao.service.BaseTenantServiceTest; +import org.thingsboard.server.dao.service.DaoNoSqlTest; @DaoNoSqlTest public class TenantServiceNoSqlTest extends BaseTenantServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/UserServiceNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/UserServiceNoSqlTest.java index 0aa7175e24..af3c497436 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/UserServiceNoSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/UserServiceNoSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.nosql; -import org.thingsboard.server.dao.service.DaoNoSqlTest; import org.thingsboard.server.dao.service.BaseUserServiceTest; +import org.thingsboard.server.dao.service.DaoNoSqlTest; @DaoNoSqlTest public class UserServiceNoSqlTest extends BaseUserServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/WidgetTypeServiceNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/WidgetTypeServiceNoSqlTest.java index 98d867cd3c..90399c487e 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/WidgetTypeServiceNoSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/WidgetTypeServiceNoSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.nosql; -import org.thingsboard.server.dao.service.DaoNoSqlTest; import org.thingsboard.server.dao.service.BaseWidgetTypeServiceTest; +import org.thingsboard.server.dao.service.DaoNoSqlTest; @DaoNoSqlTest public class WidgetTypeServiceNoSqlTest extends BaseWidgetTypeServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/WidgetsBundleServiceNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/WidgetsBundleServiceNoSqlTest.java index 00b131decc..79b5507156 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/WidgetsBundleServiceNoSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/WidgetsBundleServiceNoSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.nosql; -import org.thingsboard.server.dao.service.DaoNoSqlTest; import org.thingsboard.server.dao.service.BaseWidgetsBundleServiceTest; +import org.thingsboard.server.dao.service.DaoNoSqlTest; @DaoNoSqlTest public class WidgetsBundleServiceNoSqlTest extends BaseWidgetsBundleServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/plugin/BasePluginServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/plugin/BasePluginServiceTest.java deleted file mode 100644 index d9f551fb79..0000000000 --- a/dao/src/test/java/org/thingsboard/server/dao/service/plugin/BasePluginServiceTest.java +++ /dev/null @@ -1,114 +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.service.plugin; - -import com.datastax.driver.core.utils.UUIDs; -import lombok.extern.slf4j.Slf4j; -import org.junit.Assert; -import org.junit.Test; -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 org.thingsboard.server.dao.model.ModelConstants; -import org.thingsboard.server.dao.service.AbstractServiceTest; - -import java.util.UUID; - -@Slf4j -public abstract class BasePluginServiceTest extends AbstractServiceTest { - - @Test - public void savePlugin() throws Exception { - PluginMetaData pluginMetaData = pluginService.savePlugin(generatePlugin(null, null)); - Assert.assertNotNull(pluginMetaData.getId()); - Assert.assertNotNull(pluginMetaData.getAdditionalInfo()); - - pluginMetaData.setAdditionalInfo(mapper.readTree("{\"description\":\"test\"}")); - PluginMetaData newPluginMetaData = pluginService.savePlugin(pluginMetaData); - Assert.assertEquals(pluginMetaData.getAdditionalInfo(), newPluginMetaData.getAdditionalInfo()); - - } - - @Test - public void findPluginById() throws Exception { - PluginMetaData expected = pluginService.savePlugin(generatePlugin(null, null)); - Assert.assertNotNull(expected.getId()); - PluginMetaData found = pluginService.findPluginById(expected.getId()); - Assert.assertEquals(expected, found); - } - - @Test - public void findPluginByTenantIdAndApiToken() throws Exception { - String token = UUID.randomUUID().toString(); - TenantId tenantId = new TenantId(UUIDs.timeBased()); - pluginService.savePlugin(generatePlugin(null, null)); - pluginService.savePlugin(generatePlugin(tenantId, null)); - pluginService.savePlugin(generatePlugin(tenantId, null)); - pluginService.savePlugin(generatePlugin(tenantId, null)); - PluginMetaData expected = pluginService.savePlugin(generatePlugin(tenantId, token)); - Assert.assertNotNull(expected.getId()); - PluginMetaData found = pluginService.findPluginByApiToken(token); - Assert.assertEquals(expected, found); - } - - @Test - public void findSystemPlugins() throws Exception { - TenantId systemTenant = new TenantId(ModelConstants.NULL_UUID); // system tenant id - pluginService.savePlugin(generatePlugin(null, null)); - pluginService.savePlugin(generatePlugin(null, null)); - pluginService.savePlugin(generatePlugin(systemTenant, null)); - pluginService.savePlugin(generatePlugin(systemTenant, null)); - TextPageData found = pluginService.findSystemPlugins(new TextPageLink(100)); - Assert.assertEquals(2, found.getData().size()); - Assert.assertFalse(found.hasNext()); - } - - @Test - public void findTenantPlugins() throws Exception { - TenantId tenantId = new TenantId(UUIDs.timeBased()); - pluginService.savePlugin(generatePlugin(null, null)); - pluginService.savePlugin(generatePlugin(null, null)); - pluginService.savePlugin(generatePlugin(tenantId, null)); - pluginService.savePlugin(generatePlugin(tenantId, null)); - pluginService.savePlugin(generatePlugin(tenantId, null)); - TextPageData found = pluginService.findTenantPlugins(tenantId, new TextPageLink(100)); - Assert.assertEquals(3, found.getData().size()); - } - - @Test - public void deletePluginById() throws Exception { - PluginMetaData expected = pluginService.savePlugin(generatePlugin(null, null)); - Assert.assertNotNull(expected.getId()); - pluginService.deletePluginById(expected.getId()); - PluginMetaData found = pluginService.findPluginById(expected.getId()); - Assert.assertNull(found); - } - - @Test - public void deletePluginsByTenantId() throws Exception { - TenantId tenantId = new TenantId(UUIDs.timeBased()); - pluginService.savePlugin(generatePlugin(tenantId, null)); - pluginService.savePlugin(generatePlugin(tenantId, null)); - pluginService.savePlugin(generatePlugin(tenantId, null)); - TextPageData found = pluginService.findTenantPlugins(tenantId, new TextPageLink(100)); - Assert.assertEquals(3, found.getData().size()); - pluginService.deletePluginsByTenantId(tenantId); - found = pluginService.findTenantPlugins(tenantId, new TextPageLink(100)); - Assert.assertEquals(0, found.getData().size()); - } - -} \ No newline at end of file diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/plugin/nosql/PluginServiceNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/plugin/nosql/PluginServiceNoSqlTest.java deleted file mode 100644 index 84539fe23f..0000000000 --- a/dao/src/test/java/org/thingsboard/server/dao/service/plugin/nosql/PluginServiceNoSqlTest.java +++ /dev/null @@ -1,23 +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.service.plugin.nosql; - -import org.thingsboard.server.dao.service.DaoNoSqlTest; -import org.thingsboard.server.dao.service.plugin.BasePluginServiceTest; - -@DaoNoSqlTest -public class PluginServiceNoSqlTest extends BasePluginServiceTest { -} diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/plugin/sql/PluginServiceSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/plugin/sql/PluginServiceSqlTest.java deleted file mode 100644 index 4bd96f3b5a..0000000000 --- a/dao/src/test/java/org/thingsboard/server/dao/service/plugin/sql/PluginServiceSqlTest.java +++ /dev/null @@ -1,23 +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.service.plugin.sql; - -import org.thingsboard.server.dao.service.DaoSqlTest; -import org.thingsboard.server.dao.service.plugin.BasePluginServiceTest; - -@DaoSqlTest -public class PluginServiceSqlTest extends BasePluginServiceTest { -} diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/sql/AdminSettingsServiceSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/sql/AdminSettingsServiceSqlTest.java index d5a69c06d0..aa2015fb59 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/sql/AdminSettingsServiceSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/AdminSettingsServiceSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.sql; -import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.service.BaseAdminSettingsServiceTest; +import org.thingsboard.server.dao.service.DaoSqlTest; @DaoSqlTest public class AdminSettingsServiceSqlTest extends BaseAdminSettingsServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/sql/AlarmServiceSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/sql/AlarmServiceSqlTest.java index 38d60800c9..7b2d3a7e92 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/sql/AlarmServiceSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/AlarmServiceSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.sql; -import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.service.BaseAlarmServiceTest; +import org.thingsboard.server.dao.service.DaoSqlTest; @DaoSqlTest public class AlarmServiceSqlTest extends BaseAlarmServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/sql/AssetServiceSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/sql/AssetServiceSqlTest.java index 3020cec42a..fc77fe38a8 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/sql/AssetServiceSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/AssetServiceSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.sql; -import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.service.BaseAssetServiceTest; +import org.thingsboard.server.dao.service.DaoSqlTest; @DaoSqlTest public class AssetServiceSqlTest extends BaseAssetServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/sql/CustomerServiceSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/sql/CustomerServiceSqlTest.java index c900cc4909..48b4bac961 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/sql/CustomerServiceSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/CustomerServiceSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.sql; -import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.service.BaseCustomerServiceTest; +import org.thingsboard.server.dao.service.DaoSqlTest; @DaoSqlTest public class CustomerServiceSqlTest extends BaseCustomerServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/sql/DashboardServiceSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/sql/DashboardServiceSqlTest.java index 66aee43ecf..4c6a2bbf39 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/sql/DashboardServiceSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/DashboardServiceSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.sql; -import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.service.BaseDashboardServiceTest; +import org.thingsboard.server.dao.service.DaoSqlTest; @DaoSqlTest public class DashboardServiceSqlTest extends BaseDashboardServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/sql/DeviceCredentialsCacheSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/sql/DeviceCredentialsCacheSqlTest.java index 27febf8219..2f534f6a79 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/sql/DeviceCredentialsCacheSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/DeviceCredentialsCacheSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.sql; -import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.service.BaseDeviceCredentialsCacheTest; +import org.thingsboard.server.dao.service.DaoSqlTest; @DaoSqlTest public class DeviceCredentialsCacheSqlTest extends BaseDeviceCredentialsCacheTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/sql/DeviceCredentialsServiceSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/sql/DeviceCredentialsServiceSqlTest.java index f44c004f51..78e84ebf63 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/sql/DeviceCredentialsServiceSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/DeviceCredentialsServiceSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.sql; -import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.service.BaseDeviceCredentialsServiceTest; +import org.thingsboard.server.dao.service.DaoSqlTest; @DaoSqlTest public class DeviceCredentialsServiceSqlTest extends BaseDeviceCredentialsServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/sql/DeviceServiceSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/sql/DeviceServiceSqlTest.java index f076237325..5576a3795a 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/sql/DeviceServiceSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/DeviceServiceSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.sql; -import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.service.BaseDeviceServiceTest; +import org.thingsboard.server.dao.service.DaoSqlTest; @DaoSqlTest public class DeviceServiceSqlTest extends BaseDeviceServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/sql/RelationServiceSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/sql/RelationServiceSqlTest.java index b2410db223..a88ecd2d0a 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/sql/RelationServiceSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/RelationServiceSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.sql; -import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.service.BaseRelationServiceTest; +import org.thingsboard.server.dao.service.DaoSqlTest; @DaoSqlTest public class RelationServiceSqlTest extends BaseRelationServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/sql/TenantServiceSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/sql/TenantServiceSqlTest.java index 30c2d8ad1d..abd847fc39 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/sql/TenantServiceSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/TenantServiceSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.sql; -import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.service.BaseTenantServiceTest; +import org.thingsboard.server.dao.service.DaoSqlTest; @DaoSqlTest public class TenantServiceSqlTest extends BaseTenantServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/sql/UserServiceSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/sql/UserServiceSqlTest.java index 2e9007cea5..b81c0be984 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/sql/UserServiceSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/UserServiceSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.sql; -import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.service.BaseUserServiceTest; +import org.thingsboard.server.dao.service.DaoSqlTest; @DaoSqlTest public class UserServiceSqlTest extends BaseUserServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/sql/WidgetTypeServiceSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/sql/WidgetTypeServiceSqlTest.java index de2b0e6007..03b188c6dc 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/sql/WidgetTypeServiceSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/WidgetTypeServiceSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.sql; -import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.service.BaseWidgetTypeServiceTest; +import org.thingsboard.server.dao.service.DaoSqlTest; @DaoSqlTest public class WidgetTypeServiceSqlTest extends BaseWidgetTypeServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/sql/WidgetsBundleServiceSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/sql/WidgetsBundleServiceSqlTest.java index 79a7e7b8b4..0b78badd22 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/sql/WidgetsBundleServiceSqlTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/WidgetsBundleServiceSqlTest.java @@ -15,8 +15,8 @@ */ package org.thingsboard.server.dao.service.sql; -import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.dao.service.BaseWidgetsBundleServiceTest; +import org.thingsboard.server.dao.service.DaoSqlTest; @DaoSqlTest public class WidgetsBundleServiceSqlTest extends BaseWidgetsBundleServiceTest { diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java index 0cb3f7fbdd..f045bf112f 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java @@ -20,7 +20,15 @@ import lombok.extern.slf4j.Slf4j; import org.junit.Assert; import org.junit.Test; import org.thingsboard.server.common.data.id.DeviceId; -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.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.service.AbstractServiceTest; import java.util.ArrayList; diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/asset/JpaAssetDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/asset/JpaAssetDaoTest.java index 19674f8982..8139c3b104 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/asset/JpaAssetDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/asset/JpaAssetDaoTest.java @@ -35,7 +35,9 @@ import java.util.UUID; import java.util.concurrent.ExecutionException; import static junit.framework.TestCase.assertFalse; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; /** * Created by Valerii Sosliuk on 5/21/2017. diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDaoTest.java index 9874efff77..cdc5515164 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDaoTest.java @@ -41,23 +41,23 @@ public class JpaBaseComponentDescriptorDaoTest extends AbstractJpaDaoTest { @Test public void findByType() { for (int i = 0; i < 20; i++) { - createComponentDescriptor(ComponentType.PLUGIN, ComponentScope.SYSTEM, i); + createComponentDescriptor(ComponentType.FILTER, ComponentScope.SYSTEM, i); createComponentDescriptor(ComponentType.ACTION, ComponentScope.TENANT, i + 20); } TextPageLink pageLink1 = new TextPageLink(15, "COMPONENT_"); - List components1 = componentDescriptorDao.findByTypeAndPageLink(ComponentType.PLUGIN, pageLink1); + List components1 = componentDescriptorDao.findByTypeAndPageLink(ComponentType.FILTER, pageLink1); assertEquals(15, components1.size()); TextPageLink pageLink2 = new TextPageLink(15, "COMPONENT_", components1.get(14).getId().getId(), null); - List components2 = componentDescriptorDao.findByTypeAndPageLink(ComponentType.PLUGIN, pageLink2); + List components2 = componentDescriptorDao.findByTypeAndPageLink(ComponentType.FILTER, pageLink2); assertEquals(5, components2.size()); } @Test public void findByTypeAndSocpe() { for (int i = 0; i < 20; i++) { - createComponentDescriptor(ComponentType.PLUGIN, ComponentScope.SYSTEM, i); + createComponentDescriptor(ComponentType.ENRICHMENT, ComponentScope.SYSTEM, i); createComponentDescriptor(ComponentType.ACTION, ComponentScope.TENANT, i + 20); createComponentDescriptor(ComponentType.FILTER, ComponentScope.SYSTEM, i + 40); } diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDaoTest.java index aa80339ef8..0d48d43c36 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/dashboard/JpaDashboardInfoDaoTest.java @@ -20,7 +20,6 @@ import org.junit.Assert; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.thingsboard.server.common.data.DashboardInfo; -import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DashboardId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.page.TextPageLink; diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDaoTest.java index 67841f5a53..84ae307c05 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDaoTest.java @@ -36,7 +36,10 @@ import java.util.List; import java.util.Optional; import java.util.UUID; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import static org.thingsboard.server.common.data.DataConstants.ALARM; import static org.thingsboard.server.common.data.DataConstants.STATS; diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDaoTest.java deleted file mode 100644 index 792031dcfd..0000000000 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/plugin/JpaBasePluginDaoTest.java +++ /dev/null @@ -1,102 +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 com.datastax.driver.core.utils.UUIDs; -import com.github.springtestdbunit.annotation.DatabaseSetup; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; -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.AbstractJpaDaoTest; -import org.thingsboard.server.dao.plugin.PluginDao; - -import java.util.List; -import java.util.UUID; - -import static org.junit.Assert.assertEquals; - -/** - * Created by Valerii Sosliuk on 5/1/2017. - */ -public class JpaBasePluginDaoTest extends AbstractJpaDaoTest { - - @Autowired - private PluginDao pluginDao; - - @Test - @DatabaseSetup("classpath:dbunit/empty_dataset.xml") - public void testFindByTenantIdAndPageLink() { - UUID tenantId1 = UUIDs.timeBased(); - UUID tenantId2 = UUIDs.timeBased(); - createPluginsTwoTenants(tenantId1, tenantId2, "plugin_"); - List rules1 = pluginDao.findByTenantIdAndPageLink( - new TenantId(tenantId1), new TextPageLink(20, "plugin_")); - assertEquals(20, rules1.size()); - - List rules2 = pluginDao.findByTenantIdAndPageLink(new TenantId(tenantId1), - new TextPageLink(20, "plugin_", rules1.get(19).getId().getId(), null)); - assertEquals(10, rules2.size()); - - List rules3 = pluginDao.findByTenantIdAndPageLink(new TenantId(tenantId1), - new TextPageLink(20, "plugin_", rules2.get(9).getId().getId(), null)); - assertEquals(0, rules3.size()); - } - - @Test - @DatabaseSetup(value = "classpath:dbunit/empty_dataset.xml") - public void testFindAllTenantRulesByTenantId() { - UUID tenantId1 = UUIDs.timeBased(); - UUID tenantId2 = UUIDs.timeBased(); - createTenantsAndSystemPlugins(tenantId1, tenantId2, "name_"); - List rules1 = pluginDao.findAllTenantPluginsByTenantId( - tenantId1, new TextPageLink(40, "name_")); - assertEquals(40, rules1.size()); - - List rules2 = pluginDao.findAllTenantPluginsByTenantId(tenantId1, - new TextPageLink(40, "name_", rules1.get(19).getId().getId(), null)); - assertEquals(20, rules2.size()); - - List rules3 = pluginDao.findAllTenantPluginsByTenantId(tenantId1, - new TextPageLink(40, "name_", rules2.get(19).getId().getId(), null)); - assertEquals(0, rules3.size()); - } - - private void createTenantsAndSystemPlugins(UUID tenantId1, UUID tenantId2, String namePrefix) { - for (int i = 0; i < 40; i++) { - createPlugin(tenantId1, namePrefix, i); - createPlugin(tenantId2, namePrefix, i); - createPlugin(null, namePrefix, i); - } - } - - private void createPluginsTwoTenants(UUID tenantId1, UUID tenantId2, String namePrefix) { - for (int i = 0; i < 30; i++) { - createPlugin(tenantId1, namePrefix, i); - createPlugin(tenantId2, namePrefix, i); - } - } - - private void createPlugin(UUID tenantId, String namePrefix, int i) { - PluginMetaData plugin = new PluginMetaData(); - plugin.setId(new PluginId(UUIDs.timeBased())); - plugin.setTenantId(new TenantId(tenantId)); - plugin.setName(namePrefix + i); - pluginDao.save(plugin); - } -} diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDaoTest.java deleted file mode 100644 index 16b6965dd6..0000000000 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/rule/JpaBaseRuleDaoTest.java +++ /dev/null @@ -1,156 +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 com.datastax.driver.core.utils.UUIDs; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.github.springtestdbunit.annotation.DatabaseSetup; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; -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.AbstractJpaDaoTest; -import org.thingsboard.server.dao.rule.RuleDao; - -import java.io.IOException; -import java.util.List; -import java.util.UUID; - -import static org.junit.Assert.*; - -/** - * Created by Valerii Sosliuk on 4/30/2017. - */ -public class JpaBaseRuleDaoTest extends AbstractJpaDaoTest { - - @Autowired - private RuleDao ruleDao; - - @Test - @DatabaseSetup("classpath:dbunit/empty_dataset.xml") - public void testSave() throws IOException { - UUID id = UUIDs.timeBased(); - RuleMetaData ruleMetaData = getRuleMetaData(id); - String filters = "{\"filters\":\"value-1\"}"; - String processor = "{\"processor\":\"value-2\"}"; - String action = "{\"action\":\"value-3\"}"; - String additionalInfo = "{\"additionalInfo\":\"value-4\"}"; - ObjectMapper mapper = new ObjectMapper(); - ruleMetaData.setFilters(mapper.readTree(filters)); - ruleMetaData.setProcessor(mapper.readTree(processor)); - ruleMetaData.setAction(mapper.readTree(action)); - ruleMetaData.setAdditionalInfo(mapper.readTree(additionalInfo)); - ruleDao.save(ruleMetaData); - RuleMetaData savedRule = ruleDao.findById(id); - assertNotNull(savedRule); - assertEquals(filters, savedRule.getFilters().toString()); - assertEquals(processor, savedRule.getProcessor().toString()); - assertEquals(action, savedRule.getAction().toString()); - assertEquals(additionalInfo, savedRule.getAdditionalInfo().toString()); - } - - @Test - @DatabaseSetup("classpath:dbunit/empty_dataset.xml") - public void testDelete() throws IOException { - UUID id = UUIDs.timeBased(); - RuleMetaData ruleMetaData = getRuleMetaData(id); - ruleDao.save(ruleMetaData); - RuleMetaData savedRule = ruleDao.findById(id); - assertNotNull(savedRule); - assertTrue(ruleDao.removeById(id)); - RuleMetaData afterDelete = ruleDao.findById(id); - assertNull(afterDelete); - } - - @Test - @DatabaseSetup("classpath:dbunit/rule.xml") - public void testFindRulesByPlugin() { - assertEquals(3, ruleDao.findRulesByPlugin("token_1").size()); - } - - @Test - @DatabaseSetup("classpath:dbunit/empty_dataset.xml") - public void testFindByTenantIdAndPageLink() { - UUID tenantId1 = UUIDs.timeBased(); - UUID tenantId2 = UUIDs.timeBased(); - createRulesTwoTenants(tenantId1, tenantId2, "name_", "token"); - List rules1 = ruleDao.findByTenantIdAndPageLink( - new TenantId(tenantId1), new TextPageLink(20, "name_")); - assertEquals(20, rules1.size()); - - List rules2 = ruleDao.findByTenantIdAndPageLink(new TenantId(tenantId1), - new TextPageLink(20, "name_", rules1.get(19).getId().getId(), null)); - assertEquals(10, rules2.size()); - - List rules3 = ruleDao.findByTenantIdAndPageLink(new TenantId(tenantId1), - new TextPageLink(20, "name_", rules2.get(9).getId().getId(), null)); - assertEquals(0, rules3.size()); - } - - @Test - @DatabaseSetup("classpath:dbunit/empty_dataset.xml") - public void testFindAllTenantRulesByTenantId() { - UUID tenantId1 = UUIDs.timeBased(); - UUID tenantId2 = UUIDs.timeBased(); - createTenantsAndSystemRules(tenantId1, tenantId2, "name_", "token"); - List rules1 = ruleDao.findAllTenantRulesByTenantId( - tenantId1, new TextPageLink(40, "name_")); - assertEquals(40, rules1.size()); - - List rules2 = ruleDao.findAllTenantRulesByTenantId(tenantId1, - new TextPageLink(40, "name_", rules1.get(19).getId().getId(), null)); - assertEquals(20, rules2.size()); - - List rules3 = ruleDao.findAllTenantRulesByTenantId(tenantId1, - new TextPageLink(40, "name_", rules2.get(19).getId().getId(), null)); - assertEquals(0, rules3.size()); - } - - private void createRulesTwoTenants(UUID tenantId1, UUID tenantId2, String namePrefix, String pluginToken) { - for (int i = 0; i < 30; i++) { - createRule(tenantId1, namePrefix, pluginToken, i); - createRule(tenantId2, namePrefix, pluginToken, i); - } - } - - private void createTenantsAndSystemRules(UUID tenantId1, UUID tenantId2, String namePrefix, String pluginToken) { - for (int i = 0; i < 40; i++) { - createRule(tenantId1, namePrefix, pluginToken, i); - createRule(tenantId2, namePrefix, pluginToken, i); - createRule(null, namePrefix, pluginToken, i); - } - } - - private void createRule(UUID tenantId, String namePrefix, String pluginToken, int i) { - RuleMetaData ruleMetaData = new RuleMetaData(); - ruleMetaData.setId(new RuleId(UUIDs.timeBased())); - ruleMetaData.setTenantId(new TenantId(tenantId)); - ruleMetaData.setName(namePrefix + i); - ruleMetaData.setPluginToken(pluginToken); - ruleDao.save(ruleMetaData); - } - - private RuleMetaData getRuleMetaData(UUID id) throws IOException { - RuleMetaData ruleMetaData = new RuleMetaData(); - ruleMetaData.setId(new RuleId(id)); - ruleMetaData.setTenantId(new TenantId(UUIDs.timeBased())); - ruleMetaData.setName("test"); - - return ruleMetaData; - } -} diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDaoTest.java index 43b87b4cd9..bf36711100 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/tenant/JpaTenantDaoTest.java @@ -27,7 +27,7 @@ import org.thingsboard.server.dao.tenant.TenantDao; import java.util.List; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; /** * Created by Valerii Sosliuk on 4/30/2017. diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/user/JpaUserDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/user/JpaUserDaoTest.java index 67491a2361..bacd73d13e 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/user/JpaUserDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/user/JpaUserDaoTest.java @@ -34,7 +34,8 @@ import java.io.IOException; import java.util.List; import java.util.UUID; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; /** diff --git a/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDaoTest.java b/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDaoTest.java index 47cf0341d0..12487a81a3 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDaoTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDaoTest.java @@ -31,7 +31,7 @@ import org.thingsboard.server.dao.widget.WidgetsBundleDao; import java.util.List; import java.util.UUID; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; /** diff --git a/dao/src/test/java/org/thingsboard/server/dao/util/BufferedRateLimiterTest.java b/dao/src/test/java/org/thingsboard/server/dao/util/BufferedRateLimiterTest.java index 67c3ce8d73..366cefd5d8 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/util/BufferedRateLimiterTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/util/BufferedRateLimiterTest.java @@ -15,7 +15,11 @@ */ package org.thingsboard.server.dao.util; -import com.google.common.util.concurrent.*; +import com.google.common.util.concurrent.FutureCallback; +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 org.junit.Test; import org.thingsboard.server.dao.exception.BufferLimitException; @@ -25,7 +29,10 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; public class BufferedRateLimiterTest { diff --git a/dao/src/test/resources/cassandra/system-test.cql b/dao/src/test/resources/cassandra/system-test.cql index 3b05fd71d1..de4e325745 100644 --- a/dao/src/test/resources/cassandra/system-test.cql +++ b/dao/src/test/resources/cassandra/system-test.cql @@ -1,5 +1,5 @@ -TRUNCATE thingsboard.plugin; -TRUNCATE thingsboard.rule; +TRUNCATE thingsboard.rule_chain; +TRUNCATE thingsboard.rule_node; -- msg_queue dataset diff --git a/dao/src/test/resources/sql/drop-all-tables.sql b/dao/src/test/resources/sql/drop-all-tables.sql index c28e5994cd..23b6a56a47 100644 --- a/dao/src/test/resources/sql/drop-all-tables.sql +++ b/dao/src/test/resources/sql/drop-all-tables.sql @@ -9,9 +9,7 @@ DROP TABLE IF EXISTS dashboard; DROP TABLE IF EXISTS device; DROP TABLE IF EXISTS device_credentials; DROP TABLE IF EXISTS event; -DROP TABLE IF EXISTS plugin; DROP TABLE IF EXISTS relation; -DROP TABLE IF EXISTS rule; DROP TABLE IF EXISTS tb_user; DROP TABLE IF EXISTS tenant; DROP TABLE IF EXISTS ts_kv; diff --git a/dao/src/test/resources/sql/system-test.sql b/dao/src/test/resources/sql/system-test.sql index 57d49ddad9..e59afd914c 100644 --- a/dao/src/test/resources/sql/system-test.sql +++ b/dao/src/test/resources/sql/system-test.sql @@ -1,2 +1,2 @@ -TRUNCATE TABLE plugin; -TRUNCATE TABLE rule; \ No newline at end of file +TRUNCATE TABLE rule_node; +TRUNCATE TABLE rule_chain; \ No newline at end of file diff --git a/extensions-api/pom.xml b/extensions-api/pom.xml deleted file mode 100644 index 6dc8561078..0000000000 --- a/extensions-api/pom.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - 4.0.0 - - org.thingsboard - 2.0.0-SNAPSHOT - thingsboard - - org.thingsboard - extensions-api - jar - - Thingsboard Server Extensions API - https://thingsboard.io - - - UTF-8 - ${basedir}/.. - - - - - org.thingsboard.common - data - - - org.thingsboard.common - message - - - org.springframework.boot - spring-boot-starter-web - provided - - - com.google.protobuf - protobuf-java - provided - - - com.google.guava - guava - provided - - - org.slf4j - slf4j-api - provided - - - org.slf4j - log4j-over-slf4j - provided - - - ch.qos.logback - logback-core - provided - - - ch.qos.logback - logback-classic - provided - - - junit - junit - test - - - org.mockito - mockito-all - test - - - - - diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Action.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Action.java deleted file mode 100644 index 5f7577f512..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Action.java +++ /dev/null @@ -1,40 +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.extensions.api.component; - -import org.thingsboard.server.common.data.plugin.ComponentScope; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * @author Andrew Shvayka - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface Action { - - String name(); - - ComponentScope scope() default ComponentScope.TENANT; - - String descriptor() default "EmptyJsonDescriptor.json"; - - Class configuration() default EmptyComponentConfiguration.class; - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/ConfigurableComponent.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/ConfigurableComponent.java deleted file mode 100644 index 14aa025cac..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/ConfigurableComponent.java +++ /dev/null @@ -1,25 +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.extensions.api.component; - -/** - * @author Andrew Shvayka - */ -public interface ConfigurableComponent { - - void init(T configuration); - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/EmptyComponentConfiguration.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/EmptyComponentConfiguration.java deleted file mode 100644 index 75f92f0d5a..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/EmptyComponentConfiguration.java +++ /dev/null @@ -1,22 +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.extensions.api.component; - -/** - * @author Andrew Shvayka - */ -public class EmptyComponentConfiguration { -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Filter.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Filter.java deleted file mode 100644 index aaf7456581..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Filter.java +++ /dev/null @@ -1,40 +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.extensions.api.component; - -import org.thingsboard.server.common.data.plugin.ComponentScope; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * @author Andrew Shvayka - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface Filter { - - String name(); - - ComponentScope scope() default ComponentScope.TENANT; - - String descriptor() default "EmptyJsonDescriptor.json"; - - Class configuration() default EmptyComponentConfiguration.class; - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Plugin.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Plugin.java deleted file mode 100644 index 0f9135483e..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Plugin.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.extensions.api.component; - -import org.thingsboard.server.common.data.plugin.ComponentScope; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * @author Andrew Shvayka - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface Plugin { - - String name(); - - ComponentScope scope() default ComponentScope.TENANT; - - String descriptor() default "EmptyJsonDescriptor.json"; - - Class configuration() default EmptyComponentConfiguration.class; - - Class[] actions(); - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Processor.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Processor.java deleted file mode 100644 index 32a958f821..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/component/Processor.java +++ /dev/null @@ -1,40 +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.extensions.api.component; - -import org.thingsboard.server.common.data.plugin.ComponentScope; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * @author Andrew Shvayka - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface Processor { - - String name(); - - ComponentScope scope() default ComponentScope.TENANT; - - String descriptor() default "EmptyJsonDescriptor.json"; - - Class configuration() default EmptyComponentConfiguration.class; - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/configuration/Configurable.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/configuration/Configurable.java deleted file mode 100644 index 87b148dc56..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/configuration/Configurable.java +++ /dev/null @@ -1,26 +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.extensions.api.configuration; - -public interface Configurable { - - Class getConfigurationClass(); - - void validate(C configuration) throws ConfigurationValidationException; - - void configure(C configuration); - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/configuration/Configuration.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/configuration/Configuration.java deleted file mode 100644 index efaec930eb..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/configuration/Configuration.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.extensions.api.configuration; - -import java.io.Serializable; - -public interface Configuration extends Serializable { - - // TODO: Figure out how to define and visualize configurations - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/configuration/ConfigurationValidationException.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/configuration/ConfigurationValidationException.java deleted file mode 100644 index 48eb253b90..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/configuration/ConfigurationValidationException.java +++ /dev/null @@ -1,26 +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.extensions.api.configuration; - -public class ConfigurationValidationException extends Exception { - - private static final long serialVersionUID = 1L; - - public ConfigurationValidationException(String msg, Exception cause){ - super(msg, cause); - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/AbstractPlugin.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/AbstractPlugin.java deleted file mode 100644 index 6d54f3edb3..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/AbstractPlugin.java +++ /dev/null @@ -1,88 +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.extensions.api.plugins; - -import org.thingsboard.server.common.data.id.RuleId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.msg.cluster.ServerAddress; -import org.thingsboard.server.extensions.api.plugins.handlers.*; -import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse; -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.RpcMsg; -import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg; -import org.thingsboard.server.extensions.api.rules.RuleException; - -/** - * @author Andrew Shvayka - */ -public abstract class AbstractPlugin implements Plugin { - - @Override - public void process(PluginContext ctx, PluginWebsocketMsg wsMsg) { - getWebsocketMsgHandler().process(ctx, wsMsg); - } - - @Override - public void process(PluginContext ctx, PluginRestMsg msg) { - getRestMsgHandler().process(ctx, msg); - } - - @Override - public void process(PluginContext ctx, TenantId tenantId, RuleId ruleId, RuleToPluginMsg msg) throws RuleException { - getRuleMsgHandler().process(ctx, tenantId, ruleId, msg); - } - - @Override - public void process(PluginContext ctx, RpcMsg msg) { - getRpcMsgHandler().process(ctx, msg); - } - - @Override - public void process(PluginContext ctx, FromDeviceRpcResponse msg) { - throw new IllegalStateException("Device RPC messages is not handled in current plugin!"); - } - - @Override - public void process(PluginContext ctx, TimeoutMsg msg) { - throw new IllegalStateException("Timeouts is not handled in current plugin!"); - } - - @Override - public void onServerAdded(PluginContext ctx, ServerAddress server) { - } - - @Override - public void onServerRemoved(PluginContext ctx, ServerAddress server) { - } - - protected RuleMsgHandler getRuleMsgHandler() { - return new DefaultRuleMsgHandler(); - } - - protected RestMsgHandler getRestMsgHandler() { - return new DefaultRestMsgHandler(); - } - - protected WebsocketMsgHandler getWebsocketMsgHandler() { - return new DefaultWebsocketMsgHandler(); - } - - protected RpcMsgHandler getRpcMsgHandler() { - return new DefaultRpcMsgHandler(); - } -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/Plugin.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/Plugin.java deleted file mode 100644 index 20d74c3ba4..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/Plugin.java +++ /dev/null @@ -1,54 +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.extensions.api.plugins; - -import org.thingsboard.server.common.data.id.RuleId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.msg.cluster.ServerAddress; -import org.thingsboard.server.extensions.api.component.ConfigurableComponent; -import org.thingsboard.server.extensions.api.plugins.msg.FromDeviceRpcResponse; -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.RpcMsg; -import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg; -import org.thingsboard.server.extensions.api.rules.RuleException; - -public interface Plugin extends ConfigurableComponent { - - void process(PluginContext ctx, PluginWebsocketMsg wsMsg); - - void process(PluginContext ctx, TenantId tenantId, RuleId ruleId, RuleToPluginMsg msg) throws RuleException; - - void process(PluginContext ctx, PluginRestMsg msg); - - void process(PluginContext ctx, RpcMsg msg); - - void process(PluginContext ctx, FromDeviceRpcResponse msg); - - void process(PluginContext ctx, TimeoutMsg msg); - - void onServerAdded(PluginContext ctx, ServerAddress server); - - void onServerRemoved(PluginContext ctx, ServerAddress server); - - void resume(PluginContext ctx); - - void suspend(PluginContext ctx); - - void stop(PluginContext ctx); - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginAction.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginAction.java deleted file mode 100644 index 69bee5ca97..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginAction.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.extensions.api.plugins; - -import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; -import org.thingsboard.server.common.msg.session.ToDeviceMsg; -import org.thingsboard.server.extensions.api.component.ConfigurableComponent; -import org.thingsboard.server.extensions.api.plugins.msg.PluginToRuleMsg; -import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; -import org.thingsboard.server.extensions.api.rules.RuleContext; -import org.thingsboard.server.extensions.api.rules.RuleLifecycleComponent; -import org.thingsboard.server.extensions.api.rules.RuleProcessingMetaData; - -import java.util.Optional; - -public interface PluginAction extends ConfigurableComponent, RuleLifecycleComponent { - - Optional convert(RuleContext ctx, DeviceToDeviceActorMsg deviceToDeviceActorMsg, RuleProcessingMetaData deviceMsgMd); - - Optional convert(PluginToRuleMsg response); - - boolean isOneWayAction(); - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginApiCallSecurityContext.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginApiCallSecurityContext.java deleted file mode 100644 index 2bbc26159b..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginApiCallSecurityContext.java +++ /dev/null @@ -1,80 +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.extensions.api.plugins; - -import org.thingsboard.server.common.data.id.*; - -import java.io.Serializable; - -public final class PluginApiCallSecurityContext implements Serializable { - - private static final long serialVersionUID = 1L; - - private final TenantId pluginTenantId; - private final PluginId pluginId; - private final TenantId tenantId; - private final CustomerId customerId; - private final UserId userId; - private final String userName; - - public PluginApiCallSecurityContext(TenantId pluginTenantId, PluginId pluginId, TenantId tenantId, CustomerId customerId, - UserId userId, String userName) { - super(); - this.pluginTenantId = pluginTenantId; - this.pluginId = pluginId; - this.tenantId = tenantId; - this.customerId = customerId; - this.userId = userId; - this.userName = userName; - } - - public TenantId getPluginTenantId(){ - return pluginTenantId; - } - - public PluginId getPluginId() { - return pluginId; - } - - public boolean isSystemAdmin() { - return tenantId == null || EntityId.NULL_UUID.equals(tenantId.getId()); - } - - public boolean isTenantAdmin() { - return !isSystemAdmin() && (customerId == null || EntityId.NULL_UUID.equals(customerId.getId())); - } - - public boolean isCustomerUser() { - return !isSystemAdmin() && !isTenantAdmin(); - } - - public TenantId getTenantId() { - return tenantId; - } - - public CustomerId getCustomerId() { - return customerId; - } - - public UserId getUserId() { - return userId; - } - - public String getUserName() { - return userName; - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginCallback.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginCallback.java deleted file mode 100644 index 413e36becb..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginCallback.java +++ /dev/null @@ -1,26 +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.extensions.api.plugins; - -/** - * @author Andrew Shvayka - */ -public interface PluginCallback { - - void onSuccess(PluginContext ctx, T value); - - void onFailure(PluginContext ctx, Exception e); -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginContext.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginContext.java deleted file mode 100644 index 42fd747155..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginContext.java +++ /dev/null @@ -1,130 +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.extensions.api.plugins; - -import com.google.common.util.concurrent.ListenableFuture; -import org.thingsboard.server.common.data.Device; -import org.thingsboard.server.common.data.id.*; -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.relation.EntityRelation; -import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody; -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.plugins.msg.*; -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 java.io.IOException; -import java.util.Collection; -import java.util.List; -import java.util.Optional; - -public interface PluginContext { - - PluginId getPluginId(); - - void reply(PluginToRuleMsg msg); - - void checkAccess(DeviceId deviceId, PluginCallback callback); - - Optional getSecurityCtx(); - - void persistError(String method, Exception e); - - /* - Device RPC API - */ - - Optional resolve(EntityId entityId); - - void getDevice(DeviceId deviceId, PluginCallback pluginCallback); - - void sendRpcRequest(ToDeviceRpcRequest msg); - - void scheduleTimeoutMsg(TimeoutMsg timeoutMsg); - - void logRpcRequest(PluginApiCallSecurityContext ctx, DeviceId deviceId, ToDeviceRpcRequestBody body, boolean oneWay, Optional rpcError, Exception e); - - /* - Websocket API - */ - - void send(PluginWebsocketMsg wsMsg) throws IOException; - - void close(PluginWebsocketSessionRef sessionRef) throws IOException; - - /* - Plugin RPC API - */ - - void sendPluginRpcMsg(RpcMsg msg); - - /* - Timeseries API - */ - - - void saveTsData(EntityId entityId, TsKvEntry entry, PluginCallback callback); - - void saveTsData(EntityId entityId, List entries, PluginCallback callback); - - void saveTsData(EntityId deviceId, List entries, long ttl, PluginCallback pluginCallback); - - void loadTimeseries(EntityId entityId, List queries, PluginCallback> callback); - - void loadLatestTimeseries(EntityId entityId, Collection keys, PluginCallback> callback); - - void loadLatestTimeseries(EntityId entityId, PluginCallback> callback); - - /* - Attributes API - */ - - void logAttributesUpdated(PluginApiCallSecurityContext ctx, EntityId entityId, String attributeType, List attributes, Exception e); - - void logAttributesDeleted(PluginApiCallSecurityContext ctx, EntityId entityId, String attributeType, List keys, Exception e); - - void logAttributesRead(PluginApiCallSecurityContext ctx, EntityId entityId, String attributeType, List keys, Exception e); - - void saveAttributes(TenantId tenantId, EntityId entityId, String attributeType, List attributes, PluginCallback callback); - - void removeAttributes(TenantId tenantId, EntityId entityId, String scope, List attributeKeys, PluginCallback callback); - - void loadAttribute(EntityId entityId, String attributeType, String attributeKey, PluginCallback> callback); - - void loadAttributes(EntityId entityId, String attributeType, Collection attributeKeys, PluginCallback> callback); - - void loadAttributes(EntityId entityId, String attributeType, PluginCallback> callback); - - void loadAttributes(EntityId entityId, Collection attributeTypes, PluginCallback> callback); - - void loadAttributes(EntityId entityId, Collection attributeTypes, Collection attributeKeys, PluginCallback> callback); - - void getCustomerDevices(TenantId tenantId, CustomerId customerId, int limit, PluginCallback> callback); - - - /* - * Relations API - * */ - - ListenableFuture> findByFromAndType(EntityId from, String relationType); - - ListenableFuture> findByToAndType(EntityId from, String relationType); -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginException.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginException.java deleted file mode 100644 index a7856f7b52..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginException.java +++ /dev/null @@ -1,26 +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.extensions.api.plugins; - -public class PluginException extends RuntimeException { - - private static final long serialVersionUID = 1L; - - public PluginException(String msg, Exception e) { - super(msg, e); - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginInitializationException.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginInitializationException.java deleted file mode 100644 index cbae159f07..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/PluginInitializationException.java +++ /dev/null @@ -1,29 +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.extensions.api.plugins; - -public class PluginInitializationException extends PluginException { - - private static final long serialVersionUID = 1L; - - public PluginInitializationException(String msg, Exception e) { - super(msg, e); - } - - public PluginInitializationException(String msg) { - super(msg, null); - } -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRestMsgHandler.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRestMsgHandler.java deleted file mode 100644 index dec50e4ff9..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRestMsgHandler.java +++ /dev/null @@ -1,72 +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.extensions.api.plugins.handlers; - -import com.fasterxml.jackson.databind.ObjectMapper; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpMethod; -import org.springframework.web.HttpRequestMethodNotSupportedException; -import org.thingsboard.server.extensions.api.plugins.PluginContext; -import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg; - -import javax.servlet.ServletException; - -/** - * @author Andrew Shvayka - */ -@Slf4j -public class DefaultRestMsgHandler implements RestMsgHandler { - - protected final ObjectMapper jsonMapper = new ObjectMapper(); - - @Override - public void process(PluginContext ctx, PluginRestMsg msg) { - try { - log.debug("[{}] Processing REST msg: {}", ctx.getPluginId(), msg); - HttpMethod method = msg.getRequest().getMethod(); - switch (method) { - case GET: - handleHttpGetRequest(ctx, msg); - break; - case POST: - handleHttpPostRequest(ctx, msg); - break; - case DELETE: - handleHttpDeleteRequest(ctx, msg); - break; - default: - msg.getResponseHolder().setErrorResult(new HttpRequestMethodNotSupportedException(method.name())); - } - log.debug("[{}] Processed REST msg.", ctx.getPluginId()); - } catch (Exception e) { - log.warn("[{}] Exception during REST msg processing: {}", ctx.getPluginId(), e.getMessage(), e); - msg.getResponseHolder().setErrorResult(e); - } - } - - protected void handleHttpGetRequest(PluginContext ctx, PluginRestMsg msg) throws ServletException { - msg.getResponseHolder().setErrorResult(new HttpRequestMethodNotSupportedException(HttpMethod.GET.name())); - } - - protected void handleHttpPostRequest(PluginContext ctx, PluginRestMsg msg) throws ServletException { - msg.getResponseHolder().setErrorResult(new HttpRequestMethodNotSupportedException(HttpMethod.POST.name())); - } - - protected void handleHttpDeleteRequest(PluginContext ctx, PluginRestMsg msg) throws ServletException { - msg.getResponseHolder().setErrorResult(new HttpRequestMethodNotSupportedException(HttpMethod.DELETE.name())); - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRpcMsgHandler.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRpcMsgHandler.java deleted file mode 100644 index 949fd02031..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRpcMsgHandler.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.extensions.api.plugins.handlers; - -import org.thingsboard.server.extensions.api.plugins.PluginContext; -import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg; - -/** - * @author Andrew Shvayka - */ -public class DefaultRpcMsgHandler implements RpcMsgHandler { - - @Override - public void process(PluginContext ctx, RpcMsg msg) { - throw new RuntimeException("Not registered msg type: " + msg.getMsgClazz() + "!"); - } -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRuleMsgHandler.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRuleMsgHandler.java deleted file mode 100644 index 42dbbf9052..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultRuleMsgHandler.java +++ /dev/null @@ -1,64 +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.extensions.api.plugins.handlers; - -import lombok.extern.slf4j.Slf4j; -import org.thingsboard.server.common.data.id.RuleId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.msg.session.SessionMsgType; -import org.thingsboard.server.common.msg.session.SessionMsgType; -import org.thingsboard.server.extensions.api.plugins.PluginContext; -import org.thingsboard.server.extensions.api.plugins.msg.GetAttributesRequestRuleToPluginMsg; -import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; -import org.thingsboard.server.extensions.api.plugins.msg.TelemetryUploadRequestRuleToPluginMsg; -import org.thingsboard.server.extensions.api.plugins.msg.UpdateAttributesRequestRuleToPluginMsg; -import org.thingsboard.server.extensions.api.rules.RuleException; - -/** - * @author Andrew Shvayka - */ -@Slf4j -public class DefaultRuleMsgHandler implements RuleMsgHandler { - - @Override - public void process(PluginContext ctx, TenantId tenantId, RuleId ruleId, RuleToPluginMsg msg) throws RuleException { - if (msg instanceof TelemetryUploadRequestRuleToPluginMsg) { - handleTelemetryUploadRequest(ctx, tenantId, ruleId, (TelemetryUploadRequestRuleToPluginMsg) msg); - } else if (msg instanceof UpdateAttributesRequestRuleToPluginMsg) { - handleUpdateAttributesRequest(ctx, tenantId, ruleId, (UpdateAttributesRequestRuleToPluginMsg) msg); - } else if (msg instanceof GetAttributesRequestRuleToPluginMsg) { - handleGetAttributesRequest(ctx, tenantId, ruleId, (GetAttributesRequestRuleToPluginMsg) msg); - } - //TODO: handle subscriptions to attribute updates. - } - - protected void handleGetAttributesRequest(PluginContext ctx, TenantId tenantId, RuleId ruleId, GetAttributesRequestRuleToPluginMsg msg) { - msgTypeNotSupported(msg.getPayload().getMsgType()); - } - - protected void handleUpdateAttributesRequest(PluginContext ctx, TenantId tenantId, RuleId ruleId, UpdateAttributesRequestRuleToPluginMsg msg) { - msgTypeNotSupported(msg.getPayload().getMsgType()); - } - - protected void handleTelemetryUploadRequest(PluginContext ctx, TenantId tenantId, RuleId ruleId, TelemetryUploadRequestRuleToPluginMsg msg) { - msgTypeNotSupported(msg.getPayload().getMsgType()); - } - - private void msgTypeNotSupported(SessionMsgType sessionMsgType) { - throw new RuntimeException("Not supported msg type: " + sessionMsgType + "!"); - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultWebsocketMsgHandler.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultWebsocketMsgHandler.java deleted file mode 100644 index 53bb31a8aa..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/DefaultWebsocketMsgHandler.java +++ /dev/null @@ -1,104 +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.extensions.api.plugins.handlers; - -import com.fasterxml.jackson.databind.ObjectMapper; -import lombok.extern.slf4j.Slf4j; -import org.thingsboard.server.extensions.api.plugins.PluginContext; -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.WsSessionMetaData; -import org.thingsboard.server.extensions.api.plugins.ws.msg.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -/** - * @author Andrew Shvayka - */ -@Slf4j -public class DefaultWebsocketMsgHandler implements WebsocketMsgHandler { - - public static final String PROCESSING_MSG = "[{}] Processing: {}"; - protected final ObjectMapper jsonMapper = new ObjectMapper(); - - protected final Map wsSessionsMap = new HashMap<>(); - - @Override - public void process(PluginContext ctx, PluginWebsocketMsg wsMsg) { - PluginWebsocketSessionRef sessionRef = wsMsg.getSessionRef(); - if (log.isTraceEnabled()) { - log.trace(PROCESSING_MSG, sessionRef.getSessionId(), wsMsg); - } else { - log.debug(PROCESSING_MSG, sessionRef.getSessionId(), wsMsg.getClass().getSimpleName()); - } - if (wsMsg instanceof SessionEventPluginWebSocketMsg) { - handleWebSocketSessionEvent(ctx, sessionRef, (SessionEventPluginWebSocketMsg) wsMsg); - } else if (wsMsg instanceof TextPluginWebSocketMsg || wsMsg instanceof BinaryPluginWebSocketMsg) { - handleWebSocketMsg(ctx, sessionRef, wsMsg); - } else if (wsMsg instanceof PongPluginWebsocketMsg) { - handleWebSocketPongEvent(ctx, sessionRef); - } - } - - protected void handleWebSocketMsg(PluginContext ctx, PluginWebsocketSessionRef sessionRef, PluginWebsocketMsg wsMsg) { - throw new RuntimeException("Web-sockets are not supported by current plugin!"); - } - - protected void cleanupWebSocketSession(PluginContext ctx, String sessionId) { - //Do nothing - } - - protected void handleWebSocketSessionEvent(PluginContext ctx, PluginWebsocketSessionRef sessionRef, SessionEventPluginWebSocketMsg wsMsg) { - String sessionId = sessionRef.getSessionId(); - SessionEvent event = wsMsg.getPayload(); - log.debug(PROCESSING_MSG, sessionId, event); - switch (event.getEventType()) { - case ESTABLISHED: - wsSessionsMap.put(sessionId, new WsSessionMetaData(sessionRef)); - break; - case ERROR: - log.debug("[{}] Unknown websocket session error: {}. ", sessionId, event.getError().orElse(null)); - break; - case CLOSED: - wsSessionsMap.remove(sessionId); - cleanupWebSocketSession(ctx, sessionId); - break; - } - } - - protected void handleWebSocketPongEvent(PluginContext ctx, PluginWebsocketSessionRef sessionRef) { - String sessionId = sessionRef.getSessionId(); - WsSessionMetaData sessionMD = wsSessionsMap.get(sessionId); - if (sessionMD != null) { - log.debug("[{}] Updating session metadata: {}", sessionId, sessionRef); - sessionMD.setSessionRef(sessionRef); - sessionMD.setLastActivityTime(System.currentTimeMillis()); - } - } - - public void clear(PluginContext ctx) { - wsSessionsMap.values().forEach(v -> { - try { - ctx.close(v.getSessionRef()); - } catch (IOException e) { - log.debug("[{}] Failed to close session: {}", v.getSessionRef().getSessionId(), e.getMessage(), e); - } - }); - wsSessionsMap.clear(); - } -} \ No newline at end of file diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/RestMsgHandler.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/RestMsgHandler.java deleted file mode 100644 index 19dde6cd7c..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/RestMsgHandler.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.extensions.api.plugins.handlers; - -import org.thingsboard.server.extensions.api.plugins.PluginContext; -import org.thingsboard.server.extensions.api.plugins.rest.PluginRestMsg; - -/** - * @author Andrew Shvayka - */ -public interface RestMsgHandler { - - void process(PluginContext ctx, PluginRestMsg msg); - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/RpcMsgHandler.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/RpcMsgHandler.java deleted file mode 100644 index 8875209618..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/RpcMsgHandler.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.extensions.api.plugins.handlers; - -import org.thingsboard.server.extensions.api.plugins.PluginContext; -import org.thingsboard.server.extensions.api.plugins.rpc.RpcMsg; - -/** - * @author Andrew Shvayka - */ -public interface RpcMsgHandler { - - void process(PluginContext ctx, RpcMsg msg); - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/RuleMsgHandler.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/RuleMsgHandler.java deleted file mode 100644 index 7357578527..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/RuleMsgHandler.java +++ /dev/null @@ -1,31 +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.extensions.api.plugins.handlers; - -import org.thingsboard.server.common.data.id.RuleId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.extensions.api.plugins.PluginContext; -import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; -import org.thingsboard.server.extensions.api.rules.RuleException; - -/** - * @author Andrew Shvayka - */ -public interface RuleMsgHandler { - - void process(PluginContext ctx, TenantId tenantId, RuleId ruleId, RuleToPluginMsg msg) throws RuleException; - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/WebsocketMsgHandler.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/WebsocketMsgHandler.java deleted file mode 100644 index efda4e9842..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/handlers/WebsocketMsgHandler.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.extensions.api.plugins.handlers; - -import org.thingsboard.server.extensions.api.plugins.PluginContext; -import org.thingsboard.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg; - -/** - * @author Andrew Shvayka - */ -public interface WebsocketMsgHandler { - - void process(PluginContext ctx, PluginWebsocketMsg wsMsg); - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/AbstractPluginToRuleMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/AbstractPluginToRuleMsg.java deleted file mode 100644 index 39275c8638..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/AbstractPluginToRuleMsg.java +++ /dev/null @@ -1,63 +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.extensions.api.plugins.msg; - -import org.thingsboard.server.common.data.id.RuleId; -import org.thingsboard.server.common.data.id.TenantId; - -import java.io.Serializable; -import java.util.UUID; - -public class AbstractPluginToRuleMsg implements PluginToRuleMsg { - - private static final long serialVersionUID = 1L; - - private final UUID uid; - private final TenantId tenantId; - private final RuleId ruleId; - private final T payload; - - public AbstractPluginToRuleMsg(UUID uid, TenantId tenantId, RuleId ruleId, T payload) { - super(); - this.uid = uid; - this.tenantId = tenantId; - this.ruleId = ruleId; - this.payload = payload; - } - - @Override - public UUID getUid() { - return uid; - } - - @Override - public TenantId getTenantId() { - return tenantId; - } - - @Override - public T getPayload() { - return payload; - } - - @Override - public RuleId getRuleId() { - return ruleId; - } - - - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/AbstractRuleToPluginMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/AbstractRuleToPluginMsg.java deleted file mode 100644 index d2463153fa..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/AbstractRuleToPluginMsg.java +++ /dev/null @@ -1,72 +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.extensions.api.plugins.msg; - -import org.thingsboard.server.common.data.id.CustomerId; -import org.thingsboard.server.common.data.id.DeviceId; -import org.thingsboard.server.common.data.id.TenantId; - -import java.io.Serializable; -import java.util.UUID; - -public abstract class AbstractRuleToPluginMsg implements RuleToPluginMsg { - - private static final long serialVersionUID = 1L; - - private final UUID uid; - private final TenantId tenantId; - private final CustomerId customerId; - private final DeviceId deviceId; - private final T payload; - - public AbstractRuleToPluginMsg(TenantId tenantId, CustomerId customerId, DeviceId deviceId, T payload) { - super(); - this.uid = UUID.randomUUID(); - this.tenantId = tenantId; - this.customerId = customerId; - this.deviceId = deviceId; - this.payload = payload; - } - - @Override - public UUID getUid() { - return uid; - } - - public TenantId getTenantId() { - return tenantId; - } - - public CustomerId getCustomerId() { - return customerId; - } - - @Override - public DeviceId getDeviceId() { - return deviceId; - } - - public T getPayload() { - return payload; - } - - @Override - public String toString() { - return "AbstractRuleToPluginMsg [uid=" + uid + ", tenantId=" + tenantId + ", customerId=" + customerId - + ", deviceId=" + deviceId + ", payload=" + payload + "]"; - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/GetAttributesRequestRuleToPluginMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/GetAttributesRequestRuleToPluginMsg.java deleted file mode 100644 index 566cc79308..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/GetAttributesRequestRuleToPluginMsg.java +++ /dev/null @@ -1,33 +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.extensions.api.plugins.msg; - -import org.thingsboard.server.common.data.id.CustomerId; -import org.thingsboard.server.common.data.id.DeviceId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.msg.core.GetAttributesRequest; - -/** - * @author Andrew Shvayka - */ -public class GetAttributesRequestRuleToPluginMsg extends AbstractRuleToPluginMsg { - - private static final long serialVersionUID = 1L; - - public GetAttributesRequestRuleToPluginMsg(TenantId tenantId, CustomerId customerId, DeviceId deviceId, GetAttributesRequest payload) { - super(tenantId, customerId, deviceId, payload); - } -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/GetRequestRuleToPluginMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/GetRequestRuleToPluginMsg.java deleted file mode 100644 index f6ea02180c..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/GetRequestRuleToPluginMsg.java +++ /dev/null @@ -1,31 +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.extensions.api.plugins.msg; - -import org.thingsboard.server.common.data.id.CustomerId; -import org.thingsboard.server.common.data.id.DeviceId; -import org.thingsboard.server.common.data.id.TenantId; - -public class GetRequestRuleToPluginMsg extends AbstractRuleToPluginMsg{ - - private static final long serialVersionUID = 1L; - - public GetRequestRuleToPluginMsg(TenantId tenantId, CustomerId customerId, DeviceId deviceId, - String[] payload) { - super(tenantId, customerId, deviceId, payload); - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/PluginToRuleMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/PluginToRuleMsg.java deleted file mode 100644 index 7871ea3001..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/PluginToRuleMsg.java +++ /dev/null @@ -1,64 +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.extensions.api.plugins.msg; - -import org.thingsboard.server.common.data.id.RuleId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.extensions.api.rules.ToRuleActorMsg; - -import java.io.Serializable; -import java.util.UUID; - -/** - * The basic interface for messages that are sent from particular plugin to rule - * instance - * - * @author ashvayka - * @see RuleToPluginMsg - * - */ -public interface PluginToRuleMsg extends ToRuleActorMsg, Serializable { - - /** - * Returns the unique identifier of the message - * - * @return unique identifier of the message. - */ - UUID getUid(); - - /** - * Returns the unique identifier of the tenant that owns the rule - * - * @return unique identifier of the tenant that owns the rule. - * - */ - TenantId getTenantId(); - - /** - * Returns the unique identifier of the rule - * - * @return unique identifier of the rule. - */ - RuleId getRuleId(); - - /** - * Returns the serializable message payload. - * - * @return the serializable message payload. - */ - V getPayload(); - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ResponsePluginToRuleMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ResponsePluginToRuleMsg.java deleted file mode 100644 index 22491c865b..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ResponsePluginToRuleMsg.java +++ /dev/null @@ -1,32 +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.extensions.api.plugins.msg; - -import org.thingsboard.server.common.data.id.RuleId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.msg.session.ToDeviceMsg; - -import java.util.UUID; - -public class ResponsePluginToRuleMsg extends AbstractPluginToRuleMsg{ - - private static final long serialVersionUID = 1L; - - public ResponsePluginToRuleMsg(UUID uid, TenantId tenantId, RuleId ruleId, ToDeviceMsg payload) { - super(uid, tenantId, ruleId, payload); - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/RpcRequestRuleToPluginMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/RpcRequestRuleToPluginMsg.java deleted file mode 100644 index 17b42a46ae..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/RpcRequestRuleToPluginMsg.java +++ /dev/null @@ -1,31 +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.extensions.api.plugins.msg; - -import org.thingsboard.server.common.data.id.CustomerId; -import org.thingsboard.server.common.data.id.DeviceId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.msg.core.ToServerRpcRequestMsg; - -public class RpcRequestRuleToPluginMsg extends AbstractRuleToPluginMsg { - - private static final long serialVersionUID = 1L; - - public RpcRequestRuleToPluginMsg(TenantId tenantId, CustomerId customerId, DeviceId deviceId, ToServerRpcRequestMsg payload) { - super(tenantId, customerId, deviceId, payload); - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/RpcResponsePluginToRuleMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/RpcResponsePluginToRuleMsg.java deleted file mode 100644 index 0d6526e857..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/RpcResponsePluginToRuleMsg.java +++ /dev/null @@ -1,32 +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.extensions.api.plugins.msg; - -import org.thingsboard.server.common.data.id.RuleId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.msg.core.ToServerRpcResponseMsg; - -import java.util.UUID; - -public class RpcResponsePluginToRuleMsg extends AbstractPluginToRuleMsg { - - private static final long serialVersionUID = 1L; - - public RpcResponsePluginToRuleMsg(UUID uid, TenantId tenantId, RuleId ruleId, ToServerRpcResponseMsg payload) { - super(uid, tenantId, ruleId, payload); - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/RuleToPluginMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/RuleToPluginMsg.java deleted file mode 100644 index c4e7465373..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/RuleToPluginMsg.java +++ /dev/null @@ -1,61 +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.extensions.api.plugins.msg; - -import org.thingsboard.server.common.data.id.CustomerId; -import org.thingsboard.server.common.data.id.DeviceId; - -import java.io.Serializable; -import java.util.UUID; - -/** - * The basic interface for messages that are sent from particular rule to plugin - * instance - * - * @author ashvayka - * - */ -public interface RuleToPluginMsg extends Serializable { - - /** - * Returns the unique identifier of the message - * - * @return unique identifier of the message. - */ - UUID getUid(); - - - /** - * Returns the unique identifier of the device that send the message - * - * @return unique identifier of the device. - */ - DeviceId getDeviceId(); - - /** - * Returns the unique identifier of the customer that owns the device - * - * @return unique identifier of the device. - */ - CustomerId getCustomerId(); - - /** - * Returns the serializable message payload. - * - * @return the serializable message payload. - */ - V getPayload(); -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TelemetryUploadRequestRuleToPluginMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TelemetryUploadRequestRuleToPluginMsg.java deleted file mode 100644 index 6d560f18c6..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/TelemetryUploadRequestRuleToPluginMsg.java +++ /dev/null @@ -1,36 +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.extensions.api.plugins.msg; - -import org.thingsboard.server.common.data.id.CustomerId; -import org.thingsboard.server.common.data.id.DeviceId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.msg.core.TelemetryUploadRequest; - -public class TelemetryUploadRequestRuleToPluginMsg extends AbstractRuleToPluginMsg { - - private static final long serialVersionUID = 1L; - private final long ttl; - - public TelemetryUploadRequestRuleToPluginMsg(TenantId tenantId, CustomerId customerId, DeviceId deviceId, TelemetryUploadRequest payload, long ttl) { - super(tenantId, customerId, deviceId, payload); - this.ttl = ttl; - } - - public long getTtl() { - return ttl; - } -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ToPluginActorMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ToPluginActorMsg.java deleted file mode 100644 index 32804d4dc3..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ToPluginActorMsg.java +++ /dev/null @@ -1,25 +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.extensions.api.plugins.msg; - -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.msg.aware.PluginAwareMsg; - -public interface ToPluginActorMsg extends PluginAwareMsg { - - TenantId getPluginTenantId(); - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ToPluginRpcResponseDeviceMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ToPluginRpcResponseDeviceMsg.java deleted file mode 100644 index 1122bad9f6..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/ToPluginRpcResponseDeviceMsg.java +++ /dev/null @@ -1,31 +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.extensions.api.plugins.msg; - -import lombok.Data; -import org.thingsboard.server.common.data.id.PluginId; -import org.thingsboard.server.common.data.id.TenantId; - -/** - * @author Andrew Shvayka - */ -@Data -public class ToPluginRpcResponseDeviceMsg implements ToPluginActorMsg { - private final PluginId pluginId; - private final TenantId pluginTenantId; - private final FromDeviceRpcResponse response; -} - diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/UpdateAttributesRequestRuleToPluginMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/UpdateAttributesRequestRuleToPluginMsg.java deleted file mode 100644 index a6d40ff77c..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/msg/UpdateAttributesRequestRuleToPluginMsg.java +++ /dev/null @@ -1,31 +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.extensions.api.plugins.msg; - -import org.thingsboard.server.common.data.id.CustomerId; -import org.thingsboard.server.common.data.id.DeviceId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.common.msg.core.AttributesUpdateRequest; - -public class UpdateAttributesRequestRuleToPluginMsg extends AbstractRuleToPluginMsg { - - private static final long serialVersionUID = 1L; - - public UpdateAttributesRequestRuleToPluginMsg(TenantId tenantId, CustomerId customerId, DeviceId deviceId, AttributesUpdateRequest payload) { - super(tenantId, customerId, deviceId, payload); - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rest/BasicPluginRestMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rest/BasicPluginRestMsg.java deleted file mode 100644 index 5619ebe6f1..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rest/BasicPluginRestMsg.java +++ /dev/null @@ -1,63 +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.extensions.api.plugins.rest; - -import org.springframework.http.ResponseEntity; -import org.springframework.web.context.request.async.DeferredResult; -import org.thingsboard.server.common.data.id.PluginId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.extensions.api.plugins.PluginApiCallSecurityContext; - -@SuppressWarnings("rawtypes") -public class BasicPluginRestMsg implements PluginRestMsg { - - private final PluginApiCallSecurityContext securityCtx; - private final RestRequest request; - private final DeferredResult responseHolder; - - public BasicPluginRestMsg(PluginApiCallSecurityContext securityCtx, RestRequest request, - DeferredResult responseHolder) { - super(); - this.securityCtx = securityCtx; - this.request = request; - this.responseHolder = responseHolder; - } - - @Override - public PluginApiCallSecurityContext getSecurityCtx() { - return securityCtx; - } - - @Override - public RestRequest getRequest() { - return request; - } - - @Override - public DeferredResult getResponseHolder() { - return responseHolder; - } - - @Override - public PluginId getPluginId() { - return securityCtx.getPluginId(); - } - - @Override - public TenantId getPluginTenantId() { - return securityCtx.getPluginTenantId(); - } -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rest/PluginRestMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rest/PluginRestMsg.java deleted file mode 100644 index 07c8245de5..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rest/PluginRestMsg.java +++ /dev/null @@ -1,38 +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.extensions.api.plugins.rest; - -import org.springframework.http.ResponseEntity; -import org.springframework.web.context.request.async.DeferredResult; -import org.thingsboard.server.common.data.id.PluginId; -import org.thingsboard.server.extensions.api.plugins.PluginApiCallSecurityContext; -import org.thingsboard.server.extensions.api.plugins.msg.ToPluginActorMsg; - -@SuppressWarnings("rawtypes") -public interface PluginRestMsg extends ToPluginActorMsg { - - RestRequest getRequest(); - - DeferredResult getResponseHolder(); - - PluginApiCallSecurityContext getSecurityCtx(); - - @Override - default PluginId getPluginId() { - return getSecurityCtx().getPluginId(); - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rest/RestRequest.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rest/RestRequest.java deleted file mode 100644 index 8807c85a69..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rest/RestRequest.java +++ /dev/null @@ -1,87 +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.extensions.api.plugins.rest; - -import lombok.Data; -import org.springframework.http.HttpMethod; -import org.springframework.http.RequestEntity; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.MissingServletRequestParameterException; -import org.thingsboard.server.extensions.api.plugins.PluginConstants; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import java.nio.charset.Charset; -import java.util.Optional; -import java.util.function.Function; - -@Data -public class RestRequest { - private static final Charset UTF8 = Charset.forName("UTF-8"); - private final RequestEntity requestEntity; - private final HttpServletRequest request; - - public HttpMethod getMethod() { - return requestEntity.getMethod(); - } - - public String getRequestBody() { - return new String(requestEntity.getBody(), UTF8); - } - - public String[] getPathParams() { - String requestUrl = request.getRequestURL().toString(); - int index = requestUrl.indexOf(PluginConstants.PLUGIN_URL_PREFIX); - String[] pathParams = requestUrl.substring(index + PluginConstants.PLUGIN_URL_PREFIX.length()).split("/"); - String[] result = new String[pathParams.length - 2]; - System.arraycopy(pathParams, 2, result, 0, result.length); - return result; - } - - public String getParameter(String paramName) throws ServletException { - return getParameter(paramName, null); - } - - public String getParameter(String paramName, String defaultValue) throws ServletException { - String paramValue = request.getParameter(paramName); - if (StringUtils.isEmpty(paramValue)) { - if (defaultValue == null) { - throw new MissingServletRequestParameterException(paramName, "String"); - } else { - return defaultValue; - } - } else { - return paramValue; - } - } - - public Optional getLongParamValue(String paramName) { - return getParamValue(paramName, s -> Long.valueOf(s)); - } - - public Optional getIntParamValue(String paramName) { - return getParamValue(paramName, s -> Integer.valueOf(s)); - } - - public Optional getParamValue(String paramName, Function function) { - String paramValue = request.getParameter(paramName); - if (paramValue != null) { - return Optional.of(function.apply(paramValue)); - } else { - return Optional.empty(); - } - } -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rpc/PluginRpcMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rpc/PluginRpcMsg.java deleted file mode 100644 index ed5e5b24d3..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rpc/PluginRpcMsg.java +++ /dev/null @@ -1,46 +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.extensions.api.plugins.rpc; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.ToString; -import org.thingsboard.server.common.data.id.PluginId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.extensions.api.plugins.msg.ToPluginActorMsg; - -@ToString -@RequiredArgsConstructor -public class PluginRpcMsg implements ToPluginActorMsg { - - private final TenantId tenantId; - private final PluginId pluginId; - @Getter - private final RpcMsg rpcMsg; - - @Override - public TenantId getPluginTenantId() { - return tenantId; - } - - @Override - public PluginId getPluginId() { - return pluginId; - } - - - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rpc/RpcMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rpc/RpcMsg.java deleted file mode 100644 index 91abaaec9d..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/rpc/RpcMsg.java +++ /dev/null @@ -1,35 +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.extensions.api.plugins.rpc; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.ToString; -import org.thingsboard.server.common.msg.cluster.ServerAddress; - -/** - * @author Andrew Shvayka - */ -@ToString -@RequiredArgsConstructor -public class RpcMsg { - @Getter - private final ServerAddress serverAddress; - @Getter - private final int msgClazz; - @Getter - private final byte[] msgData; -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/BasicPluginWebsocketSessionRef.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/BasicPluginWebsocketSessionRef.java deleted file mode 100644 index a3247a8b80..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/BasicPluginWebsocketSessionRef.java +++ /dev/null @@ -1,111 +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.extensions.api.plugins.ws; - -import org.thingsboard.server.common.data.id.PluginId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.extensions.api.plugins.PluginApiCallSecurityContext; - -import java.net.InetSocketAddress; -import java.net.URI; -import java.util.Map; - -public class BasicPluginWebsocketSessionRef implements PluginWebsocketSessionRef { - - private static final long serialVersionUID = 1L; - - private final String sessionId; - private final PluginApiCallSecurityContext securityCtx; - private final URI uri; - private final transient Map attributes; - private final InetSocketAddress localAddress; - private final InetSocketAddress remoteAddress; - - public BasicPluginWebsocketSessionRef(String sessionId, PluginApiCallSecurityContext securityCtx, URI uri, Map attributes, - InetSocketAddress localAddress, InetSocketAddress remoteAddress) { - super(); - this.sessionId = sessionId; - this.securityCtx = securityCtx; - this.uri = uri; - this.attributes = attributes; - this.localAddress = localAddress; - this.remoteAddress = remoteAddress; - } - - public String getSessionId() { - return sessionId; - } - - public TenantId getPluginTenantId() { - return securityCtx.getPluginTenantId(); - } - - public PluginId getPluginId() { - return securityCtx.getPluginId(); - } - - public URI getUri() { - return uri; - } - - public Map getAttributes() { - return attributes; - } - - public InetSocketAddress getLocalAddress() { - return localAddress; - } - - public InetSocketAddress getRemoteAddress() { - return remoteAddress; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((sessionId == null) ? 0 : sessionId.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - BasicPluginWebsocketSessionRef other = (BasicPluginWebsocketSessionRef) obj; - if (sessionId == null) { - if (other.sessionId != null) - return false; - } else if (!sessionId.equals(other.sessionId)) - return false; - return true; - } - - @Override - public String toString() { - return "BasicPluginWebsocketSessionRef [sessionId=" + sessionId + ", pluginId=" + getPluginId() + "]"; - } - - @Override - public PluginApiCallSecurityContext getSecurityCtx() { - return securityCtx; - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/PluginWebsocketSessionRef.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/PluginWebsocketSessionRef.java deleted file mode 100644 index 08716120c0..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/PluginWebsocketSessionRef.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.extensions.api.plugins.ws; - -import org.thingsboard.server.common.data.id.PluginId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.extensions.api.plugins.PluginApiCallSecurityContext; - -import java.io.Serializable; -import java.net.InetSocketAddress; -import java.net.URI; -import java.util.Map; - -public interface PluginWebsocketSessionRef extends Serializable { - - String getSessionId(); - - TenantId getPluginTenantId(); - - PluginId getPluginId(); - - URI getUri(); - - Map getAttributes(); - - InetSocketAddress getLocalAddress(); - - InetSocketAddress getRemoteAddress(); - - PluginApiCallSecurityContext getSecurityCtx(); - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/WsSessionMetaData.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/WsSessionMetaData.java deleted file mode 100644 index 28d108ce55..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/WsSessionMetaData.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.extensions.api.plugins.ws; - -public class WsSessionMetaData { - - private PluginWebsocketSessionRef sessionRef; - private long lastActivityTime; - - public WsSessionMetaData(PluginWebsocketSessionRef sessionRef) { - super(); - this.sessionRef = sessionRef; - this.lastActivityTime = System.currentTimeMillis(); - } - - public PluginWebsocketSessionRef getSessionRef() { - return sessionRef; - } - - public void setSessionRef(PluginWebsocketSessionRef sessionRef) { - this.sessionRef = sessionRef; - } - - public long getLastActivityTime() { - return lastActivityTime; - } - - public void setLastActivityTime(long lastActivityTime) { - this.lastActivityTime = lastActivityTime; - } - - @Override - public String toString() { - return "WsSessionMetaData [sessionRef=" + sessionRef + ", lastActivityTime=" + lastActivityTime + "]"; - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/AbstractPluginWebSocketMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/AbstractPluginWebSocketMsg.java deleted file mode 100644 index dbcd73102f..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/AbstractPluginWebSocketMsg.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.extensions.api.plugins.ws.msg; - -import org.thingsboard.server.common.data.id.PluginId; -import org.thingsboard.server.common.data.id.TenantId; -import org.thingsboard.server.extensions.api.plugins.PluginApiCallSecurityContext; -import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef; - -import java.io.Serializable; - -public abstract class AbstractPluginWebSocketMsg implements PluginWebsocketMsg { - - private static final long serialVersionUID = 1L; - - private final PluginWebsocketSessionRef sessionRef; - private final transient T payload; - - AbstractPluginWebSocketMsg(PluginWebsocketSessionRef sessionRef, T payload) { - this.sessionRef = sessionRef; - this.payload = payload; - } - - public PluginWebsocketSessionRef getSessionRef() { - return sessionRef; - } - - - @Override - public TenantId getPluginTenantId(){ - return sessionRef.getPluginTenantId(); - } - - @Override - public PluginId getPluginId() { - return sessionRef.getPluginId(); - } - - @Override - public PluginApiCallSecurityContext getSecurityCtx() { - return sessionRef.getSecurityCtx(); - } - - public T getPayload() { - return payload; - } - - @Override - public String toString() { - return "AbstractPluginWebSocketMsg [sessionRef=" + sessionRef + ", payload=" + payload + "]"; - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/BinaryPluginWebSocketMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/BinaryPluginWebSocketMsg.java deleted file mode 100644 index c5969aa40e..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/BinaryPluginWebSocketMsg.java +++ /dev/null @@ -1,29 +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.extensions.api.plugins.ws.msg; - -import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef; - -import java.nio.ByteBuffer; - -public class BinaryPluginWebSocketMsg extends AbstractPluginWebSocketMsg { - - private static final long serialVersionUID = 1L; - - public BinaryPluginWebSocketMsg(PluginWebsocketSessionRef sessionRef, ByteBuffer payload) { - super(sessionRef, payload); - } -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/EmptyPluginWebsocketMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/EmptyPluginWebsocketMsg.java deleted file mode 100644 index 154566317d..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/EmptyPluginWebsocketMsg.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.extensions.api.plugins.ws.msg; - -import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef; - -import java.nio.ByteBuffer; - -public class EmptyPluginWebsocketMsg extends AbstractPluginWebSocketMsg { - - private static final long serialVersionUID = 1L; - private static ByteBuffer EMPTY = ByteBuffer.wrap(new byte[0]); - - protected EmptyPluginWebsocketMsg(PluginWebsocketSessionRef sessionRef) { - super(sessionRef, EMPTY); - } -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/PingPluginWebsocketMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/PingPluginWebsocketMsg.java deleted file mode 100644 index 3e521f8bdd..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/PingPluginWebsocketMsg.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.extensions.api.plugins.ws.msg; - -import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef; - -public class PingPluginWebsocketMsg extends EmptyPluginWebsocketMsg { - - private static final long serialVersionUID = 1L; - - public PingPluginWebsocketMsg(PluginWebsocketSessionRef sessionRef) { - super(sessionRef); - } -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/PluginWebsocketMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/PluginWebsocketMsg.java deleted file mode 100644 index b07ad8c77d..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/PluginWebsocketMsg.java +++ /dev/null @@ -1,31 +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.extensions.api.plugins.ws.msg; - -import org.thingsboard.server.extensions.api.plugins.PluginApiCallSecurityContext; -import org.thingsboard.server.extensions.api.plugins.msg.ToPluginActorMsg; -import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef; - -import java.io.Serializable; - -public interface PluginWebsocketMsg extends ToPluginActorMsg, Serializable { - - PluginWebsocketSessionRef getSessionRef(); - - T getPayload(); - - PluginApiCallSecurityContext getSecurityCtx(); -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/PongPluginWebsocketMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/PongPluginWebsocketMsg.java deleted file mode 100644 index 3c7e9787fe..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/PongPluginWebsocketMsg.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.extensions.api.plugins.ws.msg; - -import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef; - -public class PongPluginWebsocketMsg extends EmptyPluginWebsocketMsg { - - private static final long serialVersionUID = 1L; - - public PongPluginWebsocketMsg(PluginWebsocketSessionRef sessionRef) { - super(sessionRef); - } -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/SessionEventPluginWebSocketMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/SessionEventPluginWebSocketMsg.java deleted file mode 100644 index c3e23c8ca4..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/SessionEventPluginWebSocketMsg.java +++ /dev/null @@ -1,29 +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.extensions.api.plugins.ws.msg; - -import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef; -import org.thingsboard.server.extensions.api.plugins.ws.SessionEvent; - -public class SessionEventPluginWebSocketMsg extends AbstractPluginWebSocketMsg { - - private static final long serialVersionUID = 1L; - - public SessionEventPluginWebSocketMsg(PluginWebsocketSessionRef sessionRef, SessionEvent payload) { - super(sessionRef, payload); - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/TextPluginWebSocketMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/TextPluginWebSocketMsg.java deleted file mode 100644 index 1111f1fab3..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/plugins/ws/msg/TextPluginWebSocketMsg.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.extensions.api.plugins.ws.msg; - -import org.thingsboard.server.extensions.api.plugins.ws.PluginWebsocketSessionRef; - -public class TextPluginWebSocketMsg extends AbstractPluginWebSocketMsg { - - private static final long serialVersionUID = 1L; - - public TextPluginWebSocketMsg(PluginWebsocketSessionRef sessionRef, String payload) { - super(sessionRef, payload); - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleContext.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleContext.java deleted file mode 100644 index 378cb2b2eb..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleContext.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.extensions.api.rules; - -import com.google.common.util.concurrent.ListenableFuture; -import org.thingsboard.server.common.data.Event; -import org.thingsboard.server.common.data.alarm.Alarm; -import org.thingsboard.server.common.data.alarm.AlarmId; -import org.thingsboard.server.common.data.id.EntityId; -import org.thingsboard.server.common.data.id.RuleId; -import org.thingsboard.server.extensions.api.device.DeviceMetaData; - -import java.util.Optional; - -public interface RuleContext { - - RuleId getRuleId(); - - DeviceMetaData getDeviceMetaData(); - - Event save(Event event); - - Optional saveIfNotExists(Event event); - - Optional findEvent(String eventType, String eventUid); - - Optional findLatestAlarm(EntityId originator, String alarmType); - - Alarm createOrUpdateAlarm(Alarm alarm); - - ListenableFuture clearAlarm(AlarmId id, long clearTs); -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleException.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleException.java deleted file mode 100644 index b1b82be67c..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleException.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.extensions.api.rules; - -public class RuleException extends Exception { - - private static final long serialVersionUID = 1L; - - public RuleException(String msg) { - super(msg); - } - - public RuleException(String msg, Exception e) { - super(msg, e); - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleFilter.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleFilter.java deleted file mode 100644 index f0e986ec13..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleFilter.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.extensions.api.rules; - -import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; -import org.thingsboard.server.extensions.api.component.ConfigurableComponent; - -/** - * @author Andrew Shvayka - */ -public interface RuleFilter extends ConfigurableComponent, RuleLifecycleComponent { - - boolean filter(RuleContext ctx, DeviceToDeviceActorMsg msg); - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleInitializationException.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleInitializationException.java deleted file mode 100644 index c12f90f685..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleInitializationException.java +++ /dev/null @@ -1,29 +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.extensions.api.rules; - -public class RuleInitializationException extends RuleException { - - private static final long serialVersionUID = 1L; - - public RuleInitializationException(String msg, Exception e) { - super(msg, e); - } - - public RuleInitializationException(String msg) { - super(msg, null); - } -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleLifecycleComponent.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleLifecycleComponent.java deleted file mode 100644 index 0ab96ef666..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleLifecycleComponent.java +++ /dev/null @@ -1,29 +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.extensions.api.rules; - -/** - * @author Andrew Shvayka - */ -public interface RuleLifecycleComponent { - - void resume(); - - void suspend(); - - void stop(); - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleProcessingMetaData.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleProcessingMetaData.java deleted file mode 100644 index 03cf9c80d3..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleProcessingMetaData.java +++ /dev/null @@ -1,43 +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.extensions.api.rules; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; - -public class RuleProcessingMetaData { - - private final Map md; - - public RuleProcessingMetaData() { - super(); - this.md = new HashMap<>(); - } - - public void put(String key, T value) { - md.put(key, value); - } - - public Optional get(String key) { - return Optional.ofNullable((T) md.get(key)); - } - - public Map getValues() { - return Collections.unmodifiableMap(md); - } -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleProcessor.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleProcessor.java deleted file mode 100644 index 5e72dbe445..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/RuleProcessor.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.extensions.api.rules; - -import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; -import org.thingsboard.server.extensions.api.component.ConfigurableComponent; - -/** - * @author Andrew Shvayka - */ -public interface RuleProcessor extends ConfigurableComponent, RuleLifecycleComponent { - - RuleProcessingMetaData process(RuleContext ctx, DeviceToDeviceActorMsg msg) throws RuleException; -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/SimpleRuleLifecycleComponent.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/SimpleRuleLifecycleComponent.java deleted file mode 100644 index bea04b026c..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/SimpleRuleLifecycleComponent.java +++ /dev/null @@ -1,41 +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.extensions.api.rules; - -import lombok.extern.slf4j.Slf4j; - -/** - * @author Andrew Shvayka - */ -@Slf4j -public abstract class SimpleRuleLifecycleComponent implements RuleLifecycleComponent { - - @Override - public void resume() { - log.debug("Resume method was called, but no impl provided!"); - } - - @Override - public void suspend() { - log.debug("Suspend method was called, but no impl provided!"); - } - - @Override - public void stop() { - log.debug("Stop method was called, but no impl provided!"); - } - -} diff --git a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/ToRuleActorMsg.java b/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/ToRuleActorMsg.java deleted file mode 100644 index 5dd386c31d..0000000000 --- a/extensions-api/src/main/java/org/thingsboard/server/extensions/api/rules/ToRuleActorMsg.java +++ /dev/null @@ -1,25 +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.extensions.api.rules; - -import org.thingsboard.server.common.data.id.RuleId; -import org.thingsboard.server.common.msg.aware.TenantAwareMsg; - -public interface ToRuleActorMsg extends TenantAwareMsg { - - RuleId getRuleId(); - -} diff --git a/extensions-api/src/main/resources/EmptyJsonDescriptor.json b/extensions-api/src/main/resources/EmptyJsonDescriptor.json deleted file mode 100644 index 03bf1454b8..0000000000 --- a/extensions-api/src/main/resources/EmptyJsonDescriptor.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "schema": { - "description": "Empty Schema", - "type": "object", - "additionalProperties": false, - "properties": { - } - }, - "form": [ - "*" - ] -} \ No newline at end of file diff --git a/extensions-core/pom.xml b/extensions-core/pom.xml deleted file mode 100644 index 9bb618c8f8..0000000000 --- a/extensions-core/pom.xml +++ /dev/null @@ -1,136 +0,0 @@ - - - 4.0.0 - - org.thingsboard - 2.0.0-SNAPSHOT - thingsboard - - org.thingsboard - extensions-core - jar - - Thingsboard Server Core Extensions - https://thingsboard.io - - - UTF-8 - ${basedir}/.. - - - - - org.thingsboard - extensions-api - provided - - - org.thingsboard.common - transport - provided - - - com.google.code.gson - gson - - - org.apache.velocity - velocity - provided - - - org.apache.velocity - velocity-tools - provided - - - org.springframework.boot - spring-boot-starter-web - provided - - - org.springframework - spring-context-support - provided - - - javax.mail - mail - - - com.google.protobuf - protobuf-java - provided - - - com.google.guava - guava - provided - - - org.slf4j - slf4j-api - provided - - - org.slf4j - log4j-over-slf4j - provided - - - ch.qos.logback - logback-core - provided - - - ch.qos.logback - logback-classic - provided - - - junit - junit - test - - - org.mockito - mockito-all - test - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - org.xolstice.maven.plugins - protobuf-maven-plugin - - - org.codehaus.mojo - build-helper-maven-plugin - - - - - diff --git a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/mail/SendMailAction.java b/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/mail/SendMailAction.java deleted file mode 100644 index 0258cf161c..0000000000 --- a/extensions-core/src/main/java/org/thingsboard/server/extensions/core/action/mail/SendMailAction.java +++ /dev/null @@ -1,109 +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.extensions.core.action.mail; - -import lombok.extern.slf4j.Slf4j; -import org.apache.velocity.Template; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.runtime.parser.ParseException; -import org.springframework.util.StringUtils; -import org.thingsboard.server.common.msg.device.DeviceToDeviceActorMsg; -import org.thingsboard.server.common.msg.session.ToDeviceMsg; -import org.thingsboard.server.extensions.api.component.Action; -import org.thingsboard.server.extensions.api.plugins.PluginAction; -import org.thingsboard.server.extensions.api.plugins.msg.PluginToRuleMsg; -import org.thingsboard.server.extensions.api.plugins.msg.ResponsePluginToRuleMsg; -import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; -import org.thingsboard.server.extensions.api.rules.RuleContext; -import org.thingsboard.server.extensions.api.rules.RuleProcessingMetaData; -import org.thingsboard.server.extensions.api.rules.SimpleRuleLifecycleComponent; -import org.thingsboard.server.extensions.core.utils.VelocityUtils; - -import java.util.Optional; - -/** - * @author Andrew Shvayka - */ -@Action(name = "Send Mail Action", descriptor = "SendMailActionDescriptor.json", configuration = SendMailActionConfiguration.class) -@Slf4j -public class SendMailAction extends SimpleRuleLifecycleComponent implements PluginAction { - - private SendMailActionConfiguration configuration; - private Optional