alfio.controller.support.TemplateProcessor.java Source code

Java tutorial

Introduction

Here is the source code for alfio.controller.support.TemplateProcessor.java

Source

/**
 * This file is part of alf.io.
 *
 * alf.io is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * alf.io is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with alf.io.  If not, see <http://www.gnu.org/licenses/>.
 */
package alfio.controller.support;

import alfio.manager.TicketReservationManager;
import alfio.manager.support.PDFTemplateGenerator;
import alfio.manager.support.PartialTicketPDFGenerator;
import alfio.manager.support.PartialTicketTextGenerator;
import alfio.model.Event;
import alfio.model.Ticket;
import alfio.model.TicketCategory;
import alfio.model.TicketReservation;
import alfio.model.transaction.PaymentProxy;
import alfio.model.user.Organization;
import alfio.repository.user.OrganizationRepository;
import alfio.util.LocaleUtil;
import alfio.util.TemplateManager;
import alfio.util.TemplateManager.TemplateOutput;
import com.google.zxing.WriterException;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.BaseFont;
import lombok.extern.log4j.Log4j2;
import org.xhtmlrenderer.pdf.ITextRenderer;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.*;

import static alfio.util.ImageUtil.createQRCode;

@Log4j2
public final class TemplateProcessor {

    private TemplateProcessor() {
    }

    public static PartialTicketTextGenerator buildPartialEmail(Event event,
            OrganizationRepository organizationRepository, TicketReservation ticketReservation,
            TemplateManager templateManager, String reservationURL, HttpServletRequest request) {
        return (ticket) -> {
            Map<String, Object> model = new HashMap<>();
            model.put("organization", organizationRepository.getById(event.getOrganizationId()));
            model.put("event", event);
            model.put("ticketReservation", ticketReservation);
            model.put("reservationUrl", reservationURL);
            model.put("ticket", ticket);
            Locale language = LocaleUtil.getTicketLanguage(ticket, request);
            return templateManager.renderClassPathResource("/alfio/templates/ticket-email-txt.ms", model, language,
                    TemplateOutput.TEXT);
        };
    }

    public static PartialTicketTextGenerator buildEmailForOwnerChange(Event e, Ticket oldTicket,
            OrganizationRepository organizationRepository, TicketReservationManager ticketReservationManager,
            TemplateManager templateManager, Locale language) {
        return (newTicket) -> {
            String eventName = e.getShortName();
            Map<String, Object> emailModel = new HashMap<>();
            emailModel.put("ticket", oldTicket);
            emailModel.put("organization", organizationRepository.getById(e.getOrganizationId()));
            emailModel.put("eventName", eventName);
            emailModel.put("previousEmail", oldTicket.getEmail());
            emailModel.put("newEmail", newTicket.getEmail());
            emailModel.put("reservationUrl",
                    ticketReservationManager.reservationUrl(oldTicket.getTicketsReservationId()));
            return templateManager.renderClassPathResource("/alfio/templates/ticket-has-changed-owner-txt.ms",
                    emailModel, language, TemplateOutput.TEXT);
        };
    }

    public static PDFTemplateGenerator buildPDFTicket(Locale language, Event event,
            TicketReservation ticketReservation, Ticket ticket, TicketCategory ticketCategory,
            Organization organization, TemplateManager templateManager) {

        return () -> {
            String qrCodeText = ticket.ticketCode(event.getPrivateKey());
            //
            Map<String, Object> model = new HashMap<>();
            model.put("ticket", ticket);
            model.put("reservation", ticketReservation);
            model.put("ticketCategory", ticketCategory);
            model.put("event", event);
            model.put("organization", organization);
            model.put("qrCodeDataUri",
                    "data:image/png;base64," + Base64.getEncoder().encodeToString(createQRCode(qrCodeText)));
            model.put("deskPaymentRequired", Optional.ofNullable(ticketReservation.getPaymentMethod())
                    .orElse(PaymentProxy.STRIPE).isDeskPaymentRequired());

            String page = templateManager.renderClassPathResource("/alfio/templates/ticket.ms", model, language,
                    TemplateOutput.HTML);

            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocumentFromString(page);
            try {
                renderer.getFontResolver().addFont("/alfio/font/DejaVuSansMono.ttf", BaseFont.IDENTITY_H, true);
            } catch (IOException | DocumentException e) {
                log.warn("error while loading DejaVuSansMono.ttf font", e);
            }
            renderer.layout();
            return renderer;
        };
    }

    public static PartialTicketPDFGenerator buildPartialPDFTicket(Locale language, Event event,
            TicketReservation ticketReservation, TicketCategory ticketCategory, Organization organization,
            TemplateManager templateManager) throws WriterException, IOException {
        return (ticket) -> buildPDFTicket(language, event, ticketReservation, ticket, ticketCategory, organization,
                templateManager).generate();
    }
}