com.qcadoo.mes.genealogiesForComponents.GenealogyForComponentView.java Source code

Java tutorial

Introduction

Here is the source code for com.qcadoo.mes.genealogiesForComponents.GenealogyForComponentView.java

Source

/**
 * ***************************************************************************
 * Copyright (c) 2010 Qcadoo Limited
 * Project: Qcadoo MES
 * Version: 1.2.0
 *
 * This file is part of Qcadoo.
 *
 * Qcadoo is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published
 * by the Free Software Foundation; either version 3 of the License,
 * or (at your option) any later version.
 *
 * This program 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 Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 * ***************************************************************************
 */
package com.qcadoo.mes.genealogiesForComponents;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;
import com.qcadoo.localization.api.TranslationService;
import com.qcadoo.mes.genealogiesForComponents.constants.GenealogiesForComponentsConstants;
import com.qcadoo.mes.genealogiesForComponents.util.EntityOrderNumberComparator;
import com.qcadoo.model.api.DataDefinitionService;
import com.qcadoo.model.api.Entity;
import com.qcadoo.model.api.search.SearchRestrictions;
import com.qcadoo.report.api.FontUtils;
import com.qcadoo.report.api.pdf.PdfHelper;
import com.qcadoo.report.api.pdf.ReportPdfView;
import com.qcadoo.security.api.SecurityService;

@Component(value = "genealogyForComponentView")
public class GenealogyForComponentView extends ReportPdfView {

    private static final String BATCH_FIELD = "batch";

    @Autowired
    private SecurityService securityService;

    @Autowired
    private DataDefinitionService dataDefinitionService;

    @Autowired
    private TranslationService translationService;

    @Autowired
    private PdfHelper pdfHelper;

    @Override
    protected String addContent(final Document document, final Map<String, Object> model, final Locale locale,
            final PdfWriter writer) throws DocumentException, IOException {
        Entity entity = dataDefinitionService
                .get(GenealogiesForComponentsConstants.PLUGIN_IDENTIFIER,
                        GenealogiesForComponentsConstants.MODEL_PRODUCT_IN_BATCH)
                .get(Long.valueOf(model.get("value").toString()));
        String documentTitle = translationService
                .translate("genealogiesForComponents.genealogyForComponent.report.title", locale);
        String documentAuthor = translationService.translate("qcadooReport.commons.generatedBy.label", locale);
        pdfHelper.addDocumentHeader(document, "", documentTitle, documentAuthor, new Date(),
                securityService.getCurrentUserName());
        addTables(document, entity, locale);
        return translationService.translate("genealogiesForComponents.genealogyForComponent.report.fileName",
                locale);
    }

    @Override
    protected void addTitle(final Document document, final Locale locale) {
        document.addTitle(translationService
                .translate("genealogiesForComponents.genealogyForComponent.report.title", locale));
    }

    private void addTables(final Document document, final Entity entity, final Locale locale)
            throws DocumentException {
        List<String> orderHeader = new ArrayList<String>();
        orderHeader.add(translationService.translate("orders.order.number.label", locale));
        orderHeader.add(translationService.translate("orders.order.name.label", locale));
        orderHeader.add(translationService.translate("orders.order.product.label", locale));
        orderHeader.add(translationService
                .translate("genealogiesForComponents.genealogyForComponent.report.productBatch", locale));
        Paragraph productTitle = new Paragraph(new Phrase(
                translationService.translate(
                        "genealogiesForComponents.genealogyForComponent.report.paragrah.product", locale),
                FontUtils.getDejavuBold11Light()));
        productTitle.setSpacingBefore(20);
        document.add(productTitle);
        PdfPTable headerData = pdfHelper.createPanelTable(3);
        headerData.setSpacingBefore(7);
        Entity product = entity.getBelongsToField("productInComponent").getBelongsToField("productInComponent")
                .getBelongsToField("product");
        pdfHelper.addTableCellAsOneColumnTable(headerData,
                translationService.translate("basic.product.number.label", locale), product.getField("number"));
        pdfHelper.addTableCellAsOneColumnTable(headerData,
                translationService.translate("basic.product.name.label", locale), product.getField("name"));
        pdfHelper.addTableCellAsOneColumnTable(headerData,
                translationService.translate("genealogiesForComponents.productInBatch.batch.label", locale),
                entity.getField(BATCH_FIELD));
        document.add(headerData);
        Paragraph orderTitle = new Paragraph(
                new Phrase(
                        translationService.translate(
                                "genealogiesForComponents.genealogyForComponent.report.paragrah.order", locale),
                        FontUtils.getDejavuBold11Light()));
        orderTitle.setSpacingBefore(20);
        document.add(orderTitle);
        addOrderSeries(document, entity, orderHeader);
    }

    private void addOrderSeries(final Document document, final Entity entity, final List<String> orderHeader)
            throws DocumentException {
        PdfPTable table = pdfHelper.createTableWithHeader(4, orderHeader, false);
        List<Entity> genealogies = getGenealogies(entity);
        Collections.sort(genealogies, new EntityOrderNumberComparator());
        for (Entity genealogy : genealogies) {
            Entity order = (Entity) genealogy.getField("order");
            table.addCell(new Phrase(order.getField("number").toString(), FontUtils.getDejavuRegular9Dark()));
            table.addCell(new Phrase(order.getField("name").toString(), FontUtils.getDejavuRegular9Dark()));
            Entity product = (Entity) order.getField("product");
            if (product == null) {
                table.addCell(new Phrase("", FontUtils.getDejavuRegular9Dark()));
            } else {
                table.addCell(new Phrase(product.getField("name").toString(), FontUtils.getDejavuRegular9Dark()));
            }
            table.addCell(
                    new Phrase(genealogy.getField(BATCH_FIELD).toString(), FontUtils.getDejavuRegular9Dark()));
        }
        document.add(table);
    }

    private List<Entity> getGenealogies(final Entity entity) {
        List<Entity> genealogies = new ArrayList<Entity>();

        List<Entity> batchList = dataDefinitionService
                .get(GenealogiesForComponentsConstants.PLUGIN_IDENTIFIER,
                        GenealogiesForComponentsConstants.MODEL_PRODUCT_IN_BATCH)
                .find().add(SearchRestrictions.eq(BATCH_FIELD, entity.getField(BATCH_FIELD))).list().getEntities();

        for (Entity batch : batchList) {
            Entity genealogy = ((Entity) ((Entity) batch.getField("productInComponent")).getField("genealogy"));
            if (!genealogies.contains(genealogy)) {
                genealogies.add(genealogy);
            }
        }
        return genealogies;
    }
}