All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.randombits.confluence.metadata.impl.handler.AttachmentHandler Maven / Gradle / Ivy

The newest version!
package org.randombits.confluence.metadata.impl.handler;

import com.atlassian.confluence.core.ContentEntityManager;
import com.atlassian.confluence.core.ContentEntityObject;
import com.atlassian.confluence.pages.Attachment;
import com.atlassian.confluence.pages.AttachmentManager;
import org.randombits.confluence.metadata.AbstractTypeHandler;
import org.randombits.confluence.metadata.MetadataManager;
import org.randombits.confluence.metadata.MetadataStorage;
import org.randombits.confluence.metadata.impl.StandardMetadataStorage;
import org.randombits.confluence.metadata.migration.AttachmentReferenceMigrator;
import org.randombits.confluence.metadata.reference.AttachmentReference;
import org.springframework.beans.factory.annotation.Qualifier;

/**
 * Handles Attachments.
 */
public class AttachmentHandler extends AbstractTypeHandler {

    public static final String LEGACY_ALIAS = "AttachmentOption";

    public static final String ALIAS = "AttachmentReference";

    private final AttachmentManager attachmentManager;
    private final ContentEntityManager contentEntityManager;
    private final MetadataManager metadataManager;
    private final AttachmentReferenceMigrator attachmentReferenceMigrator;

    public AttachmentHandler(
            AttachmentManager attachmentManager,
            @Qualifier("contentEntityManager") ContentEntityManager contentEntityManager,
            MetadataManager metadataManager,
            AttachmentReferenceMigrator attachmentReferenceMigrator) {
        super(Attachment.class, AttachmentReference.class);
        this.attachmentManager = attachmentManager;
        this.contentEntityManager = contentEntityManager;
        this.metadataManager = metadataManager;
        this.attachmentReferenceMigrator = attachmentReferenceMigrator;
    }

    @Override
    protected Attachment doGetOriginal(AttachmentReference stored) {
        ContentEntityObject content = contentEntityManager.getById(stored.getContentId());
        return content != null ? retrieveAttachment(content, stored) : null;
    }

    @Override
    protected AttachmentReference doGetStored(Attachment original) {
        return new AttachmentReference(original);
    }

    @Override
    protected String getAlias() {
        return ALIAS;
    }

    private Attachment retrieveAttachment(ContentEntityObject content, AttachmentReference attachmentReference) {
        Attachment attachment = attachmentManager.getAttachment(attachmentReference.getAttachmentId());
        if (attachment == null) {
            // Attachments that use filename as identifier prior to 6.1.0 need to be migrated.
            attachment = attachmentManager.getAttachment(content, attachmentReference.getFileName());
            if (attachment != null) {
                migrateAttachment(attachment);
            }
        }
        return attachment;
    }

    private void migrateAttachment(Attachment attachment) {
        MetadataStorage metadataStorage = metadataManager.loadWritableData(attachment.getContent());
        if (metadataStorage instanceof StandardMetadataStorage) {
            // To ensure that metadataStorage is not EmptyMetadataStorage.
            StandardMetadataStorage standardMetadataStorage = (StandardMetadataStorage) metadataStorage;
            attachmentReferenceMigrator.process(standardMetadataStorage.getBaseMap(), attachment);
            metadataManager.saveData(standardMetadataStorage, /* override current version */ true);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy