ch.dowa.jassturnier.pdf.RankingPdf.java Source code

Java tutorial

Introduction

Here is the source code for ch.dowa.jassturnier.pdf.RankingPdf.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ch.dowa.jassturnier.pdf;

import ch.dowa.jassturnier.ResourceLoader;
import static ch.dowa.jassturnier.pdf.PdfGenerator.BACKGROUND_HEADER;
import static ch.dowa.jassturnier.pdf.PdfGenerator.BACKGROUND_ROW_EVEN;
import static ch.dowa.jassturnier.pdf.PdfGenerator.BACKGROUND_ROW_ODD;
import static ch.dowa.jassturnier.pdf.PdfGenerator.STANDART_FONT;
import static ch.dowa.jassturnier.pdf.PdfGenerator.STANDART_FONT_BOLD;
import java.awt.Color;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import static org.vandeseer.easytable.settings.HorizontalAlignment.LEFT;
import static org.vandeseer.easytable.settings.HorizontalAlignment.RIGHT;
import org.vandeseer.easytable.structure.Row;
import org.vandeseer.easytable.structure.Table;
import org.vandeseer.easytable.structure.cell.CellText;

/**
 *
 * @author domi_
 */
public class RankingPdf {

    public static void exportRanking(HashMap<Integer, String> names, HashMap<Integer, ArrayList<Long>> points,
            int gangNr, String turnierTitel, boolean schlussrangliste) throws IOException {

        PdfGenerator gen = new PdfGenerator(PDRectangle.A4);
        LinkedHashMap<Integer, ArrayList<Long>> sortedPoints;
        sortedPoints = points.entrySet().stream()
                .sorted((Map.Entry<Integer, ArrayList<Long>> e1, Map.Entry<Integer, ArrayList<Long>> e2) -> {
                    ArrayList<Long> pointList1 = e1.getValue();
                    ArrayList<Long> pointList2 = e2.getValue();
                    Long points1 = pointList1.get(pointList1.size() - 1);
                    Long points2 = pointList2.get(pointList2.size() - 1);
                    return points2.compareTo(points1);
                }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> {
                    return oldValue;
                }, LinkedHashMap::new));
        sortedPoints.keySet().forEach(id -> System.out.println(names.get(id) + points.get(id).toString()));

        String outputFileName;
        outputFileName = turnierTitel.replace(' ', '_') + "_"
                + (schlussrangliste ? "Schlussrangliste" : "Zwischenrangliste_Gang_" + String.valueOf(gangNr))
                + ".pdf";
        String titel = turnierTitel + " - "
                + (schlussrangliste ? "Schlussrangliste" : "Zwischenrangliste Gang " + String.valueOf(gangNr));

        Table.TableBuilder tableBuilder = Table.builder();
        tableBuilder = tableBuilder.addColumnOfWidth((float) (gen.tabelWidth() * 0.1));
        tableBuilder = tableBuilder.addColumnOfWidth((float) (gen.tabelWidth() * (1 - (0.12 * (gangNr + 1)))));
        for (int i = 1; i <= gangNr; i++) {
            tableBuilder = tableBuilder.addColumnOfWidth((float) (gen.tabelWidth() * 0.12));
        }
        tableBuilder.fontSize(10).font(STANDART_FONT).borderColor(Color.WHITE);

        int rang = 1;
        Long lastPoints = 0L;
        int nofEqualPoints = 0;

        Row.RowBuilder headerRowBuilder = Row.builder()
                .add(CellText.builder().text("Rang").horizontalAlignment(LEFT).borderWidth(1).build())
                .add(CellText.builder().text("Spieler").horizontalAlignment(LEFT).borderWidth(1).build());

        for (int i = 1; i <= gangNr; i++) {
            headerRowBuilder = headerRowBuilder.add(CellText.builder().text(String.valueOf(i) + ". Gang")
                    .horizontalAlignment(LEFT).borderWidth(1).build());
        }

        final Row headerRow = headerRowBuilder.backgroundColor(BACKGROUND_HEADER).textColor(Color.WHITE)
                .font(STANDART_FONT_BOLD).fontSize(12).build();

        tableBuilder.addRow(headerRow);
        int j = 0;
        for (Integer index : sortedPoints.keySet()) {
            ArrayList<Long> pointList = sortedPoints.get(index);
            Long actPoints = pointList.get(pointList.size() - 1);
            rang = Objects.equals(actPoints, lastPoints) ? rang : rang + nofEqualPoints;
            nofEqualPoints = Objects.equals(actPoints, lastPoints) ? nofEqualPoints + 1 : 1;
            lastPoints = actPoints;
            String playerName = names.get(index);
            Row.RowBuilder rowBuilder = Row.builder();
            rowBuilder = rowBuilder
                    .add(CellText.builder().font(STANDART_FONT_BOLD).text(String.valueOf(rang))
                            .horizontalAlignment(LEFT).borderWidth(1).build())
                    .add(CellText.builder().font(STANDART_FONT).text(playerName).horizontalAlignment(LEFT)
                            .borderWidth(1).build());
            for (int i = 0; i < pointList.size(); i++) {
                if (i == pointList.size() - 1) {
                    rowBuilder = rowBuilder
                            .add(CellText.builder().font(STANDART_FONT_BOLD).text(String.valueOf(pointList.get(i)))
                                    .horizontalAlignment(RIGHT).borderWidth(1).build());
                } else {
                    rowBuilder = rowBuilder
                            .add(CellText.builder().font(STANDART_FONT).text(String.valueOf(pointList.get(i)))
                                    .horizontalAlignment(RIGHT).borderWidth(1).build());
                }
            }
            Row row = rowBuilder.backgroundColor(j % 2 == 0 ? BACKGROUND_ROW_EVEN : BACKGROUND_ROW_ODD).build();
            tableBuilder.addRow(row);
            j++;
        }

        gen.exportTemplateWithTable(tableBuilder, outputFileName, titel);
    }
}