From 53f96c497902ac6d4a810d177bc552a6171cded2 Mon Sep 17 00:00:00 2001 From: vikash singh Date: Wed, 2 Jan 2019 22:20:09 +0530 Subject: [PATCH 01/13] moved the DefaultMailService and MailService from application to dao --- .../server/dao}/mail/DefaultMailService.java | 10 +++++----- .../server/dao}/mail/MailService.java | 17 ++++++++--------- 2 files changed, 13 insertions(+), 14 deletions(-) rename {application/src/main/java/com/hashmapinc/server/service => dao/src/main/java/com/hashmapinc/server/dao}/mail/DefaultMailService.java (97%) rename {application/src/main/java/com/hashmapinc/server/service => dao/src/main/java/com/hashmapinc/server/dao}/mail/MailService.java (91%) diff --git a/application/src/main/java/com/hashmapinc/server/service/mail/DefaultMailService.java b/dao/src/main/java/com/hashmapinc/server/dao/mail/DefaultMailService.java similarity index 97% rename from application/src/main/java/com/hashmapinc/server/service/mail/DefaultMailService.java rename to dao/src/main/java/com/hashmapinc/server/dao/mail/DefaultMailService.java index 5e7fa9138..57ccc3e71 100644 --- a/application/src/main/java/com/hashmapinc/server/service/mail/DefaultMailService.java +++ b/dao/src/main/java/com/hashmapinc/server/dao/mail/DefaultMailService.java @@ -14,16 +14,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.hashmapinc.server.service.mail; +package com.hashmapinc.server.dao.mail; import com.fasterxml.jackson.databind.JsonNode; import com.hashmapinc.server.common.data.User; import com.hashmapinc.server.common.data.UserSettings; +import com.hashmapinc.server.common.data.exception.TempusErrorCode; +import com.hashmapinc.server.common.data.exception.TempusException; import com.hashmapinc.server.dao.exception.IncorrectParameterException; import com.hashmapinc.server.dao.settings.UserSettingsService; import com.hashmapinc.server.dao.user.UserService; -import com.hashmapinc.server.exception.TempusErrorCode; -import com.hashmapinc.server.exception.TempusException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.velocity.VelocityContext; @@ -207,8 +207,8 @@ public void sendPasswordWasResetEmail(String loginLink, String email) throws Tem } - private void sendMail(JavaMailSenderImpl mailSender, - String mailFrom, String email, + private void sendMail(JavaMailSenderImpl mailSender, + String mailFrom, String email, String subject, String message) throws TempusException { try { MimeMessage mimeMsg = mailSender.createMimeMessage(); diff --git a/application/src/main/java/com/hashmapinc/server/service/mail/MailService.java b/dao/src/main/java/com/hashmapinc/server/dao/mail/MailService.java similarity index 91% rename from application/src/main/java/com/hashmapinc/server/service/mail/MailService.java rename to dao/src/main/java/com/hashmapinc/server/dao/mail/MailService.java index 6e6c37939..03f97bf8f 100644 --- a/application/src/main/java/com/hashmapinc/server/service/mail/MailService.java +++ b/dao/src/main/java/com/hashmapinc/server/dao/mail/MailService.java @@ -14,26 +14,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.hashmapinc.server.service.mail; - -import com.hashmapinc.server.exception.TempusException; +package com.hashmapinc.server.dao.mail; import com.fasterxml.jackson.databind.JsonNode; +import com.hashmapinc.server.common.data.exception.TempusException; public interface MailService { void updateMailConfiguration(); void sendEmail(String email, String subject, String message) throws TempusException; - + void sendTestMail(JsonNode config, String email) throws TempusException; - + void sendActivationEmail(String activationLink, String email) throws TempusException; - + void sendAccountActivatedEmail(String loginLink, String email) throws TempusException; - + void sendResetPasswordEmail(String passwordResetLink, String email) throws TempusException; - + void sendPasswordWasResetEmail(String loginLink, String email) throws TempusException; - + } From a9920e30a0960bcb4fe10949a2cd630939d04b6a Mon Sep 17 00:00:00 2001 From: vikash singh Date: Wed, 2 Jan 2019 22:21:28 +0530 Subject: [PATCH 02/13] moved the TempusErrorCode and TempusException to the Common module from application --- .../server/common/data}/exception/TempusErrorCode.java | 2 +- .../server/common/data}/exception/TempusException.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename {application/src/main/java/com/hashmapinc/server => common/data/src/main/java/com/hashmapinc/server/common/data}/exception/TempusErrorCode.java (95%) rename {application/src/main/java/com/hashmapinc/server => common/data/src/main/java/com/hashmapinc/server/common/data}/exception/TempusException.java (96%) diff --git a/application/src/main/java/com/hashmapinc/server/exception/TempusErrorCode.java b/common/data/src/main/java/com/hashmapinc/server/common/data/exception/TempusErrorCode.java similarity index 95% rename from application/src/main/java/com/hashmapinc/server/exception/TempusErrorCode.java rename to common/data/src/main/java/com/hashmapinc/server/common/data/exception/TempusErrorCode.java index 4fa5c7a6c..eb5edebcb 100644 --- a/application/src/main/java/com/hashmapinc/server/exception/TempusErrorCode.java +++ b/common/data/src/main/java/com/hashmapinc/server/common/data/exception/TempusErrorCode.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.hashmapinc.server.exception; +package com.hashmapinc.server.common.data.exception; import com.fasterxml.jackson.annotation.JsonValue; diff --git a/application/src/main/java/com/hashmapinc/server/exception/TempusException.java b/common/data/src/main/java/com/hashmapinc/server/common/data/exception/TempusException.java similarity index 96% rename from application/src/main/java/com/hashmapinc/server/exception/TempusException.java rename to common/data/src/main/java/com/hashmapinc/server/common/data/exception/TempusException.java index 77b446574..8689d1546 100644 --- a/application/src/main/java/com/hashmapinc/server/exception/TempusException.java +++ b/common/data/src/main/java/com/hashmapinc/server/common/data/exception/TempusException.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.hashmapinc.server.exception; +package com.hashmapinc.server.common.data.exception; public class TempusException extends Exception { From 964a408d0f356d8bd688fb5dcf011eee1021ea24 Mon Sep 17 00:00:00 2001 From: vikash singh Date: Wed, 2 Jan 2019 22:26:10 +0530 Subject: [PATCH 03/13] import changes due to moving of MailService and (TempusExption ,TempusErrorCode) from application to dao and common respectively. --- .../hashmapinc/server/service/mail/TestMailService.java | 3 ++- .../hashmapinc/server/config/WebSocketConfiguration.java | 4 ++-- .../com/hashmapinc/server/controller/AlarmController.java | 6 ++---- .../com/hashmapinc/server/controller/AssetController.java | 2 +- .../hashmapinc/server/controller/AuditLogController.java | 2 +- .../com/hashmapinc/server/controller/AuthController.java | 6 +++--- .../com/hashmapinc/server/controller/BaseController.java | 4 ++-- .../server/controller/ComponentDescriptorController.java | 2 +- .../server/controller/ComputationJobController.java | 4 ++-- .../server/controller/ComputationsController.java | 6 +++--- .../server/controller/ConfigurationController.java | 2 +- .../hashmapinc/server/controller/CustomerController.java | 2 +- .../server/controller/CustomerGroupController.java | 5 +---- .../hashmapinc/server/controller/DashboardController.java | 3 +-- .../hashmapinc/server/controller/DataModelController.java | 2 +- .../com/hashmapinc/server/controller/DeviceController.java | 4 ++-- .../server/controller/EntityRelationController.java | 4 ++-- .../com/hashmapinc/server/controller/EventController.java | 4 ++-- .../com/hashmapinc/server/controller/LoginController.java | 2 +- .../hashmapinc/server/controller/MetadataController.java | 4 ++-- .../hashmapinc/server/controller/NodeMetricController.java | 2 +- .../com/hashmapinc/server/controller/PluginController.java | 2 +- .../com/hashmapinc/server/controller/RuleController.java | 2 +- .../controller/TempusGatewayConfigurationController.java | 2 +- .../com/hashmapinc/server/controller/TenantController.java | 2 +- .../com/hashmapinc/server/controller/UserController.java | 6 +++--- .../server/controller/UserSettingsController.java | 7 +++++-- .../hashmapinc/server/controller/WidgetTypeController.java | 2 +- .../server/controller/WidgetsBundleController.java | 2 +- .../server/controller/plugin/PluginApiController.java | 2 +- .../hashmapinc/server/exception/TempusErrorResponse.java | 1 + .../server/exception/TempusErrorResponseHandler.java | 2 ++ 32 files changed, 52 insertions(+), 51 deletions(-) diff --git a/application/src/it/java/com/hashmapinc/server/service/mail/TestMailService.java b/application/src/it/java/com/hashmapinc/server/service/mail/TestMailService.java index 4b1231ef4..b6c885021 100644 --- a/application/src/it/java/com/hashmapinc/server/service/mail/TestMailService.java +++ b/application/src/it/java/com/hashmapinc/server/service/mail/TestMailService.java @@ -16,7 +16,8 @@ */ package com.hashmapinc.server.service.mail; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; +import com.hashmapinc.server.dao.mail.MailService; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; diff --git a/application/src/main/java/com/hashmapinc/server/config/WebSocketConfiguration.java b/application/src/main/java/com/hashmapinc/server/config/WebSocketConfiguration.java index 22deccf9a..d0680c72b 100644 --- a/application/src/main/java/com/hashmapinc/server/config/WebSocketConfiguration.java +++ b/application/src/main/java/com/hashmapinc/server/config/WebSocketConfiguration.java @@ -19,8 +19,8 @@ import java.util.Map; import com.hashmapinc.server.service.security.model.SecurityUser; -import com.hashmapinc.server.exception.TempusErrorCode; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusErrorCode; +import com.hashmapinc.server.common.data.exception.TempusException; import com.hashmapinc.server.controller.plugin.PluginWebSocketHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; diff --git a/application/src/main/java/com/hashmapinc/server/controller/AlarmController.java b/application/src/main/java/com/hashmapinc/server/controller/AlarmController.java index 4331fb75e..6776c81ac 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/AlarmController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/AlarmController.java @@ -23,12 +23,10 @@ import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; -import com.hashmapinc.server.common.data.alarm.*; -import com.hashmapinc.server.common.data.id.*; import com.hashmapinc.server.common.data.page.TimePageData; import com.hashmapinc.server.common.data.page.TimePageLink; -import com.hashmapinc.server.exception.TempusErrorCode; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusErrorCode; +import com.hashmapinc.server.common.data.exception.TempusException; @RestController @RequestMapping("/api") diff --git a/application/src/main/java/com/hashmapinc/server/controller/AssetController.java b/application/src/main/java/com/hashmapinc/server/controller/AssetController.java index dd2e6ec06..624da2384 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/AssetController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/AssetController.java @@ -36,7 +36,7 @@ import com.hashmapinc.server.common.data.security.Authority; import com.hashmapinc.server.dao.exception.IncorrectParameterException; import com.hashmapinc.server.dao.model.ModelConstants; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import java.util.ArrayList; import java.util.List; diff --git a/application/src/main/java/com/hashmapinc/server/controller/AuditLogController.java b/application/src/main/java/com/hashmapinc/server/controller/AuditLogController.java index 3e5d24df8..8151e16f8 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/AuditLogController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/AuditLogController.java @@ -25,7 +25,7 @@ import com.hashmapinc.server.common.data.id.EntityIdFactory; import com.hashmapinc.server.common.data.id.UserId; import com.hashmapinc.server.common.data.page.TimePageData; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import java.util.UUID; diff --git a/application/src/main/java/com/hashmapinc/server/controller/AuthController.java b/application/src/main/java/com/hashmapinc/server/controller/AuthController.java index 4dc725711..b1103482c 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/AuthController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/AuthController.java @@ -41,9 +41,9 @@ import org.springframework.web.bind.annotation.*; import com.hashmapinc.server.common.data.User; import com.hashmapinc.server.common.data.security.UserCredentials; -import com.hashmapinc.server.exception.TempusErrorCode; -import com.hashmapinc.server.exception.TempusException; -import com.hashmapinc.server.service.mail.MailService; +import com.hashmapinc.server.common.data.exception.TempusErrorCode; +import com.hashmapinc.server.common.data.exception.TempusException; +import com.hashmapinc.server.dao.mail.MailService; import com.hashmapinc.server.service.security.model.SecurityUser; import org.springframework.web.client.RestTemplate; import javax.servlet.http.HttpServletRequest; diff --git a/application/src/main/java/com/hashmapinc/server/controller/BaseController.java b/application/src/main/java/com/hashmapinc/server/controller/BaseController.java index e16faeba4..5e9c69564 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/BaseController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/BaseController.java @@ -59,9 +59,9 @@ import com.hashmapinc.server.dao.user.UserService; import com.hashmapinc.server.dao.widget.WidgetTypeService; import com.hashmapinc.server.dao.widget.WidgetsBundleService; -import com.hashmapinc.server.exception.TempusErrorCode; +import com.hashmapinc.server.common.data.exception.TempusErrorCode; import com.hashmapinc.server.exception.TempusErrorResponseHandler; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import com.hashmapinc.server.service.component.ComponentDiscoveryService; import com.hashmapinc.server.service.kubernetes.gateway.TempusGatewayKubernetesService; import com.hashmapinc.server.service.metadataingestion.MetadataConfigService; diff --git a/application/src/main/java/com/hashmapinc/server/controller/ComponentDescriptorController.java b/application/src/main/java/com/hashmapinc/server/controller/ComponentDescriptorController.java index 5b9be03ed..ad8d6998f 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/ComponentDescriptorController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/ComponentDescriptorController.java @@ -18,7 +18,7 @@ import com.hashmapinc.server.common.data.plugin.ComponentDescriptor; import com.hashmapinc.server.common.data.plugin.ComponentType; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; diff --git a/application/src/main/java/com/hashmapinc/server/controller/ComputationJobController.java b/application/src/main/java/com/hashmapinc/server/controller/ComputationJobController.java index 64bd529f2..518fbbf20 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/ComputationJobController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/ComputationJobController.java @@ -22,7 +22,7 @@ import com.hashmapinc.server.common.data.id.ComputationId; import com.hashmapinc.server.common.data.id.ComputationJobId; import com.hashmapinc.server.common.data.plugin.ComponentLifecycleEvent; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; @@ -30,7 +30,7 @@ import java.util.List; -import static com.hashmapinc.server.exception.TempusErrorCode.ITEM_NOT_FOUND; +import static com.hashmapinc.server.common.data.exception.TempusErrorCode.ITEM_NOT_FOUND; @Slf4j @RestController diff --git a/application/src/main/java/com/hashmapinc/server/controller/ComputationsController.java b/application/src/main/java/com/hashmapinc/server/controller/ComputationsController.java index 3ef0bbc30..392e1abed 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/ComputationsController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/ComputationsController.java @@ -30,8 +30,8 @@ import com.hashmapinc.server.common.data.plugin.ComponentLifecycleEvent; import com.hashmapinc.server.common.data.security.Authority; import com.hashmapinc.server.dao.model.ModelConstants; -import com.hashmapinc.server.exception.TempusErrorCode; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusErrorCode; +import com.hashmapinc.server.common.data.exception.TempusException; import com.hashmapinc.server.service.computation.ComputationDiscoveryService; import com.hashmapinc.server.service.computation.ComputationFunctionService; import com.hashmapinc.server.service.computation.S3BucketService; @@ -58,7 +58,7 @@ import java.util.stream.Stream; import static com.hashmapinc.server.dao.service.Validator.validateId; -import static com.hashmapinc.server.exception.TempusErrorCode.ITEM_NOT_FOUND; +import static com.hashmapinc.server.common.data.exception.TempusErrorCode.ITEM_NOT_FOUND; @Slf4j @RestController diff --git a/application/src/main/java/com/hashmapinc/server/controller/ConfigurationController.java b/application/src/main/java/com/hashmapinc/server/controller/ConfigurationController.java index 71b8a8745..bbcbc11df 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/ConfigurationController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/ConfigurationController.java @@ -22,7 +22,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.*; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import java.util.HashMap; import java.util.Map; diff --git a/application/src/main/java/com/hashmapinc/server/controller/CustomerController.java b/application/src/main/java/com/hashmapinc/server/controller/CustomerController.java index 885d7b979..78df0d7e4 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/CustomerController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/CustomerController.java @@ -25,7 +25,7 @@ import com.hashmapinc.server.common.data.id.TenantId; import com.hashmapinc.server.common.data.page.TextPageData; import com.hashmapinc.server.common.data.page.TextPageLink; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; diff --git a/application/src/main/java/com/hashmapinc/server/controller/CustomerGroupController.java b/application/src/main/java/com/hashmapinc/server/controller/CustomerGroupController.java index f6197dd1a..68064dd3e 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/CustomerGroupController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/CustomerGroupController.java @@ -30,10 +30,7 @@ import com.hashmapinc.server.common.data.id.UserId; import com.hashmapinc.server.common.data.page.TextPageData; import com.hashmapinc.server.common.data.page.TextPageLink; -import com.hashmapinc.server.common.data.security.Authority; -import com.hashmapinc.server.exception.TempusErrorCode; -import com.hashmapinc.server.exception.TempusException; -import com.hashmapinc.server.service.security.model.SecurityUser; +import com.hashmapinc.server.common.data.exception.TempusException; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; diff --git a/application/src/main/java/com/hashmapinc/server/controller/DashboardController.java b/application/src/main/java/com/hashmapinc/server/controller/DashboardController.java index 520037212..98ab68601 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/DashboardController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/DashboardController.java @@ -16,7 +16,6 @@ */ package com.hashmapinc.server.controller; -import com.datastax.driver.core.utils.UUIDs; import com.hashmapinc.server.common.data.*; import com.hashmapinc.server.common.data.audit.ActionType; import com.hashmapinc.server.common.data.id.CustomerId; @@ -28,7 +27,7 @@ import com.hashmapinc.server.common.data.page.TimePageData; import com.hashmapinc.server.common.data.page.TimePageLink; import com.hashmapinc.server.common.data.security.Authority; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; diff --git a/application/src/main/java/com/hashmapinc/server/controller/DataModelController.java b/application/src/main/java/com/hashmapinc/server/controller/DataModelController.java index db4c224d2..57b8cd74a 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/DataModelController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/DataModelController.java @@ -23,7 +23,7 @@ import com.hashmapinc.server.common.data.id.DataModelId; import com.hashmapinc.server.common.data.id.DataModelObjectId; import com.hashmapinc.server.dao.model.ModelConstants; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; diff --git a/application/src/main/java/com/hashmapinc/server/controller/DeviceController.java b/application/src/main/java/com/hashmapinc/server/controller/DeviceController.java index 0e3900af7..93b661877 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/DeviceController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/DeviceController.java @@ -29,8 +29,8 @@ import com.hashmapinc.server.dao.exception.IncorrectParameterException; import com.hashmapinc.server.dao.model.ModelConstants; import com.hashmapinc.server.dao.timeseries.TimeseriesService; -import com.hashmapinc.server.exception.TempusErrorCode; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusErrorCode; +import com.hashmapinc.server.common.data.exception.TempusException; import com.hashmapinc.server.service.security.model.SecurityUser; import com.opencsv.CSVWriter; import lombok.extern.slf4j.Slf4j; diff --git a/application/src/main/java/com/hashmapinc/server/controller/EntityRelationController.java b/application/src/main/java/com/hashmapinc/server/controller/EntityRelationController.java index 280c25594..a8cd33aba 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/EntityRelationController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/EntityRelationController.java @@ -22,8 +22,8 @@ import com.hashmapinc.server.common.data.relation.EntityRelationInfo; import com.hashmapinc.server.common.data.relation.EntityRelationsQuery; import com.hashmapinc.server.common.data.relation.RelationTypeGroup; -import com.hashmapinc.server.exception.TempusErrorCode; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusErrorCode; +import com.hashmapinc.server.common.data.exception.TempusException; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; diff --git a/application/src/main/java/com/hashmapinc/server/controller/EventController.java b/application/src/main/java/com/hashmapinc/server/controller/EventController.java index 40d17e7ea..9d949dfde 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/EventController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/EventController.java @@ -23,8 +23,8 @@ import com.hashmapinc.server.common.data.page.TimePageLink; import com.hashmapinc.server.dao.event.EventService; import com.hashmapinc.server.dao.model.ModelConstants; -import com.hashmapinc.server.exception.TempusErrorCode; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusErrorCode; +import com.hashmapinc.server.common.data.exception.TempusException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; diff --git a/application/src/main/java/com/hashmapinc/server/controller/LoginController.java b/application/src/main/java/com/hashmapinc/server/controller/LoginController.java index 98c598a67..aae9e2f27 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/LoginController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/LoginController.java @@ -17,7 +17,7 @@ package com.hashmapinc.server.controller; import com.fasterxml.jackson.databind.JsonNode; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import com.hashmapinc.server.service.security.auth.jwt.RefreshTokenRequest; import com.hashmapinc.server.service.security.auth.rest.LoginRequest; import com.hashmapinc.server.service.security.auth.rest.LoginResponseToken; diff --git a/application/src/main/java/com/hashmapinc/server/controller/MetadataController.java b/application/src/main/java/com/hashmapinc/server/controller/MetadataController.java index 4242ea2af..af65aede0 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/MetadataController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/MetadataController.java @@ -32,8 +32,8 @@ import com.hashmapinc.server.common.data.metadata.MetadataQueryId; import com.hashmapinc.server.common.data.page.TextPageData; import com.hashmapinc.server.common.data.page.TextPageLink; -import com.hashmapinc.server.exception.TempusErrorCode; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusErrorCode; +import com.hashmapinc.server.common.data.exception.TempusException; import com.hashmapinc.server.requests.IngestMetadataRequest; import lombok.extern.slf4j.Slf4j; import org.joda.time.DateTime; diff --git a/application/src/main/java/com/hashmapinc/server/controller/NodeMetricController.java b/application/src/main/java/com/hashmapinc/server/controller/NodeMetricController.java index aebd92fe3..04f57622c 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/NodeMetricController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/NodeMetricController.java @@ -17,7 +17,7 @@ package com.hashmapinc.server.controller; import com.hashmapinc.server.common.data.cluster.NodeMetric; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; diff --git a/application/src/main/java/com/hashmapinc/server/controller/PluginController.java b/application/src/main/java/com/hashmapinc/server/controller/PluginController.java index 7d5cac654..db2741e2b 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/PluginController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/PluginController.java @@ -29,7 +29,7 @@ import com.hashmapinc.server.common.data.plugin.PluginMetaData; import com.hashmapinc.server.common.data.security.Authority; import com.hashmapinc.server.dao.model.ModelConstants; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import java.util.List; diff --git a/application/src/main/java/com/hashmapinc/server/controller/RuleController.java b/application/src/main/java/com/hashmapinc/server/controller/RuleController.java index 87818cf90..ead440a74 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/RuleController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/RuleController.java @@ -25,7 +25,7 @@ import com.hashmapinc.server.common.data.plugin.ComponentLifecycleEvent; import com.hashmapinc.server.common.data.rule.RuleMetaData; import com.hashmapinc.server.common.data.security.Authority; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; diff --git a/application/src/main/java/com/hashmapinc/server/controller/TempusGatewayConfigurationController.java b/application/src/main/java/com/hashmapinc/server/controller/TempusGatewayConfigurationController.java index af44c8c3f..077fa3964 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/TempusGatewayConfigurationController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/TempusGatewayConfigurationController.java @@ -20,7 +20,7 @@ import com.hashmapinc.server.common.data.id.TempusGatewayConfigurationId; import com.hashmapinc.server.common.data.id.TenantId; import com.hashmapinc.server.common.data.kubernetes.ReplicaSetStatus; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; diff --git a/application/src/main/java/com/hashmapinc/server/controller/TenantController.java b/application/src/main/java/com/hashmapinc/server/controller/TenantController.java index 0b0237ac1..135fbd2e5 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/TenantController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/TenantController.java @@ -25,7 +25,7 @@ import com.hashmapinc.server.common.data.id.TenantId; import com.hashmapinc.server.common.data.page.TextPageData; import com.hashmapinc.server.dao.tenant.TenantService; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; @RestController @RequestMapping("/api") diff --git a/application/src/main/java/com/hashmapinc/server/controller/UserController.java b/application/src/main/java/com/hashmapinc/server/controller/UserController.java index 5f2320dd8..d765d7c99 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/UserController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/UserController.java @@ -28,11 +28,11 @@ import com.hashmapinc.server.common.data.security.Authority; import com.hashmapinc.server.common.data.security.UserCredentials; import com.hashmapinc.server.dao.model.ModelConstants; -import com.hashmapinc.server.exception.TempusErrorCode; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusErrorCode; +import com.hashmapinc.server.common.data.exception.TempusException; import com.hashmapinc.server.requests.CreateUserRequest; import com.hashmapinc.server.requests.IdentityUser; -import com.hashmapinc.server.service.mail.MailService; +import com.hashmapinc.server.dao.mail.MailService; import com.hashmapinc.server.service.security.model.SecurityUser; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; diff --git a/application/src/main/java/com/hashmapinc/server/controller/UserSettingsController.java b/application/src/main/java/com/hashmapinc/server/controller/UserSettingsController.java index a267d4e62..767f85131 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/UserSettingsController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/UserSettingsController.java @@ -19,13 +19,16 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.hashmapinc.server.common.data.*; +import com.hashmapinc.server.common.data.Logo; +import com.hashmapinc.server.common.data.Theme; +import com.hashmapinc.server.common.data.UserSettings; import com.hashmapinc.server.common.data.id.UserId; import com.hashmapinc.server.common.data.security.Authority; import com.hashmapinc.server.dao.logo.LogoService; import com.hashmapinc.server.dao.settings.UserSettingsService; import com.hashmapinc.server.dao.theme.ThemeService; -import com.hashmapinc.server.exception.TempusException; -import com.hashmapinc.server.service.mail.MailService; +import com.hashmapinc.server.common.data.exception.TempusException; +import com.hashmapinc.server.dao.mail.MailService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; diff --git a/application/src/main/java/com/hashmapinc/server/controller/WidgetTypeController.java b/application/src/main/java/com/hashmapinc/server/controller/WidgetTypeController.java index 6eccf2f90..2df7c1746 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/WidgetTypeController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/WidgetTypeController.java @@ -21,7 +21,7 @@ import com.hashmapinc.server.common.data.security.Authority; import com.hashmapinc.server.common.data.widget.WidgetType; import com.hashmapinc.server.dao.model.ModelConstants; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; diff --git a/application/src/main/java/com/hashmapinc/server/controller/WidgetsBundleController.java b/application/src/main/java/com/hashmapinc/server/controller/WidgetsBundleController.java index c3013df4c..5a46caeb6 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/WidgetsBundleController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/WidgetsBundleController.java @@ -23,7 +23,7 @@ import com.hashmapinc.server.common.data.security.Authority; import com.hashmapinc.server.common.data.widget.WidgetsBundle; import com.hashmapinc.server.dao.model.ModelConstants; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import org.springframework.http.HttpStatus; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; diff --git a/application/src/main/java/com/hashmapinc/server/controller/plugin/PluginApiController.java b/application/src/main/java/com/hashmapinc/server/controller/plugin/PluginApiController.java index fc71f2907..857484391 100644 --- a/application/src/main/java/com/hashmapinc/server/controller/plugin/PluginApiController.java +++ b/application/src/main/java/com/hashmapinc/server/controller/plugin/PluginApiController.java @@ -23,7 +23,7 @@ import com.hashmapinc.server.common.data.plugin.PluginMetaData; import com.hashmapinc.server.controller.BaseController; import com.hashmapinc.server.dao.model.ModelConstants; -import com.hashmapinc.server.exception.TempusException; +import com.hashmapinc.server.common.data.exception.TempusException; import com.hashmapinc.server.extensions.api.plugins.PluginApiCallSecurityContext; import com.hashmapinc.server.extensions.api.plugins.PluginConstants; import com.hashmapinc.server.extensions.api.plugins.rest.BasicPluginRestMsg; diff --git a/application/src/main/java/com/hashmapinc/server/exception/TempusErrorResponse.java b/application/src/main/java/com/hashmapinc/server/exception/TempusErrorResponse.java index e203955e9..980099149 100644 --- a/application/src/main/java/com/hashmapinc/server/exception/TempusErrorResponse.java +++ b/application/src/main/java/com/hashmapinc/server/exception/TempusErrorResponse.java @@ -16,6 +16,7 @@ */ package com.hashmapinc.server.exception; +import com.hashmapinc.server.common.data.exception.TempusErrorCode; import org.springframework.http.HttpStatus; import java.util.Date; diff --git a/application/src/main/java/com/hashmapinc/server/exception/TempusErrorResponseHandler.java b/application/src/main/java/com/hashmapinc/server/exception/TempusErrorResponseHandler.java index 8ec619d26..b3fe7919d 100644 --- a/application/src/main/java/com/hashmapinc/server/exception/TempusErrorResponseHandler.java +++ b/application/src/main/java/com/hashmapinc/server/exception/TempusErrorResponseHandler.java @@ -17,6 +17,8 @@ package com.hashmapinc.server.exception; import com.fasterxml.jackson.databind.ObjectMapper; +import com.hashmapinc.server.common.data.exception.TempusErrorCode; +import com.hashmapinc.server.common.data.exception.TempusException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; From 382a04a37a45402cf39da65ad2b91aa1aaff551b Mon Sep 17 00:00:00 2001 From: vikash singh Date: Wed, 2 Jan 2019 23:47:47 +0530 Subject: [PATCH 04/13] Added the sendAttributeMissingEmail and sendAssetNotPresentEmail function to default mail service. --- .../server/dao/mail/DefaultMailService.java | 43 +++++++++++++++++-- .../server/dao/mail/MailService.java | 14 +++--- 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/dao/src/main/java/com/hashmapinc/server/dao/mail/DefaultMailService.java b/dao/src/main/java/com/hashmapinc/server/dao/mail/DefaultMailService.java index 57ccc3e71..86d614307 100644 --- a/dao/src/main/java/com/hashmapinc/server/dao/mail/DefaultMailService.java +++ b/dao/src/main/java/com/hashmapinc/server/dao/mail/DefaultMailService.java @@ -21,6 +21,9 @@ import com.hashmapinc.server.common.data.UserSettings; import com.hashmapinc.server.common.data.exception.TempusErrorCode; import com.hashmapinc.server.common.data.exception.TempusException; +import com.hashmapinc.server.common.data.id.TenantId; +import com.hashmapinc.server.common.data.page.TextPageData; +import com.hashmapinc.server.common.data.page.TextPageLink; import com.hashmapinc.server.dao.exception.IncorrectParameterException; import com.hashmapinc.server.dao.settings.UserSettingsService; import com.hashmapinc.server.dao.user.UserService; @@ -41,6 +44,7 @@ import javax.annotation.PostConstruct; import javax.mail.internet.MimeMessage; import java.io.StringWriter; +import java.util.List; import java.util.Locale; import java.util.Properties; @@ -82,8 +86,8 @@ public VelocityEngine velocityEngine() throws Exception { Properties properties = new Properties(); properties.setProperty("input.encoding", "UTF-8"); properties.setProperty("output.encoding", "UTF-8"); - properties.setProperty("resource.loader", "class"); - properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + properties.setProperty("resource.loader", "classpath"); + properties.setProperty("classpath.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); VelocityEngine velocityEngine = new VelocityEngine(properties); return velocityEngine; } @@ -206,10 +210,41 @@ public void sendPasswordWasResetEmail(String loginLink, String email) throws Tem sendMail(mailSender, mailFrom, email, subject, message); } + @Override + public void sendAttributeMissingMail(String deviceName, TenantId tenantId) throws TempusException { + TextPageData userTextPageData = userService.findTenantAdmins(tenantId,new TextPageLink(300)); + List users = userTextPageData.getData(); + + String subject = messages.getMessage("attribute.missing.subject", null, Locale.US); + + for (User user : users) { + String email = user.getEmail(); + VelocityContext velocityContext = new VelocityContext(); + velocityContext.put(TARGET_EMAIL, email); + //Need to add velocity template for the message + sendMail(mailSender, mailFrom, email, subject, "message"); + } + } + + @Override + public void sendAssetNotPresentMail(String deviceName, TenantId tenantId) throws TempusException { + TextPageData userTextPageData = userService.findTenantAdmins(tenantId,new TextPageLink(300)); + List users = userTextPageData.getData(); + + String subject = messages.getMessage("asset.message.subject", null, Locale.US); + + for (User user : users) { + String email = user.getEmail(); + VelocityContext velocityContext = new VelocityContext(); + velocityContext.put(TARGET_EMAIL, email); + //Need to add velocity template for the message + sendMail(mailSender, mailFrom, email, subject, "message"); + } + } private void sendMail(JavaMailSenderImpl mailSender, - String mailFrom, String email, - String subject, String message) throws TempusException { + String mailFrom, String email, + String subject, String message) throws TempusException { try { MimeMessage mimeMsg = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMsg, UTF_8); diff --git a/dao/src/main/java/com/hashmapinc/server/dao/mail/MailService.java b/dao/src/main/java/com/hashmapinc/server/dao/mail/MailService.java index 03f97bf8f..1f8ad20f1 100644 --- a/dao/src/main/java/com/hashmapinc/server/dao/mail/MailService.java +++ b/dao/src/main/java/com/hashmapinc/server/dao/mail/MailService.java @@ -18,21 +18,25 @@ import com.fasterxml.jackson.databind.JsonNode; import com.hashmapinc.server.common.data.exception.TempusException; +import com.hashmapinc.server.common.data.id.TenantId; public interface MailService { void updateMailConfiguration(); void sendEmail(String email, String subject, String message) throws TempusException; - + void sendTestMail(JsonNode config, String email) throws TempusException; - + void sendActivationEmail(String activationLink, String email) throws TempusException; - + void sendAccountActivatedEmail(String loginLink, String email) throws TempusException; - + void sendResetPasswordEmail(String passwordResetLink, String email) throws TempusException; - + void sendPasswordWasResetEmail(String loginLink, String email) throws TempusException; + void sendAttributeMissingMail(String deviceName , TenantId tenantId) throws TempusException; + + void sendAssetNotPresentMail(String deviceName , TenantId tenantId) throws TempusException; } From ddcee95d4cf77aca0c30944c14e5bc304d80f638 Mon Sep 17 00:00:00 2001 From: vikash singh Date: Wed, 2 Jan 2019 23:50:04 +0530 Subject: [PATCH 05/13] added the notification feature through mail in gateway when parent_asset attribute is missing or parent_asset not present --- .../main/resources/i18n/messages.properties | 3 ++ .../transport/mqtt/MqttTransportHandler.java | 7 ++-- .../mqtt/MqttTransportServerInitializer.java | 7 ++-- .../transport/mqtt/MqttTransportService.java | 6 +++- .../mqtt/session/GatewaySessionCtx.java | 32 ++++++++++++++++++- 5 files changed, 49 insertions(+), 6 deletions(-) diff --git a/application/src/main/resources/i18n/messages.properties b/application/src/main/resources/i18n/messages.properties index 6d3809714..28183e087 100644 --- a/application/src/main/resources/i18n/messages.properties +++ b/application/src/main/resources/i18n/messages.properties @@ -3,3 +3,6 @@ activation.subject=Your account activation on tempus account.activated.subject=tempus - your account has been activated reset.password.subject=tempus - Password reset has been requested password.was.reset.subject=tempus - your account password has been reset +attribute.missing.subject = tempus - parent_asset attribute is missing +asset.message.subject = tempus - parent_asset attribute is not created + diff --git a/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/MqttTransportHandler.java b/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/MqttTransportHandler.java index 7a4ac9cbb..bd50ae731 100644 --- a/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/MqttTransportHandler.java +++ b/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/MqttTransportHandler.java @@ -32,6 +32,7 @@ import com.hashmapinc.server.dao.asset.AssetService; import com.hashmapinc.server.dao.attributes.AttributesService; import com.hashmapinc.server.dao.device.DeviceService; +import com.hashmapinc.server.dao.mail.MailService; import com.hashmapinc.server.dao.relation.RelationService; import com.hashmapinc.server.transport.mqtt.adaptors.MqttTransportAdaptor; import com.hashmapinc.server.transport.mqtt.session.DeviceSessionCtx; @@ -81,6 +82,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement private final AttributesService attributesService; private final AssetService assetService; private final SslHandler sslHandler; + private final MailService mailService; private static final String SPARK_PLUG_NAME_SPACE = "spBv1.0"; private volatile boolean connected; private volatile GatewaySessionCtx gatewaySessionCtx; @@ -88,7 +90,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement private SparkPlugUtils sparkPlugUtils; public MqttTransportHandler(SessionMsgProcessor processor, DeviceService deviceService, DeviceAuthService authService, RelationService relationService, - MqttTransportAdaptor adaptor, SslHandler sslHandler, QuotaService quotaService , AttributesService attributesService ,AssetService assetService) { + MqttTransportAdaptor adaptor, SslHandler sslHandler, QuotaService quotaService , AttributesService attributesService ,AssetService assetService, MailService mailService) { this.processor = processor; this.deviceService = deviceService; this.relationService = relationService; @@ -100,6 +102,7 @@ public MqttTransportHandler(SessionMsgProcessor processor, DeviceService deviceS this.quotaService = quotaService; this.attributesService = attributesService; this.assetService = assetService; + this.mailService = mailService; } @Override @@ -456,7 +459,7 @@ private void checkGatewaySession(MqttConnectMessage msg) { JsonNode gatewayNode = infoNode.get("gateway"); JsonNode topic = infoNode.get(TOPIC); if (gatewayNode != null && gatewayNode.asBoolean()) { - gatewaySessionCtx = new GatewaySessionCtx(processor, deviceService, authService, relationService, deviceSessionCtx,attributesService,assetService); + gatewaySessionCtx = new GatewaySessionCtx(processor, deviceService, authService, relationService, deviceSessionCtx,attributesService,assetService, mailService); if((msg.payload().willTopic() != null) && msg.payload().willTopic().startsWith(SPARK_PLUG_NAME_SPACE)){ sparkPlugDecodeService = new SparkPlugDecodeService(); } diff --git a/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/MqttTransportServerInitializer.java b/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/MqttTransportServerInitializer.java index 1dc9f001b..c357da596 100644 --- a/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/MqttTransportServerInitializer.java +++ b/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/MqttTransportServerInitializer.java @@ -18,6 +18,7 @@ import com.hashmapinc.server.dao.asset.AssetService; import com.hashmapinc.server.dao.attributes.AttributesService; +import com.hashmapinc.server.dao.mail.MailService; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; @@ -45,10 +46,11 @@ public class MqttTransportServerInitializer extends ChannelInitializer devices; private ChannelHandlerContext channel; - public GatewaySessionCtx(SessionMsgProcessor processor, DeviceService deviceService, DeviceAuthService authService, RelationService relationService, DeviceSessionCtx gatewaySessionCtx, AttributesService attributesService , AssetService assetService) { + public GatewaySessionCtx(SessionMsgProcessor processor, DeviceService deviceService, DeviceAuthService authService, RelationService relationService, DeviceSessionCtx gatewaySessionCtx, AttributesService attributesService , AssetService assetService, MailService mailService) { this.processor = processor; this.deviceService = deviceService; this.authService = authService; @@ -89,6 +93,7 @@ public GatewaySessionCtx(SessionMsgProcessor processor, DeviceService deviceServ this.gatewaySessionId = gatewaySessionCtx.getSessionId(); this.attributesService = attributesService; this.assetService = assetService; + this.mailService = mailService; this.devices = new HashMap<>(); } @@ -274,6 +279,13 @@ public void onDeviceAttributes(MqttPublishMessage mqttMsg) throws AdaptorExcepti } catch(Exception exp) { log.warn("Failed to fetch parentAssetAttribute : [{}]", parentAssetAttribute.get().getKey()); } + }else { + try { + sendParentAssetMissingEmail(deviceName, gateway.getTenantId()); + }catch (Exception ex){ + //Need to lod the exception exception + log.warn("Failed to send the parentAssetAttributeMissingEmail of deviceName: [{}]",deviceName) ; + } } GatewayDeviceSessionCtx deviceSessionCtx = devices.get(deviceName); @@ -285,12 +297,30 @@ public void onDeviceAttributes(MqttPublishMessage mqttMsg) throws AdaptorExcepti } } + + private void sendParentAssetMissingEmail(String deviceName , TenantId tenantId) throws TempusException { + mailService.sendAttributeMissingMail(deviceName,tenantId); + } + private void createParentAssetRelationWithDevice(Device device,String assetName) { Optional asset = assetService.findAssetByTenantIdAndName(gateway.getTenantId(),assetName); asset.ifPresent(asset1 -> { EntityRelation relation = new EntityRelation(device.getId(), asset1.getId(), EntityRelation.CONTAINS_TYPE); relationService.saveRelation(relation); }); + + if(asset.isEmpty()){ + try { + sendAssetNotPresentEmail(device.getName(), gateway.getTenantId()); + }catch (Exception ex){ + //Need to lod the exception exception + log.warn("Failed to send the parentAssetAttributeMissingEmail of deviceName: [{}]",device.getName()) ; + } + } + } + + private void sendAssetNotPresentEmail(String deviceName , TenantId tenantId) throws TempusException { + mailService.sendAssetNotPresentMail(deviceName,tenantId); } private void deleteParentAssetRelation(Device device ,AttributeKvEntry parentAssetAttribute) { From 6078a86964e37dc09a393b56bec3f7ecf927c665 Mon Sep 17 00:00:00 2001 From: vikash singh Date: Mon, 7 Jan 2019 01:09:32 +0530 Subject: [PATCH 06/13] moved the mail templates and properties file from application to dao --- .../main/resources/i18n/messages.properties | 4 +- .../resources/templates/account.activated.vm | 0 .../src/main/resources/templates/action.vm | 0 .../main/resources/templates/activation.vm | 0 .../main/resources/templates/asset.absent.vm | 114 ++++++++++++++++++ .../resources/templates/attribute.missing.vm | 114 ++++++++++++++++++ .../src/main/resources/templates/config.vm | 0 .../resources/templates/password.was.reset.vm | 0 .../resources/templates/reset.password.vm | 0 .../src/main/resources/templates/test.vm | 0 .../src/main/resources/velocity.properties | 0 11 files changed, 230 insertions(+), 2 deletions(-) rename {application => dao}/src/main/resources/i18n/messages.properties (68%) rename {application => dao}/src/main/resources/templates/account.activated.vm (100%) rename {application => dao}/src/main/resources/templates/action.vm (100%) rename {application => dao}/src/main/resources/templates/activation.vm (100%) create mode 100644 dao/src/main/resources/templates/asset.absent.vm create mode 100644 dao/src/main/resources/templates/attribute.missing.vm rename {application => dao}/src/main/resources/templates/config.vm (100%) rename {application => dao}/src/main/resources/templates/password.was.reset.vm (100%) rename {application => dao}/src/main/resources/templates/reset.password.vm (100%) rename {application => dao}/src/main/resources/templates/test.vm (100%) rename {application => dao}/src/main/resources/velocity.properties (100%) diff --git a/application/src/main/resources/i18n/messages.properties b/dao/src/main/resources/i18n/messages.properties similarity index 68% rename from application/src/main/resources/i18n/messages.properties rename to dao/src/main/resources/i18n/messages.properties index 28183e087..a3c6e340d 100644 --- a/application/src/main/resources/i18n/messages.properties +++ b/dao/src/main/resources/i18n/messages.properties @@ -3,6 +3,6 @@ activation.subject=Your account activation on tempus account.activated.subject=tempus - your account has been activated reset.password.subject=tempus - Password reset has been requested password.was.reset.subject=tempus - your account password has been reset -attribute.missing.subject = tempus - parent_asset attribute is missing -asset.message.subject = tempus - parent_asset attribute is not created +attribute.missing.subject = Tempus - parent_asset attribute +asset.message.subject = Tempus - parent_asset diff --git a/application/src/main/resources/templates/account.activated.vm b/dao/src/main/resources/templates/account.activated.vm similarity index 100% rename from application/src/main/resources/templates/account.activated.vm rename to dao/src/main/resources/templates/account.activated.vm diff --git a/application/src/main/resources/templates/action.vm b/dao/src/main/resources/templates/action.vm similarity index 100% rename from application/src/main/resources/templates/action.vm rename to dao/src/main/resources/templates/action.vm diff --git a/application/src/main/resources/templates/activation.vm b/dao/src/main/resources/templates/activation.vm similarity index 100% rename from application/src/main/resources/templates/activation.vm rename to dao/src/main/resources/templates/activation.vm diff --git a/dao/src/main/resources/templates/asset.absent.vm b/dao/src/main/resources/templates/asset.absent.vm new file mode 100644 index 000000000..27931c569 --- /dev/null +++ b/dao/src/main/resources/templates/asset.absent.vm @@ -0,0 +1,114 @@ +#* + * Copyright © 2016-2018 The Thingsboard Authors + * Modifications © 2017-2018 Hashmap, Inc + * + * 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. + *# + + + + + +tempus - Account Activation + + + + + + + + + + + +
+
+ + +
+ + + + + + + + + + +
+

Tempus Data quality issue

+
+ ${deviceName} has missing parent_asset ${assetName} which is linked to the parent data model object +
+ — The Tempus Cloud Administrator +
+ +
+
+ + \ No newline at end of file diff --git a/dao/src/main/resources/templates/attribute.missing.vm b/dao/src/main/resources/templates/attribute.missing.vm new file mode 100644 index 000000000..1d013bdbd --- /dev/null +++ b/dao/src/main/resources/templates/attribute.missing.vm @@ -0,0 +1,114 @@ +#* + * Copyright © 2016-2018 The Thingsboard Authors + * Modifications © 2017-2018 Hashmap, Inc + * + * 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. + *# + + + + + +tempus - Account Activation + + + + + + + + + + + +
+
+ + +
+ + + + + + + + + + +
+

Tempus Data quality issue

+
+ ${deviceName} has missing parent_asset attribute which is linked to the parent data model object +
+ — The Tempus Cloud Administrator +
+ +
+
+ + \ No newline at end of file diff --git a/application/src/main/resources/templates/config.vm b/dao/src/main/resources/templates/config.vm similarity index 100% rename from application/src/main/resources/templates/config.vm rename to dao/src/main/resources/templates/config.vm diff --git a/application/src/main/resources/templates/password.was.reset.vm b/dao/src/main/resources/templates/password.was.reset.vm similarity index 100% rename from application/src/main/resources/templates/password.was.reset.vm rename to dao/src/main/resources/templates/password.was.reset.vm diff --git a/application/src/main/resources/templates/reset.password.vm b/dao/src/main/resources/templates/reset.password.vm similarity index 100% rename from application/src/main/resources/templates/reset.password.vm rename to dao/src/main/resources/templates/reset.password.vm diff --git a/application/src/main/resources/templates/test.vm b/dao/src/main/resources/templates/test.vm similarity index 100% rename from application/src/main/resources/templates/test.vm rename to dao/src/main/resources/templates/test.vm diff --git a/application/src/main/resources/velocity.properties b/dao/src/main/resources/velocity.properties similarity index 100% rename from application/src/main/resources/velocity.properties rename to dao/src/main/resources/velocity.properties From 14ff3c667f3f30947d1401387422bbe87e5f9e17 Mon Sep 17 00:00:00 2001 From: vikash singh Date: Mon, 7 Jan 2019 01:11:03 +0530 Subject: [PATCH 07/13] added the test case for the mail service --- .../dao/service/mail/BaseMailServiceTest.java | 97 +++++++++++++++++++ .../mail/nosql/MailServiceNoSqlTest.java | 24 +++++ .../service/mail/sql/MailServiceSqlTest.java | 24 +++++ 3 files changed, 145 insertions(+) create mode 100644 dao/src/it/java/com/hashmapinc/server/dao/service/mail/BaseMailServiceTest.java create mode 100644 dao/src/it/java/com/hashmapinc/server/dao/service/mail/nosql/MailServiceNoSqlTest.java create mode 100644 dao/src/it/java/com/hashmapinc/server/dao/service/mail/sql/MailServiceSqlTest.java diff --git a/dao/src/it/java/com/hashmapinc/server/dao/service/mail/BaseMailServiceTest.java b/dao/src/it/java/com/hashmapinc/server/dao/service/mail/BaseMailServiceTest.java new file mode 100644 index 000000000..985067d1c --- /dev/null +++ b/dao/src/it/java/com/hashmapinc/server/dao/service/mail/BaseMailServiceTest.java @@ -0,0 +1,97 @@ +/** + * Copyright © 2016-2018 The Thingsboard Authors + * Modifications © 2017-2018 Hashmap, Inc + * + * 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 com.hashmapinc.server.dao.service.mail; + +import com.hashmapinc.server.common.data.User; +import com.hashmapinc.server.common.data.exception.TempusException; +import com.hashmapinc.server.common.data.id.TenantId; +import com.hashmapinc.server.common.data.page.TextPageData; +import com.hashmapinc.server.common.data.page.TextPageLink; +import com.hashmapinc.server.common.data.security.Authority; +import com.hashmapinc.server.dao.mail.DefaultMailService; +import com.hashmapinc.server.dao.service.AbstractServiceTest; +import com.hashmapinc.server.dao.user.UserService; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.VelocityEngine; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.context.MessageSource; +import org.springframework.mail.javamail.JavaMailSenderImpl; +import org.springframework.test.util.ReflectionTestUtils; + +import javax.mail.internet.MimeMessage; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.UUID; + +import static org.mockito.Mockito.*; + +@RunWith(MockitoJUnitRunner.class) +public abstract class BaseMailServiceTest extends AbstractServiceTest { + + @InjectMocks + private DefaultMailService defaultMailService; + @Mock + private JavaMailSenderImpl mailSender; + @Mock + private UserService userService; + @Mock + private MessageSource messages; + @Mock + private VelocityEngine engine; + @Mock + private MimeMessage mimeMessage; + + private TenantId tenantId; + private User tenantAdmin1; + + @Before + public void setup(){ + ReflectionTestUtils.setField(defaultMailService, "mailFrom", "sysadmin@tempus.org"); //dependency injection + + tenantId = new TenantId(UUID.randomUUID()); + tenantAdmin1 = new User(); + tenantAdmin1.setAuthority(Authority.TENANT_ADMIN); + tenantAdmin1.setTenantId(tenantId); + tenantAdmin1.setEmail("tenant1@tempus.org"); + } + + @Test + public void testMailService() throws TempusException { + List users = new ArrayList<>(); + users.add(tenantAdmin1); + TextPageData< User > userTextPageData = new TextPageData<>(users,null,false); + + when(userService.findTenantAdmins(Mockito.any(TenantId.class),Mockito.any(TextPageLink.class))).thenReturn(userTextPageData); + when(messages.getMessage("attribute.missing.subject", null, Locale.US)).thenReturn("Tempus - parent_asset attribute"); + when(engine.mergeTemplate(Mockito.anyString(), Mockito.anyString(), Mockito.any(VelocityContext.class), Mockito.any(StringWriter.class))).thenReturn(true); + when(mailSender.createMimeMessage()).thenReturn(mimeMessage); + doNothing().when(mailSender).send(Mockito.any(MimeMessage.class)); + + defaultMailService.sendAttributeMissingMail("device_1",tenantId); + + Mockito.verify(mailSender,times(1)).send(Mockito.any(MimeMessage.class)); + } + +} \ No newline at end of file diff --git a/dao/src/it/java/com/hashmapinc/server/dao/service/mail/nosql/MailServiceNoSqlTest.java b/dao/src/it/java/com/hashmapinc/server/dao/service/mail/nosql/MailServiceNoSqlTest.java new file mode 100644 index 000000000..e48c8cad8 --- /dev/null +++ b/dao/src/it/java/com/hashmapinc/server/dao/service/mail/nosql/MailServiceNoSqlTest.java @@ -0,0 +1,24 @@ +/** + * Copyright © 2016-2018 The Thingsboard Authors + * Modifications © 2017-2018 Hashmap, Inc + * + * 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 com.hashmapinc.server.dao.service.mail.nosql; + +import com.hashmapinc.server.dao.service.DaoNoSqlTest; +import com.hashmapinc.server.dao.service.mail.BaseMailServiceTest; + +@DaoNoSqlTest +public class MailServiceNoSqlTest extends BaseMailServiceTest { +} diff --git a/dao/src/it/java/com/hashmapinc/server/dao/service/mail/sql/MailServiceSqlTest.java b/dao/src/it/java/com/hashmapinc/server/dao/service/mail/sql/MailServiceSqlTest.java new file mode 100644 index 000000000..9cdef78cd --- /dev/null +++ b/dao/src/it/java/com/hashmapinc/server/dao/service/mail/sql/MailServiceSqlTest.java @@ -0,0 +1,24 @@ +/** + * Copyright © 2016-2018 The Thingsboard Authors + * Modifications © 2017-2018 Hashmap, Inc + * + * 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 com.hashmapinc.server.dao.service.mail.sql; + +import com.hashmapinc.server.dao.service.DaoSqlTest; +import com.hashmapinc.server.dao.service.mail.BaseMailServiceTest; + +@DaoSqlTest +public class MailServiceSqlTest extends BaseMailServiceTest { +} From c782f8d53d6d32fbf2a3ea1b3c6cfc3d5e1a61a5 Mon Sep 17 00:00:00 2001 From: vikash singh Date: Mon, 7 Jan 2019 01:12:47 +0530 Subject: [PATCH 08/13] used the velocity template in the sendAttributeMissingMail and sendAssetNotPresentMail method in mail service --- .../server/dao/mail/DefaultMailService.java | 29 ++++++++---- .../server/dao/mail/MailService.java | 2 +- .../mqtt/session/GatewaySessionCtx.java | 47 ++++++++++++------- 3 files changed, 49 insertions(+), 29 deletions(-) diff --git a/dao/src/main/java/com/hashmapinc/server/dao/mail/DefaultMailService.java b/dao/src/main/java/com/hashmapinc/server/dao/mail/DefaultMailService.java index 86d614307..448814051 100644 --- a/dao/src/main/java/com/hashmapinc/server/dao/mail/DefaultMailService.java +++ b/dao/src/main/java/com/hashmapinc/server/dao/mail/DefaultMailService.java @@ -55,6 +55,8 @@ public class DefaultMailService implements MailService { public static final String MAIL_PROP = "mail."; public static final String TARGET_EMAIL = "targetEmail"; public static final String UTF_8 = "UTF-8"; + private static final String DEVICE_NAME = "deviceName"; + private static final String ASSET_NAME = "assetName"; @Autowired private MessageSource messages; @@ -149,7 +151,7 @@ public void sendTestMail(JsonNode jsonConfig, String email) throws TempusExcepti VelocityContext velocityContext = new VelocityContext(); velocityContext.put(TARGET_EMAIL, email); - String message = mergeVelocityTemplate("test.vm", velocityContext); + String message = mergeVelocityTemplate("templates/test.vm", velocityContext); sendMail(testMailSender, from, email, subject, message); } @@ -163,7 +165,7 @@ public void sendActivationEmail(String activationLink, String email) throws Temp velocityContext.put("activationLink", activationLink); velocityContext.put(TARGET_EMAIL, email); - String message = mergeVelocityTemplate("activation.vm", velocityContext); + String message = mergeVelocityTemplate("templates/activation.vm", velocityContext); sendMail(mailSender, mailFrom, email, subject, message); } @@ -177,7 +179,7 @@ public void sendAccountActivatedEmail(String loginLink, String email) throws Tem velocityContext.put("loginLink", loginLink); velocityContext.put(TARGET_EMAIL, email); - String message = mergeVelocityTemplate("account.activated.vm", velocityContext); + String message = mergeVelocityTemplate("templates/account.activated.vm", velocityContext); sendMail(mailSender, mailFrom, email, subject, message); } @@ -191,7 +193,7 @@ public void sendResetPasswordEmail(String passwordResetLink, String email) throw velocityContext.put("passwordResetLink", passwordResetLink); velocityContext.put(TARGET_EMAIL, email); - String message = mergeVelocityTemplate("reset.password.vm", velocityContext); + String message = mergeVelocityTemplate("templates/reset.password.vm", velocityContext); sendMail(mailSender, mailFrom, email, subject, message); } @@ -205,7 +207,7 @@ public void sendPasswordWasResetEmail(String loginLink, String email) throws Tem velocityContext.put("loginLink", loginLink); velocityContext.put(TARGET_EMAIL, email); - String message = mergeVelocityTemplate("password.was.reset.vm", velocityContext); + String message = mergeVelocityTemplate("templates/password.was.reset.vm", velocityContext); sendMail(mailSender, mailFrom, email, subject, message); } @@ -216,29 +218,36 @@ public void sendAttributeMissingMail(String deviceName, TenantId tenantId) throw List users = userTextPageData.getData(); String subject = messages.getMessage("attribute.missing.subject", null, Locale.US); + subject = subject + " of " + deviceName + " missing"; for (User user : users) { String email = user.getEmail(); VelocityContext velocityContext = new VelocityContext(); + velocityContext.put(DEVICE_NAME,deviceName); velocityContext.put(TARGET_EMAIL, email); - //Need to add velocity template for the message - sendMail(mailSender, mailFrom, email, subject, "message"); + String message = mergeVelocityTemplate("templates/attribute.missing.vm", velocityContext); + + sendMail(mailSender, mailFrom, email, subject, message); } } @Override - public void sendAssetNotPresentMail(String deviceName, TenantId tenantId) throws TempusException { + public void sendAssetNotPresentMail(String deviceName, String assetName , TenantId tenantId) throws TempusException { TextPageData userTextPageData = userService.findTenantAdmins(tenantId,new TextPageLink(300)); List users = userTextPageData.getData(); String subject = messages.getMessage("asset.message.subject", null, Locale.US); + subject = subject + " " + assetName + " of " + deviceName + " is absent"; for (User user : users) { String email = user.getEmail(); VelocityContext velocityContext = new VelocityContext(); velocityContext.put(TARGET_EMAIL, email); - //Need to add velocity template for the message - sendMail(mailSender, mailFrom, email, subject, "message"); + velocityContext.put(DEVICE_NAME,deviceName); + velocityContext.put(ASSET_NAME,assetName); + String message = mergeVelocityTemplate("templates/asset.absent.vm", velocityContext); + + sendMail(mailSender, mailFrom, email, subject, message); } } diff --git a/dao/src/main/java/com/hashmapinc/server/dao/mail/MailService.java b/dao/src/main/java/com/hashmapinc/server/dao/mail/MailService.java index 1f8ad20f1..1a99aea52 100644 --- a/dao/src/main/java/com/hashmapinc/server/dao/mail/MailService.java +++ b/dao/src/main/java/com/hashmapinc/server/dao/mail/MailService.java @@ -38,5 +38,5 @@ public interface MailService { void sendAttributeMissingMail(String deviceName , TenantId tenantId) throws TempusException; - void sendAssetNotPresentMail(String deviceName , TenantId tenantId) throws TempusException; + void sendAssetNotPresentMail(String deviceName ,String assetName, TenantId tenantId) throws TempusException; } diff --git a/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/session/GatewaySessionCtx.java b/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/session/GatewaySessionCtx.java index d6d3d23b3..fda7fa78f 100644 --- a/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/session/GatewaySessionCtx.java +++ b/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/session/GatewaySessionCtx.java @@ -270,22 +270,32 @@ public void onDeviceAttributes(MqttPublishMessage mqttMsg) throws AdaptorExcepti Set attributeKvEntries = request.getAttributes(); Optional parentAssetAttribute = findParentAssetAttribute(attributeKvEntries); - if(parentAssetAttribute.isPresent()) { - Device device = deviceService.findDeviceByTenantIdAndName(gateway.getTenantId(), deviceName); - try { - Optional savedParentAssetAttribute = attributesService.find(device.getId(), DataConstants.CLIENT_SCOPE, PARENT_ASSET).get(); - savedParentAssetAttribute.ifPresent(attributeKvEntry -> deleteParentAssetRelation(device, attributeKvEntry)); - createParentAssetRelationWithDevice(device,parentAssetAttribute.get().getValueAsString()); - } - catch(Exception exp) { - log.warn("Failed to fetch parentAssetAttribute : [{}]", parentAssetAttribute.get().getKey()); } - }else { - try { - sendParentAssetMissingEmail(deviceName, gateway.getTenantId()); - }catch (Exception ex){ - //Need to lod the exception exception - log.warn("Failed to send the parentAssetAttributeMissingEmail of deviceName: [{}]",deviceName) ; + + Device device = deviceService.findDeviceByTenantIdAndName(gateway.getTenantId(), deviceName); + try { + Optional savedParentAssetAttribute = attributesService.find(device.getId(), DataConstants.CLIENT_SCOPE, PARENT_ASSET).get(); + + + if (parentAssetAttribute.isPresent()) { + try { + savedParentAssetAttribute.ifPresent(attributeKvEntry -> deleteParentAssetRelation(device, attributeKvEntry)); + createParentAssetRelationWithDevice(device, parentAssetAttribute.get().getValueAsString()); + } catch (Exception exp) { + log.warn("Failed to fetch parentAssetAttribute : [{}]", parentAssetAttribute.get().getKey()); + } + } else { + if (savedParentAssetAttribute.isEmpty()) { + try { + sendParentAssetMissingEmail(deviceName, gateway.getTenantId()); + } catch (Exception ex) { + //Need to lod the exception exception + log.warn("Failed to send the parentAssetAttributeMissingEmail of deviceName: [{}]", deviceName); + } + } } + }catch (Exception exp){ + log.warn("Failed to fetch parentAssetAttribute : [{}]", parentAssetAttribute.get().getKey()); + } GatewayDeviceSessionCtx deviceSessionCtx = devices.get(deviceName); @@ -300,6 +310,7 @@ public void onDeviceAttributes(MqttPublishMessage mqttMsg) throws AdaptorExcepti private void sendParentAssetMissingEmail(String deviceName , TenantId tenantId) throws TempusException { mailService.sendAttributeMissingMail(deviceName,tenantId); + } private void createParentAssetRelationWithDevice(Device device,String assetName) { @@ -311,7 +322,7 @@ private void createParentAssetRelationWithDevice(Device device,String assetName) if(asset.isEmpty()){ try { - sendAssetNotPresentEmail(device.getName(), gateway.getTenantId()); + sendAssetNotPresentEmail(device.getName(),assetName, gateway.getTenantId()); }catch (Exception ex){ //Need to lod the exception exception log.warn("Failed to send the parentAssetAttributeMissingEmail of deviceName: [{}]",device.getName()) ; @@ -319,8 +330,8 @@ private void createParentAssetRelationWithDevice(Device device,String assetName) } } - private void sendAssetNotPresentEmail(String deviceName , TenantId tenantId) throws TempusException { - mailService.sendAssetNotPresentMail(deviceName,tenantId); + private void sendAssetNotPresentEmail(String deviceName ,String assetName, TenantId tenantId) throws TempusException { + mailService.sendAssetNotPresentMail(deviceName,assetName,tenantId); } private void deleteParentAssetRelation(Device device ,AttributeKvEntry parentAssetAttribute) { From 7beebb78f6cd17eef2762ca1c8a6b12a80666404 Mon Sep 17 00:00:00 2001 From: vikash singh Date: Mon, 7 Jan 2019 12:34:23 +0530 Subject: [PATCH 09/13] Refactored the onDeviceAttribute method in GatewaySessionCtx --- .../mqtt/session/GatewaySessionCtx.java | 29 +++++++------------ 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/session/GatewaySessionCtx.java b/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/session/GatewaySessionCtx.java index fda7fa78f..711b50dbd 100644 --- a/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/session/GatewaySessionCtx.java +++ b/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/session/GatewaySessionCtx.java @@ -275,27 +275,15 @@ public void onDeviceAttributes(MqttPublishMessage mqttMsg) throws AdaptorExcepti try { Optional savedParentAssetAttribute = attributesService.find(device.getId(), DataConstants.CLIENT_SCOPE, PARENT_ASSET).get(); - if (parentAssetAttribute.isPresent()) { - try { - savedParentAssetAttribute.ifPresent(attributeKvEntry -> deleteParentAssetRelation(device, attributeKvEntry)); - createParentAssetRelationWithDevice(device, parentAssetAttribute.get().getValueAsString()); - } catch (Exception exp) { - log.warn("Failed to fetch parentAssetAttribute : [{}]", parentAssetAttribute.get().getKey()); - } - } else { - if (savedParentAssetAttribute.isEmpty()) { - try { - sendParentAssetMissingEmail(deviceName, gateway.getTenantId()); - } catch (Exception ex) { - //Need to lod the exception exception - log.warn("Failed to send the parentAssetAttributeMissingEmail of deviceName: [{}]", deviceName); - } - } + savedParentAssetAttribute.ifPresent(attributeKvEntry -> deleteParentAssetRelation(device, attributeKvEntry)); + createParentAssetRelationWithDevice(device, parentAssetAttribute.get().getValueAsString()); } + else if (savedParentAssetAttribute.isEmpty()) + sendParentAssetMissingEmail(deviceName, gateway.getTenantId()); + }catch (Exception exp){ log.warn("Failed to fetch parentAssetAttribute : [{}]", parentAssetAttribute.get().getKey()); - } GatewayDeviceSessionCtx deviceSessionCtx = devices.get(deviceName); @@ -309,8 +297,11 @@ public void onDeviceAttributes(MqttPublishMessage mqttMsg) throws AdaptorExcepti private void sendParentAssetMissingEmail(String deviceName , TenantId tenantId) throws TempusException { - mailService.sendAttributeMissingMail(deviceName,tenantId); - + try { + mailService.sendAttributeMissingMail(deviceName,tenantId); + }catch (TempusException tempusException) { + log.warn(tempusException.getMessage()); + } } private void createParentAssetRelationWithDevice(Device device,String assetName) { From 4f860fc261750a8c1196686f5a9c68218c0c8810 Mon Sep 17 00:00:00 2001 From: vikash singh Date: Mon, 7 Jan 2019 12:34:54 +0530 Subject: [PATCH 10/13] added the test case for the mailService --- .../test/mail/MailServiceTest.java} | 50 +++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) rename dao/src/{it/java/com/hashmapinc/server/dao/service/mail/BaseMailServiceTest.java => main/test/mail/MailServiceTest.java} (60%) diff --git a/dao/src/it/java/com/hashmapinc/server/dao/service/mail/BaseMailServiceTest.java b/dao/src/main/test/mail/MailServiceTest.java similarity index 60% rename from dao/src/it/java/com/hashmapinc/server/dao/service/mail/BaseMailServiceTest.java rename to dao/src/main/test/mail/MailServiceTest.java index 985067d1c..4b924830f 100644 --- a/dao/src/it/java/com/hashmapinc/server/dao/service/mail/BaseMailServiceTest.java +++ b/dao/src/main/test/mail/MailServiceTest.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.hashmapinc.server.dao.service.mail; +package mail; import com.hashmapinc.server.common.data.User; import com.hashmapinc.server.common.data.exception.TempusException; @@ -22,8 +22,8 @@ import com.hashmapinc.server.common.data.page.TextPageData; import com.hashmapinc.server.common.data.page.TextPageLink; import com.hashmapinc.server.common.data.security.Authority; +import com.hashmapinc.server.dao.exception.IncorrectParameterException; import com.hashmapinc.server.dao.mail.DefaultMailService; -import com.hashmapinc.server.dao.service.AbstractServiceTest; import com.hashmapinc.server.dao.user.UserService; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; @@ -48,7 +48,7 @@ import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) -public abstract class BaseMailServiceTest extends AbstractServiceTest { +public class MailServiceTest { @InjectMocks private DefaultMailService defaultMailService; @@ -65,6 +65,9 @@ public abstract class BaseMailServiceTest extends AbstractServiceTest { private TenantId tenantId; private User tenantAdmin1; + private User tenantAdmin2; + + public static final String INCORRECT_TENANT_ID = "Incorrect tenantId "; @Before public void setup(){ @@ -75,10 +78,15 @@ public void setup(){ tenantAdmin1.setAuthority(Authority.TENANT_ADMIN); tenantAdmin1.setTenantId(tenantId); tenantAdmin1.setEmail("tenant1@tempus.org"); + + tenantAdmin2 = new User(); + tenantAdmin2.setAuthority(Authority.TENANT_ADMIN); + tenantAdmin2.setTenantId(tenantId); + tenantAdmin2.setEmail("tenant1@tempus.org"); } @Test - public void testMailService() throws TempusException { + public void testSendAttributeMissingMailWithOneTenantUser() throws TempusException { List users = new ArrayList<>(); users.add(tenantAdmin1); TextPageData< User > userTextPageData = new TextPageData<>(users,null,false); @@ -94,4 +102,38 @@ public void testMailService() throws TempusException { Mockito.verify(mailSender,times(1)).send(Mockito.any(MimeMessage.class)); } + @Test + public void testSendAttributeMissingMailWithTwoTenantUser() throws TempusException { + List users = new ArrayList<>(); + users.add(tenantAdmin1); + users.add(tenantAdmin2); + TextPageData< User > userTextPageData = new TextPageData<>(users,null,false); + + when(userService.findTenantAdmins(Mockito.any(TenantId.class),Mockito.any(TextPageLink.class))).thenReturn(userTextPageData); + when(messages.getMessage("attribute.missing.subject", null, Locale.US)).thenReturn("Tempus - parent_asset attribute"); + when(engine.mergeTemplate(Mockito.anyString(), Mockito.anyString(), Mockito.any(VelocityContext.class), Mockito.any(StringWriter.class))).thenReturn(true); + when(mailSender.createMimeMessage()).thenReturn(mimeMessage); + doNothing().when(mailSender).send(Mockito.any(MimeMessage.class)); + + defaultMailService.sendAttributeMissingMail("device_1",tenantId); + + Mockito.verify(mailSender,times(2)).send(Mockito.any(MimeMessage.class)); + } + + @Test(expected = IncorrectParameterException.class) + public void testSendAttributeMissingMailWithInvalidTenantId() throws TempusException { + List users = new ArrayList<>(); + users.add(tenantAdmin1); + + TextPageData< User > userTextPageData = new TextPageData<>(users,null,false); + + tenantId = null; + String exceptionMessage = INCORRECT_TENANT_ID + tenantId; + when(userService.findTenantAdmins(Mockito.any(TenantId.class),Mockito.any(TextPageLink.class))).thenThrow(new IncorrectParameterException(exceptionMessage)); + + defaultMailService.sendAttributeMissingMail("device_1",tenantId); + + Mockito.verify(mailSender,times(0)).send(Mockito.any(MimeMessage.class)); + } + } \ No newline at end of file From f9fbc4dc86a0b47c7b3409fe9cf4341a42a3190d Mon Sep 17 00:00:00 2001 From: vikash singh Date: Mon, 7 Jan 2019 12:38:12 +0530 Subject: [PATCH 11/13] deleted the mailServiceNoSqlTest and mailServiceSqlTest --- .../mail/nosql/MailServiceNoSqlTest.java | 24 ------------------- .../service/mail/sql/MailServiceSqlTest.java | 24 ------------------- 2 files changed, 48 deletions(-) delete mode 100644 dao/src/it/java/com/hashmapinc/server/dao/service/mail/nosql/MailServiceNoSqlTest.java delete mode 100644 dao/src/it/java/com/hashmapinc/server/dao/service/mail/sql/MailServiceSqlTest.java diff --git a/dao/src/it/java/com/hashmapinc/server/dao/service/mail/nosql/MailServiceNoSqlTest.java b/dao/src/it/java/com/hashmapinc/server/dao/service/mail/nosql/MailServiceNoSqlTest.java deleted file mode 100644 index e48c8cad8..000000000 --- a/dao/src/it/java/com/hashmapinc/server/dao/service/mail/nosql/MailServiceNoSqlTest.java +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright © 2016-2018 The Thingsboard Authors - * Modifications © 2017-2018 Hashmap, Inc - * - * 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 com.hashmapinc.server.dao.service.mail.nosql; - -import com.hashmapinc.server.dao.service.DaoNoSqlTest; -import com.hashmapinc.server.dao.service.mail.BaseMailServiceTest; - -@DaoNoSqlTest -public class MailServiceNoSqlTest extends BaseMailServiceTest { -} diff --git a/dao/src/it/java/com/hashmapinc/server/dao/service/mail/sql/MailServiceSqlTest.java b/dao/src/it/java/com/hashmapinc/server/dao/service/mail/sql/MailServiceSqlTest.java deleted file mode 100644 index 9cdef78cd..000000000 --- a/dao/src/it/java/com/hashmapinc/server/dao/service/mail/sql/MailServiceSqlTest.java +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright © 2016-2018 The Thingsboard Authors - * Modifications © 2017-2018 Hashmap, Inc - * - * 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 com.hashmapinc.server.dao.service.mail.sql; - -import com.hashmapinc.server.dao.service.DaoSqlTest; -import com.hashmapinc.server.dao.service.mail.BaseMailServiceTest; - -@DaoSqlTest -public class MailServiceSqlTest extends BaseMailServiceTest { -} From 1434a0031653516094e6500cb9283407328800bf Mon Sep 17 00:00:00 2001 From: vikash singh Date: Fri, 11 Jan 2019 11:25:37 +0530 Subject: [PATCH 12/13] Excluded the MailService bean from creation in the abstractServiceTest. --- .../hashmapinc/server/dao/service/AbstractServiceTest.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dao/src/it/java/com/hashmapinc/server/dao/service/AbstractServiceTest.java b/dao/src/it/java/com/hashmapinc/server/dao/service/AbstractServiceTest.java index 47de43c93..f27f56304 100644 --- a/dao/src/it/java/com/hashmapinc/server/dao/service/AbstractServiceTest.java +++ b/dao/src/it/java/com/hashmapinc/server/dao/service/AbstractServiceTest.java @@ -60,6 +60,7 @@ import com.hashmapinc.server.dao.event.EventService; import com.hashmapinc.server.dao.gatewayconfiguration.TempusGatewayConfigurationService; import com.hashmapinc.server.dao.logo.LogoService; +import com.hashmapinc.server.dao.mail.DefaultMailService; import com.hashmapinc.server.dao.metadataingestion.MetadataIngestionService; import com.hashmapinc.server.dao.plugin.PluginService; import com.hashmapinc.server.dao.relation.RelationService; @@ -72,12 +73,14 @@ import com.hashmapinc.server.dao.user.UserService; import com.hashmapinc.server.dao.widget.WidgetTypeService; import com.hashmapinc.server.dao.widget.WidgetsBundleService; +import jnr.ffi.annotations.Meta; import org.junit.Assert; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; @@ -95,7 +98,9 @@ @ContextConfiguration(classes = {AbstractServiceTest.class, UserServiceTestConfiguration.class}, loader = AnnotationConfigContextLoader.class) @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) @Configuration -@ComponentScan("com.hashmapinc.server") +@ComponentScan(basePackages = {"com.hashmapinc.server"} ,excludeFilters = +@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = DefaultMailService.class)) + public abstract class AbstractServiceTest { protected ObjectMapper mapper = new ObjectMapper(); From b26e2bf9edadc085ff234246870e8a830152cc77 Mon Sep 17 00:00:00 2001 From: vikash singh Date: Tue, 15 Jan 2019 15:46:18 +0530 Subject: [PATCH 13/13] refactored the gatewaySessionCtx --- .../com/hashmapinc/server/dao/mail/DefaultMailService.java | 4 ++-- .../com/hashmapinc/server/dao}/mail/MailServiceTest.java | 2 +- .../server/transport/mqtt/session/GatewaySessionCtx.java | 7 +++---- 3 files changed, 6 insertions(+), 7 deletions(-) rename dao/src/{main/test => test/java/com/hashmapinc/server/dao}/mail/MailServiceTest.java (99%) diff --git a/dao/src/main/java/com/hashmapinc/server/dao/mail/DefaultMailService.java b/dao/src/main/java/com/hashmapinc/server/dao/mail/DefaultMailService.java index 448814051..1fb074cfe 100644 --- a/dao/src/main/java/com/hashmapinc/server/dao/mail/DefaultMailService.java +++ b/dao/src/main/java/com/hashmapinc/server/dao/mail/DefaultMailService.java @@ -55,8 +55,8 @@ public class DefaultMailService implements MailService { public static final String MAIL_PROP = "mail."; public static final String TARGET_EMAIL = "targetEmail"; public static final String UTF_8 = "UTF-8"; - private static final String DEVICE_NAME = "deviceName"; - private static final String ASSET_NAME = "assetName"; + public static final String DEVICE_NAME = "deviceName"; + public static final String ASSET_NAME = "assetName"; @Autowired private MessageSource messages; diff --git a/dao/src/main/test/mail/MailServiceTest.java b/dao/src/test/java/com/hashmapinc/server/dao/mail/MailServiceTest.java similarity index 99% rename from dao/src/main/test/mail/MailServiceTest.java rename to dao/src/test/java/com/hashmapinc/server/dao/mail/MailServiceTest.java index 4b924830f..f2ea55bf1 100644 --- a/dao/src/main/test/mail/MailServiceTest.java +++ b/dao/src/test/java/com/hashmapinc/server/dao/mail/MailServiceTest.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package mail; +package com.hashmapinc.server.dao.mail; import com.hashmapinc.server.common.data.User; import com.hashmapinc.server.common.data.exception.TempusException; diff --git a/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/session/GatewaySessionCtx.java b/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/session/GatewaySessionCtx.java index 711b50dbd..a1e5b88a9 100644 --- a/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/session/GatewaySessionCtx.java +++ b/transport/mqtt/src/main/java/com/hashmapinc/server/transport/mqtt/session/GatewaySessionCtx.java @@ -296,11 +296,11 @@ else if (savedParentAssetAttribute.isEmpty()) } - private void sendParentAssetMissingEmail(String deviceName , TenantId tenantId) throws TempusException { + private void sendParentAssetMissingEmail(String deviceName , TenantId tenantId) { try { mailService.sendAttributeMissingMail(deviceName,tenantId); }catch (TempusException tempusException) { - log.warn(tempusException.getMessage()); + log.warn("Failed to send the parentAssetMissingEmail of deviceName: [{}]",deviceName); } } @@ -314,8 +314,7 @@ private void createParentAssetRelationWithDevice(Device device,String assetName) if(asset.isEmpty()){ try { sendAssetNotPresentEmail(device.getName(),assetName, gateway.getTenantId()); - }catch (Exception ex){ - //Need to lod the exception exception + }catch (TempusException tempsuException){ log.warn("Failed to send the parentAssetAttributeMissingEmail of deviceName: [{}]",device.getName()) ; } }