package art.servers.rtzserver.reports; import art.client.GUI.components.devices.window.colors.rtz.configuration.RTZ32_PanelConfiguration_Programs; import art.client.GUI.components.devices.window.colors.rtz.configuration.RTZ32_PanelConfiguration_Programs_Program; import art.client.GUI.components.devices.window.colors.rtz.configuration.components.Diagram_Distribution_Bars; import art.client.GUI.components.devices.window.colors.rtz.configuration.components.Diagram_Distribution_Impulses; import art.client.configuration.Configuration; import art.library.gui.flat.FlatPanel; import art.library.gui.flat.FlatSplitPane; import art.library.model.devices.colors.controller.RTZ32.RTZ32_Controller; import art.library.model.devices.colors.controller.RTZ32.types.RTZ32_Report_Information; import art.library.utils.resources.Resources; import art.servers.ServerException; import art.servers.rtzserver.Shared; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.text.SimpleDateFormat; import javax.imageio.ImageIO; import javax.swing.JComponent; import javax.swing.JWindow; import org.apache.poi.ss.usermodel.ClientAnchor; import org.apache.poi.xssf.usermodel.XSSFClientAnchor; import org.apache.poi.xssf.usermodel.XSSFDrawing; import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Report_CCT_Juzgados extends XLSX { public Report_CCT_Juzgados(String language) throws Exception { this.language = language; } public byte[] generateCCT(String format, RTZ32_Report_Information reportInformation, RTZ32_Controller device) throws ServerException { byte[] data = null; try { SimpleDateFormat sdfh = new SimpleDateFormat(Shared.getMessage(language, "dd/MM/yyyy HH:mm:ss")); String filename = "data/" + Shared.getApplicationName() + "/templates/template_CCT." + language + ".xlsx"; File file = new File(filename); if (file.exists() == false) file = Resources.getResourceFile(filename); if (file.exists() == false) throw new ServerException("Template not found"); workbook = new XSSFWorkbook(new FileInputStream(new File(filename))); XSSFSheet sheet = workbook.getSheetAt(0); sheet.getRow(2).getCell(1).setCellValue(device.getDeviceInformation().name); sheet.getRow(3).getCell(1).setCellValue(device.getDeviceInformation().location); sheet.getRow(4).getCell(1).setCellValue(reportInformation.program.program); sheet.getRow(5).getCell(1).setCellValue(reportInformation.program.description); sheet.getRow(6).getCell(1).setCellValue(sdfh.format(reportInformation.program.creation)); // Add images try { if (art.client.models.Shared.configuration == null) { art.client.models.Shared.configuration = new Configuration(); } art.client.models.Shared.configuration.general.language = language; art.client.models.Shared.configuration.lmessage = reportInformation.messages; RTZ32_PanelConfiguration_Programs panelConfiguration_Programs = new RTZ32_PanelConfiguration_Programs(reportInformation.program.configuration); RTZ32_PanelConfiguration_Programs_Program panelConfiguration_Programs_Program = (RTZ32_PanelConfiguration_Programs_Program)panelConfiguration_Programs.panelSelected; panelConfiguration_Programs_Program.reload(); panelConfiguration_Programs_Program.panelConfiguration_Programs_Program_Distribution.reload(); panelConfiguration_Programs_Program.panelConfiguration_Programs_Program_Distribution.reevaluate(); Diagram_Distribution_Bars diagram_bars = panelConfiguration_Programs_Program.panelConfiguration_Programs_Program_Distribution.diagram_Distribution.diagram_Distribution_Bars; diagram_bars.setSize(new Dimension(1920, 1080)); Diagram_Distribution_Impulses diagram_impulses = panelConfiguration_Programs_Program.panelConfiguration_Programs_Program_Distribution.diagram_Distribution.diagram_Distribution_Impulses; diagram_impulses.setSize(new Dimension(1920, 1080)); FlatSplitPane splitPane = panelConfiguration_Programs_Program.panelConfiguration_Programs_Program_Distribution.diagram_Distribution.flatSplitPane1; // diagram_bars.reevaluate(); diagram_bars.revalidate(); // RTZ32_Distribution distribution = new RTZ32_Distribution(device.getDeviceConfiguration().rtz32, reportInformation.program.program); // Diagram_Distribution_Impulses diagram_Distribution_Impulses = new Diagram_Distribution_Impulses(device.getDeviceConfiguration().rtz32, reportInformation.program.program, distribution); BufferedImage image = getImage(diagram_bars, diagram_impulses, splitPane, diagram_bars.getWidth(), diagram_bars.getHeight(), 1000); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ImageIO.write(image, "png", bos); byte[] dataImage = bos.toByteArray(); bos.close(); image.flush(); image = null; bos = null; XSSFDrawing drawing = sheet.createDrawingPatriarch(); if (dataImage.length > 0) { XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, 0, 10, 25, 90); anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE); //0 = Move and size with Cells, 2 = Move but don't size with cells, 3 = Don't move or size with cells. drawing.createPicture(anchor, workbook.addPicture(dataImage, workbook.PICTURE_TYPE_PNG)); } } catch (Exception e) { Shared.printstack("Reports", e); } workbook.setForceFormulaRecalculation(true); XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook); return saveAndClose(format); } catch (ServerException e) { throw e; } catch (Exception e) { throw new ServerException(e); } } public byte[] generateJuzgados(String format, RTZ32_Report_Information reportInformation, RTZ32_Controller device) throws ServerException { byte[] data = null; try { String filename = "data/" + Shared.getApplicationName() + "/templates/template_Juzgados." + language + ".xlsx"; File file = new File(filename); if (file.exists() == false) file = Resources.getResourceFile(filename); if (file.exists() == false) throw new ServerException("Template not found"); workbook = new XSSFWorkbook(new FileInputStream(new File(filename))); XSSFSheet sheet = workbook.getSheetAt(0); sheet.getRow(2).getCell(1).setCellValue(device.getDeviceInformation().name); sheet.getRow(3).getCell(1).setCellValue(device.getDeviceInformation().location); sheet.getRow(4).getCell(1).setCellValue(reportInformation.program.program); // Add images try { if (art.client.models.Shared.configuration == null) { art.client.models.Shared.configuration = new Configuration(); } art.client.models.Shared.configuration.general.language = language; art.client.models.Shared.configuration.lmessage = reportInformation.messages; RTZ32_PanelConfiguration_Programs panelConfiguration_Programs = new RTZ32_PanelConfiguration_Programs(reportInformation.program.configuration); RTZ32_PanelConfiguration_Programs_Program panelConfiguration_Programs_Program = (RTZ32_PanelConfiguration_Programs_Program)panelConfiguration_Programs.panelSelected; panelConfiguration_Programs_Program.reload(); panelConfiguration_Programs_Program.panelConfiguration_Programs_Program_Distribution.reload(); panelConfiguration_Programs_Program.panelConfiguration_Programs_Program_Distribution.reevaluate(); Diagram_Distribution_Bars diagram_bars = panelConfiguration_Programs_Program.panelConfiguration_Programs_Program_Distribution.diagram_Distribution.diagram_Distribution_Bars; diagram_bars.setSize(new Dimension(1920, 1080)); Diagram_Distribution_Impulses diagram_impulses = panelConfiguration_Programs_Program.panelConfiguration_Programs_Program_Distribution.diagram_Distribution.diagram_Distribution_Impulses; diagram_impulses.setSize(new Dimension(1920, 1080)); FlatSplitPane splitPane = panelConfiguration_Programs_Program.panelConfiguration_Programs_Program_Distribution.diagram_Distribution.flatSplitPane1; // diagram_bars.reevaluate(); diagram_bars.revalidate(); BufferedImage image = getImage(diagram_bars, diagram_impulses,splitPane, diagram_bars.getWidth(), diagram_bars.getHeight(), 1000); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ImageIO.write(image, "png", bos); byte[] dataImage = bos.toByteArray(); bos.close(); image.flush(); image = null; bos = null; XSSFDrawing drawing = sheet.createDrawingPatriarch(); if (dataImage.length > 0) { XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, 0, 8, 25, 88); anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE); //0 = Move and size with Cells, 2 = Move but don't size with cells, 3 = Don't move or size with cells. drawing.createPicture(anchor, workbook.addPicture(dataImage, workbook.PICTURE_TYPE_PNG)); } } catch (Exception e) { Shared.printstack("Reports", e); } workbook.setForceFormulaRecalculation(true); XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook); return saveAndClose(format); } catch (ServerException e) { throw e; } catch (Exception e) { throw new ServerException(e); } } private BufferedImage getImage(Diagram_Distribution_Bars componentDiagram, Diagram_Distribution_Impulses componentImpulses, FlatSplitPane splitPane, int width, int height, int sleep) { JWindow window = new JWindow(); try { FlatPanel mainPanel = new FlatPanel(); { FlatPanel panelCenter = new FlatPanel(); { panelCenter.setLayout(new BorderLayout()); panelCenter.add(componentDiagram,BorderLayout.CENTER); panelCenter.setRaisedBorder(0,0,0,1); } FlatPanel panelWest = new FlatPanel(); { FlatPanel panelSpacing = new FlatPanel(); { panelSpacing.setPreferredSize(new Dimension(0,0)); } Component headerComponent = JComponent.class.cast(splitPane.getRightComponent()).getComponents()[0]; { headerComponent .setPreferredSize(new Dimension(headerComponent.getPreferredSize().width,headerComponent.getPreferredSize().height + 6)); } panelWest.setLayout(new BorderLayout()); panelWest.add(headerComponent,BorderLayout.NORTH); panelWest.add(componentImpulses,BorderLayout.CENTER); panelWest.setPreferredSize(new Dimension((int)(width * .2f),1080)); panelWest.setRaisedBorder(0,1,0,0); } mainPanel.setLayout(new BorderLayout()); mainPanel.add(panelCenter, BorderLayout.CENTER); mainPanel.add(panelWest, BorderLayout.EAST); } componentImpulses.forceCalculatedHeight((double)componentDiagram.diagram_Distribution_Bars_Header_Groups.getCalculatedHeight()); window.setContentPane(mainPanel); window.setSize(new Dimension(width,height)); window.setLocation(-99999,-99999); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); window.setVisible(true); mainPanel.revalidate(); mainPanel.repaint(); if (sleep > 0) { try { Thread.sleep(sleep); } catch (Exception e) { } } mainPanel.paint(image.getGraphics()); return image; } finally { window.setVisible(false); window.dispose(); } } }