Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@
* @author ryans
*/
@Stateless
public class ExcelFacade {
public class ExcelCategorySystemsFacade {

@EJB CategoryFacade categoryFacade;

private Sheet sheet = null;
private int rownum = 0;

public void exportCategoriesAndSystems(OutputStream out) throws IOException {
public void export(OutputStream out) throws IOException {
Workbook wb = new XSSFWorkbook();
sheet = wb.createSheet("Categories and systems");

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package org.jlab.srm.business.session;

import jakarta.ejb.EJB;
import jakarta.ejb.Stateless;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jlab.smoothness.business.util.TimeUtil;
import org.jlab.srm.persistence.model.SignoffReportRecord;

/**
* @author ryans
*/
@Stateless
public class ExcelSignoffReportFacade {

@EJB CategoryFacade categoryFacade;

private Sheet sheet = null;
private int rownum = 0;

public void export(
OutputStream out, List<SignoffReportRecord> recordList, String selectionMessage)
throws IOException {
Date now = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat(TimeUtil.getFriendlyDateTimePattern());
String formattedGgeneratedDate = dateFormat.format(now);

Workbook wb = new XSSFWorkbook();
Sheet sheet1 = wb.createSheet("Signoff Report (Generated " + formattedGgeneratedDate + ")");

int rownum = 0;
Row row0 = sheet1.createRow(rownum++);
row0.createCell(0).setCellValue(selectionMessage);

Row row1 = sheet1.createRow(rownum++);
row1.createCell(0).setCellValue("COMPONENT");
row1.createCell(1).setCellValue("GROUP");
row1.createCell(2).setCellValue("MODIFIED DATE");
row1.createCell(3).setCellValue("MODIFIED BY");
row1.createCell(4).setCellValue("STATUS");
row1.createCell(5).setCellValue("COMMENTS");

CreationHelper createHelper = wb.getCreationHelper();
CellStyle numberStyle = wb.createCellStyle();
numberStyle.setDataFormat(createHelper.createDataFormat().getFormat("##0.###"));
CellStyle dateStyle = wb.createCellStyle();
dateStyle.setDataFormat(
createHelper.createDataFormat().getFormat(TimeUtil.getFriendlyDateTimePattern()));

Cell c;

for (SignoffReportRecord record : recordList) {
Row row = sheet1.createRow(rownum++);

row.createCell(0).setCellValue(record.getComponentName());
row.createCell(1).setCellValue(record.getGroupName());
c = row.createCell(2);
if (record.getModifiedDate() == null) {
c.setCellValue("");
} else {
c.setCellStyle(dateStyle);
c.setCellValue(record.getModifiedDate());
}
c = row.createCell(3);
if (record.getModifiedBy() == null) {
c.setCellValue("");
} else {
c.setCellValue(record.getModifiedBy());
}
row.createCell(4).setCellValue(record.getStatus().getName());
c = row.createCell(5);
if (record.getComments() == null) {
c.setCellValue("");
} else {
c.setCellValue(record.getComments());
}
}

/*sheet1.autoSizeColumn(0);*/
sheet1.autoSizeColumn(1);
sheet1.autoSizeColumn(2);
sheet1.autoSizeColumn(3);
sheet1.autoSizeColumn(4);
sheet1.autoSizeColumn(5);

wb.write(out);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.jlab.srm.presentation.controller;
package org.jlab.srm.presentation.controller.excel;

import jakarta.ejb.EJB;
import jakarta.servlet.ServletException;
Expand All @@ -7,17 +7,17 @@
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import org.jlab.srm.business.session.ExcelFacade;
import org.jlab.srm.business.session.ExcelCategorySystemsFacade;

/**
* @author ryans
*/
@WebServlet(
name = "ExportExcel",
urlPatterns = {"/categories-systems.xlsx"})
public class ExportExcel extends HttpServlet {
name = "ExcelCategorySystems",
urlPatterns = {"/excel/categories-systems.xlsx"})
public class ExcelCategorySystems extends HttpServlet {

@EJB ExcelFacade excelFacade;
@EJB ExcelCategorySystemsFacade excelFacade;

/**
* Handles the HTTP <code>GET</code> method.
Expand All @@ -34,6 +34,6 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("content-disposition", "attachment;filename=\"categories-systems.xlsx\"");

excelFacade.exportCategoriesAndSystems(response.getOutputStream());
excelFacade.export(response.getOutputStream());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
package org.jlab.srm.presentation.controller.excel;

import jakarta.ejb.EJB;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.List;
import org.jlab.srm.business.params.SignoffReportParams;
import org.jlab.srm.business.session.*;
import org.jlab.srm.persistence.entity.BeamDestination;
import org.jlab.srm.persistence.model.SignoffReportRecord;
import org.jlab.srm.presentation.params.SignoffReportUrlParamHandler;

/**
* @author ryans
*/
@WebServlet(
name = "ExcelSignoffReport",
urlPatterns = {"/excel/signoff.xlsx"})
public class ExcelSignoffReport extends HttpServlet {

@EJB ExcelSignoffReportFacade excelFacade;
@EJB BeamDestinationFacade destinationFacade;
@EJB SystemFacade systemFacade;
@EJB RegionFacade regionFacade;
@EJB ResponsibleGroupFacade groupFacade;
@EJB ComponentSignoffFacade signoffFacade;
@EJB StatusFacade statusFacade;
@EJB CategoryFacade categoryFacade;

/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

List<BeamDestination> destinationList =
destinationFacade.findAll(new AbstractFacade.OrderDirective("weight"));

List<BeamDestination> defaultDestinationList =
destinationFacade.filterTargetList(destinationList);

BigInteger[] defaultDestinationIdArray = destinationFacade.toIdArray(defaultDestinationList);

SignoffReportUrlParamHandler paramHandler =
new SignoffReportUrlParamHandler(
request,
defaultDestinationIdArray,
destinationFacade,
categoryFacade,
systemFacade,
regionFacade,
groupFacade);

SignoffReportParams params;

try {
params = paramHandler.convert();
paramHandler.validate(params);
paramHandler.store(params);
} catch (Exception e) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}

int offset = 0;
int maxPerPage = Integer.MAX_VALUE;

List<SignoffReportRecord> recordList =
signoffFacade.filterSignoffReportRecordList(
params.getDestinationIdArray(),
params.getCategoryId(),
params.getSystemId(),
params.getRegionId(),
params.getGroupId(),
params.getStatusId(),
params.isReadyTurn(),
params.isMasked(),
params.getComponentName(),
offset,
maxPerPage);
Long totalRecords =
signoffFacade.countSignoffReportRecordList(
params.getDestinationIdArray(),
params.getCategoryId(),
params.getSystemId(),
params.getRegionId(),
params.getGroupId(),
params.getStatusId(),
params.isReadyTurn(),
params.isMasked(),
params.getComponentName());

String selectionMessage = "All Signoffs ";

String filters = paramHandler.message(params);

if (filters.length() > 0) {
selectionMessage = filters;
}

DecimalFormat formatter = new DecimalFormat("###,###");

selectionMessage = selectionMessage + " {" + formatter.format(totalRecords) + "}";

response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("content-disposition", "attachment;filename=\"signoff.xlsx\"");

excelFacade.export(response.getOutputStream(), recordList, selectionMessage);
}
}
2 changes: 1 addition & 1 deletion src/main/webapp/WEB-INF/views/readiness.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,7 @@
</div>
</section>
</div>
<form id="excel-form" method="get" action="${pageContext.request.contextPath}/categories-systems.xlsx">
<form id="excel-form" method="get" action="${pageContext.request.contextPath}/excel/categories-systems.xlsx">
<button id="excel" type="submit" style="display: none;">Excel</button>
</form>
</section>
Expand Down
24 changes: 24 additions & 0 deletions src/main/webapp/WEB-INF/views/reports/signoff.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,16 @@
</jsp:attribute>
<jsp:body>
<section>
<div id="report-page-actions">
<div id="export-widget">
<button id="export-menu-button">Export</button>
<ul id="export-menu">
<li id="image-menu-item">Image</li>
<li id="print-menu-item">Print</li>
<li id="excel-menu-item">Excel</li>
</ul>
</div>
</div>
<s:filter-flyout-widget clearButton="true">
<form class="filter-form" method="get" action="signoff">
<div id="filter-form-panel">
Expand Down Expand Up @@ -285,5 +295,19 @@
</c:if>
</div>
</section>
<form id="excel-form" method="get" action="${pageContext.request.contextPath}/excel/signoff.xlsx">
<c:forEach items="${paramValues.destinationId}" var="destinationId">
<input type="hidden" name="destinationId" value="${fn:escapeXml(destinationId)}"/>
</c:forEach>
<input type="hidden" name="categoryId" value="${fn:escapeXml(param.categoryId)}"/>
<input type="hidden" name="systemId" value="${fn:escapeXml(param.systemId)}"/>
<input type="hidden" name="regionId" value="${fn:escapeXml(param.regionId)}"/>
<input type="hidden" name="groupId" value="${fn:escapeXml(param.groupId)}"/>
<input type="hidden" name="statusId" value="${fn:escapeXml(param.statusId)}"/>
<input type="hidden" name="readyTurn" value="${fn:escapeXml(param.readyTurn)}"/>
<input type="hidden" name="masked" value="${fn:escapeXml(param.masked)}"/>
<input type="hidden" name="componentName" value="${fn:escapeXml(param.componentName)}"/>
<button id="excel" type="submit" style="display: none;">Excel</button>
</form>
</jsp:body>
</t:reports-page>