use of com.pratilipi.data.type.Notification in project pratilipi by Pratilipi.
the class BatchProcessDataUtil method _execStateCreateNotificationsForUserIds.
private static void _execStateCreateNotificationsForUserIds(BatchProcess batchProcess) throws UnexpectedServerException {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
DocAccessor docAccessor = DataAccessorFactory.getDocAccessor();
BatchProcessDoc processDoc = docAccessor.getBatchProcessDoc(batchProcess.getId());
Set<Long> userIdSet = processDoc.getData(BatchProcessState.CREATE_NOTIFICATIONS_FOR_USER_IDS.getInputName(), new TypeToken<Set<Long>>() {
}.getType());
Map<Long, Long> userIdNotifIdMap = processDoc.getData(BatchProcessState.CREATE_NOTIFICATIONS_FOR_USER_IDS.getOutputName(), new TypeToken<Map<Long, Long>>() {
}.getType());
JsonObject execDoc = new Gson().fromJson(batchProcess.getExecDoc(), JsonElement.class).getAsJsonObject();
NotificationType type = NotificationType.valueOf(execDoc.get("type").getAsString());
String sourceId = execDoc.get("sourceId").getAsString();
String createdBy = "BATCH_PROCESS::" + batchProcess.getId();
if (userIdNotifIdMap == null) {
// First attempt on this state
userIdNotifIdMap = new HashMap<>();
} else {
for (Entry<Long, Long> entry : userIdNotifIdMap.entrySet()) {
if (entry.getValue() != 0L) {
userIdSet.remove(entry.getKey());
continue;
}
Notification notification = dataAccessor.getNotification(entry.getKey(), type, sourceId, createdBy);
if (notification != null) {
entry.setValue(notification.getId());
userIdSet.remove(entry.getKey());
}
}
}
while (!userIdSet.isEmpty()) {
List<Long> userIdList = new ArrayList<>(100);
for (Long userId : userIdSet) {
// Can't put null (instead of 0) here because Gson ignores keys with null values
userIdNotifIdMap.put(userId, 0L);
userIdList.add(userId);
if (// Limiting to 100 users per run
userIdList.size() == 100)
break;
}
userIdSet.removeAll(userIdList);
processDoc.setData(BatchProcessState.CREATE_NOTIFICATIONS_FOR_USER_IDS.getOutputName(), userIdNotifIdMap);
// Saving Doc
docAccessor.save(batchProcess.getId(), processDoc);
List<Notification> notifList = new ArrayList<>(userIdList.size());
for (Long userId : userIdList) notifList.add(dataAccessor.newNotification(userId, type, sourceId, createdBy));
notifList = dataAccessor.createOrUpdateNotificationList(notifList);
for (Notification notif : notifList) userIdNotifIdMap.put(notif.getUserId(), notif.getId());
}
processDoc.setData(BatchProcessState.CREATE_NOTIFICATIONS_FOR_USER_IDS.getOutputName(), userIdNotifIdMap);
// Saving Doc
docAccessor.save(batchProcess.getId(), processDoc);
batchProcess.setStateCompleted(BatchProcessState.CREATE_NOTIFICATIONS_FOR_USER_IDS);
}
use of com.pratilipi.data.type.Notification in project pratilipi by Pratilipi.
the class NotificationDataUtil method getNotificationList.
public static DataListCursorTuple<NotificationData> getNotificationList(Long userId, Language language, String cursor, Integer resultCount) throws InsufficientAccessException, UnexpectedServerException {
if (!hasAccessToListData(userId))
throw new InsufficientAccessException();
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
// Fetching Notification Entities
DataListIterator<Notification> notifListIterator = dataAccessor.getNotificationListIterator(userId, null, (String) null, cursor, null);
List<Notification> notifList = resultCount == null ? new ArrayList<Notification>() : new ArrayList<Notification>(resultCount);
while (notifListIterator.hasNext()) {
Notification notif = notifListIterator.next();
if (notif.getType().isValid(notif))
notifList.add(notif);
if (resultCount != null && notifList.size() == resultCount)
break;
}
// Return
return new DataListCursorTuple<>(createNotificationDataList(notifList, language, false), notifListIterator.getCursor());
}
use of com.pratilipi.data.type.Notification in project pratilipi by Pratilipi.
the class NotificationDataUtil method saveNotificationState.
public static void saveNotificationState(Long notificationId, NotificationState state) throws InsufficientAccessException {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
Notification notification = dataAccessor.getNotification(notificationId);
if (notification.getState() == state)
return;
if (!hasAccessToUpdateData(notification))
throw new InsufficientAccessException();
notification.setState(state);
notification = dataAccessor.createOrUpdateNotification(notification);
}
use of com.pratilipi.data.type.Notification in project pratilipi by Pratilipi.
the class NotificationFilter method doFilter.
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
String notificationIdStr = ((HttpServletRequest) req).getParameter(RequestParameter.NOTIFICATION_ID.getName());
if (notificationIdStr != null && !notificationIdStr.trim().isEmpty()) {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
Notification notification = dataAccessor.getNotification(Long.parseLong(notificationIdStr.trim()));
if (notification != null && notification.getState() == NotificationState.UNREAD && AccessTokenFilter.getAccessToken().getUserId().equals(notification.getUserId())) {
notification.setState(NotificationState.READ);
notification = dataAccessor.createOrUpdateNotification(notification);
}
}
chain.doFilter(req, resp);
}
use of com.pratilipi.data.type.Notification in project pratilipi by Pratilipi.
the class AuditLogProcessApi method _createPratilipiPublishedNotifications.
private void _createPratilipiPublishedNotifications(Pratilipi pratilipi, Set<Long> followersSet) {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
List<Long> followers = new ArrayList<Long>(followersSet);
List<Notification> existingNotificationList = dataAccessor.getNotificationListIterator(null, NotificationType.PRATILIPI_PUBLISHED_FOLLOWER, pratilipi.getId(), null, null).list();
for (Notification notification : existingNotificationList) followers.remove(notification.getUserId());
List<Notification> notificationList = new ArrayList<>(followers.size());
for (Long followerUserId : followers) notificationList.add(dataAccessor.newNotification(followerUserId, NotificationType.PRATILIPI_PUBLISHED_FOLLOWER, pratilipi.getId()));
notificationList = dataAccessor.createOrUpdateNotificationList(notificationList);
}
Aggregations