mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
improving notifications management
This commit is contained in:
parent
b0e1608903
commit
855f294ed2
@ -209,4 +209,32 @@ public interface NotificationManagementService {
|
||||
defaultValue = "1")
|
||||
@PathParam("id") @Max(45)
|
||||
int id);
|
||||
|
||||
|
||||
@PUT
|
||||
@Path("/clear-all")
|
||||
@ApiOperation(
|
||||
produces = MediaType.APPLICATION_JSON,
|
||||
httpMethod = "PUT",
|
||||
value = "Clear all notifications",
|
||||
notes = "When a user needs to mark all the notifications as checked/read this " +
|
||||
"function can be used to clear all notifications",
|
||||
tags = "Device Notification Management",
|
||||
extensions = {
|
||||
@Extension(properties = {
|
||||
@ExtensionProperty(name = Constants.SCOPE, value = "perm:notifications:mark-checked")
|
||||
})
|
||||
}
|
||||
)
|
||||
@ApiResponses(
|
||||
value = {
|
||||
@ApiResponse(
|
||||
code = 200,
|
||||
message = "OK"),
|
||||
@ApiResponse(
|
||||
code = 500,
|
||||
message = "Error occurred while clearing notifications.")
|
||||
}
|
||||
)
|
||||
Response clearAllNotifications();
|
||||
}
|
||||
|
||||
@ -102,4 +102,16 @@ public class NotificationManagementServiceImpl implements NotificationManagement
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Response clearAllNotifications() {
|
||||
Notification.Status status = Notification.Status.CHECKED;
|
||||
try {
|
||||
DeviceMgtAPIUtils.getNotificationManagementService().updateAllNotifications(status);
|
||||
return Response.status(Response.Status.OK).build();
|
||||
} catch (NotificationManagementException e) {
|
||||
log.error("Error encountered while trying to clear all notifications.", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -63,6 +63,16 @@ public interface NotificationManagementService {
|
||||
boolean updateNotificationStatus(int notificationId, Notification.Status status) throws
|
||||
NotificationManagementException;
|
||||
|
||||
/**
|
||||
* Method for updating status all notifications.
|
||||
*
|
||||
* @return boolean status of the operation.
|
||||
* @throws NotificationManagementException
|
||||
* if something goes wrong while updating the Notification.
|
||||
*/
|
||||
boolean updateAllNotifications(Notification.Status status) throws
|
||||
NotificationManagementException;
|
||||
|
||||
/**
|
||||
* Method to fetch all the notifications in the database.
|
||||
*
|
||||
|
||||
@ -141,6 +141,27 @@ public class NotificationManagementServiceImpl implements NotificationManagement
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateAllNotifications(Notification.Status status) throws NotificationManagementException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Attempting to clear all notifications");
|
||||
}
|
||||
try {
|
||||
NotificationManagementDAOFactory.beginTransaction();
|
||||
notificationDAO.updateAllNotifications(status);
|
||||
NotificationManagementDAOFactory.commitTransaction();
|
||||
} catch (TransactionManagementException e) {
|
||||
NotificationManagementDAOFactory.rollbackTransaction();
|
||||
throw new NotificationManagementException("Error occurred while updating notification", e);
|
||||
} finally {
|
||||
NotificationManagementDAOFactory.closeConnection();
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("All notifications updated successfully.");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Notification> getAllNotifications() throws NotificationManagementException {
|
||||
try {
|
||||
|
||||
@ -61,6 +61,14 @@ public interface NotificationDAO {
|
||||
int updateNotificationStatus(int notificationId, Notification.Status status)
|
||||
throws NotificationManagementException;
|
||||
|
||||
/**
|
||||
* Update status of all notifications.
|
||||
*
|
||||
* @return returns the no of updated records.
|
||||
* @throws NotificationManagementException
|
||||
*/
|
||||
int updateAllNotifications(Notification.Status status) throws NotificationManagementException;
|
||||
|
||||
/**
|
||||
* This method is used to get all notifications based on tenant-id.
|
||||
*
|
||||
|
||||
@ -142,6 +142,27 @@ public abstract class AbstractNotificationDAOImpl implements NotificationDAO {
|
||||
return rows;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateAllNotifications(Notification.Status status)
|
||||
throws NotificationManagementException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
int rows;
|
||||
try {
|
||||
conn = NotificationManagementDAOFactory.getConnection();
|
||||
String sql = "UPDATE DM_NOTIFICATION SET STATUS = ?";
|
||||
stmt = conn.prepareStatement(sql);
|
||||
stmt.setString(1, status.toString());
|
||||
rows = stmt.executeUpdate();
|
||||
} catch (Exception e) {
|
||||
throw new NotificationManagementException("Error while trying to clear all " +
|
||||
"notifications", e);
|
||||
} finally {
|
||||
NotificationDAOUtil.cleanupResources(stmt, null);
|
||||
}
|
||||
return rows;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Notification> getAllNotifications(int tenantId) throws NotificationManagementException {
|
||||
Connection conn;
|
||||
|
||||
@ -158,7 +158,11 @@
|
||||
data-side="right" data-width="320" data-sidebar-fixed="true" data-top="90" data-fixed-offset="90" data-offset-top="50" data-spy="affix">
|
||||
<ul class="sidebar-messages">
|
||||
</ul>
|
||||
<div class="text-center"><a href="{{@app.context}}/notification-listing" class="btn btn-primary">Show All Notifications</a></div>
|
||||
<div class="text-center"><a href="{{@app.context}}/notification-listing" class="btn
|
||||
btn-primary all-notifications">Show All Notifications</a></div>
|
||||
<div class="text-center"><a class="btn btn-primary"
|
||||
data-click-event="clear-notification">Clear All
|
||||
Notifications</a></div>
|
||||
</div>
|
||||
{{/zone}}
|
||||
{{#zone "bottomJs"}}
|
||||
|
||||
@ -425,18 +425,24 @@ $.fn.collapse_nav_sub = function () {
|
||||
$(document).ready(function () {
|
||||
loadNotificationsPanel();
|
||||
|
||||
$("#right-sidebar").on("click", ".new-notification", function () {
|
||||
var notificationId = $(this).data("id");
|
||||
$("#right-sidebar").on("click", ".new-notification", function (e) {
|
||||
e.preventDefault();
|
||||
var notificationId = $(this).parents('li').find('h4 a').data('id');
|
||||
var redirectUrl = $(this).data("url");
|
||||
var markAsReadNotificationsAPI = "/api/device-mgt/v1.0/notifications/" + notificationId + "/mark-checked";
|
||||
var messageSideBar = ".sidebar-messages";
|
||||
var clickEvent = $(this).data('click-event');
|
||||
var eventHandler = $(this);
|
||||
|
||||
invokerUtil.put(
|
||||
markAsReadNotificationsAPI,
|
||||
null,
|
||||
function (data) {
|
||||
data = JSON.parse(data);
|
||||
if (data.statusCode == responseCodes["ACCEPTED"]) {
|
||||
if(clickEvent && clickEvent === 'remove-notification'){
|
||||
$(eventHandler).parents('li').slideUp();
|
||||
$("#notification-bubble").html(parseInt($("#notification-bubble").text()) - 1);
|
||||
}else {
|
||||
location.href = redirectUrl;
|
||||
}
|
||||
}, function () {
|
||||
@ -448,6 +454,36 @@ $(document).ready(function () {
|
||||
);
|
||||
});
|
||||
|
||||
$("#right-sidebar").on("click", ".btn", function (e) {
|
||||
|
||||
var clickEvent = $(this).data('click-event');
|
||||
|
||||
if(clickEvent == "clear-notification"){
|
||||
e.preventDefault();
|
||||
var markAsReadNotificationsAPI = "/api/device-mgt/v1.0/notifications/clear-all";
|
||||
var messageSideBar = ".sidebar-messages";
|
||||
var clickEvent = $(this).data('click-event');
|
||||
var eventHandler = $(this);
|
||||
console.log(clickEvent);
|
||||
|
||||
invokerUtil.put(
|
||||
markAsReadNotificationsAPI,
|
||||
null,
|
||||
function (data) {
|
||||
console.log(data);
|
||||
$('.message').remove();
|
||||
$("#notification-bubble").html(0);
|
||||
}, function () {
|
||||
var content = "<li class='message message-danger'><h4><i class='icon fw fw-error'></i>Warning</h4>" +
|
||||
"<p>Unexpected error occurred while loading notification. Please refresh the page and" +
|
||||
" try again</p></li>";
|
||||
$(messageSideBar).html(content);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if (typeof $.fn.collapse == 'function') {
|
||||
$('.navbar-collapse.tiles').on('shown.bs.collapse', function () {
|
||||
$(this).collapse_nav_sub();
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
{{#each notifications}}
|
||||
<li class="message message-info" data-type="selectable" >
|
||||
<table>
|
||||
<td>
|
||||
<h4>
|
||||
<i class="icon fw fw-info"></i>
|
||||
<a href="{{../context}}/device/{{deviceType}}?id={{deviceIdentifier}}"
|
||||
@ -10,5 +12,16 @@
|
||||
</a>
|
||||
</h4>
|
||||
<p>{{description}}</p>
|
||||
</td>
|
||||
<td>
|
||||
<a class="new-notification" data-click-event="remove-notification">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-delete fw-stack-1x"></i>
|
||||
</span>
|
||||
</a>
|
||||
</a>
|
||||
</td>
|
||||
</table>
|
||||
</li>
|
||||
{{/each}}
|
||||
@ -1178,6 +1178,10 @@ header .fw-user:before{
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.all-notifications{
|
||||
margin-bottom: 10px !important;
|
||||
}
|
||||
|
||||
.sidebar-wrapper.toggled a.btn{
|
||||
margin-bottom: 70px;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user