org.jrimum.bopepo.pdf.PdfDocInfo.java Source code

Java tutorial

Introduction

Here is the source code for org.jrimum.bopepo.pdf.PdfDocInfo.java

Source

/*
 * Copyright 2011 JRimum Project
 * 
 * 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.
 * 
 * Created at: 19/09/2011 - 15:43:26
 * 
 * ================================================================================
 * 
 * Direitos autorais 2011 JRimum Project
 * 
 * Licenciado sob a Licena Apache, Verso 2.0 ("LICENA"); voc no pode usar
 * esse arquivo exceto em conformidade com a esta LICENA. Voc pode obter uma
 * cpia desta LICENA em http://www.apache.org/licenses/LICENSE-2.0 A menos que
 * haja exigncia legal ou acordo por escrito, a distribuio de software sob
 * esta LICENA se dar COMO EST??, SEM GARANTIAS OU CONDIES DE QUALQUER
 * TIPO, sejam expressas ou tcitas. Veja a LICENA para a redao especfica a
 * reger permisses e limitaes sob esta LICENA.
 * 
 * Criado em: 19/09/2011 - 15:43:26
 * 
 */

package org.jrimum.bopepo.pdf;

import static org.jrimum.utilix.Objects.checkNotNull;
import static org.jrimum.utilix.Objects.isNotNull;

import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

import org.jrimum.utilix.Exceptions;
import org.jrimum.utilix.Objects;

import com.lowagie.text.pdf.PdfDate;

/**
 * Pricipais informaes de um documento PDF: <tt>Ttulo, Autor, Assunto,
 * Palavras-chave, Aplicativo criador, Data de criao e Data de modificao</tt>
 * .
 * 
 * @author <a href="http://gilmatryx.googlepages.com/">Gilmar P.S.L.</a>
 * 
 */
public class PdfDocInfo {

    /*
     * Mesmas chaves de pesquisa usadas pelo itext.
     */

    /**
     * Key = Ttulo do documento. 
     */
    private static final String DOC_TITLE = "Title";
    /**
     * Key = Autor do documento. 
     */
    private static final String DOC_AUTHOR = "Author";
    /**
     * Key = Assunto do documento. 
     */
    private static final String DOC_SUBJECT = "Subject";
    /**
     * Key = Palavras-chave do documento. 
     */
    private static final String DOC_KEYWORDS = "Keywords";
    /**
     * Key = Ferramenta/Software usada para do documento. 
     */
    private static final String DOC_CREATOR = "Creator";
    /**
     * Key = Data de criao do documento. 
     */
    private static final String DOC_CREATION_DATE = "CreationDate";
    /**
     * Key = Data de modificao do documento. 
     */
    private static final String DOC_MODIFACTION_DATE = "ModDate";

    /**
     * Key = Ferramenta/Software que de fato produziu o documento. 
     */
    private static final String DOC_PRODUCER = "Producer";

    /**
     * Map com informaes sobre o documento: Title, Author, Subject, etc.
     */
    private final Map<String, String> docInfo;

    /**
     * Modo de criao no utilizado e no permitido. 
     */
    private PdfDocInfo() {
        Exceptions.throwIllegalStateException("Estado no permitido!");
        docInfo = null;
    }

    /**
     * Apenas para uso interno.
     * 
     * @param info
     */
    private PdfDocInfo(Map<String, String> info) {

        checkNotNull(info);

        this.docInfo = info;
    }

    /**
     * Cria uma nova instncia sem informaes.
     * 
     * @return referncia prota para uso
     */
    public static PdfDocInfo create() {

        return new PdfDocInfo(new HashMap<String, String>(8));
    }

    /**
     * Cria uma nova instncia com as informaes fornecidas.
     * 
     * @param info Informaes sobre um documento
     * 
     * @return referncia prota para uso
     */
    public static PdfDocInfo create(Map<String, String> info) {

        checkNotNull(info, "INFO INV?LIDA!");

        return new PdfDocInfo(info);
    }

    /**
     * Define o Ttulo do documento.
     * 
     * @param title
     * 
     * @return Esta instncia aps a operao
     */
    public PdfDocInfo title(String title) {

        if (isNotNull(title)) {
            docInfo.put(DOC_TITLE, title);
        }

        return this;
    }

    /**
     * Define o Autor do documento.
     * 
     * @param author
     * 
     * @return Esta instncia aps a operao
     */
    public PdfDocInfo author(String author) {

        if (isNotNull(author)) {
            docInfo.put(DOC_AUTHOR, author);
        }

        return this;
    }

    /**
     * Define o Assunto do documento.
     * 
     * @param subject
     * 
     * @return Esta instncia aps a operao
     */
    public PdfDocInfo subject(String subject) {

        if (isNotNull(subject)) {
            docInfo.put(DOC_SUBJECT, subject);
        }

        return this;
    }

    /**
     * Define as Palavras-chave do documento.
     * 
     * @param keywords
     * 
     * @return Esta instncia aps a operao
     */
    public PdfDocInfo keywords(String keywords) {

        if (isNotNull(keywords)) {
            docInfo.put(DOC_KEYWORDS, keywords);
        }

        return this;
    }

    /**
     * Define o Software/Ferramenta de criao do documento.
     * 
     * @param creator
     * 
     * @return Esta instncia aps a operao
     */
    public PdfDocInfo creator(String creator) {

        if (isNotNull(creator)) {
            docInfo.put(DOC_CREATOR, creator);
        }

        return this;
    }

    /**
     * Define a Data de criao do documento.
     * 
     * @param date
     *            Data de criao
     * 
     * @return Esta instncia aps a operao
     * 
     * @throws IllegalArgumentException
     *             quando a date  nula
     */
    public PdfDocInfo creation(Calendar date) {

        Objects.checkNotNull(date, "Valor null no permitido para data de criao do documento!");

        docInfo.put(DOC_CREATION_DATE, PdfDateConverter.convert(date));

        return this;
    }

    /**
     * Define a Data de modificao do documento.
     * 
     * @param date
     *            Data de modificao
     * 
     * @return Esta instncia aps a operao
     * 
     * @throws IllegalArgumentException
     *             quando a date  nula
     */
    public PdfDocInfo modification(Calendar date) {

        Objects.checkNotNull(date, "Valor null no permitido para data de modificao do documento!");
        Objects.checkNotNull(date);

        docInfo.put(DOC_MODIFACTION_DATE, PdfDateConverter.convert(date));

        return this;
    }

    /**
     * @return Ttulo do documento
     */
    public String title() {

        return docInfo.get(DOC_TITLE);
    }

    /**
     * @return Autor do documento
     */
    public String author() {

        return docInfo.get(DOC_AUTHOR);
    }

    /**
     * @return Assunto do documento
     */
    public String subject() {

        return docInfo.get(DOC_SUBJECT);
    }

    /**
     * @return Palavras-chave do documento
     */
    public String keywords() {

        return docInfo.get(DOC_KEYWORDS);
    }

    /**
     * @return Criador do documento
     */
    public String creator() {

        return docInfo.get(DOC_CREATOR);
    }

    /**
     * Data de criao do documento em string, provalvelmento no seguinte
     * formato: (<b>D:YYYYMMDDHHmmSSOHH'mm'</b>).
     * 
     * @return Data de criao do documento
     */
    public String creationRaw() {

        return docInfo.get(DOC_CREATION_DATE);
    }

    /**
     * @return Data de criao do documento
     */
    public Calendar creation() {

        return PdfDate.decode(docInfo.get(DOC_CREATION_DATE));
    }

    /**
     * Data de modificao do documento em string, provalvelmento no seguinte
     * formato: (<b>D:YYYYMMDDHHmmSSOHH'mm'</b>).
     * 
     * @return Data de modificao do documento
     */
    public String modificationRaw() {

        return docInfo.get(DOC_MODIFACTION_DATE);
    }

    /**
     * @return Data de modificao do documento
     */
    public Calendar modification() {

        return PdfDate.decode(docInfo.get(DOC_MODIFACTION_DATE));

    }

    /**
     * Retorna a descrio do produtor do documento.
     * 
     * <p>
     * Obs: <i>"You cant change this without breaking the software license that
     * allows you to use iText for free."</i>
     * </p>
     * 
     * @return Descrio do produtor
     */
    public String producer() {

        return docInfo.get(DOC_PRODUCER);
    }

    /**
     * Transforma as informaes do documento em um novo Map a cada chamada.
     * 
     * @return Map de informaes
     */
    public Map<String, String> toMap() {

        return new HashMap<String, String>(docInfo);
    }

    /**
     * Gerao a partir do {@code hashCode()} do {@linkplain #docInfo}.
     * 
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((docInfo == null) ? 0 : docInfo.hashCode());
        return result;
    }

    /**
     * Comparao com base no {@linkplain #docInfo}. 
     * 
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        PdfDocInfo other = (PdfDocInfo) obj;
        if (docInfo == null) {
            if (other.docInfo != null)
                return false;
        } else if (!docInfo.equals(other.docInfo))
            return false;
        return true;
    }

    /**
     * Informao contida em {@linkplain #docInfo}. 
     * 
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "PdfDocInfo [docInfo=" + docInfo + "]";
    }

}