From bcf52600f5a4f7726bbb223916369a59bc2d49a2 Mon Sep 17 00:00:00 2001 From: Ryan Slominski Date: Wed, 19 Nov 2025 13:51:57 -0500 Subject: [PATCH 1/8] Core downtime reports type multi-select Fixes #60 --- .../params/CategoryDowntimeReportParams.java | 10 ++--- .../params/ComponentDowntimeReportParams.java | 10 ++--- .../params/SystemDowntimeReportParams.java | 10 ++--- .../session/CategoryDowntimeFacade.java | 11 +++-- .../session/ComponentDowntimeFacade.java | 11 +++-- .../session/ExcelCategoryDowntimeService.java | 8 ++-- .../session/ExcelSystemDowntimeService.java | 14 +++++-- .../session/SystemDowntimeFacade.java | 11 +++-- .../business/session/TrendReportFacade.java | 7 ++-- .../beamtransport/TuneComparisonReport.java | 6 ++- .../controller/csv/CSVCategoryDowntime.java | 25 +++++++---- .../excel/ExcelCategoryDowntime.java | 31 +++++++++----- .../controller/excel/ExcelEventList.java | 11 ++++- .../controller/excel/ExcelIncidentList.java | 28 +++++++++---- .../controller/excel/ExcelSystemDowntime.java | 33 +++++++++++---- .../excel/ExcelTuneIncidentList.java | 20 +++++---- .../reports/CategoryDowntimeReport.java | 39 ++++++++++++------ .../reports/ComponentDowntimeReport.java | 41 +++++++------------ .../reports/DowntimeSummaryReport.java | 7 +++- .../reports/EventDowntimeReport.java | 3 +- .../reports/SystemDowntimeReport.java | 31 +++++++------- .../controller/shiftlog/IncidentList.java | 34 ++++++++------- ...CategoryDowntimeReportUrlParamHandler.java | 21 +++++----- ...omponentDowntimeReportUrlParamHandler.java | 20 ++++----- .../SystemDowntimeReportUrlParamHandler.java | 20 ++++----- .../util/FilterSelectionMessage.java | 21 +++++++--- .../views/reports/category-downtime.jsp | 11 +++-- .../webapp/resources/js/downtime-report.js | 4 ++ 28 files changed, 303 insertions(+), 195 deletions(-) diff --git a/src/main/java/org/jlab/dtm/business/params/CategoryDowntimeReportParams.java b/src/main/java/org/jlab/dtm/business/params/CategoryDowntimeReportParams.java index 41522af..740ea29 100644 --- a/src/main/java/org/jlab/dtm/business/params/CategoryDowntimeReportParams.java +++ b/src/main/java/org/jlab/dtm/business/params/CategoryDowntimeReportParams.java @@ -6,7 +6,7 @@ public class CategoryDowntimeReportParams { private Date start; private Date end; - BigInteger eventTypeId; + BigInteger[] eventTypeIdArray; Boolean beamTransport; String chart; String data; @@ -28,12 +28,12 @@ public void setEnd(Date end) { this.end = end; } - public BigInteger getEventTypeId() { - return eventTypeId; + public BigInteger[] getEventTypeIdArray() { + return eventTypeIdArray; } - public void setEventTypeId(BigInteger eventTypeId) { - this.eventTypeId = eventTypeId; + public void setEventTypeIdArray(BigInteger[] eventTypeIdArray) { + this.eventTypeIdArray = eventTypeIdArray; } public Boolean getBeamTransport() { diff --git a/src/main/java/org/jlab/dtm/business/params/ComponentDowntimeReportParams.java b/src/main/java/org/jlab/dtm/business/params/ComponentDowntimeReportParams.java index fec7044..ebfa775 100644 --- a/src/main/java/org/jlab/dtm/business/params/ComponentDowntimeReportParams.java +++ b/src/main/java/org/jlab/dtm/business/params/ComponentDowntimeReportParams.java @@ -6,7 +6,7 @@ public class ComponentDowntimeReportParams { private Date start; private Date end; - BigInteger eventTypeId; + BigInteger[] eventTypeIdArray; Boolean beamTransport; BigInteger systemId; String chart; @@ -28,12 +28,12 @@ public void setEnd(Date end) { this.end = end; } - public BigInteger getEventTypeId() { - return eventTypeId; + public BigInteger[] getEventTypeIdArray() { + return eventTypeIdArray; } - public void setEventTypeId(BigInteger eventTypeId) { - this.eventTypeId = eventTypeId; + public void setEventTypeIdArray(BigInteger[] eventTypeIdArray) { + this.eventTypeIdArray = eventTypeIdArray; } public Boolean getBeamTransport() { diff --git a/src/main/java/org/jlab/dtm/business/params/SystemDowntimeReportParams.java b/src/main/java/org/jlab/dtm/business/params/SystemDowntimeReportParams.java index 74edac4..3c82742 100644 --- a/src/main/java/org/jlab/dtm/business/params/SystemDowntimeReportParams.java +++ b/src/main/java/org/jlab/dtm/business/params/SystemDowntimeReportParams.java @@ -6,7 +6,7 @@ public class SystemDowntimeReportParams { private Date start; private Date end; - BigInteger eventTypeId; + BigInteger[] eventTypeIdArray; Boolean beamTransport; BigInteger categoryId; String chart; @@ -29,12 +29,12 @@ public void setEnd(Date end) { this.end = end; } - public BigInteger getEventTypeId() { - return eventTypeId; + public BigInteger[] getEventTypeIdArray() { + return eventTypeIdArray; } - public void setEventTypeId(BigInteger eventTypeId) { - this.eventTypeId = eventTypeId; + public void setEventTypeIdArray(BigInteger[] eventTypeIdArray) { + this.eventTypeIdArray = eventTypeIdArray; } public Boolean getBeamTransport() { diff --git a/src/main/java/org/jlab/dtm/business/session/CategoryDowntimeFacade.java b/src/main/java/org/jlab/dtm/business/session/CategoryDowntimeFacade.java index e81381d..befeb88 100644 --- a/src/main/java/org/jlab/dtm/business/session/CategoryDowntimeFacade.java +++ b/src/main/java/org/jlab/dtm/business/session/CategoryDowntimeFacade.java @@ -35,7 +35,7 @@ public CategoryDowntimeFacade() { public List findByPeriodAndType( Date start, Date end, - EventType type, + List typeList, Boolean beamTransport, boolean packed, BigInteger categoryId) { @@ -58,8 +58,13 @@ public List findByPeriodAndType( sql = sql + "where b.time_down < :end " + "and nvl(b.time_up, sysdate) >= :start "; - if (type != null) { - sql = sql + "and event_type_id = " + type.getEventTypeId() + " "; + if (typeList != null && !typeList.isEmpty()) { + String typeListString = typeList.get(0).getEventTypeId().toString(); + for (int i = 1; i < typeList.size(); i++) { + typeListString = "," + typeList.get(i).getEventTypeId().toString(); + } + + sql = sql + "and event_type_id in (" + typeListString + ") "; } if (categoryId != null) { diff --git a/src/main/java/org/jlab/dtm/business/session/ComponentDowntimeFacade.java b/src/main/java/org/jlab/dtm/business/session/ComponentDowntimeFacade.java index 156ebd3..3b1a846 100644 --- a/src/main/java/org/jlab/dtm/business/session/ComponentDowntimeFacade.java +++ b/src/main/java/org/jlab/dtm/business/session/ComponentDowntimeFacade.java @@ -33,7 +33,7 @@ public ComponentDowntimeFacade() { @PermitAll public List findByPeriodAndType( - Date start, Date end, EventType type, Boolean beamTransport, BigInteger systemId) { + Date start, Date end, List typeList, Boolean beamTransport, BigInteger systemId) { String sql = "select a.component_id, a.name, d.name as systemName, count(a.name) as incident_count, sum(interval_to_seconds(least(nvl(b.time_up, sysdate), :end) - greatest(b.time_down, :start))) / 60 / 60 / 24 as duration " + "from dtm_owner.component a, incident b, event c, dtm_owner.system d " @@ -43,8 +43,13 @@ public List findByPeriodAndType( + "and b.time_down < :end " + "and nvl(b.time_up, sysdate) >= :start "; - if (type != null) { - sql = sql + "and c.event_type_id = " + type.getEventTypeId() + " "; + if (typeList != null && !typeList.isEmpty()) { + String typeListString = typeList.get(0).getEventTypeId().toString(); + for (int i = 1; i < typeList.size(); i++) { + typeListString = "," + typeList.get(i).getEventTypeId().toString(); + } + + sql = sql + "and event_type_id in (" + typeListString + ") "; } // beamTransport Y = only beam transport diff --git a/src/main/java/org/jlab/dtm/business/session/ExcelCategoryDowntimeService.java b/src/main/java/org/jlab/dtm/business/session/ExcelCategoryDowntimeService.java index 929c78b..6e255de 100644 --- a/src/main/java/org/jlab/dtm/business/session/ExcelCategoryDowntimeService.java +++ b/src/main/java/org/jlab/dtm/business/session/ExcelCategoryDowntimeService.java @@ -31,7 +31,7 @@ public void export( String filters, double periodDurationHours, double grandTotalDuration, - EventType type, + List typeList, double programHours) throws IOException { Workbook wb = new XSSFWorkbook(); @@ -47,7 +47,7 @@ public void export( row1.createCell(2).setCellValue("NUMBER OF INCIDENTS"); row1.createCell(3).setCellValue("MEAN TIME TO RECOVER (HOURS)"); - if (EventType.BLOCKED.equals(type)) { + if (typeList != null && typeList.size() == 1 && typeList.contains(EventType.BLOCKED)) { row1.createCell(4).setCellValue("UPTIME (HOURS)"); row1.createCell(5).setCellValue("MTBF (HOURS)"); row1.createCell(6).setCellValue("HOURLY FAILURE RATE"); @@ -76,7 +76,7 @@ public void export( c.setCellStyle(numberStyle); c.setCellValue(downtime.getDuration() / downtime.getIncidentCount() * 24); - if (EventType.BLOCKED.equals(type)) { + if (typeList != null && typeList.size() == 1 && typeList.contains(EventType.BLOCKED)) { double uptime = programHours - (downtime.getDuration() * 24); double mtbf = uptime / downtime.getIncidentCount(); @@ -117,7 +117,7 @@ public void export( sheet1.autoSizeColumn(2); sheet1.autoSizeColumn(3); - if (EventType.BLOCKED.equals(type)) { + if (typeList != null && typeList.size() == 1 && typeList.contains(EventType.BLOCKED)) { sheet1.autoSizeColumn(4); sheet1.autoSizeColumn(5); sheet1.autoSizeColumn(6); diff --git a/src/main/java/org/jlab/dtm/business/session/ExcelSystemDowntimeService.java b/src/main/java/org/jlab/dtm/business/session/ExcelSystemDowntimeService.java index 6f08278..8b7cf3b 100644 --- a/src/main/java/org/jlab/dtm/business/session/ExcelSystemDowntimeService.java +++ b/src/main/java/org/jlab/dtm/business/session/ExcelSystemDowntimeService.java @@ -26,7 +26,7 @@ public void export( String filters, double periodDurationHours, double grandTotalDuration, - EventType type, + List selectedTypeList, double programHours) throws IOException { Workbook wb = new XSSFWorkbook(); @@ -42,7 +42,9 @@ public void export( row1.createCell(2).setCellValue("NUMBER OF INCIDENTS"); row1.createCell(3).setCellValue("MEAN TIME TO RECOVER (HOURS)"); - if (EventType.BLOCKED.equals(type)) { + if (selectedTypeList != null + && selectedTypeList.size() == 1 + && selectedTypeList.contains(EventType.BLOCKED)) { row1.createCell(4).setCellValue("UPTIME (HOURS)"); row1.createCell(5).setCellValue("MTBF (HOURS)"); row1.createCell(6).setCellValue("HOURLY FAILURE RATE"); @@ -71,7 +73,9 @@ public void export( c.setCellStyle(numberStyle); c.setCellValue(downtime.getDuration() / downtime.getIncidentCount() * 24); - if (EventType.BLOCKED.equals(type)) { + if (selectedTypeList != null + && selectedTypeList.size() == 1 + && selectedTypeList.contains(EventType.BLOCKED)) { double uptime = programHours - (downtime.getDuration() * 24); double mtbf = uptime / downtime.getIncidentCount(); @@ -112,7 +116,9 @@ public void export( sheet1.autoSizeColumn(2); sheet1.autoSizeColumn(3); - if (EventType.BLOCKED.equals(type)) { + if (selectedTypeList != null + && selectedTypeList.size() == 1 + && selectedTypeList.contains(EventType.BLOCKED)) { sheet1.autoSizeColumn(4); sheet1.autoSizeColumn(5); sheet1.autoSizeColumn(6); diff --git a/src/main/java/org/jlab/dtm/business/session/SystemDowntimeFacade.java b/src/main/java/org/jlab/dtm/business/session/SystemDowntimeFacade.java index 1a1d62d..f6bfd13 100644 --- a/src/main/java/org/jlab/dtm/business/session/SystemDowntimeFacade.java +++ b/src/main/java/org/jlab/dtm/business/session/SystemDowntimeFacade.java @@ -35,7 +35,7 @@ public SystemDowntimeFacade() { public List findByPeriodAndType( Date start, Date end, - EventType type, + List typeList, Boolean beamTransport, BigInteger categoryId, boolean packed) { @@ -61,8 +61,13 @@ public List findByPeriodAndType( + "and nvl(b.time_up, sysdate) >= :start " + "and a.system_id = d.system_id "; - if (type != null) { - sql = sql + "and event_type_id = " + type.getEventTypeId() + " "; + if (typeList != null && !typeList.isEmpty()) { + String typeListString = typeList.get(0).getEventTypeId().toString(); + for (int i = 1; i < typeList.size(); i++) { + typeListString = "," + typeList.get(i).getEventTypeId().toString(); + } + + sql = sql + "and event_type_id in (" + typeListString + ") "; } // beamTransport Y = only beam transport diff --git a/src/main/java/org/jlab/dtm/business/session/TrendReportFacade.java b/src/main/java/org/jlab/dtm/business/session/TrendReportFacade.java index 3b3c0be..2ac9171 100644 --- a/src/main/java/org/jlab/dtm/business/session/TrendReportFacade.java +++ b/src/main/java/org/jlab/dtm/business/session/TrendReportFacade.java @@ -106,9 +106,10 @@ public List find(TrendReportParams params) return recordList; } - private void fillInTrendCategories(TrendRecord record, Date start, Date end, EventType type) { + private void fillInTrendCategories( + TrendRecord record, Date start, Date end, List typeList) { record.categoryDowntimeList = - categoryDowntimeFacade.findByPeriodAndType(start, end, type, null, true, null); + categoryDowntimeFacade.findByPeriodAndType(start, end, typeList, null, true, null); if (record.categoryDowntimeList != null) { for (CategoryDowntime cd : record.categoryDowntimeList) { @@ -163,7 +164,7 @@ public TrendRecord load(Date start, Date end, EventType type, boolean includeCat record.downtimeMap = new HashMap<>(); if (includeCategories) { - fillInTrendCategories(record, start, end, type); + fillInTrendCategories(record, start, end, Collections.singletonList(type)); } FsdTripService tripService = new FsdTripService(); diff --git a/src/main/java/org/jlab/dtm/presentation/controller/beamtransport/TuneComparisonReport.java b/src/main/java/org/jlab/dtm/presentation/controller/beamtransport/TuneComparisonReport.java index 6f2fe82..5ac013e 100644 --- a/src/main/java/org/jlab/dtm/presentation/controller/beamtransport/TuneComparisonReport.java +++ b/src/main/java/org/jlab/dtm/presentation/controller/beamtransport/TuneComparisonReport.java @@ -8,6 +8,7 @@ import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Calendar; +import java.util.Collections; import java.util.Date; import java.util.List; import org.jlab.dtm.business.params.TuneComparisonReportParams; @@ -92,7 +93,8 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) (params.getEnd().getTime() - params.getStart().getTime()) / 1000.0 / 60.0 / 60.0; downtimeList = - downtimeFacade.findByPeriodAndType(params.getStart(), params.getEnd(), type, true, null); + downtimeFacade.findByPeriodAndType( + params.getStart(), params.getEnd(), Collections.singletonList(type), true, null); for (int i = 0; i < downtimeList.size(); i++) { ComponentDowntime downtime = downtimeList.get(i); @@ -104,7 +106,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) FilterSelectionMessage.getDateRangeReportMessage( params.getStart(), params.getEnd(), - type, + Collections.singletonList(type), null, null, null, diff --git a/src/main/java/org/jlab/dtm/presentation/controller/csv/CSVCategoryDowntime.java b/src/main/java/org/jlab/dtm/presentation/controller/csv/CSVCategoryDowntime.java index 1846d35..077c9f8 100644 --- a/src/main/java/org/jlab/dtm/presentation/controller/csv/CSVCategoryDowntime.java +++ b/src/main/java/org/jlab/dtm/presentation/controller/csv/CSVCategoryDowntime.java @@ -9,6 +9,7 @@ import java.io.IOException; import java.math.BigInteger; import java.text.ParseException; +import java.util.ArrayList; import java.util.Date; import java.util.List; import org.jlab.dtm.business.session.CategoryDowntimeFacade; @@ -66,12 +67,6 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) BigInteger eventTypeId = ParamConverter.convertBigInteger(request, "type"); - EventType type = null; - - if (eventTypeId != null) { - type = eventTypeFacade.find(eventTypeId); - } - Boolean beamTransport = null; try { beamTransport = ParamConverter.convertYNBoolean(request, "transport"); @@ -86,9 +81,22 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) throw new ServletException("packed must be Y or N", e); } + BigInteger[] typeIdArray = ParamConverter.convertBigIntegerArray(request, "type"); + + List selectedTypeList = new ArrayList<>(); + + if (typeIdArray != null) { + for (BigInteger id : typeIdArray) { + if (id != null) { + EventType type = eventTypeFacade.find(id); + selectedTypeList.add(type); + } + } + } + String filters = FilterSelectionMessage.getReportMessage( - start, end, type, null, null, null, null, beamTransport, packed); + start, end, selectedTypeList, null, null, null, null, beamTransport, packed); List downtimeList = null; double grandTotalDuration = 0.0; @@ -102,7 +110,8 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) periodDurationHours = (end.getTime() - start.getTime()) / 1000.0 / 60.0 / 60.0; downtimeList = - downtimeFacade.findByPeriodAndType(start, end, type, beamTransport, packed, null); + downtimeFacade.findByPeriodAndType( + start, end, selectedTypeList, beamTransport, packed, null); for (int i = 0; i < downtimeList.size(); i++) { CategoryDowntime downtime = downtimeList.get(i); diff --git a/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelCategoryDowntime.java b/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelCategoryDowntime.java index 9bd8c8c..55dc512 100644 --- a/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelCategoryDowntime.java +++ b/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelCategoryDowntime.java @@ -9,6 +9,7 @@ import java.io.IOException; import java.math.BigInteger; import java.text.ParseException; +import java.util.ArrayList; import java.util.Date; import java.util.List; import org.jlab.dtm.business.session.CategoryDowntimeFacade; @@ -69,12 +70,6 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) BigInteger eventTypeId = ParamConverter.convertBigInteger(request, "type"); - EventType type = null; - - if (eventTypeId != null) { - type = eventTypeFacade.find(eventTypeId); - } - Boolean beamTransport = null; try { beamTransport = ParamConverter.convertYNBoolean(request, "transport"); @@ -89,9 +84,22 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) throw new ServletException("packed must be Y or N", e); } + BigInteger[] typeIdArray = ParamConverter.convertBigIntegerArray(request, "type"); + + List selectedTypeList = new ArrayList<>(); + + if (typeIdArray != null) { + for (BigInteger id : typeIdArray) { + if (id != null) { + EventType type = eventTypeFacade.find(id); + selectedTypeList.add(type); + } + } + } + String filters = FilterSelectionMessage.getReportMessage( - start, end, type, null, null, null, null, beamTransport, packed); + start, end, selectedTypeList, null, null, null, null, beamTransport, packed); List downtimeList = null; double grandTotalDuration = 0.0; @@ -105,7 +113,8 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) periodDurationHours = (end.getTime() - start.getTime()) / 1000.0 / 60.0 / 60.0; downtimeList = - downtimeFacade.findByPeriodAndType(start, end, type, beamTransport, packed, null); + downtimeFacade.findByPeriodAndType( + start, end, selectedTypeList, beamTransport, packed, null); for (int i = 0; i < downtimeList.size(); i++) { CategoryDowntime downtime = downtimeList.get(i); @@ -116,7 +125,9 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) BeamSummaryTotals beamSummary = null; double programHours = 0.0; - if (EventType.BLOCKED.equals(type)) { + if (selectedTypeList != null + && selectedTypeList.size() == 1 + && selectedTypeList.contains(EventType.BLOCKED)) { beamSummary = accHourService.reportTotals(start, end); programHours = (beamSummary.calculateProgramSeconds() / 3600.0); @@ -131,7 +142,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) filters.trim(), periodDurationHours, grandTotalDuration, - type, + selectedTypeList, programHours); } } diff --git a/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelEventList.java b/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelEventList.java index c487704..24ecd97 100644 --- a/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelEventList.java +++ b/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelEventList.java @@ -9,6 +9,7 @@ import java.io.IOException; import java.math.BigInteger; import java.text.ParseException; +import java.util.Collections; import java.util.Date; import java.util.List; import org.jlab.dtm.business.session.EventDowntimeFacade; @@ -85,7 +86,15 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) String filters = FilterSelectionMessage.getReportMessage( - start, end, type, null, null, null, null, beamTransport, false); + start, + end, + Collections.singletonList(type), + null, + null, + null, + null, + beamTransport, + false); // Note: Bounded means the selected time period boundaries are used as min and max time down and // time up for events which span the period boundary diff --git a/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelIncidentList.java b/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelIncidentList.java index ad4f790..d41c3f1 100644 --- a/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelIncidentList.java +++ b/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelIncidentList.java @@ -9,6 +9,7 @@ import java.io.IOException; import java.math.BigInteger; import java.text.ParseException; +import java.util.ArrayList; import java.util.Date; import java.util.List; import org.jlab.dtm.business.params.IncidentDowntimeReportParams; @@ -66,15 +67,16 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) throw new ServletException("End date must not be null"); } - BigInteger eventTypeId = ParamConverter.convertBigInteger(request, "type"); + BigInteger[] typeIdArray = ParamConverter.convertBigIntegerArray(request, "type"); - EventType type = null; - BigInteger[] eventTypeIdArray = null; + List selectedTypeList = new ArrayList<>(); - if (eventTypeId != null) { - type = eventTypeFacade.find(eventTypeId); - if (type != null) { - eventTypeIdArray = new BigInteger[] {type.getEventTypeId()}; + if (typeIdArray != null) { + for (BigInteger id : typeIdArray) { + if (id != null) { + EventType type = eventTypeFacade.find(id); + selectedTypeList.add(type); + } } } @@ -97,12 +99,20 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) String filters = FilterSelectionMessage.getReportMessage( - start, end, type, selectedSystem, null, null, component, beamTransport, false); + start, + end, + selectedTypeList, + selectedSystem, + null, + null, + component, + beamTransport, + false); IncidentDowntimeReportParams params = new IncidentDowntimeReportParams(); params.setStart(start); params.setEnd(end); - params.setEventTypeIdArray(eventTypeIdArray); + params.setEventTypeIdArray(typeIdArray); params.setSystemId(systemId); params.setComponent(component); params.setBeamTransport(beamTransport); diff --git a/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelSystemDowntime.java b/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelSystemDowntime.java index a56165d..6510f96 100644 --- a/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelSystemDowntime.java +++ b/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelSystemDowntime.java @@ -9,6 +9,7 @@ import java.io.IOException; import java.math.BigInteger; import java.text.ParseException; +import java.util.ArrayList; import java.util.Date; import java.util.List; import org.jlab.dtm.business.session.*; @@ -66,12 +67,17 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) throw new ServletException("End date must not be null"); } - BigInteger eventTypeId = ParamConverter.convertBigInteger(request, "type"); + BigInteger[] typeIdArray = ParamConverter.convertBigIntegerArray(request, "type"); - EventType type = null; + List selectedTypeList = new ArrayList<>(); - if (eventTypeId != null) { - type = eventTypeFacade.find(eventTypeId); + if (typeIdArray != null) { + for (BigInteger id : typeIdArray) { + if (id != null) { + EventType type = eventTypeFacade.find(id); + selectedTypeList.add(type); + } + } } BigInteger categoryId = ParamConverter.convertBigInteger(request, "category"); @@ -98,7 +104,15 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) String filters = FilterSelectionMessage.getReportMessage( - start, end, type, null, selectedCategory, null, null, beamTransport, packed); + start, + end, + selectedTypeList, + null, + selectedCategory, + null, + null, + beamTransport, + packed); List downtimeList = null; double grandTotalDuration = 0.0; @@ -112,7 +126,8 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) periodDurationHours = (end.getTime() - start.getTime()) / 1000.0 / 60.0 / 60.0; downtimeList = - downtimeFacade.findByPeriodAndType(start, end, type, beamTransport, categoryId, packed); + downtimeFacade.findByPeriodAndType( + start, end, selectedTypeList, beamTransport, categoryId, packed); for (int i = 0; i < downtimeList.size(); i++) { SystemDowntime downtime = downtimeList.get(i); @@ -123,7 +138,9 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) BeamSummaryTotals beamSummary = null; double programHours = 0.0; - if (EventType.BLOCKED.equals(type)) { + if (selectedTypeList != null + && selectedTypeList.size() == 1 + && selectedTypeList.contains(EventType.BLOCKED)) { beamSummary = accHourService.reportTotals(start, end); programHours = (beamSummary.calculateProgramSeconds() / 3600.0); @@ -138,7 +155,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) filters.trim(), periodDurationHours, grandTotalDuration, - type, + selectedTypeList, programHours); } } diff --git a/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelTuneIncidentList.java b/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelTuneIncidentList.java index 5595bab..803676c 100644 --- a/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelTuneIncidentList.java +++ b/src/main/java/org/jlab/dtm/presentation/controller/excel/ExcelTuneIncidentList.java @@ -9,6 +9,7 @@ import java.io.IOException; import java.math.BigInteger; import java.text.ParseException; +import java.util.ArrayList; import java.util.Date; import java.util.List; import org.jlab.dtm.business.params.IncidentDowntimeReportParams; @@ -57,15 +58,16 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) throw new ServletException("Unable to parse date", e); } - BigInteger eventTypeId = ParamConverter.convertBigInteger(request, "type"); + BigInteger[] typeIdArray = ParamConverter.convertBigIntegerArray(request, "type"); - EventType type = null; - BigInteger[] eventTypeIdArray = null; + List selectedTypeList = new ArrayList<>(); - if (eventTypeId != null) { - type = eventTypeFacade.find(eventTypeId); - if (type != null) { - eventTypeIdArray = new BigInteger[] {type.getEventTypeId()}; + if (typeIdArray != null) { + for (BigInteger id : typeIdArray) { + if (id != null) { + EventType type = eventTypeFacade.find(id); + selectedTypeList.add(type); + } } } @@ -73,12 +75,12 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) String filters = FilterSelectionMessage.getReportMessage( - start, end, type, null, null, null, component, true, false); + start, end, selectedTypeList, null, null, null, component, true, false); IncidentDowntimeReportParams params = new IncidentDowntimeReportParams(); params.setStart(start); params.setEnd(end); - params.setEventTypeIdArray(eventTypeIdArray); + params.setEventTypeIdArray(typeIdArray); params.setComponent(component); long totalRecords = incidentReportService.countFilterList(params); diff --git a/src/main/java/org/jlab/dtm/presentation/controller/reports/CategoryDowntimeReport.java b/src/main/java/org/jlab/dtm/presentation/controller/reports/CategoryDowntimeReport.java index 293f579..7717d84 100644 --- a/src/main/java/org/jlab/dtm/presentation/controller/reports/CategoryDowntimeReport.java +++ b/src/main/java/org/jlab/dtm/presentation/controller/reports/CategoryDowntimeReport.java @@ -7,11 +7,8 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.math.BigInteger; +import java.util.*; import org.jlab.dtm.business.params.CategoryDowntimeReportParams; import org.jlab.dtm.business.service.FsdTripService; import org.jlab.dtm.business.session.CategoryDowntimeFacade; @@ -72,10 +69,15 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) return; } - EventType type = null; + List selectedTypeList = new ArrayList<>(); - if (params.getEventTypeId() != null) { - type = eventTypeFacade.find(params.getEventTypeId()); + if (params.getEventTypeIdArray() != null) { + for (BigInteger id : params.getEventTypeIdArray()) { + if (id != null) { + EventType type = eventTypeFacade.find(id); + selectedTypeList.add(type); + } + } } List eventTypeList = eventTypeFacade.filterList(null); @@ -98,7 +100,12 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) downtimeList = downtimeFacade.findByPeriodAndType( - params.getStart(), params.getEnd(), type, params.getBeamTransport(), false, null); + params.getStart(), + params.getEnd(), + selectedTypeList, + params.getBeamTransport(), + false, + null); double grandTotalDuration = 0.0; for (int i = 0; i < downtimeList.size(); i++) { @@ -110,7 +117,12 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) nonOverlappingCategoryDowntimeList = downtimeFacade.findByPeriodAndType( - params.getStart(), params.getEnd(), type, params.getBeamTransport(), true, null); + params.getStart(), + params.getEnd(), + selectedTypeList, + params.getBeamTransport(), + true, + null); grandTotalDuration = 0.0; for (int i = 0; i < nonOverlappingCategoryDowntimeList.size(); i++) { @@ -121,7 +133,9 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) nonOverlappingCategoryDowntimeHours = grandTotalDuration * 24; - if (params.getEventTypeId() != null && params.getEventTypeId().intValue() == 1) { + if (params.getEventTypeIdArray() != null + && params.getEventTypeIdArray().length == 1 + && params.getEventTypeIdArray()[0].intValue() == 1) { beamSummary = accHourService.reportTotals(params.getStart(), params.getEnd()); programHours = (beamSummary.calculateProgramSeconds() / 3600.0); @@ -132,7 +146,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) FilterSelectionMessage.getDateRangeReportMessage( params.getStart(), params.getEnd(), - type, + selectedTypeList, null, null, null, @@ -145,7 +159,6 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) request.setAttribute("programHours", programHours); request.setAttribute("tripAwareProgramHours", tripAwareProgramHours); request.setAttribute("fsdSummary", fsdSummary); - request.setAttribute("type", type); request.setAttribute("start", params.getStart()); request.setAttribute("end", params.getEnd()); request.setAttribute("eventTypeList", eventTypeList); diff --git a/src/main/java/org/jlab/dtm/presentation/controller/reports/ComponentDowntimeReport.java b/src/main/java/org/jlab/dtm/presentation/controller/reports/ComponentDowntimeReport.java index 7426279..408f9dc 100644 --- a/src/main/java/org/jlab/dtm/presentation/controller/reports/ComponentDowntimeReport.java +++ b/src/main/java/org/jlab/dtm/presentation/controller/reports/ComponentDowntimeReport.java @@ -7,6 +7,8 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; +import java.math.BigInteger; +import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -76,10 +78,15 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) return; } - EventType type = null; + List selectedTypeList = new ArrayList<>(); - if (params.getEventTypeId() != null) { - type = eventTypeFacade.find(params.getEventTypeId()); + if (params.getEventTypeIdArray() != null) { + for (BigInteger id : params.getEventTypeIdArray()) { + if (id != null) { + EventType type = eventTypeFacade.find(id); + selectedTypeList.add(type); + } + } } SystemEntity selectedSystem = null; @@ -110,7 +117,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) downtimeFacade.findByPeriodAndType( params.getStart(), params.getEnd(), - type, + selectedTypeList, params.getBeamTransport(), params.getSystemId()); @@ -120,37 +127,20 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) incidentCount = incidentCount + (int) downtime.getIncidentCount(); } - if (params.getEventTypeId() != null && params.getEventTypeId().intValue() == 1) { + if (params.getEventTypeIdArray() != null + && params.getEventTypeIdArray().length == 1 + && params.getEventTypeIdArray()[0].intValue() == 1) { beamSummary = accHourService.reportTotals(params.getStart(), params.getEnd()); programHours = (beamSummary.calculateProgramSeconds() / 3600.0); } - - /*FsdTripService tripService = new FsdTripService(); - TripParams tripParams = new TripParams(); - tripParams.setStart(params.getStart()); - tripParams.setEnd(params.getEnd()); - tripParams.setMaxDuration(BigInteger.valueOf(5l)); - tripParams.setMaxDurationUnits("Minutes"); - FsdTripFilter fsdFilter = new FsdTripFilter(tripParams); - try { - fsdSummary = tripService.filterSummary(fsdFilter); - } catch (SQLException e) { - throw new ServletException("Unable to query FSD data", e); - } - - tripAwareProgramHours = programHours - fsdSummary.getHours(); - - if (tripAwareProgramHours < 0) { - tripAwareProgramHours = 0; - }*/ } String selectionMessage = FilterSelectionMessage.getDateRangeReportMessage( params.getStart(), params.getEnd(), - type, + selectedTypeList, selectedSystem, null, null, @@ -164,7 +154,6 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) request.setAttribute("tripAwareProgramHours", tripAwareProgramHours); request.setAttribute("fsdSummary", fsdSummary); request.setAttribute("incidentCount", incidentCount); - request.setAttribute("type", type); request.setAttribute("start", params.getStart()); request.setAttribute("end", params.getEnd()); request.setAttribute("eventTypeList", eventTypeList); diff --git a/src/main/java/org/jlab/dtm/presentation/controller/reports/DowntimeSummaryReport.java b/src/main/java/org/jlab/dtm/presentation/controller/reports/DowntimeSummaryReport.java index cf937eb..847db2a 100644 --- a/src/main/java/org/jlab/dtm/presentation/controller/reports/DowntimeSummaryReport.java +++ b/src/main/java/org/jlab/dtm/presentation/controller/reports/DowntimeSummaryReport.java @@ -15,6 +15,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; +import java.util.Collections; import java.util.Date; import java.util.List; import org.jlab.dtm.business.params.IncidentDowntimeReportParams; @@ -316,7 +317,8 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) selectionMessage = TimeUtil.formatSmartRangeSeparateTime(start, end); List catList = - categoryDowntimeFacade.findByPeriodAndType(start, end, type, null, true, null); + categoryDowntimeFacade.findByPeriodAndType( + start, end, Collections.singletonList(type), null, true, null); for (int i = 0; i < catList.size(); i++) { CategoryDowntime dt = catList.get(i); @@ -324,7 +326,8 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) } List sysList = - systemDowntimeFacade.findByPeriodAndType(start, end, type, null, null, true); + systemDowntimeFacade.findByPeriodAndType( + start, end, Collections.singletonList(type), null, null, true); for (int i = 0; i < sysList.size(); i++) { SystemDowntime dt = sysList.get(i); diff --git a/src/main/java/org/jlab/dtm/presentation/controller/reports/EventDowntimeReport.java b/src/main/java/org/jlab/dtm/presentation/controller/reports/EventDowntimeReport.java index 2d6053a..18fcf6e 100644 --- a/src/main/java/org/jlab/dtm/presentation/controller/reports/EventDowntimeReport.java +++ b/src/main/java/org/jlab/dtm/presentation/controller/reports/EventDowntimeReport.java @@ -8,6 +8,7 @@ import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Calendar; +import java.util.Collections; import java.util.Date; import java.util.List; import org.jlab.dtm.business.params.EventDowntimeReportParams; @@ -108,7 +109,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) FilterSelectionMessage.getDateRangeReportMessage( params.getStart(), params.getEnd(), - type, + Collections.singletonList(type), null, null, null, diff --git a/src/main/java/org/jlab/dtm/presentation/controller/reports/SystemDowntimeReport.java b/src/main/java/org/jlab/dtm/presentation/controller/reports/SystemDowntimeReport.java index 392ba6e..9576837 100644 --- a/src/main/java/org/jlab/dtm/presentation/controller/reports/SystemDowntimeReport.java +++ b/src/main/java/org/jlab/dtm/presentation/controller/reports/SystemDowntimeReport.java @@ -7,11 +7,8 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.math.BigInteger; +import java.util.*; import org.jlab.dtm.business.params.SystemDowntimeReportParams; import org.jlab.dtm.business.service.FsdTripService; import org.jlab.dtm.business.session.CategoryDowntimeFacade; @@ -78,10 +75,15 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) return; } - EventType type = null; + List selectedTypeList = new ArrayList<>(); - if (params.getEventTypeId() != null) { - type = eventTypeFacade.find(params.getEventTypeId()); + if (params.getEventTypeIdArray() != null) { + for (BigInteger id : params.getEventTypeIdArray()) { + if (id != null) { + EventType type = eventTypeFacade.find(id); + selectedTypeList.add(type); + } + } } Category selectedCategory = null; @@ -115,7 +117,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) downtimeFacade.findByPeriodAndType( params.getStart(), params.getEnd(), - type, + selectedTypeList, params.getBeamTransport(), params.getCategoryId(), false); @@ -132,7 +134,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) downtimeFacade.findByPeriodAndType( params.getStart(), params.getEnd(), - type, + selectedTypeList, params.getBeamTransport(), params.getCategoryId(), true); @@ -150,7 +152,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) categoryDowntimeFacade.findByPeriodAndType( params.getStart(), params.getEnd(), - type, + selectedTypeList, params.getBeamTransport(), true, params.getCategoryId()); @@ -163,7 +165,9 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) nonOverlappingCategoryDowntimeHours = grandTotalDuration * 24; - if (params.getEventTypeId() != null && params.getEventTypeId().intValue() == 1) { + if (params.getEventTypeIdArray() != null + && params.getEventTypeIdArray().length == 1 + && params.getEventTypeIdArray()[0].intValue() == 1) { beamSummary = accHourService.reportTotals(params.getStart(), params.getEnd()); programHours = (beamSummary.calculateProgramSeconds() / 3600.0); @@ -174,7 +178,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) FilterSelectionMessage.getDateRangeReportMessage( params.getStart(), params.getEnd(), - type, + selectedTypeList, null, selectedCategory, null, @@ -187,7 +191,6 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) request.setAttribute("programHours", programHours); request.setAttribute("tripAwareProgramHours", tripAwareProgramHours); request.setAttribute("fsdSummary", fsdSummary); - request.setAttribute("type", type); request.setAttribute("start", params.getStart()); request.setAttribute("end", params.getEnd()); request.setAttribute("eventTypeList", eventTypeList); diff --git a/src/main/java/org/jlab/dtm/presentation/controller/shiftlog/IncidentList.java b/src/main/java/org/jlab/dtm/presentation/controller/shiftlog/IncidentList.java index 15fc3e1..d594a24 100644 --- a/src/main/java/org/jlab/dtm/presentation/controller/shiftlog/IncidentList.java +++ b/src/main/java/org/jlab/dtm/presentation/controller/shiftlog/IncidentList.java @@ -10,6 +10,7 @@ import java.math.BigInteger; import java.text.DecimalFormat; import java.text.ParseException; +import java.util.ArrayList; import java.util.Date; import java.util.List; import org.jlab.dtm.business.params.IncidentDowntimeReportParams; @@ -58,20 +59,16 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) throw new ServletException("Unable to parse date", e); } - BigInteger eventTypeId = ParamConverter.convertBigInteger(request, "type"); + BigInteger[] typeIdArray = ParamConverter.convertBigIntegerArray(request, "type"); - if (eventTypeId == null - && request.getParameter("type") == null) { // null is different than empty string - eventTypeId = BigInteger.ONE; - } - - EventType type = null; - BigInteger[] eventTypeIdArray = null; + List selectedTypeList = new ArrayList<>(); - if (eventTypeId != null) { - type = eventTypeFacade.find(eventTypeId); - if (type != null) { - eventTypeIdArray = new BigInteger[] {eventTypeId}; + if (typeIdArray != null) { + for (BigInteger id : typeIdArray) { + if (id != null) { + EventType type = eventTypeFacade.find(id); + selectedTypeList.add(type); + } } } @@ -99,7 +96,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) IncidentDowntimeReportParams params = new IncidentDowntimeReportParams(); params.setStart(start); params.setEnd(end); - params.setEventTypeIdArray(eventTypeIdArray); + params.setEventTypeIdArray(typeIdArray); params.setSystemId(systemId); params.setComponent(component); params.setBeamTransport(beamTransport); @@ -116,13 +113,20 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) String filters = FilterSelectionMessage.getReportMessage( - start, end, type, selectedSystem, null, null, component, beamTransport, false); + start, + end, + selectedTypeList, + selectedSystem, + null, + null, + component, + beamTransport, + false); if (filters.length() > 0) { selectionMessage = selectionMessage + " in " + filters; } - request.setAttribute("type", type); request.setAttribute("start", start); request.setAttribute("end", end); request.setAttribute("selectionMessage", selectionMessage); diff --git a/src/main/java/org/jlab/dtm/presentation/params/CategoryDowntimeReportUrlParamHandler.java b/src/main/java/org/jlab/dtm/presentation/params/CategoryDowntimeReportUrlParamHandler.java index 746bb38..3884b2a 100644 --- a/src/main/java/org/jlab/dtm/presentation/params/CategoryDowntimeReportUrlParamHandler.java +++ b/src/main/java/org/jlab/dtm/presentation/params/CategoryDowntimeReportUrlParamHandler.java @@ -40,7 +40,8 @@ public CategoryDowntimeReportParams convert() { throw new RuntimeException("Unable to parse date", e); } - BigInteger eventTypeId = ParamConverter.convertBigInteger(request, "type"); + BigInteger[] typeIdArray = ParamConverter.convertBigIntegerArray(request, "type"); + Boolean beamTransport = null; try { @@ -64,7 +65,7 @@ public CategoryDowntimeReportParams convert() { params.setStart(start); params.setEnd(end); - params.setEventTypeId(eventTypeId); + params.setEventTypeIdArray(typeIdArray); params.setBeamTransport(beamTransport); params.setChart(chart); params.setData(data); @@ -97,7 +98,7 @@ public void store(CategoryDowntimeReportParams params) { session.setAttribute("start[]", new Date[] {params.getStart()}); session.setAttribute("end[]", new Date[] {params.getEnd()}); - session.setAttribute("eventTypeId[]", new BigInteger[] {params.getEventTypeId()}); + session.setAttribute("eventTypeId[]", params.getEventTypeIdArray()); session.setAttribute("transport[]", new Boolean[] {params.getBeamTransport()}); session.setAttribute("chart[]", new String[] {params.getChart()}); session.setAttribute("data[]", new String[] {params.getData()}); @@ -110,7 +111,7 @@ public CategoryDowntimeReportParams defaults() { defaultParams.setStart(sevenDaysAgo); defaultParams.setEnd(today); - defaultParams.setEventTypeId(BigInteger.ONE); + defaultParams.setEventTypeIdArray(new BigInteger[] {BigInteger.ONE}); defaultParams.setBeamTransport(false); defaultParams.setChart("bar"); defaultParams.setData("downtime"); @@ -129,7 +130,7 @@ public CategoryDowntimeReportParams materialize() { HttpSession session = request.getSession(true); Date[] startArray = (Date[]) session.getAttribute("start[]"); Date[] endArray = (Date[]) session.getAttribute("end[]"); - BigInteger[] eventTypeIdArray = (BigInteger[]) session.getAttribute("eventTypeId[]"); + BigInteger[] eventTypeIdArraySession = (BigInteger[]) session.getAttribute("eventTypeId[]"); Boolean[] transportArray = (Boolean[]) session.getAttribute("transport[]"); String[] chartArray = (String[]) session.getAttribute("chart[]"); String[] dataArray = (String[]) session.getAttribute("data[]"); @@ -137,7 +138,7 @@ public CategoryDowntimeReportParams materialize() { Date start = defaultValues.getStart(); Date end = defaultValues.getEnd(); - BigInteger eventTypeId = defaultValues.getEventTypeId(); + BigInteger[] eventTypeIdArray = defaultValues.getEventTypeIdArray(); Boolean transport = defaultValues.getBeamTransport(); String chart = defaultValues.getChart(); String data = defaultValues.getData(); @@ -151,8 +152,8 @@ public CategoryDowntimeReportParams materialize() { end = endArray[0]; } - if (eventTypeIdArray != null && eventTypeIdArray.length > 0) { - eventTypeId = eventTypeIdArray[0]; + if (eventTypeIdArraySession != null && eventTypeIdArraySession.length > 0) { + eventTypeIdArray = eventTypeIdArraySession; } if (transportArray != null && transportArray.length > 0) { @@ -175,7 +176,7 @@ public CategoryDowntimeReportParams materialize() { params.setStart(start); params.setEnd(end); - params.setEventTypeId(eventTypeId); + params.setEventTypeIdArray(eventTypeIdArray); params.setBeamTransport(transport); params.setChart(chart); params.setData(data); @@ -212,7 +213,7 @@ public void redirect(HttpServletResponse response, CategoryDowntimeReportParams builder.add("start", IOUtil.nullOrFormat(params.getStart(), dateFormat)); builder.add("end", IOUtil.nullOrFormat(params.getEnd(), dateFormat)); - builder.add("type", IOUtil.nullOrString(params.getEventTypeId())); + builder.add("type", params.getEventTypeIdArray()); builder.add("transport", IOUtil.nullOrBoolean(params.getBeamTransport())); builder.add("chart", IOUtil.nullOrString(params.getChart())); builder.add("data", IOUtil.nullOrString(params.getData())); diff --git a/src/main/java/org/jlab/dtm/presentation/params/ComponentDowntimeReportUrlParamHandler.java b/src/main/java/org/jlab/dtm/presentation/params/ComponentDowntimeReportUrlParamHandler.java index 2a0ce89..49d62fe 100644 --- a/src/main/java/org/jlab/dtm/presentation/params/ComponentDowntimeReportUrlParamHandler.java +++ b/src/main/java/org/jlab/dtm/presentation/params/ComponentDowntimeReportUrlParamHandler.java @@ -40,7 +40,7 @@ public ComponentDowntimeReportParams convert() { throw new RuntimeException("Unable to parse date", e); } - BigInteger eventTypeId = ParamConverter.convertBigInteger(request, "type"); + BigInteger[] typeIdArray = ParamConverter.convertBigIntegerArray(request, "type"); Boolean beamTransport = null; try { @@ -58,7 +58,7 @@ public ComponentDowntimeReportParams convert() { params.setStart(start); params.setEnd(end); - params.setEventTypeId(eventTypeId); + params.setEventTypeIdArray(typeIdArray); params.setBeamTransport(beamTransport); params.setSystemId(systemId); params.setChart(chart); @@ -91,7 +91,7 @@ public void store(ComponentDowntimeReportParams params) { session.setAttribute("start[]", new Date[] {params.getStart()}); session.setAttribute("end[]", new Date[] {params.getEnd()}); - session.setAttribute("eventTypeId[]", new BigInteger[] {params.getEventTypeId()}); + session.setAttribute("eventTypeId[]", params.getEventTypeIdArray()); session.setAttribute("transport[]", new Boolean[] {params.getBeamTransport()}); session.setAttribute("systemId[]", new BigInteger[] {params.getSystemId()}); session.setAttribute("chart[]", new String[] {params.getChart()}); @@ -104,7 +104,7 @@ public ComponentDowntimeReportParams defaults() { defaultParams.setStart(sevenDaysAgo); defaultParams.setEnd(today); - defaultParams.setEventTypeId(BigInteger.ONE); + defaultParams.setEventTypeIdArray(new BigInteger[] {BigInteger.ONE}); defaultParams.setBeamTransport(false); defaultParams.setChart("bar"); defaultParams.setData("downtime"); @@ -122,7 +122,7 @@ public ComponentDowntimeReportParams materialize() { HttpSession session = request.getSession(true); Date[] startArray = (Date[]) session.getAttribute("start[]"); Date[] endArray = (Date[]) session.getAttribute("end[]"); - BigInteger[] eventTypeIdArray = (BigInteger[]) session.getAttribute("eventTypeId[]"); + BigInteger[] eventTypeIdArraySession = (BigInteger[]) session.getAttribute("eventTypeId[]"); Boolean[] transportArray = (Boolean[]) session.getAttribute("transport[]"); BigInteger[] systemIdArray = (BigInteger[]) session.getAttribute("systemId[]"); String[] chartArray = (String[]) session.getAttribute("chart[]"); @@ -130,7 +130,7 @@ public ComponentDowntimeReportParams materialize() { Date start = defaultValues.getStart(); Date end = defaultValues.getEnd(); - BigInteger eventTypeId = defaultValues.getEventTypeId(); + BigInteger[] eventTypeIdArray = defaultValues.getEventTypeIdArray(); Boolean transport = defaultValues.getBeamTransport(); BigInteger systemId = defaultValues.getSystemId(); String chart = defaultValues.getChart(); @@ -144,8 +144,8 @@ public ComponentDowntimeReportParams materialize() { end = endArray[0]; } - if (eventTypeIdArray != null && eventTypeIdArray.length > 0) { - eventTypeId = eventTypeIdArray[0]; + if (eventTypeIdArraySession != null && eventTypeIdArraySession.length > 0) { + eventTypeIdArray = eventTypeIdArraySession; } if (transportArray != null && transportArray.length > 0) { @@ -168,7 +168,7 @@ public ComponentDowntimeReportParams materialize() { params.setStart(start); params.setEnd(end); - params.setEventTypeId(eventTypeId); + params.setEventTypeIdArray(eventTypeIdArray); params.setBeamTransport(transport); params.setSystemId(systemId); params.setChart(chart); @@ -205,7 +205,7 @@ public void redirect(HttpServletResponse response, ComponentDowntimeReportParams builder.add("start", IOUtil.nullOrFormat(params.getStart(), dateFormat)); builder.add("end", IOUtil.nullOrFormat(params.getEnd(), dateFormat)); - builder.add("type", IOUtil.nullOrString(params.getEventTypeId())); + builder.add("type", params.getEventTypeIdArray()); builder.add("transport", IOUtil.nullOrBoolean(params.getBeamTransport())); builder.add("system", IOUtil.nullOrString(params.getSystemId())); builder.add("chart", IOUtil.nullOrString(params.getChart())); diff --git a/src/main/java/org/jlab/dtm/presentation/params/SystemDowntimeReportUrlParamHandler.java b/src/main/java/org/jlab/dtm/presentation/params/SystemDowntimeReportUrlParamHandler.java index 09c7e79..941e4e5 100644 --- a/src/main/java/org/jlab/dtm/presentation/params/SystemDowntimeReportUrlParamHandler.java +++ b/src/main/java/org/jlab/dtm/presentation/params/SystemDowntimeReportUrlParamHandler.java @@ -40,7 +40,7 @@ public SystemDowntimeReportParams convert() { throw new RuntimeException("Unable to parse date", e); } - BigInteger eventTypeId = ParamConverter.convertBigInteger(request, "type"); + BigInteger[] typeIdArray = ParamConverter.convertBigIntegerArray(request, "type"); Boolean beamTransport = null; try { @@ -66,7 +66,7 @@ public SystemDowntimeReportParams convert() { params.setStart(start); params.setEnd(end); - params.setEventTypeId(eventTypeId); + params.setEventTypeIdArray(typeIdArray); params.setBeamTransport(beamTransport); params.setCategoryId(categoryId); params.setChart(chart); @@ -100,7 +100,7 @@ public void store(SystemDowntimeReportParams params) { session.setAttribute("start[]", new Date[] {params.getStart()}); session.setAttribute("end[]", new Date[] {params.getEnd()}); - session.setAttribute("eventTypeId[]", new BigInteger[] {params.getEventTypeId()}); + session.setAttribute("eventTypeId[]", params.getEventTypeIdArray()); session.setAttribute("transport[]", new Boolean[] {params.getBeamTransport()}); session.setAttribute("categoryId[]", new BigInteger[] {params.getCategoryId()}); session.setAttribute("chart[]", new String[] {params.getChart()}); @@ -114,7 +114,7 @@ public SystemDowntimeReportParams defaults() { defaultParams.setStart(sevenDaysAgo); defaultParams.setEnd(today); - defaultParams.setEventTypeId(BigInteger.ONE); + defaultParams.setEventTypeIdArray(new BigInteger[] {BigInteger.ONE}); defaultParams.setBeamTransport(false); defaultParams.setChart("bar"); defaultParams.setData("downtime"); @@ -133,7 +133,7 @@ public SystemDowntimeReportParams materialize() { HttpSession session = request.getSession(true); Date[] startArray = (Date[]) session.getAttribute("start[]"); Date[] endArray = (Date[]) session.getAttribute("end[]"); - BigInteger[] eventTypeIdArray = (BigInteger[]) session.getAttribute("eventTypeId[]"); + BigInteger[] eventTypeIdArraySession = (BigInteger[]) session.getAttribute("eventTypeId[]"); Boolean[] transportArray = (Boolean[]) session.getAttribute("transport[]"); BigInteger[] categoryIdArray = (BigInteger[]) session.getAttribute("categoryId[]"); String[] chartArray = (String[]) session.getAttribute("chart[]"); @@ -142,7 +142,7 @@ public SystemDowntimeReportParams materialize() { Date start = defaultValues.getStart(); Date end = defaultValues.getEnd(); - BigInteger eventTypeId = defaultValues.getEventTypeId(); + BigInteger[] eventTypeIdArray = defaultValues.getEventTypeIdArray(); Boolean transport = defaultValues.getBeamTransport(); BigInteger categoryId = defaultValues.getCategoryId(); String chart = defaultValues.getChart(); @@ -157,8 +157,8 @@ public SystemDowntimeReportParams materialize() { end = endArray[0]; } - if (eventTypeIdArray != null && eventTypeIdArray.length > 0) { - eventTypeId = eventTypeIdArray[0]; + if (eventTypeIdArraySession != null && eventTypeIdArraySession.length > 0) { + eventTypeIdArray = eventTypeIdArraySession; } if (transportArray != null && transportArray.length > 0) { @@ -185,7 +185,7 @@ public SystemDowntimeReportParams materialize() { params.setStart(start); params.setEnd(end); - params.setEventTypeId(eventTypeId); + params.setEventTypeIdArray(eventTypeIdArray); params.setBeamTransport(transport); params.setCategoryId(categoryId); params.setChart(chart); @@ -223,7 +223,7 @@ public void redirect(HttpServletResponse response, SystemDowntimeReportParams pa builder.add("start", IOUtil.nullOrFormat(params.getStart(), dateFormat)); builder.add("end", IOUtil.nullOrFormat(params.getEnd(), dateFormat)); - builder.add("type", IOUtil.nullOrString(params.getEventTypeId())); + builder.add("type", params.getEventTypeIdArray()); builder.add("transport", IOUtil.nullOrBoolean(params.getBeamTransport())); builder.add("category", IOUtil.nullOrString(params.getCategoryId())); builder.add("chart", IOUtil.nullOrString(params.getChart())); diff --git a/src/main/java/org/jlab/dtm/presentation/util/FilterSelectionMessage.java b/src/main/java/org/jlab/dtm/presentation/util/FilterSelectionMessage.java index 1f74051..efaf94b 100644 --- a/src/main/java/org/jlab/dtm/presentation/util/FilterSelectionMessage.java +++ b/src/main/java/org/jlab/dtm/presentation/util/FilterSelectionMessage.java @@ -6,6 +6,7 @@ import java.util.Date; import java.util.List; import java.util.Locale; +import java.util.stream.Collectors; import org.jlab.dtm.persistence.entity.Category; import org.jlab.dtm.persistence.entity.EventType; import org.jlab.dtm.persistence.entity.SystemEntity; @@ -35,7 +36,7 @@ private FilterSelectionMessage() { public static String getReportMessage( Date start, Date end, - EventType type, + List typeList, SystemEntity system, Category category, String dateFormat, @@ -63,8 +64,11 @@ public static String getReportMessage( filters.add("End Date \"" + formatter.format(end) + "\""); } - if (type != null) { - filters.add("Type \"" + type.getName() + "\""); + if (typeList != null && !typeList.isEmpty()) { + filters.add( + "Type \"" + + typeList.stream().map(EventType::getAbbreviation).collect(Collectors.joining(",")) + + "\""); } if (category != null) { @@ -104,7 +108,7 @@ public static String getReportMessage( public static String getDateRangeReportMessage( Date start, Date end, - EventType type, + List selectedTypeList, SystemEntity system, Category category, String dateFormat, @@ -122,8 +126,13 @@ public static String getDateRangeReportMessage( // SimpleDateFormat formatter = new SimpleDateFormat(dateFormat); String typeQualifier = ""; - if (type != null) { - typeQualifier = type.getName() + " "; + if (selectedTypeList != null && !selectedTypeList.isEmpty()) { + typeQualifier = + "Type \"" + + selectedTypeList.stream() + .map(EventType::getAbbreviation) + .collect(Collectors.joining(",")) + + "\""; } String packedQualifier = ""; diff --git a/src/main/webapp/WEB-INF/views/reports/category-downtime.jsp b/src/main/webapp/WEB-INF/views/reports/category-downtime.jsp index 17a6422..f90677c 100644 --- a/src/main/webapp/WEB-INF/views/reports/category-downtime.jsp +++ b/src/main/webapp/WEB-INF/views/reports/category-downtime.jsp @@ -63,20 +63,19 @@
Taxonomy -
    +
    • - - + - +
      -
    • +
    • diff --git a/src/main/webapp/resources/js/downtime-report.js b/src/main/webapp/resources/js/downtime-report.js index 239dbb2..2d7d504 100644 --- a/src/main/webapp/resources/js/downtime-report.js +++ b/src/main/webapp/resources/js/downtime-report.js @@ -599,4 +599,8 @@ $(function () { /*$("#data").change();*/ jlab.doChartLoad(); } + + $("#type").select2({ + width: 360 + }); }); \ No newline at end of file From b85a223c5e62f0deca6c4b55625c5cf040bd8ceb Mon Sep 17 00:00:00 2001 From: Ryan Slominski Date: Wed, 19 Nov 2025 14:01:42 -0500 Subject: [PATCH 2/8] Append --- .../org/jlab/dtm/business/session/CategoryDowntimeFacade.java | 2 +- .../org/jlab/dtm/business/session/ComponentDowntimeFacade.java | 2 +- .../org/jlab/dtm/business/session/SystemDowntimeFacade.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/jlab/dtm/business/session/CategoryDowntimeFacade.java b/src/main/java/org/jlab/dtm/business/session/CategoryDowntimeFacade.java index befeb88..456ad8d 100644 --- a/src/main/java/org/jlab/dtm/business/session/CategoryDowntimeFacade.java +++ b/src/main/java/org/jlab/dtm/business/session/CategoryDowntimeFacade.java @@ -61,7 +61,7 @@ public List findByPeriodAndType( if (typeList != null && !typeList.isEmpty()) { String typeListString = typeList.get(0).getEventTypeId().toString(); for (int i = 1; i < typeList.size(); i++) { - typeListString = "," + typeList.get(i).getEventTypeId().toString(); + typeListString = typeListString + "," + typeList.get(i).getEventTypeId().toString(); } sql = sql + "and event_type_id in (" + typeListString + ") "; diff --git a/src/main/java/org/jlab/dtm/business/session/ComponentDowntimeFacade.java b/src/main/java/org/jlab/dtm/business/session/ComponentDowntimeFacade.java index 3b1a846..78aa165 100644 --- a/src/main/java/org/jlab/dtm/business/session/ComponentDowntimeFacade.java +++ b/src/main/java/org/jlab/dtm/business/session/ComponentDowntimeFacade.java @@ -46,7 +46,7 @@ public List findByPeriodAndType( if (typeList != null && !typeList.isEmpty()) { String typeListString = typeList.get(0).getEventTypeId().toString(); for (int i = 1; i < typeList.size(); i++) { - typeListString = "," + typeList.get(i).getEventTypeId().toString(); + typeListString = typeListString + "," + typeList.get(i).getEventTypeId().toString(); } sql = sql + "and event_type_id in (" + typeListString + ") "; diff --git a/src/main/java/org/jlab/dtm/business/session/SystemDowntimeFacade.java b/src/main/java/org/jlab/dtm/business/session/SystemDowntimeFacade.java index f6bfd13..9159b3b 100644 --- a/src/main/java/org/jlab/dtm/business/session/SystemDowntimeFacade.java +++ b/src/main/java/org/jlab/dtm/business/session/SystemDowntimeFacade.java @@ -64,7 +64,7 @@ public List findByPeriodAndType( if (typeList != null && !typeList.isEmpty()) { String typeListString = typeList.get(0).getEventTypeId().toString(); for (int i = 1; i < typeList.size(); i++) { - typeListString = "," + typeList.get(i).getEventTypeId().toString(); + typeListString = typeListString + "," + typeList.get(i).getEventTypeId().toString(); } sql = sql + "and event_type_id in (" + typeListString + ") "; From 2201efe8ef42850a8895592dd04603c81bd9acaa Mon Sep 17 00:00:00 2001 From: Ryan Slominski Date: Wed, 19 Nov 2025 14:01:51 -0500 Subject: [PATCH 3/8] Space --- .../org/jlab/dtm/presentation/util/FilterSelectionMessage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/jlab/dtm/presentation/util/FilterSelectionMessage.java b/src/main/java/org/jlab/dtm/presentation/util/FilterSelectionMessage.java index efaf94b..5c845a6 100644 --- a/src/main/java/org/jlab/dtm/presentation/util/FilterSelectionMessage.java +++ b/src/main/java/org/jlab/dtm/presentation/util/FilterSelectionMessage.java @@ -132,7 +132,7 @@ public static String getDateRangeReportMessage( + selectedTypeList.stream() .map(EventType::getAbbreviation) .collect(Collectors.joining(",")) - + "\""; + + "\" "; } String packedQualifier = ""; From 80da4b6c655440e215ff7ef8ba3b1ec87178521e Mon Sep 17 00:00:00 2001 From: Ryan Slominski Date: Wed, 19 Nov 2025 14:29:03 -0500 Subject: [PATCH 4/8] select2 widget --- .../views/reports/component-downtime.jsp | 9 ++++----- .../WEB-INF/views/reports/incident-downtime.jsp | 17 +++++++++++------ .../WEB-INF/views/reports/system-downtime.jsp | 11 +++++------ src/main/webapp/resources/js/downtime-report.js | 2 +- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/main/webapp/WEB-INF/views/reports/component-downtime.jsp b/src/main/webapp/WEB-INF/views/reports/component-downtime.jsp index b632c81..05e2f09 100644 --- a/src/main/webapp/WEB-INF/views/reports/component-downtime.jsp +++ b/src/main/webapp/WEB-INF/views/reports/component-downtime.jsp @@ -48,18 +48,17 @@
Taxonomy -
    +
    • - - + - +
    • diff --git a/src/main/webapp/WEB-INF/views/reports/incident-downtime.jsp b/src/main/webapp/WEB-INF/views/reports/incident-downtime.jsp index 5240487..9c9ea7e 100644 --- a/src/main/webapp/WEB-INF/views/reports/incident-downtime.jsp +++ b/src/main/webapp/WEB-INF/views/reports/incident-downtime.jsp @@ -15,7 +15,7 @@ @@ -84,18 +90,17 @@
Taxonomy -
    +
    • - - + - +
    • diff --git a/src/main/webapp/WEB-INF/views/reports/system-downtime.jsp b/src/main/webapp/WEB-INF/views/reports/system-downtime.jsp index ca6ec66..1bf4d30 100644 --- a/src/main/webapp/WEB-INF/views/reports/system-downtime.jsp +++ b/src/main/webapp/WEB-INF/views/reports/system-downtime.jsp @@ -52,20 +52,19 @@
Taxonomy -
    +
    • - - + - +
      -
    • +
    • diff --git a/src/main/webapp/resources/js/downtime-report.js b/src/main/webapp/resources/js/downtime-report.js index 2d7d504..c76fa93 100644 --- a/src/main/webapp/resources/js/downtime-report.js +++ b/src/main/webapp/resources/js/downtime-report.js @@ -577,7 +577,7 @@ $(document).on("click", ".default-reset-panel", function () { $("#date-range").val('past7days').change(); /*$("#start").val(''); $("#end").val('');*/ - $("#type").val('1'); + $("#type").val([1]).trigger('change'); $("#packed").val('Y'); $("#transport").val('N'); $("#chart").val('bar'); From 1410875b8f70d2c48f213747cb249140c87e6602 Mon Sep 17 00:00:00 2001 From: Ryan Slominski Date: Wed, 19 Nov 2025 14:57:43 -0500 Subject: [PATCH 5/8] Pass multi-types in URLs --- .../views/reports/category-downtime.jsp | 18 ++++++++++++------ .../views/reports/component-downtime.jsp | 12 +++++++----- .../views/reports/incident-downtime.jsp | 8 ++++++-- .../WEB-INF/views/reports/system-downtime.jsp | 14 +++++++++----- 4 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/main/webapp/WEB-INF/views/reports/category-downtime.jsp b/src/main/webapp/WEB-INF/views/reports/category-downtime.jsp index f90677c..be66831 100644 --- a/src/main/webapp/WEB-INF/views/reports/category-downtime.jsp +++ b/src/main/webapp/WEB-INF/views/reports/category-downtime.jsp @@ -168,7 +168,7 @@ Period Duration (Hours): - + Accelerator Program Time (Hours): @@ -192,7 +192,7 @@ Downtime (Hours) Number of Incidents Mean Time to Recover (Hours) - + Uptime (Hours) Mean Time between Failures (Hours) Hourly Failure Rate @@ -209,7 +209,9 @@ - + + + @@ -224,7 +226,7 @@
      ()
      ()
      () - + @@ -253,7 +255,9 @@
      - + + + @@ -261,7 +265,9 @@ - + + + diff --git a/src/main/webapp/WEB-INF/views/reports/component-downtime.jsp b/src/main/webapp/WEB-INF/views/reports/component-downtime.jsp index 05e2f09..da72628 100644 --- a/src/main/webapp/WEB-INF/views/reports/component-downtime.jsp +++ b/src/main/webapp/WEB-INF/views/reports/component-downtime.jsp @@ -158,8 +158,8 @@ Incident Count: - - + + Accelerator Program Time (Hours): @@ -182,7 +182,7 @@ Downtime (Hours) Number of Incidents Mean Time to Recover (Hours) - + Uptime (Hours) Mean Time between Failures (Hours) Hourly Failure Rate @@ -198,7 +198,9 @@ - + + + @@ -211,7 +213,7 @@ - + diff --git a/src/main/webapp/WEB-INF/views/reports/incident-downtime.jsp b/src/main/webapp/WEB-INF/views/reports/incident-downtime.jsp index 9c9ea7e..21bfc36 100644 --- a/src/main/webapp/WEB-INF/views/reports/incident-downtime.jsp +++ b/src/main/webapp/WEB-INF/views/reports/incident-downtime.jsp @@ -280,7 +280,9 @@ - + + + @@ -289,7 +291,9 @@ - + + + diff --git a/src/main/webapp/WEB-INF/views/reports/system-downtime.jsp b/src/main/webapp/WEB-INF/views/reports/system-downtime.jsp index 1bf4d30..8f47628 100644 --- a/src/main/webapp/WEB-INF/views/reports/system-downtime.jsp +++ b/src/main/webapp/WEB-INF/views/reports/system-downtime.jsp @@ -174,7 +174,7 @@ Period Duration (Hours): - + Accelerator Program Time (Hours): @@ -198,7 +198,7 @@ Downtime (Hours) Number of Incidents Mean Time to Recover (Hours) - + Uptime (Hours) Mean Time between Failures (Hours) Hourly Failure Rate @@ -215,7 +215,9 @@ - + + + @@ -229,7 +231,7 @@
      ()
      ()
      () - + @@ -258,7 +260,9 @@ - + + + From 11ce7b19ae1e93409a61c0a8c1732a96945984ac Mon Sep 17 00:00:00 2001 From: Ryan Slominski Date: Wed, 19 Nov 2025 15:26:56 -0500 Subject: [PATCH 6/8] tune comparision report --- .../beamtransport/TuneComparisonReport.java | 25 +++++++++++-------- .../views/beam-transport/tune-comparison.jsp | 17 +++++++------ .../views/beam-transport/weekly-tune.jsp | 4 ++- 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/jlab/dtm/presentation/controller/beamtransport/TuneComparisonReport.java b/src/main/java/org/jlab/dtm/presentation/controller/beamtransport/TuneComparisonReport.java index 5ac013e..c6c1caf 100644 --- a/src/main/java/org/jlab/dtm/presentation/controller/beamtransport/TuneComparisonReport.java +++ b/src/main/java/org/jlab/dtm/presentation/controller/beamtransport/TuneComparisonReport.java @@ -7,10 +7,8 @@ import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Calendar; -import java.util.Collections; -import java.util.Date; -import java.util.List; +import java.math.BigInteger; +import java.util.*; import org.jlab.dtm.business.params.TuneComparisonReportParams; import org.jlab.dtm.business.session.AbstractFacade.OrderDirective; import org.jlab.dtm.business.session.ComponentDowntimeFacade; @@ -22,6 +20,7 @@ import org.jlab.dtm.persistence.model.ComponentDowntime; import org.jlab.dtm.presentation.params.TuneComparisonReportUrlParamHandler; import org.jlab.dtm.presentation.util.FilterSelectionMessage; +import org.jlab.smoothness.presentation.util.ParamConverter; /** * @author ryans @@ -73,10 +72,17 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) return; } - EventType type = null; + BigInteger[] typeIdArray = ParamConverter.convertBigIntegerArray(request, "type"); - if (params.getEventTypeId() != null) { - type = eventTypeFacade.find(params.getEventTypeId()); + List selectedTypeList = new ArrayList<>(); + + if (typeIdArray != null) { + for (BigInteger id : typeIdArray) { + if (id != null) { + EventType type = eventTypeFacade.find(id); + selectedTypeList.add(type); + } + } } List eventTypeList = eventTypeFacade.filterList(null); @@ -94,7 +100,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) downtimeList = downtimeFacade.findByPeriodAndType( - params.getStart(), params.getEnd(), Collections.singletonList(type), true, null); + params.getStart(), params.getEnd(), selectedTypeList, true, null); for (int i = 0; i < downtimeList.size(); i++) { ComponentDowntime downtime = downtimeList.get(i); @@ -106,7 +112,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) FilterSelectionMessage.getDateRangeReportMessage( params.getStart(), params.getEnd(), - Collections.singletonList(type), + selectedTypeList, null, null, null, @@ -116,7 +122,6 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) params.getData(), false); - request.setAttribute("type", type); request.setAttribute("start", params.getStart()); request.setAttribute("end", params.getEnd()); request.setAttribute("eventTypeList", eventTypeList); diff --git a/src/main/webapp/WEB-INF/views/beam-transport/tune-comparison.jsp b/src/main/webapp/WEB-INF/views/beam-transport/tune-comparison.jsp index 0a32a8f..9f202af 100644 --- a/src/main/webapp/WEB-INF/views/beam-transport/tune-comparison.jsp +++ b/src/main/webapp/WEB-INF/views/beam-transport/tune-comparison.jsp @@ -28,7 +28,7 @@