PTiffRenditionFactory.java 3.57 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.cq.dam.dm.process.api.PTiffRendition
 *  com.day.cq.dam.api.Asset
 *  com.day.cq.dam.api.Rendition
 *  javax.jcr.Node
 *  javax.jcr.RepositoryException
 *  org.apache.sling.api.resource.ModifiableValueMap
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.jetbrains.annotations.NotNull
 *  org.jetbrains.annotations.Nullable
 */
package com.adobe.cq.dam.dm.process.image;

import com.adobe.cq.dam.dm.process.api.PTiffRendition;
import com.adobe.cq.dam.dm.process.image.PTiffMetadataImpl;
import com.adobe.cq.dam.dm.process.image.PTiffRenditionImpl;
import com.day.cq.dam.api.Asset;
import com.day.cq.dam.api.Rendition;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
import java.util.Map;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import org.apache.sling.api.resource.ModifiableValueMap;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class PTiffRenditionFactory {
    private static final String PTIFF_MIMETYPE = "image/tiff";
    private static final String MIX_DAM_METADATA = "dam:Metadata";

    @Nullable
    public static PTiffRendition getPTiffRendition(@NotNull Asset asset) {
        Rendition r = asset.getRendition("cqdam.pyramid.tiff");
        if (r != null) {
            return PTiffRenditionImpl.getPTiffRendition((Resource)r);
        }
        return null;
    }

    @NotNull
    public static PTiffRendition addPTiffRendition(@NotNull Asset asset, @NotNull InputStream in, @NotNull Map<String, Object> metadata) throws IOException {
        if (!metadata.isEmpty() && !PTiffMetadataImpl.isPTiffMetadata(metadata)) {
            throw new IllegalArgumentException("Invalid metadata for PTIFF rendition");
        }
        Rendition r = asset.addRendition("cqdam.pyramid.tiff", in, "image/tiff");
        if (r == null) {
            throw new IOException("Unable to create cqdam.pyramid.tiff rendition under " + asset.getPath());
        }
        Resource content = r.getChild("jcr:content");
        Resource metadataResource = PTiffRenditionFactory.createMetadataFolder(content, !metadata.isEmpty());
        if (metadataResource != null) {
            ModifiableValueMap map = (ModifiableValueMap)metadataResource.adaptTo(ModifiableValueMap.class);
            if (map == null) {
                throw new IOException("Unable to modify properties: " + content.getPath());
            }
            map.putAll(metadata);
        }
        PTiffRendition ptiff = PTiffRenditionImpl.getPTiffRendition((Resource)r);
        assert (ptiff != null);
        return ptiff;
    }

    @Nullable
    private static Resource createMetadataFolder(@NotNull Resource content, boolean create) throws IOException {
        ResourceResolver resolver = content.getResourceResolver();
        try {
            Resource child = content.getChild("metadata");
            if (!create && child == null) {
                return null;
            }
            ((Node)content.adaptTo(Node.class)).addMixin("dam:Metadata");
            if (child != null) {
                resolver.delete(child);
            }
            return resolver.create(content, "metadata", Collections.singletonMap("jcr:primaryType", "nt:unstructured"));
        }
        catch (RepositoryException e) {
            throw new IOException("Unable to create metadata in " + content.getPath(), (Throwable)e);
        }
    }
}