Example usage for com.lowagie.text.pdf PdfWriter setPageEvent

List of usage examples for com.lowagie.text.pdf PdfWriter setPageEvent

Introduction

In this page you can find the example usage for com.lowagie.text.pdf PdfWriter setPageEvent.

Prototype


public void setPageEvent(PdfPageEvent event) 

Source Link

Document

Sets the PdfPageEvent for this document.

Usage

From source file:org.mapfish.print.PDFCustomBlocks.java

License:Open Source License

public PDFCustomBlocks(PdfWriter writer, RenderingContext context) {
    this.writer = writer;
    this.context = context;
    writer.setPageEvent(this);
}

From source file:org.opentestsystem.delivery.testreg.rest.view.PDFReportView.java

License:Open Source License

@Override
@SuppressWarnings("unchecked")
protected void buildPdfDocument(final Map<String, Object> model, final Document document,
        final PdfWriter writer, final HttpServletRequest request, final HttpServletResponse response)
        throws Exception {
    document.setMarginMirroringTopBottom(true);
    final List<TestAdminReport> dataList = (List<TestAdminReport>) model.get(DATA_LIST);
    final String reportType = ((String) model.get(REPORT_TYPE)).toUpperCase();
    final String levelOfReport = (String) model.get(LEVEL_OF_REPORT);
    final String headerMessage = (String) model.get(HEADER_MESSAGE);
    writer.setPageEvent(new PdfReportPageEventHelper(writer));
    HierarchyLevel level = null;/*ww  w.j a  v  a 2 s. c om*/
    if (levelOfReport != null) {
        level = HierarchyLevel.valueOf(levelOfReport);
    }
    final String headerColumns[] = this.reportHeaders.get(reportType);
    if (headerColumns != null) {
        PdfPTable table = createMessageHeaders(headerColumns, level, headerMessage);
        table.setSpacingAfter(10f);
        if (reportType.equals("PARTICIPATION_DETAIL_REPORT") || reportType.equals("PROCTOR_SCHEDULE_REPORT")
                || reportType.equals("STUDENT_SCHEDULE_REPORT")) {
            table = createHeaders(headerColumns, table);
        } else {
            table = createSummaryHeaders(headerColumns, level, table);
        }
        table.setHeaderRows(2);
        if (dataList.size() == 0) {
            addEmptyCell(table);
        } else {
            addData(table, dataList, level);
        }
        document.add(table);
    }
}

From source file:org.oscarehr.casemgmt.service.CaseManagementPrintPdf.java

License:Open Source License

public void printDocHeaderFooter() throws IOException, DocumentException {
    //Create the document we are going to write to
    document = new Document();
    PdfWriter writer = PdfWriter.getInstance(document, os);
    writer.setPageEvent(new EndPage());
    document.setPageSize(PageSize.LETTER);
    document.open();/*from   w w  w . j a  v a  2  s  . co m*/

    //Create the font we are going to print to
    bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
    font = new Font(bf, FONTSIZE, Font.NORMAL);

    String title = "", gender = "", dob = "", age = "", mrp = "";
    if (this.demoDtl != null) {
        //set up document title and header
        ResourceBundle propResource = ResourceBundle.getBundle("oscarResources");
        title = propResource.getString("oscarEncounter.pdfPrint.title") + " " + (String) demoDtl.get("demoName")
                + "\n";
        gender = propResource.getString("oscarEncounter.pdfPrint.gender") + " "
                + (String) demoDtl.get("demoSex") + "\n";
        dob = propResource.getString("oscarEncounter.pdfPrint.dob") + " " + (String) demoDtl.get("demoDOB")
                + "\n";
        age = propResource.getString("oscarEncounter.pdfPrint.age") + " " + (String) demoDtl.get("demoAge")
                + "\n";
        mrp = propResource.getString("oscarEncounter.pdfPrint.mrp") + " " + (String) demoDtl.get("mrp") + "\n";
    } else {
        //set up document title and header
        ResourceBundle propResource = ResourceBundle.getBundle("oscarResources");
        title = propResource.getString("oscarEncounter.pdfPrint.title") + " "
                + (String) request.getAttribute("demoName") + "\n";
        gender = propResource.getString("oscarEncounter.pdfPrint.gender") + " "
                + (String) request.getAttribute("demoSex") + "\n";
        dob = propResource.getString("oscarEncounter.pdfPrint.dob") + " "
                + (String) request.getAttribute("demoDOB") + "\n";
        age = propResource.getString("oscarEncounter.pdfPrint.age") + " "
                + (String) request.getAttribute("demoAge") + "\n";
        mrp = propResource.getString("oscarEncounter.pdfPrint.mrp") + " " + (String) request.getAttribute("mrp")
                + "\n";
    }

    String[] info = new String[] { title, gender, dob, age, mrp };

    ClinicData clinicData = new ClinicData();
    clinicData.refreshClinicData();
    String[] clinic = new String[] { clinicData.getClinicName(), clinicData.getClinicAddress(),
            clinicData.getClinicCity() + ", " + clinicData.getClinicProvince(), clinicData.getClinicPostal(),
            clinicData.getClinicPhone(), "Fax: " + clinicData.getClinicFax() };

    //Header will be printed at top of every page beginning with p2
    Phrase headerPhrase = new Phrase(LEADING, title, font);
    HeaderFooter header = new HeaderFooter(headerPhrase, false);
    header.setAlignment(HeaderFooter.ALIGN_CENTER);
    document.setHeader(header);

    //Write title with top and bottom borders on p1
    cb = writer.getDirectContent();
    cb.setColorStroke(new Color(0, 0, 0));
    cb.setLineWidth(0.5f);

    cb.moveTo(document.left(), document.top());
    cb.lineTo(document.right(), document.top());
    cb.stroke();
    //cb.setFontAndSize(bf, FONTSIZE);

    upperYcoord = document.top() - (font.getCalculatedLeading(LINESPACING) * 2f);

    ColumnText ct = new ColumnText(cb);
    Paragraph p = new Paragraph();
    p.setAlignment(Paragraph.ALIGN_LEFT);
    Phrase phrase = new Phrase();
    Phrase dummy = new Phrase();
    for (int idx = 0; idx < clinic.length; ++idx) {
        phrase.add(clinic[idx] + "\n");
        dummy.add("\n");
        upperYcoord -= phrase.getLeading();
    }

    dummy.add("\n");
    ct.setSimpleColumn(document.left(), upperYcoord, document.right() / 2f, document.top());
    ct.addElement(phrase);
    ct.go();

    p.add(dummy);
    document.add(p);

    //add patient info
    phrase = new Phrase();
    p = new Paragraph();
    p.setAlignment(Paragraph.ALIGN_RIGHT);
    for (int idx = 0; idx < info.length; ++idx) {
        phrase.add(info[idx]);
    }

    ct.setSimpleColumn(document.right() / 2f, upperYcoord, document.right(), document.top());
    p.add(phrase);
    ct.addElement(p);
    ct.go();

    cb.moveTo(document.left(), upperYcoord);
    cb.lineTo(document.right(), upperYcoord);
    cb.stroke();
    upperYcoord -= phrase.getLeading();

    if (Boolean.parseBoolean(OscarProperties.getInstance().getProperty("ICFHT_CONVERT_TO_PDF", "false"))) {
        printPersonalInfo();
    }
}

From source file:org.oscarehr.common.printing.PdfWriterFactory.java

License:Open Source License

/**
 * Creates a new instance of the PDF writer.
 * /*from w  w w .  j  a va 2  s  . co  m*/
 * @param document
 * @param stream
 * @param settings
 * @return PdfWriter
 */
public static PdfWriter newInstance(Document document, OutputStream stream, FontSettings settings) {
    PdfWriter result;
    try {
        result = PdfWriter.getInstance(document, stream);
    } catch (DocumentException e) {
        MiscUtils.getLogger().error("Unable to create new PdfWriter instance", e);
        return null;
    }

    String confidentialtyStatement = OscarProperties.getConfidentialityStatement();
    PromoTextStamper pts = new PromoTextStamper(confidentialtyStatement, 30);
    pts.setFontSize(settings.getFontSize());
    result.setPageEvent(pts);

    SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
    String promoText = OscarProperties.getInstance().getProperty("FORMS_PROMOTEXT") + " "
            + f.format(new Date());
    pts = new PromoTextStamper(promoText, 20);
    pts.setFontSize(settings.getFontSize());
    result.setPageEvent(pts);

    PageNumberStamper pns = new PageNumberStamper(10);
    pns.setFontSize(settings.getFontSize());
    result.setPageEvent(pns);

    return result;
}

From source file:org.sonar.report.pdf.PDFReporter.java

License:Open Source License

public ByteArrayOutputStream getReport()
        throws DocumentException, IOException, org.dom4j.DocumentException, ReportException {
    // Creation of documents
    Document mainDocument = new Document(PageSize.A4, 50, 50, 110, 50);
    Toc tocDocument = new Toc();
    Document frontPageDocument = new Document(PageSize.A4, 50, 50, 110, 50);
    ByteArrayOutputStream mainDocumentBaos = new ByteArrayOutputStream();
    ByteArrayOutputStream frontPageDocumentBaos = new ByteArrayOutputStream();
    PdfWriter mainDocumentWriter = PdfWriter.getInstance(mainDocument, mainDocumentBaos);
    PdfWriter frontPageDocumentWriter = PdfWriter.getInstance(frontPageDocument, frontPageDocumentBaos);

    // Events for TOC, header and pages numbers
    Events events = new Events(tocDocument, new Header(this.getLogo(), this.getProject()));
    mainDocumentWriter.setPageEvent(events);

    mainDocument.open();/*from w ww.j ava2 s.com*/
    tocDocument.getTocDocument().open();
    frontPageDocument.open();

    Logger.info("Generating PDF report...");
    printFrontPage(frontPageDocument, frontPageDocumentWriter);
    printTocTitle(tocDocument);
    printPdfBody(mainDocument);
    mainDocument.close();
    tocDocument.getTocDocument().close();
    frontPageDocument.close();

    // Get Readers
    PdfReader mainDocumentReader = new PdfReader(mainDocumentBaos.toByteArray());
    PdfReader tocDocumentReader = new PdfReader(tocDocument.getTocOutputStream().toByteArray());
    PdfReader frontPageDocumentReader = new PdfReader(frontPageDocumentBaos.toByteArray());

    // New document
    Document documentWithToc = new Document(tocDocumentReader.getPageSizeWithRotation(1));
    ByteArrayOutputStream finalBaos = new ByteArrayOutputStream();
    PdfCopy copy = new PdfCopy(documentWithToc, finalBaos);

    documentWithToc.open();
    copy.addPage(copy.getImportedPage(frontPageDocumentReader, 1));
    for (int i = 1; i <= tocDocumentReader.getNumberOfPages(); i++) {
        copy.addPage(copy.getImportedPage(tocDocumentReader, i));
    }
    for (int i = 1; i <= mainDocumentReader.getNumberOfPages(); i++) {
        copy.addPage(copy.getImportedPage(mainDocumentReader, i));
    }
    documentWithToc.close();

    // Return the final document (with TOC)
    return finalBaos;
}

From source file:org.sonarqube.report.extendedpdf.OverviewPDFReporter.java

License:Open Source License

@Override
public ByteArrayOutputStream getReport()
        throws DocumentException, IOException, org.dom4j.DocumentException, ReportException {
    // Capture and save screenshots of the required widgets
    captureScreenshots();/*from w  w  w .  j  a  v a 2  s  . c  o m*/

    // Creation of documents
    Document mainDocument = new Document(PageSize.LETTER, 50, 50, 75, 50);
    ExtendedToc tocDocument = new ExtendedToc();
    Document frontPageDocument = new Document(PageSize.LETTER, 50, 50, 75, 50);

    ByteArrayOutputStream mainDocumentBaos = new ByteArrayOutputStream();
    ByteArrayOutputStream frontPageDocumentBaos = new ByteArrayOutputStream();

    PdfWriter mainDocumentWriter = PdfWriter.getInstance(mainDocument, mainDocumentBaos);
    PdfWriter frontPageDocumentWriter = PdfWriter.getInstance(frontPageDocument, frontPageDocumentBaos);

    mainDocumentWriter.setStrictImageSequence(true);
    frontPageDocumentWriter.setStrictImageSequence(true);

    // Events for TOC, header and page numbers
    ExtendedEvents events = new ExtendedEvents(tocDocument, new ExtendedHeader(this.getProject()));
    mainDocumentWriter.setPageEvent(events);

    mainDocument.open();
    tocDocument.getTocDocument().open();
    frontPageDocument.open();

    Logger.info("Generating Overview PDF report...");
    printFrontPage(frontPageDocument, frontPageDocumentWriter);
    printTocTitle(tocDocument);
    printPdfBody(mainDocument);

    mainDocument.close();
    tocDocument.getTocDocument().close();
    frontPageDocument.close();

    // Get Readers
    PdfReader mainDocumentReader = new PdfReader(mainDocumentBaos.toByteArray());
    PdfReader tocDocumentReader = new PdfReader(tocDocument.getTocOutputStream().toByteArray());
    PdfReader frontPageDocumentReader = new PdfReader(frontPageDocumentBaos.toByteArray());

    // New document
    Document documentWithToc = new Document(tocDocumentReader.getPageSizeWithRotation(1));
    ByteArrayOutputStream finalBaos = new ByteArrayOutputStream();
    PdfCopy copy = new PdfCopy(documentWithToc, finalBaos);

    documentWithToc.open();
    copy.addPage(copy.getImportedPage(frontPageDocumentReader, 1));
    for (int i = 1; i <= tocDocumentReader.getNumberOfPages(); i++) {
        copy.addPage(copy.getImportedPage(tocDocumentReader, i));
    }
    for (int i = 1; i <= mainDocumentReader.getNumberOfPages(); i++) {
        copy.addPage(copy.getImportedPage(mainDocumentReader, i));
    }
    documentWithToc.close();

    // Return the final document (with TOC)
    return finalBaos;
}

From source file:org.unitime.timetable.action.RoomFeatureListAction.java

License:Open Source License

public static void printPdfFeatureTable(OutputStream out, SessionContext context,
        RoomFeatureListForm roomFeatureListForm) throws Exception {
    boolean hasTypes = RoomFeatureType.hasFeatureTypes(context.getUser().getCurrentAcademicSessionId());

    PdfWebTable globalWebTable = new PdfWebTable(5, "Global Room Features", null,
            new String[] { "Name", "Abbreviation", hasTypes ? "Type" : "", "", "Rooms" },
            new String[] { "left", "left", "left", "left", "left" },
            new boolean[] { true, true, true, true, true });

    PdfWebTable departmentWebTable = new PdfWebTable(5, "Department Room Features", null,
            new String[] { "Name", "Abbreviation", hasTypes ? "Type" : "", "Department ", "Rooms" },
            new String[] { "left", "left", "left", "left", "left" },
            new boolean[] { true, true, true, true, true });

    Set<Department> depts = Department.getUserDepartments(context.getUser());
    Long examType = null;/*from   ww  w  .j  a va2  s .  c  o m*/
    Department department = null;
    if (roomFeatureListForm.getDeptCodeX() != null && roomFeatureListForm.getDeptCodeX().matches("Exam[0-9]*"))
        examType = Long.valueOf(roomFeatureListForm.getDeptCodeX().substring(4));
    else if (roomFeatureListForm.getDeptCodeX() != null && !roomFeatureListForm.getDeptCodeX().isEmpty()
            && !"All".equals(roomFeatureListForm.getDeptCodeX()))
        department = Department.findByDeptCode(roomFeatureListForm.getDeptCodeX(),
                context.getUser().getCurrentAcademicSessionId());
    boolean deptCheck = examType == null
            && !context.getUser().getCurrentAuthority().hasRight(Right.DepartmentIndependent);
    if (department != null) {
        deptCheck = true;
        depts = new TreeSet<Department>();
        depts.add(department);
    }

    boolean splitRows = false;

    // build global room features rows
    Collection globalRoomFeatures = roomFeatureListForm.getGlobalRoomFeatures();
    boolean haveGlobalRoomFeature = false;
    for (Iterator it = globalRoomFeatures.iterator(); it.hasNext();) {
        GlobalRoomFeature gr = (GlobalRoomFeature) it.next();
        Collection rs = new TreeSet(gr.getRooms());

        // get rooms
        StringBuffer assignedRoom = new StringBuffer();
        int nrRows = 0;

        boolean haveRooms = false;
        for (Iterator iter = rs.iterator(); iter.hasNext();) {
            Location r = (Location) iter.next();
            if (examType != null && !r.isExamEnabled(examType))
                continue;
            if (deptCheck) {
                boolean skip = true;
                for (RoomDept rd : r.getRoomDepts())
                    if (depts.contains(rd.getDepartment())) {
                        skip = false;
                        break;
                    }
                if (skip)
                    continue;
            }
            if (assignedRoom.length() > 0)
                assignedRoom.append(", ");
            if (PdfWebTable.getWidthOfLastLine(assignedRoom.toString(), false, false) > 750) {
                assignedRoom.append("\n");
                nrRows++;
            }
            assignedRoom.append(r.getLabel());
            haveRooms = true;
        }

        if (nrRows > 40)
            splitRows = true;

        if (!haveRooms && !context.hasPermission(gr, Right.GlobalRoomFeatureEdit))
            continue;

        globalWebTable.addLine(null,
                new String[] { gr.getLabel(), gr.getAbbv(),
                        gr.getFeatureType() == null ? "" : gr.getFeatureType().getLabel(), "",
                        assignedRoom.toString() },
                new Comparable[] { gr.getLabel(), gr.getAbbv(),
                        gr.getFeatureType() == null ? "" : gr.getFeatureType().getLabel(), "", null });
        haveGlobalRoomFeature = true;
    }

    // build department room features rows
    Collection departmentRoomFeatures = roomFeatureListForm.getDepartmentRoomFeatures();
    for (Iterator it = departmentRoomFeatures.iterator(); it.hasNext();) {
        DepartmentRoomFeature drf = (DepartmentRoomFeature) it.next();

        String ownerName = drf.getDepartment().getShortLabel();

        Collection rs = new TreeSet(drf.getRooms());

        // get rooms
        StringBuffer assignedRoom = new StringBuffer();

        for (Iterator iter = rs.iterator(); iter.hasNext();) {
            Location r = (Location) iter.next();
            if (examType != null) {
                if (!r.isExamEnabled(examType))
                    continue;
            } else {
                boolean skip = true;
                for (Iterator j = r.getRoomDepts().iterator(); j.hasNext();) {
                    RoomDept rd = (RoomDept) j.next();
                    if (drf.getDepartment().equals(rd.getDepartment())) {
                        skip = false;
                        break;
                    }
                }
                if (skip)
                    continue;
            }
            if (assignedRoom.length() > 0)
                assignedRoom.append(", ");
            if (PdfWebTable.getWidthOfLastLine(assignedRoom.toString(), false, false) > 750)
                assignedRoom.append("\n");
            assignedRoom.append(r.getLabel());
        }

        departmentWebTable.addLine(null,
                new String[] { drf.getLabel(), drf.getAbbv(),
                        drf.getFeatureType() == null ? "" : drf.getFeatureType().getLabel(), ownerName,
                        assignedRoom.toString() },
                new Comparable[] { drf.getLabel(), drf.getAbbv(),
                        drf.getFeatureType() == null ? "" : drf.getFeatureType().getLabel(), ownerName, null });
    }

    Document doc = null;

    if (haveGlobalRoomFeature) {
        PdfWebTable table = globalWebTable;
        PdfPTable pdfTable = table.printPdfTable(WebTable.getOrder(context, "roomFeatureList.gord"));
        pdfTable.setSplitRows(splitRows);
        if (doc == null) {
            doc = new Document(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()), 30, 30,
                    30, 30);
            PdfWriter iWriter = PdfWriter.getInstance(doc, out);
            iWriter.setPageEvent(new PdfEventHandler());
            doc.open();
        }
        doc.add(new Paragraph(table.getName(), PdfFont.getBigFont(true)));
        doc.add(pdfTable);
    }

    if (!departmentRoomFeatures.isEmpty()) {
        PdfWebTable table = departmentWebTable;
        PdfPTable pdfTable = table.printPdfTable(WebTable.getOrder(context, "roomFeatureList.mord"));
        if (doc == null) {
            doc = new Document(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()), 30, 30,
                    30, 30);
            PdfWriter iWriter = PdfWriter.getInstance(doc, out);
            iWriter.setPageEvent(new PdfEventHandler());
            doc.open();
        } else {
            doc.setPageSize(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()));
            doc.newPage();
        }
        doc.add(new Paragraph(table.getName(), PdfFont.getBigFont(true)));
        doc.add(pdfTable);
    }

    if (doc != null)
        doc.close();
}

From source file:org.unitime.timetable.action.RoomGroupListAction.java

License:Open Source License

public static void printPdfGroupTable(OutputStream out, SessionContext context,
        RoomGroupListForm roomGroupListForm) throws Exception {
    PdfWebTable globalWebTable = new PdfWebTable(5, "Global Room Groups", null,
            new String[] { "Name", "Abbreviation", "Default ", "Rooms", "Description" },
            new String[] { "left", "left", "middle", "left", "left" },
            new boolean[] { true, true, true, true, true });

    PdfWebTable departmentWebTable = new PdfWebTable(5, "Department Room Groups", null,
            new String[] { "Name", "Abbreviation", "Department ", "Rooms", "Description" },
            new String[] { "left", "left", "left", "left", "left" },
            new boolean[] { true, true, true, true, true });

    Set<Department> depts = Department.getUserDepartments(context.getUser());
    Long examType = null;//from  w  ww . j av  a  2 s  .  co  m
    Department department = null;
    if (roomGroupListForm.getDeptCodeX() != null && roomGroupListForm.getDeptCodeX().matches("Exam[0-9]*"))
        examType = Long.valueOf(roomGroupListForm.getDeptCodeX().substring(4));
    else if (roomGroupListForm.getDeptCodeX() != null && !roomGroupListForm.getDeptCodeX().isEmpty()
            && !"All".equals(roomGroupListForm.getDeptCodeX()))
        department = Department.findByDeptCode(roomGroupListForm.getDeptCodeX(),
                context.getUser().getCurrentAcademicSessionId());
    boolean deptCheck = examType == null
            && !context.getUser().getCurrentAuthority().hasRight(Right.DepartmentIndependent);
    if (department != null) {
        deptCheck = true;
        depts = new TreeSet<Department>();
        depts.add(department);
    }

    boolean splitRows = false;

    boolean haveGlobalRoomGroup = false;
    for (RoomGroup rg : RoomGroup.getAllGlobalRoomGroups(context.getUser().getCurrentAcademicSessionId())) {
        Collection rs = new TreeSet(rg.getRooms());

        StringBuffer assignedRoom = new StringBuffer();
        int nrRows = 0;

        boolean haveRooms = false;
        for (Iterator iter = rs.iterator(); iter.hasNext();) {
            Location r = (Location) iter.next();
            if (examType != null && !r.isExamEnabled(examType))
                continue;
            if (deptCheck) {
                boolean skip = true;
                for (RoomDept rd : r.getRoomDepts())
                    if (depts.contains(rd.getDepartment())) {
                        skip = false;
                        break;
                    }
                if (skip)
                    continue;
            }
            if (assignedRoom.length() > 0)
                assignedRoom.append(", ");
            if (PdfWebTable.getWidthOfLastLine(assignedRoom.toString(), false, false) > 750) {
                assignedRoom.append("\n");
                nrRows++;
            }
            assignedRoom.append(r.getLabel());
            haveRooms = true;
        }

        if (nrRows > 40)
            splitRows = true;

        if (!haveRooms && !context.hasPermission(rg, Right.GlobalRoomGroupEdit))
            continue;

        globalWebTable.addLine(null,
                new String[] { rg.getName(), rg.getAbbv(), (rg.isDefaultGroup().booleanValue() ? "Yes" : "No"),
                        assignedRoom.toString(), (rg.getDescription() == null ? "" : rg.getDescription()) },
                new Comparable[] { rg.getName(), rg.getAbbv(),
                        new Integer(rg.isDefaultGroup().booleanValue() ? 0 : 1), null,
                        (rg.getDescription() == null ? "" : rg.getDescription()) });

        haveGlobalRoomGroup = true;
    }

    Set<RoomGroup> departmentRoomGroups = new TreeSet<RoomGroup>();
    for (Department d : Department.getUserDepartments(context.getUser())) {
        if ("All".equals(roomGroupListForm.getDeptCodeX())
                || d.getDeptCode().equals(roomGroupListForm.getDeptCodeX()))
            departmentRoomGroups.addAll(RoomGroup.getAllDepartmentRoomGroups(d));
    }
    if (department != null && department.isExternalManager()) {
        departmentRoomGroups.addAll(RoomGroup.getAllDepartmentRoomGroups(department));
    }

    for (RoomGroup rg : departmentRoomGroups) {
        String ownerName = rg.getDepartment().getShortLabel();

        Collection rs = new TreeSet(rg.getRooms());

        // get rooms
        StringBuffer assignedRoom = new StringBuffer();

        for (Iterator iter = rs.iterator(); iter.hasNext();) {
            Location r = (Location) iter.next();
            if (examType != null) {
                if (!r.isExamEnabled(examType))
                    continue;
            } else {
                boolean skip = true;
                for (Iterator j = r.getRoomDepts().iterator(); j.hasNext();) {
                    RoomDept rd = (RoomDept) j.next();
                    if (rg.getDepartment().equals(rd.getDepartment())) {
                        skip = false;
                        break;
                    }
                }
                if (skip)
                    continue;
            }
            if (assignedRoom.length() > 0)
                assignedRoom.append(", ");
            if (PdfWebTable.getWidthOfLastLine(assignedRoom.toString(), false, false) > 750)
                assignedRoom.append("\n");
            assignedRoom.append(r.getLabel());
        }

        departmentWebTable.addLine(null,
                new String[] { rg.getName(), rg.getAbbv(), ownerName, assignedRoom.toString(),
                        (rg.getDescription() == null ? "" : rg.getDescription()) },
                new Comparable[] { rg.getName(), rg.getAbbv(), ownerName, null,
                        (rg.getDescription() == null ? "" : rg.getDescription()) });
    }

    Document doc = null;

    if (haveGlobalRoomGroup) {
        PdfWebTable table = globalWebTable;
        PdfPTable pdfTable = table.printPdfTable(WebTable.getOrder(context, "roomGroupList.gord"));
        pdfTable.setSplitRows(splitRows);
        if (doc == null) {
            doc = new Document(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()), 30, 30,
                    30, 30);
            PdfWriter iWriter = PdfWriter.getInstance(doc, out);
            iWriter.setPageEvent(new PdfEventHandler());
            doc.open();
        }
        doc.add(new Paragraph(table.getName(), PdfFont.getBigFont(true)));
        doc.add(pdfTable);
    }

    if (!departmentRoomGroups.isEmpty()) {
        PdfWebTable table = departmentWebTable;
        PdfPTable pdfTable = table.printPdfTable(WebTable.getOrder(context, "roomGroupList.mord"));
        if (doc == null) {
            doc = new Document(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()), 30, 30,
                    30, 30);
            PdfWriter iWriter = PdfWriter.getInstance(doc, out);
            iWriter.setPageEvent(new PdfEventHandler());
            doc.open();
        } else {
            doc.setPageSize(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()));
            doc.newPage();
        }
        doc.add(new Paragraph(table.getName(), PdfFont.getBigFont(true)));
        doc.add(pdfTable);
    }

    if (doc != null)
        doc.close();

}

From source file:org.unitime.timetable.action.RoomListAction.java

License:Open Source License

public void buildPdfWebTable(OutputStream out, RoomListForm roomListForm, boolean featuresOneColumn,
        ExamType examType) throws Exception {
    Long sessionId = sessionContext.getUser().getCurrentAcademicSessionId();
    Session session = SessionDAO.getInstance().get(sessionId);
    DecimalFormat dfa = new DecimalFormat(ApplicationProperty.RoomAreaUnitsFormat.value());

    Collection rooms = roomListForm.getRooms();

    ArrayList globalRoomFeatures = new ArrayList();
    Set deptRoomFeatures = new TreeSet();

    Set depts = null;//from w ww .  j  a va 2s.c  o m
    if (roomListForm.getDeptCodeX().equalsIgnoreCase("All")) {
        depts = Department.getUserDepartments(sessionContext.getUser());
    } else if (roomListForm.getDeptCodeX().matches("Exam[0-9]*")) {
        depts = new HashSet(0);
    } else {
        depts = new HashSet(1);
        depts.add(Department.findByDeptCode(roomListForm.getDeptCodeX(), sessionId));
    }

    org.hibernate.Session hibSession = null;
    try {

        RoomFeatureDAO d = new RoomFeatureDAO();
        hibSession = d.getSession();

        List list = hibSession.createCriteria(GlobalRoomFeature.class).addOrder(Order.asc("label")).list();

        for (Iterator iter = list.iterator(); iter.hasNext();) {
            GlobalRoomFeature rf = (GlobalRoomFeature) iter.next();
            globalRoomFeatures.add(rf);
        }

        if (roomListForm.getDeptCodeX().equalsIgnoreCase("All")) {
            if (sessionContext.getUser().getCurrentAuthority().hasRight(Right.DepartmentIndependent)) {
                deptRoomFeatures.addAll(hibSession.createQuery(
                        "select distinct f from DepartmentRoomFeature f inner join f.department d where "
                                + "d.session.uniqueId=:sessionId order by f.label")
                        .setLong("sessionId", sessionId).setCacheable(true).list());
            } else {
                String deptIds = "";
                for (Qualifiable q : sessionContext.getUser().getCurrentAuthority()
                        .getQualifiers("Department")) {
                    if (!deptIds.isEmpty())
                        deptIds += ",";
                    deptIds += q.getQualifierId();
                }
                if (!deptIds.isEmpty())
                    deptRoomFeatures.addAll(hibSession
                            .createQuery(
                                    "select distinct f from DepartmentRoomFeature f inner join f.department d "
                                            + "where d.session.uniqueId=:sessionId and d.uniqueId in ("
                                            + deptIds + ") order by f.label")
                            .setLong("sessionId", sessionId).setCacheable(true).list());
            }
        } else if (roomListForm.getDeptCodeX().matches("Exam[0-9]*")) {
        } else {
            deptRoomFeatures.addAll(hibSession
                    .createQuery("select distinct f from DepartmentRoomFeature f inner join f.department d "
                            + "where d.session.uniqueId=:sessionId and d.deptCode = :deptCode order by f.label")
                    .setLong("sessionId", sessionId).setString("deptCode", roomListForm.getDeptCodeX())
                    .setCacheable(true).list());
        }

    } catch (Exception e) {
        Debug.error(e);
    }

    //build headings for university rooms
    String fixedHeading1[][] = (examType != null
            ? (featuresOneColumn ? new String[][] { { "Bldg", "left", "true" }, { "Room", "left", "true" },
                    { "Capacity", "right", "false" }, { "Exam Capacity", "right", "false" },
                    { MSG.columnAreaPDF(), "right", "false" }, { "Period Preferences", "center", "true" },
                    { "Groups", "left", "true" }, { "Features", "left", "true" } }
                    : new String[][] { { "Bldg", "left", "true" }, { "Room", "left", "true" },
                            { "Capacity", "right", "false" }, { "Exam Capacity", "right", "false" },
                            { MSG.columnAreaPDF(), "right", "false" },
                            { "Period Preferences", "center", "true" }, { "Groups", "left", "true" } })
            : (featuresOneColumn
                    ? new String[][] { { "Bldg", "left", "true" }, { "Room", "left", "true" },
                            { "Capacity", "right", "false" }, { MSG.columnAreaPDF(), "right", "false" },
                            { "Availability", "left", "true" }, { "Departments", "left", "true" },
                            { "Control", "left", "true" }, { "Events", "left", "true" },
                            { "Groups", "left", "true" }, { "Features", "left", "true" } }
                    : new String[][] { { "Bldg", "left", "true" }, { "Room", "left", "true" },
                            { "Capacity", "right", "false" }, { MSG.columnAreaPDF(), "right", "false" },
                            { "Availability", "left", "true" }, { "Departments", "left", "true" },
                            { "Control", "left", "true" }, { "Events", "left", "true" },
                            { "Groups", "left", "true" } }));

    String heading1[] = new String[fixedHeading1.length
            + (featuresOneColumn ? 0 : (globalRoomFeatures.size() + deptRoomFeatures.size()))];
    String alignment1[] = new String[heading1.length];
    boolean sorted1[] = new boolean[heading1.length];

    for (int i = 0; i < fixedHeading1.length; i++) {
        heading1[i] = fixedHeading1[i][0];
        alignment1[i] = fixedHeading1[i][1];
        sorted1[i] = (Boolean.valueOf(fixedHeading1[i][2])).booleanValue();
    }

    if (!featuresOneColumn) {
        int i = fixedHeading1.length;
        for (Iterator it = globalRoomFeatures.iterator(); it.hasNext();) {
            heading1[i] = ((GlobalRoomFeature) it.next()).getLabel();
            heading1[i] = heading1[i].replaceFirst(" ", "\n");
            alignment1[i] = "center";
            sorted1[i] = true;
            i++;
        }
        for (Iterator it = deptRoomFeatures.iterator(); it.hasNext();) {
            DepartmentRoomFeature drf = (DepartmentRoomFeature) it.next();
            heading1[i] = drf.getLabel();
            heading1[i] = heading1[i].replaceFirst(" ", "\n");
            if (roomListForm.getDeptCodeX().equalsIgnoreCase("All")) {
                Department dept = drf.getDepartment();
                heading1[i] += " (" + dept.getShortLabel() + ")";
            }
            alignment1[i] = "center";
            sorted1[i] = true;
            i++;
        }
    }

    //build headings for non-univ locations
    String fixedHeading2[][] = (examType != null
            ? (featuresOneColumn
                    ? new String[][] { { "Location", "left", "true" }, { "Capacity", "right", "false" },
                            { "Exam Capacity", "right", "false" }, { MSG.columnAreaPDF(), "right", "false" },
                            { "Period Preferences", "center", "true" }, { "Groups", "left", "true" },
                            { "Features", "left", "true" } }
                    : new String[][] { { "Location", "left", "true" }, { "Capacity", "right", "false" },
                            { MSG.columnAreaPDF(), "right", "false" },
                            { "Period Preferences", "center", "true" }, { "Groups", "left", "true" } })
            : (featuresOneColumn
                    ? new String[][] { { "Location", "left", "true" }, { "Capacity", "right", "false" },
                            { MSG.columnAreaPDF(), "right", "false" }, { "IgnTooFar", "center", "true" },
                            { "IgnChecks", "center", "true" }, { "Availability", "left", "true" },
                            { "Departments", "left", "true" }, { "Control", "left", "true" },
                            { "Events", "left", "true" }, { "Groups", "left", "true" },
                            { "Features", "left", "true" } }
                    : new String[][] { { "Location", "left", "true" }, { "Capacity", "right", "false" },
                            { "Exam Capacity", "right", "false" }, { MSG.columnAreaPDF(), "right", "false" },
                            { "IgnTooFar", "center", "true" }, { "IgnChecks", "center", "true" },
                            { "Availability", "left", "true" }, { "Departments", "left", "true" },
                            { "Control", "left", "true" }, { "Events", "left", "true" },
                            { "Groups", "left", "true" } }));

    String heading2[] = new String[fixedHeading2.length
            + (featuresOneColumn ? 0 : (globalRoomFeatures.size() + deptRoomFeatures.size()))];
    String alignment2[] = new String[heading2.length];
    boolean sorted2[] = new boolean[heading2.length];

    for (int i = 0; i < fixedHeading2.length; i++) {
        heading2[i] = fixedHeading2[i][0];
        alignment2[i] = fixedHeading2[i][1];
        sorted2[i] = (Boolean.valueOf(fixedHeading2[i][2])).booleanValue();
    }

    if (!featuresOneColumn) {
        int i = fixedHeading2.length;
        for (Iterator it = globalRoomFeatures.iterator(); it.hasNext();) {
            heading2[i] = ((GlobalRoomFeature) it.next()).getLabel();
            heading2[i] = heading2[i].replaceFirst(" ", "\n");
            alignment2[i] = "center";
            sorted2[i] = true;
            i++;
        }
        for (Iterator it = deptRoomFeatures.iterator(); it.hasNext();) {
            DepartmentRoomFeature drf = (DepartmentRoomFeature) it.next();
            heading2[i] = drf.getLabel();
            heading2[i] = heading2[i].replaceFirst(" ", "\n");
            if (roomListForm.getDeptCodeX().equalsIgnoreCase("All")) {
                Department dept = Department.findByDeptCode(drf.getDeptCode(), sessionId);
                heading2[i] += " (" + dept.getShortLabel() + ")";
            }
            alignment2[i] = "center";
            sorted2[i] = true;
            i++;
        }
    }

    TreeSet<RoomType> roomTypes = new TreeSet<RoomType>(RoomTypeDAO.getInstance().findAll());
    Hashtable<RoomType, PdfWebTable> tables = new Hashtable();
    for (RoomType t : roomTypes) {
        PdfWebTable table = (t.isRoom()
                ? new PdfWebTable(heading1.length, t.getLabel(), null, heading1, alignment1, sorted1)
                : new PdfWebTable(heading2.length, t.getLabel(), null, heading2, alignment2, sorted2));
        tables.put(t, table);
    }

    boolean timeVertical = CommonValues.VerticalGrid
            .eq(UserProperty.GridOrientation.get(sessionContext.getUser()));
    boolean gridAsText = CommonValues.TextGrid.eq(UserProperty.GridOrientation.get(sessionContext.getUser()));
    String timeGridSize = UserProperty.GridSize.get(sessionContext.getUser());

    Department dept = new Department();
    if (!roomListForm.getDeptCodeX().equalsIgnoreCase("All")) {
        dept = Department.findByDeptCode(roomListForm.getDeptCodeX(), sessionId);
    } else {
        dept = null;
    }

    for (Iterator iter = rooms.iterator(); iter.hasNext();) {
        Location location = (Location) iter.next();

        boolean editable = sessionContext.hasPermission(location, Right.RoomDetail);

        Room room = (location instanceof Room ? (Room) location : null);
        Building bldg = (room == null ? null : room.getBuilding());

        PdfWebTable table = tables.get(location.getRoomType());

        DecimalFormat df5 = new DecimalFormat("####0");
        String text[] = new String[Math.max(heading1.length, heading2.length)];
        Comparable comp[] = new Comparable[text.length];
        int idx = 0;
        if (bldg != null) {
            text[idx] = (location.isIgnoreRoomCheck().booleanValue() ? "@@ITALIC " : "")
                    + bldg.getAbbreviation()
                    + (location.isIgnoreRoomCheck().booleanValue() ? "@@END_ITALIC " : "");
            comp[0] = location.getLabel();
            idx++;
        }

        text[idx] = (location.isIgnoreRoomCheck().booleanValue() ? "@@ITALIC " : "")
                + (room == null ? location.getLabel() : room.getRoomNumber())
                + (location.isIgnoreRoomCheck().booleanValue() ? "@@END_ITALIC " : "");
        comp[idx] = location.getLabel();
        idx++;

        text[idx] = df5.format(location.getCapacity());
        comp[idx] = new Long(location.getCapacity().intValue());
        idx++;

        if (examType != null) {
            if (location.isExamEnabled(examType)) {
                text[idx] = df5.format(location.getExamCapacity());
                comp[idx] = location.getExamCapacity();
            } else {
                text[idx] = "";
                comp[idx] = new Integer(0);
            }
            idx++;

            if (location.getArea() == null) {
                text[idx] = "";
                comp[idx] = new Double(0);
            } else {
                text[idx] = dfa.format(location.getArea());
                comp[idx] = location.getArea();
            }
            idx++;

            if (location.isExamEnabled(examType)) {
                text[idx] = location.getExamPreferencesAbbreviation(examType);
                comp[idx] = null;
            } else {
                text[idx] = "";
                comp[idx] = null;
            }
            idx++;
        } else {
            if (location.getArea() == null) {
                text[idx] = "";
                comp[idx] = new Double(0);
            } else {
                text[idx] = dfa.format(location.getArea());
                comp[idx] = location.getArea();
            }
            idx++;

            PreferenceLevel roomPref = location.getRoomPreferenceLevel(dept);
            if (editable && roomPref != null && !PreferenceLevel.sNeutral.equals(roomPref.getPrefProlog())) {
                if (room == null) {
                    text[0] = (location.isIgnoreRoomCheck().booleanValue() ? "@@ITALIC " : "")
                            + location.getLabel() + " (" + PreferenceLevel.prolog2abbv(roomPref.getPrefProlog())
                            + ")" + (location.isIgnoreRoomCheck().booleanValue() ? "@@END_ITALIC " : "");
                } else {
                    text[0] = (location.isIgnoreRoomCheck().booleanValue() ? "@@ITALIC " : "")
                            + (bldg == null ? "" : bldg.getAbbreviation())
                            + (location.isIgnoreRoomCheck().booleanValue() ? "@@END_ITALIC " : "");
                    text[1] = (location.isIgnoreRoomCheck().booleanValue() ? "@@ITALIC " : "")
                            + room.getRoomNumber() + " ("
                            + PreferenceLevel.prolog2abbv(roomPref.getPrefProlog()) + ")"
                            + (location.isIgnoreRoomCheck().booleanValue() ? "@@END_ITALIC " : "");
                }
            }

            //ignore too far
            if (location instanceof NonUniversityLocation) {
                boolean itf = (location.isIgnoreTooFar() == null ? false
                        : location.isIgnoreTooFar().booleanValue());
                text[idx] = (itf ? "Yes" : "No");
                comp[idx] = new Integer(itf ? 1 : 0);
                idx++;
                boolean con = (location.isIgnoreRoomCheck() == null ? true
                        : location.isIgnoreRoomCheck().booleanValue());
                text[idx] = (con ? "YES" : "No");
                comp[idx] = new Integer(con ? 1 : 0);
                idx++;
            }

            // get pattern column
            RequiredTimeTable rtt = location.getRoomSharingTable();
            if (gridAsText) {
                text[idx] = rtt.getModel().toString().replaceAll(", ", "\n");
            } else {
                rtt.getModel().setDefaultSelection(timeGridSize);
                Image image = rtt.createBufferedImage(timeVertical);
                if (image != null) {
                    table.addImage(location.getUniqueId().toString(), image);
                    text[idx] = ("@@IMAGE " + location.getUniqueId().toString() + " ");
                } else {
                    text[idx] = rtt.getModel().toString().replaceAll(", ", "\n");
                }
            }
            comp[idx] = null;
            idx++;

            // get departments column
            Department controlDept = null;
            text[idx] = "";
            Set rds = location.getRoomDepts();
            Set departments = new HashSet();
            for (Iterator iterRds = rds.iterator(); iterRds.hasNext();) {
                RoomDept rd = (RoomDept) iterRds.next();
                Department d = rd.getDepartment();
                if (rd.isControl().booleanValue())
                    controlDept = d;
                departments.add(d);
            }
            TreeSet ts = new TreeSet(new DepartmentNameComparator());
            ts.addAll(departments);
            if (ts.size() == session.getDepartments().size()) {
                text[idx] = "@@BOLD All";
                comp[idx] = "";
            } else {
                int cnt = 0;
                for (Iterator it = ts.iterator(); it.hasNext(); cnt++) {
                    Department d = (Department) it.next();
                    if (text[idx].length() > 0)
                        text[idx] = text[idx] + (ts.size() <= 5 || cnt % 5 == 0 ? "\n" : ", ");
                    else
                        comp[idx] = d.getDeptCode();
                    text[idx] = text[idx] + "@@COLOR " + d.getRoomSharingColor(null) + " " + d.getShortLabel();
                }
            }
            idx++;

            //control column
            if (!roomListForm.getDeptCodeX().equalsIgnoreCase("All")
                    && !roomListForm.getDeptCodeX().matches("Exam[0-9]*")) {
                if (controlDept != null && controlDept.getDeptCode().equals(roomListForm.getDeptCodeX())) {
                    text[idx] = "Yes";
                    comp[idx] = new Integer(1);
                } else {
                    text[idx] = "No";
                    comp[idx] = new Integer(0);
                }
            } else {
                if (controlDept != null) {
                    text[idx] = "@@COLOR " + controlDept.getRoomSharingColor(null) + " "
                            + controlDept.getShortLabel();
                    comp[idx] = controlDept.getDeptCode();
                } else {
                    text[idx] = "";
                    comp[idx] = "";
                }
            }
            idx++;

            //events column
            if (location.getEventDepartment() != null && location.getEventDepartment().isAllowEvents()) {
                text[idx] = "@@COLOR " + location.getEventDepartment().getRoomSharingColor(null) + " "
                        + location.getEventDepartment().getShortLabel();
                comp[idx] = location.getEventDepartment().getDeptCode();
            } else {
                text[idx] = "";
                comp[idx] = "";
            }
            idx++;
        }

        // get groups column
        text[idx] = "";
        for (Iterator it = new TreeSet(location.getRoomGroups()).iterator(); it.hasNext();) {
            RoomGroup rg = (RoomGroup) it.next();
            if (!rg.isGlobal().booleanValue() && (examType != null || !depts.contains(rg.getDepartment())))
                continue;
            if (!rg.isGlobal().booleanValue()) {
                boolean skip = true;
                for (Iterator j = location.getRoomDepts().iterator(); j.hasNext();) {
                    RoomDept rd = (RoomDept) j.next();
                    if (rg.getDepartment().equals(rd.getDepartment())) {
                        skip = false;
                        break;
                    }
                }
                if (skip)
                    continue;
            }
            if (text[idx].length() > 0)
                text[idx] += "\n";
            comp[idx] = comp[idx] + rg.getName().trim();
            text[idx] += (rg.isGlobal().booleanValue() ? ""
                    : "@@COLOR " + rg.getDepartment().getRoomSharingColor(null) + " ") + rg.getName();
        }
        idx++;

        if (featuresOneColumn) {
            // get features column
            text[idx] = "";
            for (Iterator it = new TreeSet(location.getGlobalRoomFeatures()).iterator(); it.hasNext();) {
                GlobalRoomFeature rf = (GlobalRoomFeature) it.next();
                if (text[idx].length() > 0)
                    text[idx] += "\n";
                comp[idx] = comp[idx] + rf.getLabel().trim();
                text[idx] += rf.getLabelWithType();
            }
            if (examType == null)
                for (Iterator it = new TreeSet(location.getDepartmentRoomFeatures()).iterator(); it
                        .hasNext();) {
                    DepartmentRoomFeature drf = (DepartmentRoomFeature) it.next();
                    if (!depts.contains(drf.getDepartment()))
                        continue;
                    boolean skip = true;
                    for (Iterator j = location.getRoomDepts().iterator(); j.hasNext();) {
                        RoomDept rd = (RoomDept) j.next();
                        if (drf.getDepartment().equals(rd.getDepartment())) {
                            skip = false;
                            break;
                        }
                    }
                    if (skip)
                        continue;
                    if (text[idx].length() > 0)
                        text[idx] += "\n";
                    comp[idx] = comp[idx] + drf.getLabel().trim();
                    text[idx] += "@@COLOR " + drf.getDepartment().getRoomSharingColor(null) + " "
                            + drf.getLabelWithType();
                }
            idx++;
        } else {
            // get features columns
            for (Iterator it = globalRoomFeatures.iterator(); it.hasNext();) {
                GlobalRoomFeature grf = (GlobalRoomFeature) it.next();
                boolean b = location.hasFeature(grf);
                text[idx] = b ? "Yes" : "No";
                comp[idx] = "" + b;
                idx++;
            }
            for (Iterator it = deptRoomFeatures.iterator(); it.hasNext();) {
                DepartmentRoomFeature drf = (DepartmentRoomFeature) it.next();
                boolean b = location.hasFeature(drf);
                for (Iterator j = location.getRoomDepts().iterator(); j.hasNext();) {
                    RoomDept rd = (RoomDept) j.next();
                    if (drf.getDepartment().equals(rd.getDepartment())) {
                        b = false;
                        break;
                    }
                }
                text[idx] = b ? "Yes" : "No";
                comp[idx] = "" + b;
                idx++;
            }
        }

        // build rows
        table.addLine(
                (editable ? "onClick=\"document.location='roomDetail.do?id=" + location.getUniqueId() + "';\""
                        : null),
                text, comp);
    }

    Document doc = null;
    // set request attributes
    for (RoomType t : roomTypes) {
        PdfWebTable table = tables.get(t);
        if (!table.getLines().isEmpty()) {
            int ord = WebTable.getOrder(sessionContext, t.getReference() + ".ord");
            if (ord > heading1.length)
                ord = 0;
            PdfPTable pdfTable = table.printPdfTable(ord);
            if (doc == null) {
                doc = new Document(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()), 30,
                        30, 30, 30);
                PdfWriter iWriter = PdfWriter.getInstance(doc, out);
                iWriter.setPageEvent(new PdfEventHandler());
                doc.open();
            } else {
                doc.setPageSize(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()));
                doc.newPage();
            }
            doc.add(new Paragraph(table.getName(), PdfFont.getBigFont(true)));
            doc.add(pdfTable);

        }
    }

    if (doc == null)
        return;

    doc.close();
}

From source file:org.unitime.timetable.action.SolutionReportAction.java

License:Open Source License

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    SolutionReportForm myForm = (SolutionReportForm) form;

    sessionContext.checkPermission(Right.SolutionReports);

    // Read operation to be performed
    String op = (myForm.getOp() != null ? myForm.getOp() : request.getParameter("op"));
    Session session = SessionDAO.getInstance().get(sessionContext.getUser().getCurrentAcademicSessionId());
    BitSet sessionDays = session.getDefaultDatePattern().getPatternBitSet();
    int startDayDayOfWeek = Constants.getDayOfWeek(session.getDefaultDatePattern().getStartDate());

    SolverProxy solver = courseTimetablingSolverService.getSolver();
    if (solver == null) {
        request.setAttribute("SolutionReport.message", "Neither a solver is started nor solution is loaded.");
    } else {/*  www . j  a v  a2 s.  co m*/
        try {
            for (RoomType type : RoomType.findAll()) {
                RoomReport roomReport = solver.getRoomReport(sessionDays, startDayDayOfWeek,
                        type.getUniqueId());
                if (roomReport != null && !roomReport.getGroups().isEmpty()) {
                    WebTable t = getRoomReportTable(request, roomReport, false, type.getUniqueId());
                    if (t != null)
                        request.setAttribute("SolutionReport.roomReportTable." + type.getReference(),
                                t.printTable(
                                        WebTable.getOrder(sessionContext, "solutionReports.roomReport.ord")));
                }
            }
            RoomReport roomReport = solver.getRoomReport(sessionDays, startDayDayOfWeek, null);
            if (roomReport != null && !roomReport.getGroups().isEmpty()) {
                WebTable t = getRoomReportTable(request, roomReport, false, null);
                if (t != null)
                    request.setAttribute("SolutionReport.roomReportTable.nonUniv",
                            t.printTable(WebTable.getOrder(sessionContext, "solutionReports.roomReport.ord")));
            }
            DeptBalancingReport deptBalancingReport = solver.getDeptBalancingReport();
            if (deptBalancingReport != null && !deptBalancingReport.getGroups().isEmpty())
                request.setAttribute("SolutionReport.deptBalancingReportTable",
                        getDeptBalancingReportTable(request, deptBalancingReport, false).printTable(
                                WebTable.getOrder(sessionContext, "solutionReports.deptBalancingReport.ord")));
            ViolatedDistrPreferencesReport violatedDistrPreferencesReport = solver
                    .getViolatedDistrPreferencesReport();
            if (violatedDistrPreferencesReport != null && !violatedDistrPreferencesReport.getGroups().isEmpty())
                request.setAttribute("SolutionReport.violatedDistrPreferencesReportTable",
                        getViolatedDistrPreferencesReportTable(request, violatedDistrPreferencesReport, false)
                                .printTable(WebTable.getOrder(sessionContext,
                                        "solutionReports.violDistPrefReport.ord")));
            DiscouragedInstructorBtbReport discouragedInstructorBtbReportReport = solver
                    .getDiscouragedInstructorBtbReport();
            if (discouragedInstructorBtbReportReport != null
                    && !discouragedInstructorBtbReportReport.getGroups().isEmpty())
                request.setAttribute("SolutionReport.discouragedInstructorBtbReportReportTable",
                        getDiscouragedInstructorBtbReportReportTable(request,
                                discouragedInstructorBtbReportReport, false).printTable(
                                        WebTable.getOrder(sessionContext, "solutionReports.violInstBtb.ord")));
            StudentConflictsReport studentConflictsReport = solver.getStudentConflictsReport();
            if (studentConflictsReport != null && !studentConflictsReport.getGroups().isEmpty())
                request.setAttribute("SolutionReport.studentConflictsReportTable",
                        getStudentConflictsReportTable(request, studentConflictsReport, false)
                                .printTable(WebTable.getOrder(sessionContext, "solutionReports.studConf.ord")));
            SameSubpartBalancingReport sameSubpartBalancingReport = solver.getSameSubpartBalancingReport();
            if (sameSubpartBalancingReport != null && !sameSubpartBalancingReport.getGroups().isEmpty())
                request.setAttribute("SolutionReport.sameSubpartBalancingReportTable",
                        getSameSubpartBalancingReportTable(request, sameSubpartBalancingReport, false)
                                .printTable(PdfWebTable.getOrder(sessionContext,
                                        "solutionReports.sectBalancingReport.ord")));
            PerturbationReport perturbationReport = solver.getPerturbationReport();
            if (perturbationReport != null && !perturbationReport.getGroups().isEmpty())
                request.setAttribute("SolutionReport.perturbationReportTable",
                        getPerturbationReportTable(request, perturbationReport, false)
                                .printTable(WebTable.getOrder(sessionContext, "solutionReports.pert.ord")));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    if ("Export PDF".equals(op)) {
        OutputStream out = ExportUtils.getPdfOutputStream(response, "report");

        Document doc = new Document(
                new Rectangle(60f + PageSize.LETTER.getHeight(), 60f + 0.75f * PageSize.LETTER.getHeight()), 30,
                30, 30, 30);

        PdfWriter iWriter = PdfWriter.getInstance(doc, out);
        iWriter.setPageEvent(new PdfEventHandler());
        doc.open();

        boolean atLeastOneRoomReport = false;
        for (RoomType type : RoomType.findAll()) {
            RoomReport roomReport = solver.getRoomReport(sessionDays, startDayDayOfWeek, type.getUniqueId());
            if (roomReport == null || roomReport.getGroups().isEmpty())
                continue;
            PdfWebTable table = getRoomReportTable(request, roomReport, true, type.getUniqueId());
            if (table == null)
                continue;
            PdfPTable pdfTable = table
                    .printPdfTable(WebTable.getOrder(sessionContext, "solutionReports.roomReport.ord"));
            if (!atLeastOneRoomReport) {
                doc.setPageSize(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()));
                doc.newPage();
            }
            doc.add(new Paragraph(table.getName(), PdfFont.getBigFont(true)));
            doc.add(pdfTable);
            atLeastOneRoomReport = true;
        }
        RoomReport roomReport = solver.getRoomReport(sessionDays, startDayDayOfWeek, null);
        if (roomReport != null && !roomReport.getGroups().isEmpty()) {
            PdfWebTable table = getRoomReportTable(request, roomReport, true, null);
            if (table != null) {
                PdfPTable pdfTable = table
                        .printPdfTable(WebTable.getOrder(sessionContext, "solutionReports.roomReport.ord"));
                if (!atLeastOneRoomReport) {
                    doc.setPageSize(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()));
                    doc.newPage();
                }
                doc.add(new Paragraph(table.getName(), PdfFont.getBigFont(true)));
                doc.add(pdfTable);
                atLeastOneRoomReport = true;
            }
        }

        if (atLeastOneRoomReport) {
            PdfPTable pdfTable = new PdfPTable(new float[] { 10f, 100f });
            pdfTable.setWidthPercentage(100);
            pdfTable.getDefaultCell().setPadding(3);
            pdfTable.getDefaultCell().setBorderWidth(0);
            pdfTable.setSplitRows(false);
            pdfTable.addCell("Group");
            pdfTable.addCell("group size <minimum, maximum)");
            pdfTable.addCell("Size");
            pdfTable.addCell("actual group size (size of the smallest and the biggest room in the group)");
            pdfTable.addCell("NrRooms");
            pdfTable.addCell("number of rooms in the group");
            pdfTable.addCell("ClUse");
            pdfTable.addCell("number of classes that are using a room from the group (actual solution)");
            pdfTable.addCell("ClShould");
            pdfTable.addCell(
                    "number of classes that \"should\" use a room of the group (smallest available room of a class is in this group)");
            pdfTable.addCell("ClMust");
            pdfTable.addCell(
                    "number of classes that must use a room of the group (all available rooms of a class are in this group)");
            pdfTable.addCell("HrUse");
            pdfTable.addCell("average hours a room of the group is used (actual solution)");
            pdfTable.addCell("HrShould");
            pdfTable.addCell(
                    "average hours a room of the group should be used (smallest available room of a class is in this group)");
            pdfTable.addCell("HrMust");
            pdfTable.addCell(
                    "average hours a room of this group must be used (all available rooms of a class are in this group)");
            pdfTable.addCell("");
            pdfTable.addCell("*) cumulative numbers (group minimum ... inf) are displayed in parentheses.");
            doc.add(pdfTable);
        }

        DiscouragedInstructorBtbReport discouragedInstructorBtbReportReport = solver
                .getDiscouragedInstructorBtbReport();
        if (discouragedInstructorBtbReportReport != null
                && !discouragedInstructorBtbReportReport.getGroups().isEmpty()) {
            PdfWebTable table = getDiscouragedInstructorBtbReportReportTable(request,
                    discouragedInstructorBtbReportReport, true);
            PdfPTable pdfTable = table
                    .printPdfTable(WebTable.getOrder(sessionContext, "solutionReports.violInstBtb.ord"));
            doc.setPageSize(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()));
            doc.newPage();
            doc.add(new Paragraph(table.getName(), PdfFont.getBigFont(true)));
            doc.add(pdfTable);
        }

        ViolatedDistrPreferencesReport violatedDistrPreferencesReport = solver
                .getViolatedDistrPreferencesReport();
        if (violatedDistrPreferencesReport != null && !violatedDistrPreferencesReport.getGroups().isEmpty()) {
            PdfWebTable table = getViolatedDistrPreferencesReportTable(request, violatedDistrPreferencesReport,
                    true);
            PdfPTable pdfTable = table
                    .printPdfTable(WebTable.getOrder(sessionContext, "solutionReports.violDistPrefReport.ord"));
            doc.setPageSize(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()));
            doc.newPage();
            doc.add(new Paragraph(table.getName(), PdfFont.getBigFont(true)));
            doc.add(pdfTable);
        }

        StudentConflictsReport studentConflictsReport = solver.getStudentConflictsReport();
        if (studentConflictsReport != null && !studentConflictsReport.getGroups().isEmpty()) {
            PdfWebTable table = getStudentConflictsReportTable(request, studentConflictsReport, true);
            PdfPTable pdfTable = table
                    .printPdfTable(WebTable.getOrder(sessionContext, "solutionReports.studConf.ord"));
            doc.setPageSize(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()));
            doc.newPage();
            doc.add(new Paragraph(table.getName(), PdfFont.getBigFont(true)));
            doc.add(pdfTable);
        }

        SameSubpartBalancingReport sameSubpartBalancingReport = solver.getSameSubpartBalancingReport();
        if (sameSubpartBalancingReport != null && !sameSubpartBalancingReport.getGroups().isEmpty()) {
            PdfWebTable table = getSameSubpartBalancingReportTable(request, sameSubpartBalancingReport, true);
            PdfPTable pdfTable = table.printPdfTable(
                    WebTable.getOrder(sessionContext, "solutionReports.sectBalancingReport.ord"));
            doc.setPageSize(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()));
            doc.newPage();
            doc.add(new Paragraph(table.getName(), PdfFont.getBigFont(true)));
            doc.add(pdfTable);
        }

        DeptBalancingReport deptBalancingReport = solver.getDeptBalancingReport();
        if (deptBalancingReport != null && !deptBalancingReport.getGroups().isEmpty()) {
            PdfWebTable table = getDeptBalancingReportTable(request, deptBalancingReport, true);
            PdfPTable pdfTable = table.printPdfTable(
                    WebTable.getOrder(sessionContext, "solutionReports.deptBalancingReport.ord"));
            doc.setPageSize(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()));
            doc.newPage();
            doc.add(new Paragraph(table.getName(), PdfFont.getBigFont(true)));
            doc.add(pdfTable);
        }

        PerturbationReport perturbationReport = solver.getPerturbationReport();
        if (perturbationReport != null && !perturbationReport.getGroups().isEmpty()) {
            PdfWebTable table = getPerturbationReportTable(request, perturbationReport, true);
            PdfPTable pdfTable = table
                    .printPdfTable(WebTable.getOrder(sessionContext, "solutionReports.pert.ord"));
            doc.setPageSize(new Rectangle(60f + table.getWidth(), 60f + 0.75f * table.getWidth()));
            doc.newPage();
            doc.add(new Paragraph(table.getName(), PdfFont.getBigFont(true)));
            doc.add(pdfTable);
            pdfTable = new PdfPTable(new float[] { 5f, 100f });
            pdfTable.setWidthPercentage(100);
            pdfTable.getDefaultCell().setPadding(3);
            pdfTable.getDefaultCell().setBorderWidth(0);
            pdfTable.setSplitRows(false);
            pdfTable.addCell("Class");
            pdfTable.addCell("Class name");
            pdfTable.addCell("Time");
            pdfTable.addCell("Time (initial -> assigned)");
            pdfTable.addCell("Room");
            pdfTable.addCell("Room (initial -> assigned)");
            pdfTable.addCell("Dist");
            pdfTable.addCell("Distance between assignments (if different are used buildings)");
            pdfTable.addCell("St");
            pdfTable.addCell("Number of affected students");
            pdfTable.addCell("StT");
            pdfTable.addCell("Number of affected students by time change");
            pdfTable.addCell("StR");
            pdfTable.addCell("Number of affected students by room change");
            pdfTable.addCell("StB");
            pdfTable.addCell("Number of affected students by building change");
            pdfTable.addCell("Ins");
            pdfTable.addCell("Number of affected instructors");
            pdfTable.addCell("InsT");
            pdfTable.addCell("Number of affected instructors by time change");
            pdfTable.addCell("InsR");
            pdfTable.addCell("Number of affected instructors by room change");
            pdfTable.addCell("InsB");
            pdfTable.addCell("Number of affected instructors by building change");
            pdfTable.addCell("Rm");
            pdfTable.addCell("Number of rooms changed");
            pdfTable.addCell("Bld");
            pdfTable.addCell("Number of buildings changed");
            pdfTable.addCell("Tm");
            pdfTable.addCell("Number of times changed");
            pdfTable.addCell("Day");
            pdfTable.addCell("Number of days changed");
            pdfTable.addCell("Hr");
            pdfTable.addCell("Number of hours changed");
            pdfTable.addCell("TFSt");
            pdfTable.addCell("Assigned building too far for instructor (from the initial one)");
            pdfTable.addCell("TFIns");
            pdfTable.addCell("Assigned building too far for students (from the initial one)");
            pdfTable.addCell("DStC");
            pdfTable.addCell("Difference in student conflicts");
            pdfTable.addCell("NStC");
            pdfTable.addCell("Number of new student conflicts");
            pdfTable.addCell("DTPr");
            pdfTable.addCell("Difference in time preferences");
            pdfTable.addCell("DRPr");
            pdfTable.addCell("Difference in room preferences");
            pdfTable.addCell("DInsB");
            pdfTable.addCell("Difference in back-to-back instructor preferences");
            doc.add(pdfTable);
        }

        doc.close();

        out.flush();
        out.close();

        return null;
    }

    return mapping.findForward("showSolutionReport");
}