com.photon.phresco.service.impl.DocumentGeneratorImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.photon.phresco.service.impl.DocumentGeneratorImpl.java

Source

/*
 * ###
 * Phresco Service Implemenation
 * 
 * Copyright (C) 1999 - 2012 Photon Infotech Inc.
 * 
 * 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.
 * ###
 */
/*******************************************************************************
 * Copyright (c) 2011 Photon.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Photon Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.photon.in/legal/ppl-v10.html
 * 
 * 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.
 * 
 * Contributors:
 *     Photon - initial API and implementation
 ******************************************************************************/
package com.photon.phresco.service.impl;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import com.itextpdf.text.pdf.PdfCopy;
import com.photon.phresco.exception.PhrescoException;
import com.photon.phresco.model.Documentation;
import com.photon.phresco.model.ModuleGroup;
import com.photon.phresco.model.ProjectInfo;
import com.photon.phresco.model.Technology;
import com.photon.phresco.service.api.DocumentGenerator;
import com.photon.phresco.service.api.PhrescoServerFactory;
import com.photon.phresco.service.api.RepositoryManager;
import com.photon.phresco.service.docs.impl.DocConvertor;
import com.photon.phresco.service.docs.impl.DocumentUtil;
import com.photon.phresco.service.docs.impl.PdfInput;
import com.photon.phresco.service.model.EntityType;
import com.photon.phresco.util.Utility;

/**
 *
 * @author arunachalam_l
 *
 */
public class DocumentGeneratorImpl implements DocumentGenerator {
    private static final Logger S_LOGGER = Logger.getLogger(DocumentGeneratorImpl.class);
    private static Boolean isDebugEnabled = S_LOGGER.isDebugEnabled();
    private RepositoryManager repoManager = PhrescoServerFactory.getRepositoryManager();
    private static String MODULES = "Modules";
    private static String LIB = "JsLibraries";

    @Override
    public void generate(ProjectInfo info, File filePath) throws PhrescoException {
        if (isDebugEnabled) {
            S_LOGGER.debug("Entering Method DocumentGeneratorImpl.generate(ProjectInfo info, File filePath)");
        }
        OutputStream os = null, fos = null;

        try {
            if (isDebugEnabled) {
                S_LOGGER.debug("generate() Filepath=" + filePath.getPath());
            }
            String folderPath = filePath.toString() + File.separator + "docs";
            File docsFolder = new File(folderPath);
            if (!docsFolder.exists()) {
                docsFolder.mkdirs();
            }
            if (isDebugEnabled) {
                S_LOGGER.debug("generate() ProjectCode=" + info.getCode());
            }
            String path = folderPath + File.separator + info.getName() + "_doc.pdf";
            os = new FileOutputStream(new File(path));

            com.itextpdf.text.Document docu = new com.itextpdf.text.Document();

            PdfCopy pdfCopy = new PdfCopy(docu, os);
            docu.open();
            InputStream titleSection = DocumentUtil.getTitleSection(info);
            DocumentUtil.addPages(titleSection, pdfCopy);

            Technology technology = PhrescoServerFactory.getDbManager()
                    .getTechnologyDoc(info.getTechnology().getId());
            List<Documentation> technologyDoc = technology.getDocs();
            if (technologyDoc != null) {
                for (Documentation documentation : technologyDoc) {
                    if (!StringUtils.isEmpty(documentation.getUrl())) {
                        PdfInput convertToPdf = DocConvertor.convertToPdf(documentation.getUrl());
                        if (convertToPdf != null) {
                            DocumentUtil.addPages(convertToPdf.getInputStream(), pdfCopy);
                        }
                    } else {
                        InputStream stringAsPDF = DocumentUtil.getStringAsPDF(documentation.getContent());
                        DocumentUtil.addPages(stringAsPDF, pdfCopy);
                    }
                }
            }

            //            Documents documentInfo = repoManager.getDocument(technology.getId(), EntityType.TECHNOLOGY);
            //            if(documentInfo!= null){
            //                List<Document> docs = documentInfo.getDocument();
            //                for (Document document : docs) {
            //                    if(!StringUtils.isEmpty(document.getUrl())){
            //                        PdfInput convertToPdf = DocConvertor.convertToPdf(document.getUrl());
            //                        if(convertToPdf != null) {
            //                            DocumentUtil.addPages(convertToPdf.getInputStream(), pdfCopy);
            //                        }
            //                    } else {
            //                        InputStream stringAsPDF = DocumentUtil.getStringAsPDF(document.getContent());
            //                        DocumentUtil.addPages(stringAsPDF, pdfCopy);
            //                    }
            //                }
            //            }

            List<ModuleGroup> tuples = technology.getModules();
            DocumentUtil.addPages(tuples, pdfCopy, MODULES);

            List<ModuleGroup> libraries = technology.getJsLibraries();
            DocumentUtil.addPages(libraries, pdfCopy, LIB);
            //TODO: need to do for App servers, databases if required.

            docu.close();

            //generate index.html
            String indexHtml = DocumentUtil.getIndexHtml(docsFolder);
            File indexPath = new File(docsFolder, "index.html");
            fos = new FileOutputStream(indexPath);
            fos.write(indexHtml.getBytes());
        } catch (IOException e) {
            if (isDebugEnabled) {
                S_LOGGER.debug("(The process cannot access the file because it is being used by another process");
            }
            throw new PhrescoException(e);
        } catch (com.itextpdf.text.DocumentException e) {
            if (isDebugEnabled) {
                S_LOGGER.debug("(The process cannot access the file because it is being used by another process");
            }
            throw new PhrescoException(e);
        } finally {
            Utility.closeStream(os);
            Utility.closeStream(fos);
        }
    }

}