/*****************************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*
****************************************************************************/
package org.apache.padaf.preflight;
import java.util.HashMap;
import java.util.Map;
import javax.activation.DataSource;
import org.apache.padaf.preflight.javacc.PDFParser;
import org.apache.padaf.preflight.javacc.extractor.ExtractorTokenManager;
import org.apache.padaf.preflight.font.AbstractFontContainer;
import org.apache.padaf.preflight.graphics.ICCProfileWrapper;
import org.apache.padaf.preflight.utils.COSUtils;
import org.apache.padaf.xmpbox.XMPMetadata;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.pdmodel.PDDocument;
/**
* The DocumentHandler is used to store useful information or Objects during the
* validation of the PDF file.
*/
public class DocumentHandler {
/**
* Contains the list of font name embedded in the PDF document.
*/
protected Map<COSBase, AbstractFontContainer> embeddedFonts = new HashMap<COSBase, AbstractFontContainer>();
/**
* The javacc parser used to parse the document
*/
protected PDFParser parser = null;
/**
* The PDFbox object representation of the PDF source.
*/
protected PDDocument document = null;
/**
* The datasource to load the document from
*/
protected DataSource source = null;
/**
* JavaCC Token Manager used to get some content of the PDF file as string (ex
* : Trailers)
*/
protected ExtractorTokenManager pdfExtractor = null;
/**
* This wrapper contains the ICCProfile used by the PDF file.
*/
protected ICCProfileWrapper iccProfileWrapper = null;
/**
* MetaData of the current pdf file.
*/
protected XMPMetadata metadata = null;
/**
* Create the DocumentHandler using the DataSource which represent the PDF
* file to check.
*
* @param source
*/
protected DocumentHandler(DataSource source) {
this.source = source;
}
/**
* @return the metadata
*/
public XMPMetadata getMetadata() {
return metadata;
}
/**
* @param metadata the metadata to set
*/
public void setMetadata(XMPMetadata metadata) {
this.metadata = metadata;
}
/**
* @return the PDFParser used to parse the document
*/
public PDFParser getParser() {
return parser;
}
/**
* Initialize the JavaCC parser which checks the syntax of the PDF.
*
* @param parser
*/
protected void setParser(PDFParser parser) {
this.parser = parser;
}
/**
* @return the value of the pdfExtractor attribute.
*/
public ExtractorTokenManager getPdfExtractor() {
return pdfExtractor;
}
/**
* Initialize the pdfExtractor attribute.
*
* @param pdfExtractor
*/
protected void setPdfExtractor(ExtractorTokenManager pdfExtractor) {
this.pdfExtractor = pdfExtractor;
}
/**
* @return the PDFBox object representation of the document
*/
public PDDocument getDocument() {
return document;
}
/**
* Initialize the PDFBox object which present the PDF File.
*
* @param document
*/
protected void setDocument(PDDocument document) {
this.document = document;
}
/**
*
* @return The datasource of the pdf document
*/
public DataSource getSource() {
return source;
}
public boolean isComplete() {
return (document != null) && (source != null) && (parser != null);
}
/**
* Add a FontContainer to allow TextObject validation.
*
* @param fKey
* @param fc
*/
public void addFont(COSBase fKey, AbstractFontContainer fc) {
this.embeddedFonts.put(fKey, fc);
}
/**
* Return the FontContainer identified by the COSBase. If the given object
* is missing from the emmbeddedFont map, the null value is returned.
*
* @param fKey
* @return
*/
public AbstractFontContainer getFont(COSBase fKey) {
return this.embeddedFonts.get(fKey);
}
/**
* @return the iccProfileWrapper
*/
public ICCProfileWrapper getIccProfileWrapper() {
return iccProfileWrapper;
}
/**
* @param iccProfileWrapper
* the iccProfileWrapper to set
*/
public void setIccProfileWrapper(ICCProfileWrapper iccProfileWrapper) {
this.iccProfileWrapper = iccProfileWrapper;
}
/**
* Close all opened resources
*/
public void close() {
COSUtils.closeDocumentQuietly(document);
}
}