com.xpn.xwiki.doc.XWikiDeletedDocument.java Source code

Java tutorial

Introduction

Here is the source code for com.xpn.xwiki.doc.XWikiDeletedDocument.java

Source

/*
 * See the NOTICE file distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
package com.xpn.xwiki.doc;

import java.io.IOException;
import java.util.Date;
import java.util.Locale;

import org.apache.commons.lang3.StringUtils;
import org.xwiki.localization.LocaleUtils;
import org.xwiki.model.reference.DocumentReference;
import org.xwiki.model.reference.DocumentReferenceResolver;

import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.XWikiException;
import com.xpn.xwiki.store.XWikiHibernateDeletedDocumentContent;
import com.xpn.xwiki.util.AbstractSimpleClass;
import com.xpn.xwiki.util.Util;
import com.xpn.xwiki.web.Utils;

/**
 * Archive of deleted document, stored in {@link com.xpn.xwiki.store.XWikiRecycleBinStoreInterface}. Immutable, because
 * we don't need modify deleted document.
 *
 * @version $Id: e5b6b8562a13ea57fc968cc1bc0a21f10357f775 $
 * @since 1.2M1
 */
public class XWikiDeletedDocument extends AbstractSimpleClass {
    /**
     * Synthetic id.
     */
    private long id;

    /**
     * @see XWikiDocument#getFullName()
     */
    private String fullName;

    /**
     * @see XWikiDocument#getLocale()
     */
    private Locale locale;

    /**
     * date of delete action.
     */
    private Date date;

    /**
     * @see XWikiDeletedDocument#getDeleter()
     */
    private String deleter;

    private String xmlStore;

    private XWikiDeletedDocumentContent xml;

    private String batchId;

    /**
     * Default constructor. Used only in hibernate.
     */
    protected XWikiDeletedDocument() {
    }

    /**
     * @param fullName the local reference of the document
     * @param locale the locale of the document
     * @param storeType - the way to store the document
     * @param deleter - user which delete document
     * @param deleteDate - date of delete action
     * @throws XWikiException if any error
     */
    private XWikiDeletedDocument(String fullName, Locale locale, String storeType, String deleter, Date deleteDate)
            throws XWikiException {
        this.fullName = fullName;
        this.locale = locale;
        this.deleter = deleter;
        this.date = deleteDate;
        this.xmlStore = storeType;
    }

    /**
     * @param doc - deleted document
     * @param deleter - user which delete document
     * @param deleteDate - date of delete action
     * @param context - used for environment
     * @throws XWikiException if any error
     */
    public XWikiDeletedDocument(XWikiDocument doc, String deleter, Date deleteDate, XWikiContext context)
            throws XWikiException {
        this(doc.getFullName(), doc.getLocale(), null, deleter, deleteDate);

        setDocument(doc, context);
    }

    /**
     * @param fullName the local reference of the document
     * @param locale the locale of the document
     * @param storeType the way to store the document
     * @param deleter the user who delete document
     * @param deleteDate date of delete action
     * @param content the stored deleted document
     * @throws XWikiException if any error
     */
    public XWikiDeletedDocument(String fullName, Locale locale, String storeType, String deleter, Date deleteDate,
            XWikiDeletedDocumentContent content) throws XWikiException {
        this(fullName, locale, storeType, deleter, deleteDate);

        this.xml = content;
    }

    /**
     * @param fullName the local reference of the document
     * @param locale the locale of the document
     * @param storeType the way to store the document
     * @param deleter the user who delete document
     * @param deleteDate date of delete action
     * @param content the stored deleted document
     * @param batchId the id of the batch deletion
     * @throws XWikiException if any error
     * @since 9.4RC1
     */
    public XWikiDeletedDocument(String fullName, Locale locale, String storeType, String deleter, Date deleteDate,
            XWikiDeletedDocumentContent content, String batchId) throws XWikiException {
        this(fullName, locale, storeType, deleter, deleteDate, content);

        this.batchId = batchId;
    }

    /**
     * @return the synthetic id of this deleted document. unique only for document.
     */
    public long getId() {
        return this.id;
    }

    /**
     * @param id - the synthetic id to set. used only in Hibernate.
     */
    protected void setId(long id) {
        this.id = id;
    }

    /**
     * @return {@link XWikiDocument#getFullName()}
     */
    public String getFullName() {
        return this.fullName;
    }

    /**
     * @param docFullName - {@link XWikiDocument#getFullName()} to set
     */
    protected void setFullName(String docFullName) {
        this.fullName = docFullName;
    }

    /**
     * @return the document reference for the deleted document, including any locale information
     * @since 9.4RC1
     */
    public DocumentReference getDocumentReference() {
        DocumentReference documentReference = getDocumentReferenceResolver().resolve(getFullName());

        Locale localeValue = getLocale();
        if (localeValue != null) {
            documentReference = new DocumentReference(documentReference, localeValue);
        }

        return documentReference;
    }

    private static DocumentReferenceResolver<String> getDocumentReferenceResolver() {
        return Utils.getComponent(DocumentReferenceResolver.TYPE_STRING, "currentmixed");
    }

    /**
     * @return {@link XWikiDocument#getLanguage()}
     * @deprecated since 8.0M1, use {@link #getLocale()} instead
     */
    @Deprecated
    public String getLanguage() {
        return getLocale().toString();
    }

    /**
     * @return {@link XWikiDocument#getLocale()}
     * @since 8.0M1
     */
    public Locale getLocale() {
        return this.locale != null ? this.locale : Locale.ROOT;
    }

    /**
     * @param locale - {@link XWikiDocument#getLanguage()} to set
     * @deprecated since 8.0M1
     */
    @Deprecated
    protected void setLanguage(String locale) {
        this.locale = LocaleUtils.toLocale(Util.normalizeLanguage(locale), Locale.ROOT);
    }

    /**
     * @return the date of delete action
     */
    public Date getDate() {
        return this.date;
    }

    /**
     * @param date - the date of delete action to set
     */
    protected void setDate(Date date) {
        this.date = date;
    }

    /**
     * @return the user which has removed the document
     */
    public String getDeleter() {
        return this.deleter;
    }

    /**
     * @param deleter - the user which has removed the document to set
     */
    protected void setDeleter(String deleter) {
        this.deleter = deleter;
    }

    /**
     * @return the type of the stored used for the content
     */
    public String getXmlStore() {
        return this.xmlStore;
    }

    /**
     * @param xmlStore the type of store (supported values are null/"hibernate" and "file")
     */
    protected void setXmlStore(String xmlStore) {
        this.xmlStore = xmlStore;
    }

    /**
     * Only used in Hibernate.
     * 
     * @return xml serialization of {@link XWikiDocument}
     */
    public String getXml() {
        if (this.xml != null) {
            try {
                return this.xml.getContentAsString();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

        // Return empty String instead of null because this field is configured as not null at database level
        return "";
    }

    /**
     * Only used in Hibernate.
     * 
     * @param xml - xml serialization of {@link XWikiDocument}
     */
    protected void setXml(String xml) {
        if (StringUtils.isNotEmpty(xml)) {
            try {
                this.xml = new XWikiHibernateDeletedDocumentContent(xml);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }

    /**
     * Export {@link XWikiDocument} to {@link XWikiDeletedDocument}.
     *
     * @param doc - the deleted document
     * @param context - used in {@link XWikiDocument#toXML(XWikiContext)}
     * @throws XWikiException in error in {@link XWikiDocument#toXML(XWikiContext)}
     * @deprecated since 9.0RC1, use
     *             {@link XWikiDeletedDocument#XWikiDeletedDocument(String, Locale, String, String, Date, XWikiDeletedDocumentContent)
     *             instead}
     */
    @Deprecated
    protected void setDocument(XWikiDocument doc, XWikiContext context) throws XWikiException {
        this.xml = new XWikiHibernateDeletedDocumentContent(doc);
    }

    /**
     * @return restored document
     * @param doc - restore to this document, if not null
     * @param context - may be useful in future
     * @throws XWikiException if error in {@link XWikiDocument#fromXML(String)}
     */
    public XWikiDocument restoreDocument(XWikiDocument doc, XWikiContext context) throws XWikiException {
        try {
            return this.xml.getXWikiDocument(doc);
        } catch (IOException e) {
            throw new XWikiException(XWikiException.MODULE_XWIKI_DOC, XWikiException.ERROR_DOC_XML_PARSING,
                    "Error restoring document", e, null);
        }
    }

    /**
     * @return restored document
     * @param context - may be useful in future
     * @throws XWikiException if error in {@link XWikiDocument#fromXML(String)}
     * @since 9.0RC1
     */
    public XWikiDocument restoreDocument(XWikiContext context) throws XWikiException {
        return restoreDocument(null, context);
    }

    /**
     * @param batchId batch operation ID to set
     * @since 9.4RC1
     */
    protected void setBatchId(String batchId) {
        this.batchId = batchId;
    }

    /**
     * @return the id of the operation that deleted multiple documents at the same time, including this one
     * @since 9.4RC1
     */
    public String getBatchId() {
        return batchId;
    }
}