package org.jtheque.films.services.impl; /* * Copyright JTheque (Baptiste Wicht) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import org.jtheque.core.managers.Managers; import org.jtheque.core.managers.language.ILanguageManager; import org.jtheque.core.managers.log.IJThequeLogger; import org.jtheque.core.managers.log.Logger; import org.jtheque.core.managers.view.able.IViewManager; import org.jtheque.films.persistence.od.able.Film; import org.jtheque.films.services.able.ICoverService; import org.jtheque.films.services.impl.utils.cover.Format; import org.jtheque.films.services.impl.utils.file.exports.datasources.FilmsDatasource; import org.jtheque.films.services.impl.utils.file.jt.FileFilterFactory; import org.jtheque.films.utils.Constants; import org.jtheque.utils.collections.ArrayUtils; import javax.print.attribute.AttributeSet; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.standard.Copies; import javax.print.attribute.standard.JobName; import java.awt.Image; import java.util.HashMap; import java.util.Map; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperPrintManager; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.design.JasperDesign; import net.sf.jasperreports.engine.export.JRPrintServiceExporter; import net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter; import net.sf.jasperreports.engine.xml.JRXmlLoader; /** * A cover service implementation. * * @author Baptiste Wicht */ public final class CoverService implements ICoverService { private final Format[] formats; private Image image; private JasperPrint print; private Film film; private Format format; @Logger private IJThequeLogger logger; /** * Construct a new CoverService. */ public CoverService() { super(); formats = new Format[4]; formats[0] = new Format("cover.formats.dvd.standard", Constants.Report.FORM002_DVD_STANDARD); formats[1] = new Format("cover.formats.dvd.slim", Constants.Report.FORM002_DVD_SLIM); formats[2] = new Format("cover.formats.cd.standard", Constants.Report.FORM002_CD_STANDARD); formats[3] = new Format("cover.formats.cd.slim", Constants.Report.FORM002_CD_SLIM); } @Override public Format[] getFormats() { return ArrayUtils.copyOf(formats); } @Override public Image getReportImage(Film film, Format format) { if (film != null && (this.film != film || this.format != format)) { this.film = film; this.format = format; try { JasperDesign jasperDesign = JRXmlLoader.load(getClass().getClassLoader().getResourceAsStream("org/jtheque/films/reports/" + format.getForm())); JasperReport report = JasperCompileManager.compileReport(jasperDesign); Map<String, Object> parameters = new HashMap<String, Object>(3); parameters.put("REPORT_REALIZER_HEADER", Managers.getManager(ILanguageManager.class).getMessage("cover.realizer")); parameters.put("REPORT_ACTORS_HEADER", Managers.getManager(ILanguageManager.class).getMessage("cover.actors")); parameters.put("REPORT_DVD_LOGO", getClass().getClassLoader().getResourceAsStream("org/jtheque/films/images/dvd-logo-h.gif")); print = JasperFillManager.fillReport(report, parameters, new FilmsDatasource(film)); image = JasperPrintManager.printPageToImage(print, 0, 1.0f); } catch (JRException e) { logger.error(e); } } return image; } @Override public void printCurrentReport() { try { AttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet(); printRequestAttributeSet.add(new Copies(1)); printRequestAttributeSet.add(new JobName("JTheque Print Report Job", null)); JRPrintServiceExporter exporter = new JRPrintServiceExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, print); exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, printRequestAttributeSet); exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE); exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.TRUE); exporter.exportReport(); } catch (JRException e) { logger.error(e); } } @Override public void exportCurrentReportToPDF() { String filePath = Managers.getManager(IViewManager.class).chooseFile(FileFilterFactory.getFileFilter(Constants.Files.FileType.PDF)); try { JasperExportManager.exportReportToPdfFile(print, filePath); } catch (JRException e) { logger.error(e); } } }