PTiffRenditionFactory.java
3.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
* 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);
}
}
}