Search in sources :

Example 1 with Notification

use of org.opennms.web.notification.Notification in project opennms by OpenNMS.

the class NotificationFilterController method handleRequestInternal.

/**
     * {@inheritDoc}
     *
     * Parses the query string to determine what types of notification filters to use
     * (for example, what to filter on or sort by), then does the database query
     * and then forwards the results to a JSP for display.
     */
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
    String display = request.getParameter("display");
    // handle the style sort parameter
    String sortStyleString = request.getParameter("sortby");
    SortStyle sortStyle = m_defaultSortStyle;
    if (sortStyleString != null) {
        SortStyle temp = SortStyle.getSortStyle(sortStyleString);
        if (temp != null) {
            sortStyle = temp;
        }
    }
    // handle the acknowledgment type parameter
    String ackTypeString = request.getParameter("acktype");
    AcknowledgeType ackType = m_defaultAckType;
    if (ackTypeString != null) {
        AcknowledgeType temp = AcknowledgeType.getAcknowledgeType(ackTypeString);
        if (temp != null) {
            ackType = temp;
        }
    }
    // handle the filter parameters
    String[] filterStrings = request.getParameterValues("filter");
    List<Filter> filterList = new ArrayList<Filter>();
    if (filterStrings != null) {
        for (String filterString : filterStrings) {
            Filter filter = NoticeUtil.getFilter(filterString, getServletContext());
            if (filter != null) {
                filterList.add(filter);
            }
        }
    }
    // Check for a username filter (used on notifications/index.jsp)
    String username = request.getParameter("user");
    if (username != null) {
        Filter filter = NoticeUtil.getFilter("user=" + username, getServletContext());
        if (filter != null) {
            filterList.add(filter);
        }
    }
    // handle the optional limit parameter
    String limitString = request.getParameter("limit");
    int limit = "long".equals(display) ? m_defaultLongLimit : m_defaultShortLimit;
    if (limitString != null) {
        try {
            int newlimit = WebSecurityUtils.safeParseInt(limitString);
            if (newlimit > 0) {
                limit = newlimit;
            }
        } catch (NumberFormatException e) {
        // do nothing, the default is already set
        }
    }
    // handle the optional multiple parameter
    String multipleString = request.getParameter("multiple");
    int multiple = DEFAULT_MULTIPLE;
    if (multipleString != null) {
        try {
            multiple = Math.max(0, WebSecurityUtils.safeParseInt(multipleString));
        } catch (NumberFormatException e) {
        }
    }
    // put the parameters in a convenient struct
    Filter[] filters = filterList.toArray(new Filter[0]);
    NoticeQueryParms parms = new NoticeQueryParms();
    parms.ackType = ackType;
    parms.display = display;
    parms.filters = filterList;
    parms.limit = limit;
    parms.multiple = multiple;
    parms.sortStyle = sortStyle;
    NotificationCriteria queryCriteria = new NotificationCriteria(filters, sortStyle, ackType, limit, limit * multiple);
    NotificationCriteria countCriteria = new NotificationCriteria(ackType, filters);
    Notification[] notices = m_webNotificationRepository.getMatchingNotifications(queryCriteria);
    int noticeCount = m_webNotificationRepository.countMatchingNotifications(countCriteria);
    final Map<Integer, String[]> nodeLabels = new HashMap<Integer, String[]>();
    final Map<Integer, String[]> nodeLocations = new HashMap<Integer, String[]>();
    Set<Integer> eventIds = new TreeSet<Integer>();
    // really inefficient, is there a better way to do this?
    for (Notification notice : notices) {
        if (notice.getEventId() > 0) {
            eventIds.add(notice.getEventId());
        }
        if (notice.getNodeId() > 0) {
            if (!nodeLabels.containsKey(notice.getNodeId())) {
                String[] labels = null;
                String[] locations = null;
                OnmsNode node = m_nodeDao.get(notice.getNodeId());
                if (node != null) {
                    String longLabel = node.getLabel();
                    if (longLabel == null) {
                        labels = new String[] { "&lt;No Node Label&gt;", "&lt;No Node Label&gt;" };
                    } else {
                        if (longLabel.length() > 32) {
                            String shortLabel = longLabel.substring(0, 31) + "&hellip;";
                            labels = new String[] { shortLabel, longLabel };
                        } else {
                            labels = new String[] { longLabel, longLabel };
                        }
                    }
                    if (node.getLocation() != null) {
                        String location = node.getLocation().getLocationName();
                        if (location == null) {
                            locations = new String[] { "&lt;No Node Location&gt;", "&lt;No Node Location&gt;" };
                        } else {
                            if (location.length() > 32) {
                                String shortLocation = location.substring(0, 31) + "&hellip;";
                                locations = new String[] { shortLocation, location };
                            } else {
                                locations = new String[] { location, location };
                            }
                        }
                    }
                }
                nodeLabels.put(notice.getNodeId(), labels);
                nodeLocations.put(notice.getNodeId(), locations);
            }
        }
    }
    Map<Integer, Event> events = new HashMap<Integer, Event>();
    if (eventIds.size() > 0) {
        for (Event e : m_webEventRepository.getMatchingEvents(new EventCriteria(new EventIdListFilter(eventIds)))) {
            events.put(e.getId(), e);
        }
    }
    ModelAndView modelAndView = new ModelAndView(m_successView);
    modelAndView.addObject("notices", notices);
    modelAndView.addObject("noticeCount", noticeCount);
    modelAndView.addObject("nodeLabels", nodeLabels);
    modelAndView.addObject("nodeLocations", nodeLocations);
    modelAndView.addObject("events", events);
    modelAndView.addObject("parms", parms);
    return modelAndView;
}
Also used : SortStyle(org.opennms.web.notification.SortStyle) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) ModelAndView(org.springframework.web.servlet.ModelAndView) EventCriteria(org.opennms.web.event.filter.EventCriteria) EventIdListFilter(org.opennms.web.event.filter.EventIdListFilter) Notification(org.opennms.web.notification.Notification) TreeSet(java.util.TreeSet) NoticeQueryParms(org.opennms.web.notification.NoticeQueryParms) OnmsNode(org.opennms.netmgt.model.OnmsNode) AcknowledgeType(org.opennms.web.notification.AcknowledgeType) Filter(org.opennms.web.filter.Filter) EventIdListFilter(org.opennms.web.event.filter.EventIdListFilter) NotificationCriteria(org.opennms.web.notification.filter.NotificationCriteria) Event(org.opennms.web.event.Event)

Example 2 with Notification

use of org.opennms.web.notification.Notification in project opennms by OpenNMS.

the class AcknowledgeNotificationController method handleRequestInternal.

/**
     * {@inheritDoc}
     *
     * Acknowledge the notifications specified in the POST and then redirect the client
     * to an appropriate URL for display.
     */
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
    String[] required = { "notices" };
    String[] noticeIdStrings = request.getParameterValues("notices");
    if (noticeIdStrings == null) {
        throw new MissingParameterException("notices", required);
    }
    String currentUser = request.getParameter("curUser");
    if (currentUser == null) {
        currentUser = request.getRemoteUser();
    }
    List<Integer> noticeIds = new ArrayList<Integer>();
    for (String noticeIdString : noticeIdStrings) {
        noticeIds.add(WebSecurityUtils.safeParseInt(noticeIdString));
    }
    List<Filter> filters = new ArrayList<Filter>();
    filters.add(new NotificationIdListFilter(noticeIds.toArray(new Integer[0])));
    NotificationCriteria criteria = new NotificationCriteria(filters.toArray(new Filter[0]));
    m_webNotificationRepository.acknowledgeMatchingNotification(currentUser, new Date(), criteria);
    Notification[] notices = m_webNotificationRepository.getMatchingNotifications(criteria);
    request.setAttribute("notices", notices);
    String redirectParms = request.getParameter("redirectParms");
    String redirect = request.getParameter("redirect");
    String viewName;
    if (redirect != null) {
        viewName = redirect;
    } else {
        viewName = (redirectParms == null || redirectParms == "" || redirectParms == "null" ? m_redirectView : m_redirectView + "?" + redirectParms);
    }
    RedirectView view = new RedirectView(viewName, true);
    return new ModelAndView(view);
}
Also used : ArrayList(java.util.ArrayList) ModelAndView(org.springframework.web.servlet.ModelAndView) Date(java.util.Date) Notification(org.opennms.web.notification.Notification) NotificationIdListFilter(org.opennms.web.notification.filter.NotificationIdListFilter) Filter(org.opennms.web.filter.Filter) NotificationIdListFilter(org.opennms.web.notification.filter.NotificationIdListFilter) NotificationCriteria(org.opennms.web.notification.filter.NotificationCriteria) RedirectView(org.springframework.web.servlet.view.RedirectView) MissingParameterException(org.opennms.web.servlet.MissingParameterException)

Example 3 with Notification

use of org.opennms.web.notification.Notification in project opennms by OpenNMS.

the class NotificationFeed method getFeed.

/**
     * <p>getFeed</p>
     *
     * @return a {@link com.sun.syndication.feed.synd.SyndFeed} object.
     */
@Override
public SyndFeed getFeed() {
    SyndFeed feed = new SyndFeedImpl();
    feed.setTitle("Notifications");
    feed.setDescription("Notifications");
    feed.setLink(getUrlBase() + "notification/browse");
    List<SyndEntry> entries = new ArrayList<SyndEntry>();
    try {
        NotificationModel model = new NotificationModel();
        Notification[] notifications = model.allNotifications("desc");
        SyndEntry entry;
        int count = 0;
        for (Notification notification : notifications) {
            if (count++ == this.getMaxEntries()) {
                break;
            }
            entry = new SyndEntryImpl();
            entry.setPublishedDate(notification.getTimeSent());
            if (notification.getTimeReplied() == null) {
                entry.setTitle(sanitizeTitle(notification.getTextMessage()));
                entry.setUpdatedDate(notification.getTimeSent());
            } else {
                entry.setTitle(sanitizeTitle(notification.getTextMessage()) + " (acknowledged)");
                entry.setUpdatedDate(notification.getTimeReplied());
            }
            entry.setLink(getUrlBase() + "notification/detail.jsp?notice=" + notification.getId());
            entry.setAuthor("OpenNMS");
            entries.add(entry);
        }
    } catch (SQLException e) {
        LOG.warn("unable to get outstanding notifications", e);
    }
    feed.setEntries(entries);
    return feed;
}
Also used : SyndFeed(com.sun.syndication.feed.synd.SyndFeed) SQLException(java.sql.SQLException) SyndEntry(com.sun.syndication.feed.synd.SyndEntry) SyndEntryImpl(com.sun.syndication.feed.synd.SyndEntryImpl) ArrayList(java.util.ArrayList) SyndFeedImpl(com.sun.syndication.feed.synd.SyndFeedImpl) NotificationModel(org.opennms.web.notification.NotificationModel) Notification(org.opennms.web.notification.Notification)

Aggregations

ArrayList (java.util.ArrayList)3 Notification (org.opennms.web.notification.Notification)3 Filter (org.opennms.web.filter.Filter)2 NotificationCriteria (org.opennms.web.notification.filter.NotificationCriteria)2 ModelAndView (org.springframework.web.servlet.ModelAndView)2 SyndEntry (com.sun.syndication.feed.synd.SyndEntry)1 SyndEntryImpl (com.sun.syndication.feed.synd.SyndEntryImpl)1 SyndFeed (com.sun.syndication.feed.synd.SyndFeed)1 SyndFeedImpl (com.sun.syndication.feed.synd.SyndFeedImpl)1 SQLException (java.sql.SQLException)1 Date (java.util.Date)1 HashMap (java.util.HashMap)1 TreeSet (java.util.TreeSet)1 OnmsNode (org.opennms.netmgt.model.OnmsNode)1 Event (org.opennms.web.event.Event)1 EventCriteria (org.opennms.web.event.filter.EventCriteria)1 EventIdListFilter (org.opennms.web.event.filter.EventIdListFilter)1 AcknowledgeType (org.opennms.web.notification.AcknowledgeType)1 NoticeQueryParms (org.opennms.web.notification.NoticeQueryParms)1 NotificationModel (org.opennms.web.notification.NotificationModel)1