View Javadoc
1   package fr.tiogars.inception.domains.domaintemplate.services;
2   
3   import java.io.IOException;
4   import java.util.List;
5   import java.util.Optional;
6   
7   import org.springframework.stereotype.Service;
8   import org.springframework.transaction.annotation.Transactional;
9   
10  import fr.tiogars.inception.domains.domaintemplate.models.DomainTemplate;
11  
12  /** Generates a printable PDF for one active DomainTemplate. */
13  @Service
14  public class DomainTemplatePrintService {
15  
16      private final DomainTemplateFindByIdService findByIdService;
17      private final DomainTemplatePdfRenderer renderer;
18  
19      public DomainTemplatePrintService(DomainTemplateFindByIdService findByIdService, DomainTemplatePdfRenderer renderer) {
20          this.findByIdService = findByIdService;
21          this.renderer = renderer;
22      }
23  
24      /**
25       * Prints an active record.
26       *
27       * @param id persistent identifier
28       * @return PDF bytes, or empty if the record was not found
29       * @throws IOException when the PDF cannot be generated
30       */
31      @Transactional(readOnly = true)
32      public Optional<byte[]> print(Long id) throws IOException {
33          Optional<DomainTemplate> template = findByIdService.findById(id);
34          if (template.isEmpty()) {
35              return Optional.empty();
36          }
37          return Optional.of(renderer.render("DomainTemplate", List.of(template.get())));
38      }
39  }