You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by dk...@apache.org on 2019/05/28 19:27:37 UTC

[sling-org-apache-sling-app-cms] 07/08: Separating out the thumbnail handling to a separate bundle

This is an automated email from the ASF dual-hosted git repository.

dklco pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git

commit 3c4c25d78111a04f78a9866f464829af4ea4879a
Author: Dan Klco <dk...@apache.org>
AuthorDate: Tue May 28 10:39:49 2019 -0400

    Separating out the thumbnail handling to a separate bundle
---
 api/pom.xml                                        |   8 --
 pom.xml                                            |   2 +-
 thumbnailator/pom.xml                              |  94 ------------------
 transformer/NOTICE                                 |   8 ++
 {api => transformer}/pom.xml                       |  96 ++++++++++++++----
 .../cms/transformer}/FileThumbnailTransformer.java |   4 +-
 .../sling/cms/transformer}/OutputFileFormat.java   |   2 +-
 .../sling/cms/transformer}/ThumbnailProvider.java  |   2 +-
 .../cms/transformer}/TransformationHandler.java    |   2 +-
 .../cms/transformer/internal}/CropHandler.java     |   4 +-
 .../internal}/FileThumbnailTransformerImpl.java    |  10 +-
 .../internal}/ImageThumbnailProvider.java          |   4 +-
 .../internal}/PdfThumbnailProvider.java            |   4 +-
 .../cms/transformer/internal}/SizeHandler.java     |   4 +-
 .../internal}/SlideShowThumbnailProvider.java      |   6 +-
 .../internal}/TikaFallbackProvider.java            |   6 +-
 .../transformer/internal}/TransformServlet.java    |   6 +-
 .../transformer/helpers/SlingCMSContextHelper.java |  46 +++++++++
 .../cms/transformer/internal}/CropHandlerTest.java |   3 +-
 .../FileThumbnailTransformerImplTest.java          |  15 ++-
 .../internal}/ImageThumbnailProviderTest.java      |   5 +-
 .../internal}/PdfThumbnailProviderTest.java        |   5 +-
 .../cms/transformer/internal}/SizeHandlerTest.java |   3 +-
 .../internal}/SlideShowThumbnailProviderTest.java  |   7 +-
 .../internal}/TikaFallbackProviderTest.java        |   5 +-
 .../internal}/TransformServletTest.java            |  19 ++--
 transformer/src/test/resources/Sling.docx          | Bin 0 -> 15143 bytes
 transformer/src/test/resources/Sling.ppt           | Bin 0 -> 123392 bytes
 transformer/src/test/resources/Sling.pptx          | Bin 0 -> 99100 bytes
 transformer/src/test/resources/apache.png          | Bin 0 -> 12022 bytes
 transformer/src/test/resources/content.json        | 109 +++++++++++++++++++++
 transformer/src/test/resources/sling.pdf           | Bin 0 -> 251268 bytes
 transformer/src/test/resources/thumbnail.png       | Bin 0 -> 20437 bytes
 33 files changed, 305 insertions(+), 174 deletions(-)

diff --git a/api/pom.xml b/api/pom.xml
index 764ff3b..4399f70 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -112,13 +112,5 @@
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>net.coobird</groupId>
-            <artifactId>thumbnailator</artifactId>
-        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 3f00584..b67165b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -38,7 +38,7 @@
         <module>api</module>
         <module>core</module>
         <module>metadata-extractor</module>
-        <module>thumbnailator</module>
+        <module>transformer</module>
         <module>ui</module>
         <module>reference</module>
         <module>builder</module>
diff --git a/thumbnailator/pom.xml b/thumbnailator/pom.xml
deleted file mode 100644
index 731a5a2..0000000
--- a/thumbnailator/pom.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional 
-    information regarding copyright ownership. The ASF licenses this file to you 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. -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
->
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <artifactId>org.apache.sling.cms</artifactId>
-        <groupId>org.apache.sling</groupId>
-        <version>0.11.3-SNAPSHOT</version>
-    </parent>
-    <artifactId>org.apache.sling.cms.thumbnailator</artifactId>
-    <packaging>bundle</packaging>
-    <name>Apache Sling - Thumbnailator Bundle Wrapper</name>
-    <description>OSGi Bundle Wrapper for https://github.com/coobird/thumbnailator</description>
-
-    <properties>
-        <sling.java.version>8</sling.java.version>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
-                        <Export-Package>net.coobird.thumbnailator.*</Export-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>8</source>
-                    <target>8</target>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.sling</groupId>
-                <artifactId>maven-sling-plugin</artifactId>
-                <configuration>
-                    <slingUrl>${sling.protocol}://${sling.host}:${sling.port}/system/console</slingUrl>
-                    <user>${sling.username}</user>
-                    <password>${sling.password}</password>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <useSystemClassLoader>false</useSystemClassLoader>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
-    <profiles>
-        <profile>
-            <id>autoInstallBundle</id>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.sling</groupId>
-                        <artifactId>maven-sling-plugin</artifactId>
-                        <executions>
-                            <execution>
-                                <id>install-bundle</id>
-                                <goals>
-                                    <goal>install</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-
-    <dependencies>
-        <dependency>
-            <groupId>net.coobird</groupId>
-            <artifactId>thumbnailator</artifactId>
-            <scope>compile</scope>
-        </dependency>
-    </dependencies>
-</project>
\ No newline at end of file
diff --git a/transformer/NOTICE b/transformer/NOTICE
new file mode 100644
index 0000000..c91d59c
--- /dev/null
+++ b/transformer/NOTICE
@@ -0,0 +1,8 @@
+Apache Sling App CMS - Transformer
+Copyright 2019 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This product includes software developed at
+https://github.com/coobird/thumbnailator
\ No newline at end of file
diff --git a/api/pom.xml b/transformer/pom.xml
similarity index 62%
copy from api/pom.xml
copy to transformer/pom.xml
index 764ff3b..4d60565 100644
--- a/api/pom.xml
+++ b/transformer/pom.xml
@@ -13,10 +13,10 @@
         <groupId>org.apache.sling</groupId>
         <version>0.11.3-SNAPSHOT</version>
     </parent>
-    <artifactId>org.apache.sling.cms.api</artifactId>
+    <artifactId>org.apache.sling.cms.transformer</artifactId>
     <packaging>bundle</packaging>
-    <name>Apache Sling - CMS API</name>
-    <description>An API for the Apache Sling Reference CMS Application</description>
+    <name>Apache Sling - Transformer</name>
+    <description>An API and Service for creating and transforming images and documents into thumbnails</description>
 
     <properties>
         <sling.java.version>8</sling.java.version>
@@ -28,6 +28,12 @@
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
                 <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
+                        <Export-Package>org.apache.sling.cms.transformer,net.coobird.thumbnailator.*</Export-Package>
+                    </instructions>
+                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
@@ -72,53 +78,105 @@
     </profiles>
 
     <dependencies>
+
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>servlet-api</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.service.component.annotations</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.cmpn</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+
+        <!-- Sling Dependencies -->
+        <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.event.api</artifactId>
+            <artifactId>org.apache.sling.caconfig.api</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.cms.api</artifactId>
+            <version>${project.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.cms.core</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.jcr.resource</artifactId>
+            <artifactId>org.apache.sling.event.api</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- Utilities -->
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
         </dependency>
+
+        <!-- Document handling -->
         <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit-jcr-commons</artifactId>
+            <groupId>net.coobird</groupId>
+            <artifactId>thumbnailator</artifactId>
+            <scope>compile</scope>
         </dependency>
         <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>osgi.annotation</artifactId>
+            <artifactId>pdfbox</artifactId>
+            <groupId>org.apache.pdfbox</groupId>
         </dependency>
         <dependency>
-            <groupId>org.jetbrains</groupId>
-            <artifactId>annotations</artifactId>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.jsoup</groupId>
-            <artifactId>jsoup</artifactId>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-scratchpad</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <groupId>org.apache.tika</groupId>
+            <artifactId>tika-core</artifactId>
         </dependency>
+
+        <!-- Testing dependencies -->
         <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
         </dependency>
         <dependency>
-            <groupId>net.coobird</groupId>
-            <artifactId>thumbnailator</artifactId>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.testing.sling-mock.junit4</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
         </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/api/src/main/java/org/apache/sling/cms/transformation/FileThumbnailTransformer.java b/transformer/src/main/java/org/apache/sling/cms/transformer/FileThumbnailTransformer.java
similarity index 95%
rename from api/src/main/java/org/apache/sling/cms/transformation/FileThumbnailTransformer.java
rename to transformer/src/main/java/org/apache/sling/cms/transformer/FileThumbnailTransformer.java
index 29f3099..af26a7f 100644
--- a/api/src/main/java/org/apache/sling/cms/transformation/FileThumbnailTransformer.java
+++ b/transformer/src/main/java/org/apache/sling/cms/transformer/FileThumbnailTransformer.java
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.transformation;
+package org.apache.sling.cms.transformer;
 
 import java.io.IOException;
 import java.io.OutputStream;
 
-import org.apache.sling.cms.transformation.OutputFileFormat;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.cms.File;
+import org.apache.sling.cms.transformer.OutputFileFormat;
 
 /**
  * Transforms a Sling File into thumbnails using the registered
diff --git a/api/src/main/java/org/apache/sling/cms/transformation/OutputFileFormat.java b/transformer/src/main/java/org/apache/sling/cms/transformer/OutputFileFormat.java
similarity index 97%
rename from api/src/main/java/org/apache/sling/cms/transformation/OutputFileFormat.java
rename to transformer/src/main/java/org/apache/sling/cms/transformer/OutputFileFormat.java
index a0b6258..464d5b3 100644
--- a/api/src/main/java/org/apache/sling/cms/transformation/OutputFileFormat.java
+++ b/transformer/src/main/java/org/apache/sling/cms/transformer/OutputFileFormat.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.transformation;
+package org.apache.sling.cms.transformer;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.SlingHttpServletRequest;
diff --git a/api/src/main/java/org/apache/sling/cms/transformation/ThumbnailProvider.java b/transformer/src/main/java/org/apache/sling/cms/transformer/ThumbnailProvider.java
similarity index 97%
rename from api/src/main/java/org/apache/sling/cms/transformation/ThumbnailProvider.java
rename to transformer/src/main/java/org/apache/sling/cms/transformer/ThumbnailProvider.java
index 4d9bb56..decfade 100644
--- a/api/src/main/java/org/apache/sling/cms/transformation/ThumbnailProvider.java
+++ b/transformer/src/main/java/org/apache/sling/cms/transformer/ThumbnailProvider.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.transformation;
+package org.apache.sling.cms.transformer;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/api/src/main/java/org/apache/sling/cms/transformation/TransformationHandler.java b/transformer/src/main/java/org/apache/sling/cms/transformer/TransformationHandler.java
similarity index 97%
rename from api/src/main/java/org/apache/sling/cms/transformation/TransformationHandler.java
rename to transformer/src/main/java/org/apache/sling/cms/transformer/TransformationHandler.java
index 5e507e6..33bb7bd 100644
--- a/api/src/main/java/org/apache/sling/cms/transformation/TransformationHandler.java
+++ b/transformer/src/main/java/org/apache/sling/cms/transformer/TransformationHandler.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.transformation;
+package org.apache.sling.cms.transformer;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/CropHandler.java b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/CropHandler.java
similarity index 93%
rename from core/src/main/java/org/apache/sling/cms/core/internal/transformation/CropHandler.java
rename to transformer/src/main/java/org/apache/sling/cms/transformer/internal/CropHandler.java
index ee9f8e7..ce5d813 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/CropHandler.java
+++ b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/CropHandler.java
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.transformation;
+package org.apache.sling.cms.transformer.internal;
 
 import java.io.IOException;
 import java.io.InputStream;
 
-import org.apache.sling.cms.transformation.TransformationHandler;
+import org.apache.sling.cms.transformer.TransformationHandler;
 import org.osgi.service.component.annotations.Component;
 
 import net.coobird.thumbnailator.Thumbnails.Builder;
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/FileThumbnailTransformerImpl.java b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/FileThumbnailTransformerImpl.java
similarity index 93%
rename from core/src/main/java/org/apache/sling/cms/core/internal/transformation/FileThumbnailTransformerImpl.java
rename to transformer/src/main/java/org/apache/sling/cms/transformer/internal/FileThumbnailTransformerImpl.java
index ad3c757..b3e27c8 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/FileThumbnailTransformerImpl.java
+++ b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/FileThumbnailTransformerImpl.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.transformation;
+package org.apache.sling.cms.transformer.internal;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -25,10 +25,10 @@ import java.util.Optional;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.cms.File;
-import org.apache.sling.cms.transformation.FileThumbnailTransformer;
-import org.apache.sling.cms.transformation.OutputFileFormat;
-import org.apache.sling.cms.transformation.ThumbnailProvider;
-import org.apache.sling.cms.transformation.TransformationHandler;
+import org.apache.sling.cms.transformer.FileThumbnailTransformer;
+import org.apache.sling.cms.transformer.OutputFileFormat;
+import org.apache.sling.cms.transformer.ThumbnailProvider;
+import org.apache.sling.cms.transformer.TransformationHandler;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.component.annotations.ReferenceCardinality;
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/ImageThumbnailProvider.java b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/ImageThumbnailProvider.java
similarity index 92%
rename from core/src/main/java/org/apache/sling/cms/core/internal/transformation/ImageThumbnailProvider.java
rename to transformer/src/main/java/org/apache/sling/cms/transformer/internal/ImageThumbnailProvider.java
index 1b7e747..516d8fc 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/ImageThumbnailProvider.java
+++ b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/ImageThumbnailProvider.java
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.transformation;
+package org.apache.sling.cms.transformer.internal;
 
 import java.io.InputStream;
 
 import org.apache.sling.cms.File;
-import org.apache.sling.cms.transformation.ThumbnailProvider;
+import org.apache.sling.cms.transformer.ThumbnailProvider;
 import org.osgi.service.component.annotations.Component;
 
 import com.google.common.net.MediaType;
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/PdfThumbnailProvider.java b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/PdfThumbnailProvider.java
similarity index 94%
rename from core/src/main/java/org/apache/sling/cms/core/internal/transformation/PdfThumbnailProvider.java
rename to transformer/src/main/java/org/apache/sling/cms/transformer/internal/PdfThumbnailProvider.java
index 5087a17..ec809e6 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/PdfThumbnailProvider.java
+++ b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/PdfThumbnailProvider.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.transformation;
+package org.apache.sling.cms.transformer.internal;
 
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayInputStream;
@@ -28,7 +28,7 @@ import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.rendering.ImageType;
 import org.apache.pdfbox.rendering.PDFRenderer;
 import org.apache.sling.cms.File;
-import org.apache.sling.cms.transformation.ThumbnailProvider;
+import org.apache.sling.cms.transformer.ThumbnailProvider;
 import org.osgi.service.component.annotations.Component;
 
 import com.google.common.net.MediaType;
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/SizeHandler.java b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/SizeHandler.java
similarity index 93%
rename from core/src/main/java/org/apache/sling/cms/core/internal/transformation/SizeHandler.java
rename to transformer/src/main/java/org/apache/sling/cms/transformer/internal/SizeHandler.java
index 9f44122..1d8a2c3 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/SizeHandler.java
+++ b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/SizeHandler.java
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.transformation;
+package org.apache.sling.cms.transformer.internal;
 
 import java.io.IOException;
 import java.io.InputStream;
 
-import org.apache.sling.cms.transformation.TransformationHandler;
+import org.apache.sling.cms.transformer.TransformationHandler;
 import org.osgi.service.component.annotations.Component;
 
 import net.coobird.thumbnailator.Thumbnails.Builder;
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/SlideShowThumbnailProvider.java b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/SlideShowThumbnailProvider.java
similarity index 95%
rename from core/src/main/java/org/apache/sling/cms/core/internal/transformation/SlideShowThumbnailProvider.java
rename to transformer/src/main/java/org/apache/sling/cms/transformer/internal/SlideShowThumbnailProvider.java
index 6cf64a6..eef0eb1 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/SlideShowThumbnailProvider.java
+++ b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/SlideShowThumbnailProvider.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.transformation;
+package org.apache.sling.cms.transformer.internal;
 
 import java.awt.Color;
 import java.awt.Dimension;
@@ -34,8 +34,8 @@ import org.apache.poi.sl.usermodel.Slide;
 import org.apache.poi.sl.usermodel.SlideShow;
 import org.apache.poi.xslf.usermodel.XMLSlideShow;
 import org.apache.sling.cms.File;
-import org.apache.sling.cms.transformation.OutputFileFormat;
-import org.apache.sling.cms.transformation.ThumbnailProvider;
+import org.apache.sling.cms.transformer.OutputFileFormat;
+import org.apache.sling.cms.transformer.ThumbnailProvider;
 import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/TikaFallbackProvider.java b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/TikaFallbackProvider.java
similarity index 94%
rename from core/src/main/java/org/apache/sling/cms/core/internal/transformation/TikaFallbackProvider.java
rename to transformer/src/main/java/org/apache/sling/cms/transformer/internal/TikaFallbackProvider.java
index 0437286..df23413 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/transformation/TikaFallbackProvider.java
+++ b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/TikaFallbackProvider.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.transformation;
+package org.apache.sling.cms.transformer.internal;
 
 import java.awt.Graphics;
 import java.awt.image.BufferedImage;
@@ -27,8 +27,8 @@ import javax.imageio.ImageIO;
 import javax.swing.JEditorPane;
 
 import org.apache.sling.cms.File;
-import org.apache.sling.cms.transformation.OutputFileFormat;
-import org.apache.sling.cms.transformation.ThumbnailProvider;
+import org.apache.sling.cms.transformer.OutputFileFormat;
+import org.apache.sling.cms.transformer.ThumbnailProvider;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.AutoDetectParser;
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/servlets/TransformServlet.java b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/TransformServlet.java
similarity index 93%
rename from core/src/main/java/org/apache/sling/cms/core/internal/servlets/TransformServlet.java
rename to transformer/src/main/java/org/apache/sling/cms/transformer/internal/TransformServlet.java
index 06143b6..c01d59f 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/servlets/TransformServlet.java
+++ b/transformer/src/main/java/org/apache/sling/cms/transformer/internal/TransformServlet.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.servlets;
+package org.apache.sling.cms.transformer.internal;
 
 import java.io.IOException;
 
@@ -24,8 +24,8 @@ import javax.servlet.ServletException;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
-import org.apache.sling.cms.transformation.FileThumbnailTransformer;
-import org.apache.sling.cms.transformation.OutputFileFormat;
+import org.apache.sling.cms.transformer.FileThumbnailTransformer;
+import org.apache.sling.cms.transformer.OutputFileFormat;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
diff --git a/transformer/src/test/java/org/apache/sling/cms/transformer/helpers/SlingCMSContextHelper.java b/transformer/src/test/java/org/apache/sling/cms/transformer/helpers/SlingCMSContextHelper.java
new file mode 100644
index 0000000..744d526
--- /dev/null
+++ b/transformer/src/test/java/org/apache/sling/cms/transformer/helpers/SlingCMSContextHelper.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+package org.apache.sling.cms.transformer.helpers;
+
+import java.io.InputStream;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.testing.mock.sling.junit.SlingContext;
+
+import com.google.common.base.Function;
+
+public class SlingCMSContextHelper {
+
+    public static final void initContext(SlingContext context) {
+        context.addModelsForPackage("org.apache.sling.cms.core.internal.models");
+        context.addModelsForPackage("org.apache.sling.cms.core.models");
+
+        context.load().json("/content.json", "/content");
+        context.load().binaryResource("/apache.png", "/content/apache/sling-apache-org/index/apache.png/jcr:content");
+        context.load().binaryResource("/sling.pdf", "/content/apache/sling-apache-org/index/sling.pdf/jcr:content");
+        context.load().binaryResource("/Sling.docx", "/content/apache/sling-apache-org/index/Sling.docx/jcr:content");
+        context.load().binaryResource("/Sling.pptx", "/content/apache/sling-apache-org/index/Sling.pptx/jcr:content");
+        context.load().binaryResource("/Sling.ppt", "/content/apache/sling-apache-org/index/Sling.ppt/jcr:content");
+
+        context.registerAdapter(Resource.class, InputStream.class, new Function<Resource, InputStream>() {
+            public InputStream apply(Resource input) {
+                return input.getValueMap().get("jcr:content/jcr:data", InputStream.class);
+            }
+        });
+
+    }
+}
diff --git a/core/src/test/java/org/apache/sling/cms/core/internal/transformation/CropHandlerTest.java b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/CropHandlerTest.java
similarity index 94%
rename from core/src/test/java/org/apache/sling/cms/core/internal/transformation/CropHandlerTest.java
rename to transformer/src/test/java/org/apache/sling/cms/transformer/internal/CropHandlerTest.java
index da21d10..edefd0e 100644
--- a/core/src/test/java/org/apache/sling/cms/core/internal/transformation/CropHandlerTest.java
+++ b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/CropHandlerTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.transformation;
+package org.apache.sling.cms.transformer.internal;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -23,6 +23,7 @@ import static org.junit.Assert.fail;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.sling.cms.transformer.internal.CropHandler;
 import org.junit.Before;
 import org.junit.Test;
 
diff --git a/core/src/test/java/org/apache/sling/cms/core/internal/transformation/FileThumbnailTransformerImplTest.java b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/FileThumbnailTransformerImplTest.java
similarity index 80%
rename from core/src/test/java/org/apache/sling/cms/core/internal/transformation/FileThumbnailTransformerImplTest.java
rename to transformer/src/test/java/org/apache/sling/cms/transformer/internal/FileThumbnailTransformerImplTest.java
index 6cd90ce..0c391d3 100644
--- a/core/src/test/java/org/apache/sling/cms/core/internal/transformation/FileThumbnailTransformerImplTest.java
+++ b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/FileThumbnailTransformerImplTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.transformation;
+package org.apache.sling.cms.transformer.internal;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
@@ -25,10 +25,15 @@ import java.io.File;
 import java.io.IOException;
 
 import org.apache.poi.util.IOUtils;
-import org.apache.sling.cms.core.helpers.SlingCMSContextHelper;
-import org.apache.sling.cms.transformation.FileThumbnailTransformer;
-import org.apache.sling.cms.transformation.ThumbnailProvider;
-import org.apache.sling.cms.transformation.TransformationHandler;
+import org.apache.sling.cms.transformer.FileThumbnailTransformer;
+import org.apache.sling.cms.transformer.ThumbnailProvider;
+import org.apache.sling.cms.transformer.TransformationHandler;
+import org.apache.sling.cms.transformer.helpers.SlingCMSContextHelper;
+import org.apache.sling.cms.transformer.internal.CropHandler;
+import org.apache.sling.cms.transformer.internal.FileThumbnailTransformerImpl;
+import org.apache.sling.cms.transformer.internal.ImageThumbnailProvider;
+import org.apache.sling.cms.transformer.internal.PdfThumbnailProvider;
+import org.apache.sling.cms.transformer.internal.SizeHandler;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.junit.Before;
 import org.junit.Rule;
diff --git a/core/src/test/java/org/apache/sling/cms/core/internal/transformation/ImageThumbnailProviderTest.java b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/ImageThumbnailProviderTest.java
similarity index 93%
rename from core/src/test/java/org/apache/sling/cms/core/internal/transformation/ImageThumbnailProviderTest.java
rename to transformer/src/test/java/org/apache/sling/cms/transformer/internal/ImageThumbnailProviderTest.java
index 01f7137..ca89c09 100644
--- a/core/src/test/java/org/apache/sling/cms/core/internal/transformation/ImageThumbnailProviderTest.java
+++ b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/ImageThumbnailProviderTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.transformation;
+package org.apache.sling.cms.transformer.internal;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertFalse;
@@ -25,7 +25,8 @@ import java.io.IOException;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.sling.cms.File;
-import org.apache.sling.cms.core.helpers.SlingCMSContextHelper;
+import org.apache.sling.cms.transformer.helpers.SlingCMSContextHelper;
+import org.apache.sling.cms.transformer.internal.ImageThumbnailProvider;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.junit.Before;
 import org.junit.Rule;
diff --git a/core/src/test/java/org/apache/sling/cms/core/internal/transformation/PdfThumbnailProviderTest.java b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/PdfThumbnailProviderTest.java
similarity index 92%
rename from core/src/test/java/org/apache/sling/cms/core/internal/transformation/PdfThumbnailProviderTest.java
rename to transformer/src/test/java/org/apache/sling/cms/transformer/internal/PdfThumbnailProviderTest.java
index c2acbbf..09eb986 100644
--- a/core/src/test/java/org/apache/sling/cms/core/internal/transformation/PdfThumbnailProviderTest.java
+++ b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/PdfThumbnailProviderTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.transformation;
+package org.apache.sling.cms.transformer.internal;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -23,7 +23,8 @@ import static org.junit.Assert.assertTrue;
 import java.io.IOException;
 
 import org.apache.sling.cms.File;
-import org.apache.sling.cms.core.helpers.SlingCMSContextHelper;
+import org.apache.sling.cms.transformer.helpers.SlingCMSContextHelper;
+import org.apache.sling.cms.transformer.internal.PdfThumbnailProvider;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.junit.Before;
 import org.junit.Rule;
diff --git a/core/src/test/java/org/apache/sling/cms/core/internal/transformation/SizeHandlerTest.java b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/SizeHandlerTest.java
similarity index 94%
rename from core/src/test/java/org/apache/sling/cms/core/internal/transformation/SizeHandlerTest.java
rename to transformer/src/test/java/org/apache/sling/cms/transformer/internal/SizeHandlerTest.java
index 762121d..e046f1f 100644
--- a/core/src/test/java/org/apache/sling/cms/core/internal/transformation/SizeHandlerTest.java
+++ b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/SizeHandlerTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.transformation;
+package org.apache.sling.cms.transformer.internal;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -23,6 +23,7 @@ import static org.junit.Assert.fail;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.sling.cms.transformer.internal.SizeHandler;
 import org.junit.Before;
 import org.junit.Test;
 
diff --git a/core/src/test/java/org/apache/sling/cms/core/internal/transformation/SlideShowThumbnailProviderTest.java b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/SlideShowThumbnailProviderTest.java
similarity index 90%
rename from core/src/test/java/org/apache/sling/cms/core/internal/transformation/SlideShowThumbnailProviderTest.java
rename to transformer/src/test/java/org/apache/sling/cms/transformer/internal/SlideShowThumbnailProviderTest.java
index 6608354..9111680 100644
--- a/core/src/test/java/org/apache/sling/cms/core/internal/transformation/SlideShowThumbnailProviderTest.java
+++ b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/SlideShowThumbnailProviderTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.transformation;
+package org.apache.sling.cms.transformer.internal;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -23,8 +23,9 @@ import static org.junit.Assert.assertTrue;
 import java.io.IOException;
 
 import org.apache.sling.cms.File;
-import org.apache.sling.cms.core.helpers.SlingCMSContextHelper;
-import org.apache.sling.cms.transformation.ThumbnailProvider;
+import org.apache.sling.cms.transformer.ThumbnailProvider;
+import org.apache.sling.cms.transformer.helpers.SlingCMSContextHelper;
+import org.apache.sling.cms.transformer.internal.SlideShowThumbnailProvider;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.junit.Before;
 import org.junit.Rule;
diff --git a/core/src/test/java/org/apache/sling/cms/core/internal/transformation/TikaFallbackProviderTest.java b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/TikaFallbackProviderTest.java
similarity index 90%
rename from core/src/test/java/org/apache/sling/cms/core/internal/transformation/TikaFallbackProviderTest.java
rename to transformer/src/test/java/org/apache/sling/cms/transformer/internal/TikaFallbackProviderTest.java
index 4b17b49..45cc645 100644
--- a/core/src/test/java/org/apache/sling/cms/core/internal/transformation/TikaFallbackProviderTest.java
+++ b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/TikaFallbackProviderTest.java
@@ -14,14 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.transformation;
+package org.apache.sling.cms.transformer.internal;
 
 import static org.junit.Assert.assertNotNull;
 
 import java.io.IOException;
 
 import org.apache.sling.cms.File;
-import org.apache.sling.cms.core.helpers.SlingCMSContextHelper;
+import org.apache.sling.cms.transformer.helpers.SlingCMSContextHelper;
+import org.apache.sling.cms.transformer.internal.TikaFallbackProvider;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.junit.Before;
 import org.junit.Rule;
diff --git a/core/src/test/java/org/apache/sling/cms/core/internal/servlets/TransformServletTest.java b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/TransformServletTest.java
similarity index 82%
rename from core/src/test/java/org/apache/sling/cms/core/internal/servlets/TransformServletTest.java
rename to transformer/src/test/java/org/apache/sling/cms/transformer/internal/TransformServletTest.java
index b995b1e..35c6324 100644
--- a/core/src/test/java/org/apache/sling/cms/core/internal/servlets/TransformServletTest.java
+++ b/transformer/src/test/java/org/apache/sling/cms/transformer/internal/TransformServletTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.cms.core.internal.servlets;
+package org.apache.sling.cms.transformer.internal;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
@@ -25,14 +25,15 @@ import javax.servlet.ServletException;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.reflect.FieldUtils;
-import org.apache.sling.cms.core.helpers.SlingCMSContextHelper;
-import org.apache.sling.cms.core.internal.transformation.CropHandler;
-import org.apache.sling.cms.core.internal.transformation.FileThumbnailTransformerImpl;
-import org.apache.sling.cms.core.internal.transformation.ImageThumbnailProvider;
-import org.apache.sling.cms.core.internal.transformation.PdfThumbnailProvider;
-import org.apache.sling.cms.core.internal.transformation.SizeHandler;
-import org.apache.sling.cms.transformation.ThumbnailProvider;
-import org.apache.sling.cms.transformation.TransformationHandler;
+import org.apache.sling.cms.transformer.ThumbnailProvider;
+import org.apache.sling.cms.transformer.TransformationHandler;
+import org.apache.sling.cms.transformer.helpers.SlingCMSContextHelper;
+import org.apache.sling.cms.transformer.internal.CropHandler;
+import org.apache.sling.cms.transformer.internal.FileThumbnailTransformerImpl;
+import org.apache.sling.cms.transformer.internal.ImageThumbnailProvider;
+import org.apache.sling.cms.transformer.internal.PdfThumbnailProvider;
+import org.apache.sling.cms.transformer.internal.SizeHandler;
+import org.apache.sling.cms.transformer.internal.TransformServlet;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.junit.Before;
 import org.junit.Rule;
diff --git a/transformer/src/test/resources/Sling.docx b/transformer/src/test/resources/Sling.docx
new file mode 100644
index 0000000..73fba2a
Binary files /dev/null and b/transformer/src/test/resources/Sling.docx differ
diff --git a/transformer/src/test/resources/Sling.ppt b/transformer/src/test/resources/Sling.ppt
new file mode 100644
index 0000000..0e9a6d3
Binary files /dev/null and b/transformer/src/test/resources/Sling.ppt differ
diff --git a/transformer/src/test/resources/Sling.pptx b/transformer/src/test/resources/Sling.pptx
new file mode 100644
index 0000000..8ed0a34
Binary files /dev/null and b/transformer/src/test/resources/Sling.pptx differ
diff --git a/transformer/src/test/resources/apache.png b/transformer/src/test/resources/apache.png
new file mode 100644
index 0000000..fc3f667
Binary files /dev/null and b/transformer/src/test/resources/apache.png differ
diff --git a/transformer/src/test/resources/content.json b/transformer/src/test/resources/content.json
new file mode 100644
index 0000000..82e8ffc
--- /dev/null
+++ b/transformer/src/test/resources/content.json
@@ -0,0 +1,109 @@
+{
+    "jcr:primaryType": "sling:OrderedFolder",
+    "jcr:mixinTypes": [
+        "rep:AccessControllable"
+    ],
+    "jcr:createdBy": "admin",
+    "jcr:created": "Wed May 15 2019 12:39:57 GMT-0400",
+    "rep:policy": {
+        "jcr:primaryType": "rep:ACL",
+        "allow": {
+            "jcr:primaryType": "rep:GrantACE",
+            "rep:principalName": "authors",
+            "rep:privileges": [
+                "jcr:versionManagement",
+                "rep:write"
+            ]
+        },
+        "allow1": {
+            "jcr:primaryType": "rep:GrantACE",
+            "rep:principalName": "sling-cms-metadata",
+            "rep:privileges": [
+                "jcr:versionManagement",
+                "rep:write"
+            ]
+        },
+        "allow2": {
+            "jcr:primaryType": "rep:GrantACE",
+            "rep:principalName": "sling-cms-versionmgr",
+            "rep:privileges": [
+                "jcr:versionManagement",
+                "rep:write"
+            ]
+        },
+        "allow3": {
+            "jcr:primaryType": "rep:GrantACE",
+            "rep:principalName": "everyone",
+            "rep:privileges": [
+                "jcr:read"
+            ]
+        }
+    },
+    "apache": {
+        "jcr:primaryType": "sling:OrderedFolder",
+        "jcr:createdBy": "admin",
+        "sling:configRef": "/conf/global",
+        "jcr:created": "Wed May 15 2019 12:40:00 GMT-0400",
+        "jcr:content": {
+            "jcr:primaryType": "nt:unstructured",
+            "jcr:title": "Apache Software Foundation"
+        },
+        "sling-apache-org": {
+            "jcr:primaryType": "sling:Site",
+            "jcr:createdBy": "admin",
+            "jcr:title": "Apache Sling",
+            "jcr:language": "en",
+            "sling:url": "https://sling.apache.org",
+            "jcr:created": "Wed May 15 2019 12:40:00 GMT-0400",
+            "index": {
+                "jcr:primaryType": "sling:Page",
+                "jcr:mixinTypes": [
+                    "mix:versionable"
+                ],
+                "jcr:createdBy": "admin",
+                "jcr:versionHistory": "87458e80-83b8-46ee-a5d8-3e39c2f07c10",
+                "jcr:predecessors": [],
+                "jcr:created": "Wed May 15 2019 12:40:00 GMT-0400",
+                "jcr:baseVersion": "9ddd2472-9a0e-4fcb-8a2d-72f0b3f40d61",
+                "jcr:isCheckedOut": false,
+                "jcr:uuid": "fd5c6000-b3b9-44a2-88a0-1c8e13d7c1a7",
+                "jcr:content": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "jcr:title": "Apache Sling - Bringing Back the Fun!",
+                    "jcr:lastModifiedBy": "admin",
+                    "sling:template": "/conf/global/site/templates/base-page",
+                    "sling:taxonomy": "/etc/taxonomy/reference/community",
+                    "jcr:lastModified": "Wed May 15 2019 14:05:46 GMT-0400",
+                    "sling:resourceType": "reference/components/pages/base",
+                    "published": true,
+                    "hideInSitemap": false,
+                    "container": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "richtext": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "text": "<p>Apache Sling(TM) is a framework for RESTful web-applications based on an extensible content tree.</p>\r\n<p>In a nutshell, Sling maps HTTP request URLs to content resources based on the request's path, extension and selectors. Using convention over configuration, requests are processed by scripts and servlets, dynamically selected based on the current resource. This fosters meaningful URLs and resource driven request processing, while the modular n [...]
+                            "sling:resourceType": "sling-cms/components/general/richtext"
+                        }
+                    },
+                    "menu": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "richtext": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "text": "<p>\r\n                <strong><a href=\"#\">Documentation</a></strong><br>\r\n                <a href=\"#\">Getting Started</a><br>\r\n                <a href=\"#\">The Sling Engine</a><br>\r\n                <a href=\"#\">Development</a><br>\r\n                <a href=\"#\">Bundles</a><br>\r\n                <a href=\"#\">Tutorials &amp; How-Tos</a><br>\r\n                <a href=\"http://sling.apache.org/components/\">Maven Plugins</a><br>\r\n      [...]
+                            "sling:resourceType": "sling-cms/components/general/richtext"
+                        }
+                    }
+                }
+            },
+            "apache.png": {
+                "jcr:primaryType": "sling:File"
+            },
+            "sling.pdf": {
+                "jcr:primaryType": "sling:File"
+            },
+            "sling.docx": {
+                "jcr:primaryType": "sling:File"
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/transformer/src/test/resources/sling.pdf b/transformer/src/test/resources/sling.pdf
new file mode 100644
index 0000000..a443389
Binary files /dev/null and b/transformer/src/test/resources/sling.pdf differ
diff --git a/transformer/src/test/resources/thumbnail.png b/transformer/src/test/resources/thumbnail.png
new file mode 100644
index 0000000..f38c3a4
Binary files /dev/null and b/transformer/src/test/resources/thumbnail.png differ