package org.opennms.web.svclayer.outage; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.extremecomponents.table.context.Context; import org.extremecomponents.table.context.HttpServletRequestContext; import org.extremecomponents.table.limit.Limit; import org.extremecomponents.table.limit.LimitFactory; import org.extremecomponents.table.limit.TableLimit; import org.extremecomponents.table.limit.TableLimitFactory; import org.opennms.netmgt.model.OnmsIpInterface; import org.opennms.netmgt.model.OnmsMonitoredService; import org.opennms.netmgt.model.OnmsOutage; import org.opennms.netmgt.model.OnmsServiceType; public class CurrentOutagesBuilder { Collection foundOutages; Collection viewOutages; SuppressOutages m_suppress = new SuppressOutages(); private OutageListService m_cview = new OutageListBuilder(); private static final int ROW_LIMIT = 25; OutageService m_outageService; public void setOutageService(OutageService service) { m_outageService = service; } public Map getOutages(HttpServletRequest request) { Context context = new HttpServletRequestContext(request); LimitFactory limitFactory = new TableLimitFactory(context, "tabledata"); Limit limit = new TableLimit(limitFactory); CurrentOutageParseResponse.findSelectedOutagesIDs(request, m_outageService); Map myModel = new HashMap(); Integer totalRows = m_outageService.getCurrentOutageCount(); myModel.put("request", limit.toString()); myModel.put("all_params", request.getParameterNames().toString()); if (limit.getPage() == 1) { // no offset set myModel.put("rowStart", 0); context.setRequestAttribute("rowStart", 0); context.setRequestAttribute("rowEnd", ROW_LIMIT); myModel.put("rowEnd", ROW_LIMIT); if (limit.getSort().getProperty() == null) { foundOutages = m_outageService.getCurrentOutagesByRange( 1, ROW_LIMIT, "id", "asc"); } else { foundOutages = m_outageService.getCurrentOutagesByRange( 0, ROW_LIMIT, "id", "asc"); // "outages.nodeid,outages." // + limit.getSort().getProperty(), // limit.getSort().getSortOrder()); } myModel.put("begin", 0); myModel.put("end", ROW_LIMIT); } else { Integer rowstart = null; Integer rowend = null; // quirky situation... - as we started on 0 (zero) rowstart = ((limit.getPage() * ROW_LIMIT + 1) - ROW_LIMIT); rowend = (ROW_LIMIT); myModel.put("begin", rowstart); myModel.put("end", rowend); if (limit.getSort().getProperty() == null) { foundOutages = m_outageService.getCurrentOutagesByRange( rowstart, rowend, "id", "asc"); } else { foundOutages = m_outageService.getCurrentOutagesByRange( rowstart, rowend, "id", "asc"); // "outages.nodeid,outages." // "id" // + limit.getSort().getProperty() // + " ", // limit.getSort().getSortOrder()); } } // Pretty smart to build the collection after any suppressions..... // Collection theTable = m_cview.theTable(foundOutages); List theTable = new LinkedList(); Locale locale = Locale.getDefault(); SimpleDateFormat formatter = new SimpleDateFormat( "dd/MM/yyyy HH:mm:ss", locale); for (Iterator iter = foundOutages.iterator(); iter.hasNext();) { OnmsOutage outage = (OnmsOutage) iter.next(); OnmsMonitoredService monitoredService = outage.getMonitoredService(); OnmsServiceType serviceType = monitoredService.getServiceType(); OnmsIpInterface ipInterface = monitoredService.getIpInterface(); // ips.put(outage.getId(), ipInterface.getIpAddress()); // nodes.put(outage.getId(), ipInterface.getNode().getLabel()); // nodeids.put(outage.getId(), monitoredService.getNodeId()); // services.put(outage.getId(), serviceType.getName()); Map outagerow = new HashMap(); outagerow.put("outageid", (String) outage.getId().toString()); outagerow.put("node", ipInterface.getNode().getLabel()); outagerow.put("nodeid", (String) monitoredService.getNodeId().toString()); outagerow.put("ipaddr", ipInterface.getIpAddress()); outagerow.put("interfaceid", ipInterface.getId()); outagerow.put("service", serviceType.getName()); outagerow.put("serviceid", serviceType.getId()); outagerow.put("eventid", outage.getServiceLostEvent().getId()); // if (outage.getIfLostService() != null) { // outagerow.put("down", // formatter.format(outage.getIfLostService())); // } if (outage.getIfLostService() != null) { outagerow.put("iflostservice", formatter.format(outage.getIfLostService())); // Long format for searches outagerow.put("iflostservicelong", (Long) outage.getIfLostService().getTime()); // Format the date-output. } if (outage.getIfRegainedService() != null) { outagerow.put("ifregainedservice", formatter.format(outage.getIfRegainedService())); outagerow.put("ifregainedservicelong", (Long) outage.getIfRegainedService().getTime()); } if (outage.getSuppressTime() != null) { outagerow.put("suppresstime", outage.getSuppressTime()); } outagerow.put("suppressedby", outage.getSuppressedBy()); // Build a droplist for this outage theTable.add(outagerow); } myModel.put("tabledata", theTable); myModel.put("totalRows", totalRows); myModel.put( "selected_outages", CurrentOutageParseResponse.findSelectedOutagesIDs( request, m_outageService)); return myModel; } }